在pymodbus REPL中如何保持DTR、RTS引脚持续为高电平?
解决方案
根因说明
pymodbus串口RTU客户端默认会在每次发送Modbus请求前调用reconfigure_port方法重置串口参数,这个过程会短暂拉低DTR、RTS引脚电平,导致依赖这两个引脚供电的设备断电。client.connect阶段仅做一次串口初始化,所以此时设备供电正常,首次发起读写请求时才会触发引脚电平重置。
REPL 内操作步骤
- 按照原流程启动pymodbus控制台、执行
client connect,确认设备电源指示灯亮起后,依次执行以下命令:
# 手动拉高DTR、RTS引脚 client.serial.setDTR(True) client.serial.setRTS(True) # 覆盖默认的串口重配置方法,避免每次请求重置引脚电平 def skip_reconfigure(*args, **kwargs): pass client.reconfigure_port = skip_reconfigure
- 验证配置生效:执行
client.serial.dtr和client.serial.rts,返回值均为True即说明设置成功。 - 正常执行读写寄存器操作即可,不会再触发设备断电。
可选:启动时直接配置(适用于pymodbus 3.0及以上版本)
启动控制台时直接通过--serial-args参数传递引脚电平配置,无需后续手动修改:
pymodbus.console serial --method rtu --port /dev/ttyUSB0 --stopbits 2 --serial-args '{"dtr": true, "rts": true}'
注意事项
- 每次执行
client disconnect后重连,都需要重新执行上述配置步骤,重连操作会重置串口对象的所有参数。 - 若使用Windows系统,串口路径格式为
COMx(x为串口号),其余配置逻辑完全一致。
内容的提问来源于stack exchange,提问作者ferdymercury
相关产品推荐
相关产品推荐

