下列示例读写200smartPLC设备
import time
from snap7 import util, client
import threading
def read_plc_valve():
while True:
try:
# 建立一个客户端对象
my_plc = client.Client()
# 如果是200smart,必须有此段代码,1200,1500可以不写
my_plc.set_connection_type(3)
# 连接plc,参数分别为ip 、卡号、槽号,200smart的卡号和槽号为0和1
my_plc.connect("192.168.55.20", 0, 1)
# 判断是否连接成功 返回值为true 和false
state = my_plc.get_connected()
print(state)
# 读取数据
# 下面四个参数中,client.Areas.DB表示读取DB,1表示读取DB1,100表示起始地址,16表示读取的字节长度,需要根据实际情况填写
data = my_plc.read_area(client.Areas.DB, 1, 100, 16)
# 从读取到的字节中,拆分出每个数据,这里采集的数据是32位浮点数,使用get_real,每四个字节表示一个数据
m = util.get_real(data, 0)
m2 = util.get_real(data, 4)
m3 = util.get_real(data, 8)
m4 = util.get_real(data, 12)
print(m, m2, m3, m4)
# 写入数据
# 准备要写入的数据,此处要写入一个数据,四个字节
data_to_write = bytearray([0x41, 0x00, 0x00, 0x00])
# 向DB1的第112个字节,写入数据
my_plc.write_area(client.Areas.DB, 1, 112, data_to_write)
# 断开连接
my_plc.disconnect()
# 销毁客户端对象
my_plc.destroy()
except Exception as e:
print(e)
time.sleep(60)
if __name__ == '__main__':
read_plc_valve()
标签:real,get,python,data,读写,S7,util,plc,my
From: https://blog.csdn.net/amzzsthl/article/details/140260318