在 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
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
安装旧版本pip3 install pymodbus==2.4.0
我发现 github there is an existing issue reporting this error
创建者发布了 this
的修复程序安装更新版本2.5.1rc1
pip3 install --upgrade pymodbus