我有类似的问题,如here。但效果仅限于 Docker 容器内的 pyModbusTCP 和 WAGO 750-8000。
我在 Docker 容器内初始化 Modbus 客户端:
mc = ModbusClient(host="192.168.100.1", port=502, debug=True, timeout=0.1)
当我尝试使用以下命令读取寄存器时:
mc.read_holding_registers(256, 50)
我收到超时错误:
Tx
[B9 AE 00 00 00 06 01] 03 01 00 00 32
timeout error
如果我增加超时(到 0.7 或更高),它就会起作用。至少有时候。
有趣的是,如果我在主机(Windows 10)上执行相同的 Python 代码,那么即使超时很短(0.01 秒),它也能工作。
还有: 使用不同的 Modbus 设备(较旧的 WAGO 750-832),它可以工作(在 docker 容器之外)。
任何想法,哪个组件可能配置错误?
所以事情与提到的库和软件无关。 问题是 WAGO 750-8000 Modbus 实施中的错误。修复附带固件更新。