读取Modbus RTU保持寄存器.响应和请求是一样的



我在beaglebone上使用python3.8.2和pymodbus编写了一个程序,通过RS485进行modbus RTU通信。我在连接到UART1的海角上使用MAX13487E来驱动RS485 (p9_24, p9_26)。小猎犬是主人。

对于我的目的,我只需要使用FC3(读保持)和FC6(写保持)。我已经能够毫无问题地写作了。然而,我不能阅读。Pymodbus返回异常ModbusIOException('No Response received from the remote unit/Unable to decode response', 4).

使用pymodbus REPL调试,我发现收到的回复与发送的请求相同,只是由于主期望更短的响应而更短。

SEND: 0x32 0x3 0x1 0x30 0x0 0x1 0x80 0x3a
RECV: 0x32 0x3 0x1 0x30 0x0 0x1 0x80

我已经能够在过去使用其他主服务器(例如,windows的diagslave-modpoll)轮询同一从服务器,没有任何问题。

发生这种情况的原因是什么?如果有人有使用MAX13487E收发器的任何经验,您是否能够帮助其使用?

我发现ModbusRTUClient()的一个属性包含在kwargs**中,名为" handle_local_reflection "。将其设置为true似乎解决了问题。我没有费心去研究它是如何工作的,我只是很高兴它是这样的。

但是,如果我连续处理多个请求,则只对第一个请求有效。在请求之间添加一个小延迟time.sleep(0.05)使它更稳定。

相关内容

最新更新