Pymodbus无法连接PLC从站和树莓派主站

Pymodbus无法连接PLC从站和树莓派主站

问题描述:

我想使用Raspberry Pi 3模型B从Allen Bradly PLC读取值。我使用Pymodbus Modbus TCP协议在它们之间进行通信。Pymodbus无法连接PLC从站和树莓派主站

当我运行一个测试客户端,我得到了以下错误:

[email protected]:/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的网卡的IP地址(10.0.0.237)就好了。 (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之间。我找到了可以实现接口的优秀网关。但我找不到任何有关这些是否只是另一种选择的信息,或者是否需要这些信息。

我是新来的PLC和网络,所以任何帮助,将不胜感激。

我自己并没有使用过艾伦布拉德利,但我确实使用了许多其他的PLC,并且他们的工作都差不多。

您不像打开路由器那样打开端口,而是激活PLC中的modbus连接。通常情况下它是一个设置,但如果Allen Bradley使用他们自己的专用总线系统(例如Saia S-Bus),则有时需要特定的功能块来启用modbus。

一个快速谷歌搜索示例显示,在micrologix 1400 theres复选框启用modbus tcp在某些通道设置下。

检查PLC是否有设置启用Modbus主站/客户端(主站=串行或RTU,客户端= TCP,但有时制造商不区分它们)。

要测试Raspberry Pi,你可以下载一个modbus服务器模拟器并进行轮询。

要使用其他东西测试PLC,您可以下载一个modbus客户端/主站。我个人使用QmodMaster,它是免费的,可以很好地用于测试目的(搜索谷歌)。

此外,请确保您使用正确的功能代码轮询。这可能会引起混淆,因为保持寄存器(地址为4xxxx)使用功能代码03.输入寄存器(地址为3xxxx)使用功能代码04.

modbus网关用于启用串行modbus(RTU或ASCII)通过TCP进行通信。

如果两个设备都有modbus tcp,则不需要网关。例如,如果您的设备只具有有线modbus(RS232/485/422),则可以将其连接到网关,并将网关连接到TCP。