1.先去掉DB211优化块访问的勾
2.打开PLC连接机制,勾上允许来自远程对象的PUT/GET通信访问。
3.DB211数据监视界面
4.Python代码(读取来自PLC的DB211数据块的数据)
import snap7
from snap7 import util
# import struct
# 创建通讯客户端实例
plc = snap7.client.Client()
# 连接至PLC
plc.connect('192.168.8.20', 0, 1) #plcObj.connect('PLC的IP', 0, 机架号(0或1))
# 读取数据
data = plc.db_read(211, 0, 264) #data = plc.db_read(读取的哪一个DB块, 读取的起始地址(偏移量),读取的结束地址(偏移量))
# 关闭连接
plc.disconnect()
# python解析
print("开始解析数据")
# 解析bool
bool1 = util.get_bool(data, 0, 0) #bool1 = util.get_bool(data, 0, 0)--》第0个字节段的第1个位,就是偏移量为0.0的bool量的值
bool2 = util.get_bool(data, 0, 1) #bool1 = util.get_bool(data, 0, 1)--》第0个字节段的第2个位,就是偏移量为0.1的bool量的值
bool3 = util.get_bool(data, 0, 2)
bool4 = util.get_bool(data, 0, 3)
bool5 = util.get_bool(data, 0, 4)
bool6 = util.get_bool(data, 0, 5)
bool7 = util.get_bool(data, 0, 6)
bool8 = util.get_bool(data, 0, 7)
# 解析int
Int1 = util.get_int(data, 2) #Int1 = util.get_int(data, 2)--》读取到的数据包date,解析偏移量为2.0开始长度为一个整型的数据
# 解析real
Real1 = util.get_real(data, 4) #Real1 = util.get_real(data, 4)--》读取到的数据包date,解析偏移量为4.0开始长度为一个real型的数据
# 解析string
string1 = util.get_string(data, 8) #string1 = util.get_string(data, 8)--》读取到的数据包date,解析偏移量为8.0开始长度为一个string型的数据
#将解析的bool量编成字典
bool_group = {"bool1:": bool1,
"bool2:": bool2,
"bool3:": bool3,
"bool4:": bool4,
"bool5:": bool5,
"bool6:": bool6,
"bool7:": bool7,
"bool8:": bool8
}
# 打印输出字典
print(bool_group)
# 打印输出整型
print("int:", Int1)
# 打印输出real型
print("real:", Real1)
# 打印输出字符串
print("string:", string1)
5.运行结果
开始解析数据
{'bool1:': True, 'bool2:': True, 'bool3:': False, 'bool4:': True, 'bool5:': True, 'bool6:': False, 'bool7:': False, 'bool8:': False}
int: 520
real: 13.140000343322754
string: Hello, boss!
进程已结束,退出代码0