具有多个从机的 Pymodbus 串行转发器

Pymodbus serial forwarder with multiple slaves

我正在使用 Pymodbus 串行转发器 example,它适用于一台串行设备。我希望能够轮询总线上的多个设备。 正如所讨论的那样 here 似乎(并且我的测试证实)ModbusServerContext 不会传递单元 ID。 在串行转发​​器示例中是否有任何解决方法可以启用对多个设备(例如单元 ID 1 和 2)的轮询?

要回答我的问题,可以使用以下内容:

store = {0x1:RemoteSlaveContext(client),0x2:RemoteSlaveContext(client)}
context = ModbusServerContext(slaves=store, single=False)

使用此设置,单元 ID 将被传递下来。 但是直到现在还有一个错误,响应可能来自(1 个或 2 个)串行单元 ID。

我觉得上面应该是:

store = {
    1: RemoteSlaveContext(client, unit=1),
    2: RemoteSlaveContext(client, unit=2)}
context = ModbusServerContext(slaves=store, single=False)

由于要转发所有正常地址,所以我这样做:

  store = {unit_number: RemoteSlaveContext(client, unit=unit_number) 
           for unit_number in range(1, 248)}
  context = ModbusServerContext(slaves=store, single=False)