我目前正在测试在 Raspberry Pi CM4 的载板上组装的电路。它通过SP3485CN和CH340E将RS485连接到USB。
我已经使用软件 Modbus Slave 设置了一台 PC,并使用标准 RS485 转 USB 适配器连接到它。
在树莓派上我目前使用的是minimalmodbus。
我的问题是在响应消息的开头添加了一个额外的 0x00 字节。这意味着它会截断数据的最后一个字节,因为它具有期望响应的设定长度。不幸的是,最后一个字节是校验和的后半部分,这意味着软件认为数据传输失败。
当我运行代码时,minimalmodbus 中的调试模式返回以下消息:
MinimalModbus 调试模式。将写入仪器(预计返回 9 个字节):01 04 00 00 00 02 71 CB(8 个字节)
MinimalModbus 调试模式。清除端口 /dev/ttyUSB0 的串行缓冲区
MinimalModbus 调试模式。写之前不需要睡觉。自上次读取以来的时间:104832.80 ms,最小静默期:4.01 ms
MinimalModbus 调试模式。关闭端口 /dev/ttyUSB0
MinimalModbus 调试模式。仪器响应:00 01 04 04 01 BD 01 BC 6A(9 字节),往返时间:0.1 ms。读取超时:500.0 ms.
...
最小modbus。 InvalidResponseError:rte 模式下的校验和错误: '1/4j' 而不是 '\x0bq' 。响应是:'\x00\x01\x04\x04\x011/2\x011/4j'(简单响应:'\x00\x01\x04\x04\x011/2\x011/4j')
到目前为止,我已经仔细检查了组件的所有数据表,我相信我已经正确集成了每个部分(但始终感谢更正)
在进行一些研究时,我遇到了可能导致问题的线路偏差,我已经对其进行了测试,但没有成功或改变。
我非常困惑的部分是我从示波器获得的读数。当连接到 SP3485CN 的 RO 引脚时,我得到如图所示的结果。 正如您所看到的 - 示波器能够完美地解释响应。响应“01 04 04 01 BD 01 BC 6A 7D”正是所期望的。不幸的是 - 如上面的调试消息所示,我收到“00 01 04 04 01 BD 01 BC 6A”
据我了解,消息波形的开头是正确的,有一个低位表示消息开始,后跟第一个字节的LSB。
我完全不知道为什么会发生这种情况,并且希望除了线路偏差之外还有任何其他建议。
我面临同样的问题,但设置不同。您在设置中找到解决方案了吗?
我不确定它是否相关,但我的设置在主设备和从设备之间有一个屏障设备。如果我交换障碍方向,它就会起作用。同样在我这边,问题仅出在从属回复上。
在我的屏障的文档中,有一些有关主动和被动“End og line”电阻器的信息。这让我思考消息属性是否有某些方向运行得不够快?