安装
python-snap7是python中的一个开放的功能包,所以使用前只需要直接用pip安装
pip install python-snap7
1.先去掉DB块中优化块访问的勾
2.打开PLC连接机制,勾上允许来自远程对象的PUT/GET通信访问。
3、db块中数据
4、打开这个软件(仿真模拟,有实体plc可跳过)
下载路径:https://download.csdn.net/download/qq_43493715/87634720
在博图中启用仿真
点击添加
设置好本机ip和选择plc ip
写入
仿真ip地址填写本机ip,有实体plc填写plc ip
import snap7
from snap7 import util
# 创建通讯客户端实例
plcObj = snap7.client.Client()
# 连接至PLC
plcObj.connect('192.168.2.41', 0, 1)
print("开始发送!")
# 写入bool
bool1 = 0 ##bool1--》第0个字节段的第1个位,就是偏移量为0.0的bool量的值
bool2 = 1
bool3 = 0
bool4 = 1
bool5 = 1
bool6 = 0
bool7 = 0
bool8 = 0
boolData = bytearray(1)
util.set_bool(boolData, 0, 0, bool(bool1))
util.set_bool(boolData, 0, 1, bool(bool2))
util.set_bool(boolData, 0, 2, bool(bool3))
util.set_bool(boolData, 0, 3, bool(bool4))
util.set_bool(boolData, 0, 4, bool(bool5))
util.set_bool(boolData, 0, 5, bool(bool6))
util.set_bool(boolData, 0, 6, bool(bool7))
util.set_bool(boolData, 0, 7, bool(bool8))
plcObj.db_write(110, 0, boolData)
# 写入int
intData = bytearray(2)
util.set_int(intData, 0, 5)
plcObj.db_write(110, 2, intData)
# 写入real
realData = bytearray(4)
util.set_real(realData, 0, 99.9)
plcObj.db_write(110, 4, realData)
# 写入string
# sss = 'qqq'
# print(len(sss))
# stringData = bytearray(len(sss) + 2)
# util.set_string(stringData, 0, sss, 256)
# stringData[0] = 254
# plcObj.db_write(211, 8, stringData)
string = 'db211'
data = int.to_bytes(254, 1, 'big') + int.to_bytes(len(string), 1, 'big') + string.encode(encoding='ascii')
plcObj.write_area(snap7.client.Areas.DB, 110, 8, data)
plcObj.disconnect()
print("发送成功!")
读取
import snap7
from snap7 import util
# import struct
# 创建通讯客户端实例
plc = snap7.client.Client()
# 连接至PLC
plc.connect('192.168.2.41', 0, 1) #plcObj.connect('PLC的IP', 0, 机架号(0或1))
# 读取数据
data = plc.db_read(110, 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)
转载:https://blog.csdn.net/m0_69013551/article/details/129126776?spm=1001.2014.3001.5502
https://blog.csdn.net/m0_69013551/article/details/129738794?spm=1001.2014.3001.5502