我正在通过 RS485(Windows COM 端口上的 USB 到 RS485 适配器)成功地与微控制器通信。我编写了一个小程序minimalmodbus
来处理 modbus RTU 通信,它运行良好。
我正在与之通信的微控制器也有 TTL 引脚,制造商做了一些非常奇怪的事情。'FF'
他们在单元响应之前添加 hex ( ) x 3。正如你可以想象的那样,这让我在试图理清如何处理响应时感到头疼。我正在修改minimalmodbus
库的各个部分(本地开发安装副本),试图强制它接受完整的答案,然后去除前三个'FF'
十六进制字符以获得正确的有效负载。到目前为止,我没有成功。我认为这家制造商这样做是为了使用 3 x'FF'
作为计时机制,并且他们提供了一个 USB 密钥,该 USB 密钥具有此'FF'
过滤器作为选项可用。我的程序将通过此键使用此FF
过滤器工作。但是我希望使用自己的设备和minimalmodbus
库,所以我想知道如何去除这些主角'FF'
。有人有什么想法吗?@乔纳斯伯格
我正在尝试修改minimalmodbus
安装在 pip3`` 开发下的分叉库的部分。到目前为止,我得到的最好的是一个有点奇怪但值得一提的回应。我发送read_register
询问hex(225)
并返回十进制值 2500。同样,如果我hex(220)
返回 2000,发送hex(224)
给我 2400 作为响应。我想也许该设备正在回应询问,所以我现在正在尝试有关回声忽略功能的选项,但minimalmodbus
到目前为止没有成功。
如果使用得当,我的代码可以正常工作,所以我认为这在这种情况下不会有帮助。我真的需要'FF'
通过修改minimalmodbus
包来去除前三个(十六进制)值。
根据我修改的内容,我会收到各种错误。原始错误是校验和错误:
'Checksum error in {} mode: {!r} instead of {!r} . The response is: {!r} (plain response: {!r})'
我从图书馆评论了这一部分,minimalmodbus
作为尝试解决我的问题的开始。显然,有一个更好的方法可以克服这个问题,希望其他人以前也遇到过这个问题。