Pymodbus 无法连接 PLC Slave 和 Raspberry Pi Master
Pymodbus Failed to Connect with PLC Slave and Raspberry Pi Master
我正在尝试使用 Raspberry Pi 3 模型 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的以太网卡的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 的,我不知道你如何 check/configure PLC 上的端口。
此外,我想知道问题是否出在我试图仅使用 Modbus 在 Raspbery Pi 和 PLC 之间切换。我找到了进行接口连接的 prosoft 网关。但我找不到任何关于这些是否只是另一种选择或是否需要的信息。
我是 PLC 和网络的新手,如有任何帮助,我们将不胜感激。
我自己没有使用过 Allen Bradley,但我确实使用过许多其他 PLC,它们的工作原理都差不多。
您不像在路由器中那样打开端口,而是在 PLC 中激活 modbus 连接。大多数情况下它是一个设置,但如果 Allen Bradley 使用他们自己的专有总线系统(例如 Saia S-Bus),您有时需要一个特定的功能块来启用 modbus。
例如,快速 google 搜索显示在 micrologix 1400 中有一个复选框可以在某些通道设置下启用 modbus tcp。
检查 PLC 是否有启用 modbus 的设置master/client(master=serial 或 RTU,client=TCP 但有时制造商不区分它们)。
要测试 Raspberry Pi,您可以下载一个 modbus 服务器模拟器并对其进行轮询。
要使用除 Pi 以外的东西测试 PLC,您可以下载 modbus client/master。我个人使用 QmodMaster,它是免费的并且可以很好地用于测试目的(搜索 google)。
此外,请确保您使用正确的函数代码进行轮询。这可能会造成混淆,因为保持寄存器(地址为 4xxxx)使用功能代码 03。输入寄存器(地址为 3xxxx)使用功能代码 04。
modbus 网关用于启用串行 modbus(RTU 或 ASCII)通过 TCP 进行通信。
如果两个设备都有 modbus tcp,则不需要网关。例如,如果您有一个只有有线 modbus (RS232/485/422) 的设备,您可以将其连接到网关,然后将网关连接到 TCP。
我正在尝试使用 Raspberry Pi 3 模型 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的以太网卡的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 的,我不知道你如何 check/configure PLC 上的端口。
此外,我想知道问题是否出在我试图仅使用 Modbus 在 Raspbery Pi 和 PLC 之间切换。我找到了进行接口连接的 prosoft 网关。但我找不到任何关于这些是否只是另一种选择或是否需要的信息。
我是 PLC 和网络的新手,如有任何帮助,我们将不胜感激。
我自己没有使用过 Allen Bradley,但我确实使用过许多其他 PLC,它们的工作原理都差不多。
您不像在路由器中那样打开端口,而是在 PLC 中激活 modbus 连接。大多数情况下它是一个设置,但如果 Allen Bradley 使用他们自己的专有总线系统(例如 Saia S-Bus),您有时需要一个特定的功能块来启用 modbus。
例如,快速 google 搜索显示在 micrologix 1400 中有一个复选框可以在某些通道设置下启用 modbus tcp。
检查 PLC 是否有启用 modbus 的设置master/client(master=serial 或 RTU,client=TCP 但有时制造商不区分它们)。
要测试 Raspberry Pi,您可以下载一个 modbus 服务器模拟器并对其进行轮询。
要使用除 Pi 以外的东西测试 PLC,您可以下载 modbus client/master。我个人使用 QmodMaster,它是免费的并且可以很好地用于测试目的(搜索 google)。
此外,请确保您使用正确的函数代码进行轮询。这可能会造成混淆,因为保持寄存器(地址为 4xxxx)使用功能代码 03。输入寄存器(地址为 3xxxx)使用功能代码 04。
modbus 网关用于启用串行 modbus(RTU 或 ASCII)通过 TCP 进行通信。
如果两个设备都有 modbus tcp,则不需要网关。例如,如果您有一个只有有线 modbus (RS232/485/422) 的设备,您可以将其连接到网关,然后将网关连接到 TCP。