为什么RS485响应的开头多了一个0x00字节?

问题描述 投票:0回答:1

我目前正在测试在 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')

到目前为止,我已经仔细检查了组件的所有数据表,我相信我已经正确集成了每个部分(但始终感谢更正)

RS485 Schematic

在进行一些研究时,我遇到了可能导致问题的线路偏差,我已经对其进行了测试,但没有成功或改变。

我非常困惑的部分是我从示波器获得的读数。当连接到 SP3485CN 的 RO 引脚时,我得到如图所示的结果。 正如您所看到的 - 示波器能够完美地解释响应。响应“01 04 04 01 BD 01 BC 6A 7D”正是所期望的。不幸的是 - 如上面的调试消息所示,我收到“00 01 04 04 01 BD 01 BC 6A”

Oscilloscope Capture

据我了解,消息波形的开头是正确的,有一个低位表示消息开始,后跟第一个字节的LSB。

我完全不知道为什么会发生这种情况,并且希望除了线路偏差之外还有任何其他建议。

uart modbus rs485 minimalmodbus
1个回答
0
投票

我面临同样的问题,但设置不同。您在设置中找到解决方案了吗?

我不确定它是否相关,但我的设置在主设备和从设备之间有一个屏障设备。如果我交换障碍方向,它就会起作用。同样在我这边,问题仅出在从属回复上。

在我的屏障的文档中,有一些有关主动和被动“End og line”电阻器的信息。这让我思考消息属性是否有某些方向运行得不够快?

© www.soinside.com 2019 - 2024. All rights reserved.