【问题标题】:ConnectionException: Modbus Error: [Connection] Failed to connect ModbusTcpClientConnectionException: Modbus Error: [Connection] 无法连接 ModbusTcpClient
【发布时间】:2021-08-18 20:53:25
【问题描述】:

我一直在尝试使用 pymodbus 通过 Modbus TCP 从 Modbus(此处为树莓派)读取数据。我不断收到无法连接的错误。这是产生此错误的代码 sn-p。

from pymodbus.client.sync import ModbusTcpClient

#modbus connection
client = ModbusTcpClient('192.168.137.238')
connection = client.connect()

#read register
request = client.read_input_registers(1008,3)
result = request.registers
print(result)

我在 pi 上本地运行它。我使用 ifconfig 得到以下信息,并使用 ModbusTcpClient 尝试了所有 IP 地址。我不确定我在这里缺少什么。

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.137.238  netmask 255.255.255.0  broadcast 192.168.137.255
        inet6 fe80::7ce5:23eb:968f:59de  prefixlen 64  scopeid 0x20<link>
        ether dc:a6:32:46:d3:1e  txqueuelen 1000  (Ethernet)
        RX packets 438  bytes 46776 (45.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 330  bytes 31566 (30.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1847  bytes 149291 (145.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1847  bytes 149291 (145.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.1.199  netmask 255.255.255.0  broadcast 10.1.1.255
        inet6 fe80::7f47:6c9f:f1c:1274  prefixlen 64  scopeid 0x20<link>
        inet6 fd9d:fbd1:372:0:7a9c:777b:a806:2350  prefixlen 64  scopeid 0x0<global>
        ether dc:a6:32:46:d3:21  txqueuelen 1000  (Ethernet)
        RX packets 208  bytes 16783 (16.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 53  bytes 7372 (7.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我已经看过这个Question 1Question 2。此外,带有 pi 的 pymodbus 可以在 RTU 上运行。

【问题讨论】:

    标签: python raspberry-pi pymodbus


    【解决方案1】:

    如我所见 - 你想从 RPi 获取数据吗?但在我看来,您的设置是让 RPi 从具有自己 IP 的“客户端”获取数据。我相信您需要先设置一个 Modbus 从站,才能使用 Modbus TCP 呈现数据。

    【讨论】:

    • Modbus 从站在那里,这就是我能够使用 Modbus RTU 协议从 RPi 获取数据的方式。是的,我正在尝试从 RPi 获取数据
    • 这就是我所说的。不同的端口或从站编号通常是主站无法通过 TCP 连接到从站的原因。
    • AFAIK slave 只提供数据,master 读取。因此,如果您有直接连接的 Modbus RTU 传感器,您希望在 RPI 上聚合并通过 Modbus TCP 进一步转换,那么我认为是的,您应该这样做: Sensors--->(Modbus RTU Master RPI Modbus TCP Slave)--->Server I.e. RPI 应该同时运行主 RTU 和从 TCP,并通过变量(m.b.甚至数据帧)在它们的寄存器之间转换值。
    • 非常感谢,这确实很有帮助。你会不会碰巧知道/向我推荐一个 Modbus RTU Master RPi 到 Modbus TCP Slave 用于读/写寄存器的最小实现?
    • 不客气。很不幸的是,不行。但我认为这不应该那么难。你可以看看这两个 mudbus_tk 的例子,看看它们对你来说是否比 pymodbus 更容易:github.com/ljean/modbus-tk/blob/master/examples/…github.com/ljean/modbus-tk/blob/master/examples/… 不管怎样,我建议从一个值开始,看看它是如何进行的。因为 Modbus 中的寻址表总是很棘手。
    猜你喜欢
    • 2020-01-11
    • 2016-09-22
    • 2017-09-06
    • 1970-01-01
    • 2014-11-09
    • 2022-10-22
    • 2019-03-08
    • 2022-11-21
    • 2021-09-10
    相关资源
    最近更新 更多