0

我正在使用 thingsboard 网关连接到 unitid 大于 255 的 modbus 从站,pymodbus 抛出如下错误:

tb-gateway-py_1    | struct.error: ubyte format requires 0 <= number <= 255
tb-gateway-py_1    | ''2020-04-23 08:43:46' - ERROR - modbus_connector - 178 - ubyte format requires 0 <= number <= 255'
tb-gateway-py_1    | Traceback (most recent call last):
tb-gateway-py_1    |   File "/root/.local/lib/python3.6/site-packages/thingsboard_gateway/connectors/modbus/modbus_connector.py", line 122, in __process_devices
tb-gateway-py_1    |     input_data = self.__function_to_device(current_data, unit_id)
tb-gateway-py_1    |   File "/root/.local/lib/python3.6/site-packages/thingsboard_gateway/connectors/modbus/modbus_connector.py", line 226, in __function_to_device
tb-gateway-py_1    |     unit=unit_id)
tb-gateway-py_1    |   File "/root/.local/lib/python3.6/site-packages/pymodbus/client/common.py", line 114, in read_holding_registers
tb-gateway-py_1    |     return self.execute(request)
tb-gateway-py_1    |   File "/root/.local/lib/python3.6/site-packages/pymodbus/client/sync.py", line 108, in execute
tb-gateway-py_1    |     return self.transaction.execute(request)
tb-gateway-py_1    |   File "/root/.local/lib/python3.6/site-packages/pymodbus/transaction.py", line 153, in execute
tb-gateway-py_1    |     broadcast=broadcast
tb-gateway-py_1    |   File "/root/.local/lib/python3.6/site-packages/pymodbus/transaction.py", line 217, in _transact
tb-gateway-py_1    |     packet = self.client.framer.buildPacket(packet)
tb-gateway-py_1    |   File "/root/.local/lib/python3.6/site-packages/pymodbus/framer/socket_framer.py", line 212, in buildPacket
tb-gateway-py_1    |     message.function_code)
tb-gateway-py_1    | struct.error: ubyte format requires 0 <= number <= 255

是否可以在 TCP 模式下使用 unitid 大于 255 的“read_holding_registers”?

4

1 回答 1

0

最后,我修改了 thingsboard 网关 Modbus 连接器和 Modbus 从站之间的标准 Modbus 协议。单位 ID 是 1 个字节,然后我修改为 4 个字节。至于设备,它们只能使用标准的Modbus协议,然后我在Modbus slave(unitid 4字节)和设备之间放置了一个modbus slave proxy。modbus slave proxy可以和Modbus slave进行通讯(unitid 4 bytes)。

这可能不是一个很好的解决方案,但可以解决我的问题。

于 2020-04-26T05:52:23.647 回答