Jos*_*ton 5 python modbus modbus-tcp pymodbus
我有一些在 pymodbus 1.2 下编写的 modbus TCP 代码,相关代码是
result = modbus_client.read_holding_registers(40093, 3)
更新到 pymodbus 1.4.0 后,它无法工作,直到我将新的单元参数放入函数调用中(示例中都包含 unit=1):
result = modbus_client.read_holding_registers(40093, 3, unit=1)
pymodbus read_holding_registers() 中的单元参数是什么意思?我似乎无法在任何地方找到解释。消息来源说“:param unit:这个请求所针对的从属单元”,但我不明白这是什么意思,也不明白除了 1 之外还有什么选择。
小智 6
Modbus 协议最初是在 TCP/IP 流行之前很久就被开发出来的(我认为是 70 年代后期)。它主要用于串行连接。某些串行硬件协议(如 RS485)允许菊花链。modbus 主站(在您的情况下为 Python)可以在单个串行端口上轮询多个从站。只有被请求的从站才会响应。在这种情况下,从站的地址是单元。一旦 Modbus 适应了 TCP/IP,协议就允许使用这个“单元地址”在单个 IP 地址后面创建多个从站。大多数情况下,如果使用 TCP/IP,则只有一个地址为 1。在维基百科上,他们将其称为“站地址”。
我不确定为什么你需要在方法调用中包含它,因为它是一个默认为 1 的 kwarg。