Python 通过 TCP 读取 modbus

Python read modbus over TCP

我有一个 modbus 设备并连接了一个 modbus RTU 到以太网转换器(而不是 modbus RTU 到 modbus TCP 转换器)。

我遇到的所有模块都可以读取正常的Modbus RTU、Modbus TCP、Modbus ASCII。但是我还没有看到任何通过以太网端口读取modbus的模块。

当我使用ModScan测试时,我在select Remote TELNET Server.

时可以看到数据

有没有一种方法可以使用 python 读取这些数据??

这是常见情况,设备是远程 serial/tcp 转换器。 MOXA 有很多。

你应该明白:

  • 'modbus rtu' - 这是串行 modbus,包含数据+crc16
  • 'modbus tcp' - 这是 TcpHeader[6 字节] + 数据。
  • 'modbus rtu over tcp' - 这是您的情况。

标准 modbus tcp/rtu 转换设备不仅改变物理(ethernet/rs485 例如),而且改变协议本身,删除 tcp header 并添加 crc。

简单 serial/tcp 转换器(如您所用)不修改协议。

您可以在手动为tcp-client指定rtu-framer后使用您可爱的PyModbus。

client = ModbusClient('localhost', port=5020, framer=ModbusRtuFramer)

https://pymodbus.readthedocs.io/en/latest/source/example/synchronous_client.html