在 Raspberry Pi 中断开与 Pymodbus 连接的读取保持寄存器后

After read holding registers with Pymodbus connection is broken in Raspberry Pi

import pymodbus     
from pymodbus.client.sync import ModbusTcpClient   
from time import sleep
connection = False
data = {}
while True:
        if not connection:
            client = ModbusTcpClient(host="176.219.185.16", port="502")
            connection = client.connect()
            if connection:
                print("connected")
        if connection == True:
            if not client.is_socket_open():
                print("connection is broken")    
                connection = False
        data = client.read_holding_registers(address=150,count=10,unit=1).registers
        sleep(2)
        print(data)

此代码正在 Windows 上运行。但是我 运行 它在 raspberry pi “client.is_socket_open” 是 return false 在读取保持寄存器之后。我该如何解决这个问题?或者这里有什么问题。我不强制客户端关闭。

经过几次测试,我可以在 windows 机器上重现问题,并且它与 pymodbus 版本有关。 pymodbus 版本 2.5.0 关闭了连接,所以只需降级到 2.4.0 直到他们解决问题。

要解决您的问题,请使用 pip3 show pymodbus

检查两台机器上的版本

使用 pip3 uninstall pymodbus

从树莓派中卸载 pymodbus

安装旧版本pip3 install pymodbus==2.4.0


我发现 github there is an existing issue reporting this error


创建者发布了 this

的修复程序

安装更新版本2.5.1rc1

pip3 install --upgrade pymodbus