我正在尝试使用 Raspberry Pi 3 Model B 从 Allen Bradly PLC 读取值。我正在使用 Pymodbus Modbus TCP 协议在它们之间进行通信。
当我运行测试客户端时,出现以下错误:
pi@raspberrypi:/var $ python test1.py
Got here 1
Traceback (most recent call last):
File "test1.py", line 12, in <module>
request = client.read_holding_registers(0,1)
File "build/bdist.linux-armv7l/egg/pymodbus/client/common.py", line 109, in read_holding_registers
File "build/bdist.linux-armv7l/egg/pymodbus/client/sync.py", line 82, in execute
pymodbus.exceptions.ConnectionException: Modbus Error: [Connection] Failed to connect[10.0.0.237:502]
下面是测试客户端的代码:
from pymodbus.client.sync import ModbusTcpClient
#modbus connection
client = ModbusTcpClient(host='10.0.0.237')
connection = client.connect()
#test print
print "Got here 1"
#read register
request = client.read_holding_registers(0,1)
print request
client.close()
我可以 ping 通 PLC 以太网卡(10.0.0.237)的 IP 地址。(PLC 已打开并显示在 RSLinx 和 RSLogix5000 中。)但是当我尝试使用以下命令检查端口 502(Modbus 使用)时:
telnet 10.0.0.237 502
我得到错误:
Trying 10.0.0.237...
telnet: Unable to connect to remote host: Connection refused
我所做的研究告诉我检查该端口是否打开,但这是针对 PC 的,我不知道您如何检查/配置 PLC 上的端口。
另外,我想知道问题是否在于我试图只使用 Modbus 在 Raspbery Pi 和 PLC 之间进行传输。我找到了做接口的 prosoft 网关。但我找不到任何关于这些是否只是另一种选择或是否需要的信息。
我是 PLC 和网络的新手,因此将不胜感激。