首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pymodbus无法与PLC Slave和Raspberry Pi Master连接

Pymodbus无法与PLC Slave和Raspberry Pi Master连接
EN

Stack Overflow用户
提问于 2016-08-18 05:57:52
回答 1查看 3K关注 0票数 1

我正在尝试使用Raspberry Pi 3 Model B从Allen Bradly PLC读取数值。我使用Pymodbus Modbus TCP协议在它们之间进行通信。

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

代码语言:javascript
运行
复制
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]

以下是测试客户端的代码:

代码语言:javascript
运行
复制
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)。(可编程控制器已打开,并显示在RSLinx和RSLogix5000中。)但是当我尝试使用以下命令检查端口502 ( Modbus使用的端口)时:

代码语言:javascript
运行
复制
telnet 10.0.0.237 502

我得到了错误:

代码语言:javascript
运行
复制
Trying 10.0.0.237...
telnet: Unable to connect to remote host: Connection refused

我所做的研究告诉我要检查端口是否打开,但那是针对PLC的,我不知道如何检查/配置PLC上的端口。

此外,我想知道问题是不是我试图使用Modbus在树莓派和PLC之间切换。我已经找到了做接口的prosoft网关。但我找不到任何信息来说明这些是否只是另一种选择,或者它们是否是必需的。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-27 03:52:41

我自己没有使用过Allen Bradley,但我确实使用了许多其他PLC,它们的工作原理大同小异。

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

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

检查可编程控制器中是否有启用modbus主机/客户端(master=serial或RTU、client=TCP,但有时制造商不区分它们)的设置。

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

要使用Pi以外的其他工具测试PLC,您可以下载modbus客户端/主控器。我个人使用QmodMaster,它是免费的,并且在测试中运行良好(搜索谷歌)。

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39006884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档