具有多个从机的 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)
我正在使用 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)