python 连接PLC 接收数据
这是今年工作中做的一个项目,我的项目主要是通过Python 开发的
在这里面需要接收到PLC的信号 才能运行逻辑
这个连接PLC的库是 通过PLC那方提供的的 一个库 HslCommunication.py
# 从PLC获取数据
定义数组接收数据
# 连接PLC@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
from HslCommunication import SiemensS7Net
from HslCommunication import SiemensPLCS
# PLC
def printReadResult(result):
if result.IsSuccess:
# print(result.Content)
return result.Content
else:
print("failed " + result.Message)
siemens = SiemensS7Net(SiemensPLCS.S300, "176.16.11.20")
if siemens.ConnectServer().IsSuccess == False:
print("connect falied")
# # 从PLC获取数据
datas = ['False', 0, 0, 0, 0, 0, 0, 0, 0, 0]
def TG():
while True:
time.sleep(1)
#一号 --------------------------------------------------------------------------------------------------
datas = [
printReadResult(siemens.ReadString("DB551.12.0", 8)),
printReadResult(siemens.ReadInt16("DB551.4", 2))[0]/100,
printReadResult(siemens.ReadInt16("DB551.44", 2))[0],
printReadResult(siemens.ReadBool("DB551.3.0")),
printReadResult(siemens.ReadBool("DB551.42.2")),
printReadResult(siemens.ReadBool("DB551.42.0")),
printReadResult(siemens.ReadString("DB551.22.0", 6)),
printReadResult(siemens.ReadBool("DB551.3.1")),
printReadResult(siemens.ReadInt16("DB551.20", 3))[0] / 10
]
print(data1)
if __name__ == '__main__':
TG()
这里就是连接了一个PLC的IP 接收数据 他不同的数据有不同的 DB块
可以设置长连接 短连接