【发布时间】:2018-10-03 00:51:48
【问题描述】:
通过 USB 转 rs485 与 Modbus 设备进行通信时出现问题。
所以我正在使用一些 python 3.5 并且正在使用 PyModbus、PySerial
我的代码基于 PyModbus 串行示例,在 windows 下它可以正常工作并与 Modbus 设备正确通信
当我在运行 Ubuntu mate 16.04.5 LTS 的 Raspberry Pi3 上运行我的代码时,设备没有响应我的代码。 我一开始以为适配器没有正确安装,但在仔细检查了一切之后, 我安装了 gtkterm 并将端口配置为 /dev/ttyUSB0 9600 8-n-2 并尝试将十六进制数据发送到 Modbus 仍然没有回复 然后我注意到在流量控制下它有一个 RS485-HalfDuplex(RTS) 设置,如果我将发送延迟设置为 20 毫秒和 10 毫秒 RTS 关闭,则在高级选项下
现在,当我尝试发送十六进制模式数据包时,设备会按预期响应。
我连接了我的示波器,从 python 代码中,它正在随机传输一些小数据包,看起来更像是在数据发送超时后。 经过一番挖掘,似乎一些 USB 到 rs485 的设备需要 RTS 来将设备切换到传输模式,然后关闭 RTS 以使其重新进入接收模式。
我还发现 pySerial 有一个 RS485 设置并尝试了这些设置,然后传输的数据包以前更规则和更大,但仍然比 gtkterm 短得多,而且很多时间弄乱有点帮助,我现在有了回到使用原始代码但放入
socket.setRTS(1)
time.sleep(0.02)
socket.write(request)
time,sleep(0.1)
socket.setRTS(0)
似乎给了我在示波器上拾取的最长数据包,但数据包的长度为 8.42 毫秒,而来自 gtkterm 的数据包为 9.36 毫秒,并且在两条消息的跟踪之间一目了然,似乎数据包的结尾不见了。但即使我在关闭 RTS 信号之前增加睡眠时间也没有什么区别。
【问题讨论】:
标签: python ubuntu modbus rs485