我在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)
使它更稳定。