1

我正在尝试使用 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 和网络的新手,因此将不胜感激。

4

1 回答 1

0

我自己没有使用过 Allen Bradley,但我确实使用了许多其他 PLC,它们的工作方式或多或少都相同。

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

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

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

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

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

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

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

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

于 2016-08-26T19:52:40.593 回答