Files
obsidian-vault/Modbus/RTU_Framing_Source_Analysis.md
T

1.4 KiB

Modbus RTU Frame Delimiting: pymodbus vs libmodbus (source analysis)

Версия/источники зафиксированы на момент анализа. Локальные копии скачанных файлов: /Users/admin/modbus_src/.

Границы (URL)

  • pymodbus dev (новый фреймер): https://raw.githubusercontent.com/pymodbus-dev/pymodbus/dev/pymodbus/framer/rtu.py
  • pymodbus v3.4.1 (классический ModbusRtuFramer): .../v3.4.1/pymodbus/framer/rtu_framer.py
  • pymodbus v3.0.2: .../v3.0.2/pymodbus/framer/rtu_framer.py
  • pymodbus serial client (t35): .../v3.4.1/pymodbus/client/serial.py, .../v3.6.9/pymodbus/client/serial.py
  • libmodbus: https://raw.githubusercontent.com/stephane/libmodbus/master/src/modbus-rtu.c, .../src/modbus.c, .../src/modbus-rtu-private.h

Константы

pymodbus v3.0.2/3.4.1 ModbusRtuFramer: _min_frame_size = 4, _hsize = 0x01. Таблица baud (докстринг, 1.5c = 18 бит, 3.5c = 38 бит):

 Baud  1.5c (18 bits)   3.5c (38 bits)
 1200   13333.3 us       31666.7 us
 4800    3333.3 us        7916.7 us
 9600    1666.7 us        3958.3 us
19200     833.3 us        1979.2 us
38400     416.7 us         989.6 us
 1 Byte = start + 8 bits + parity + stop = 11 bits

libmodbus: MODBUS_RTU_MAX_ADU_LENGTH 256, _MODBUS_RTU_HEADER_LENGTH 1, _MODBUS_RTU_CHECKSUM_LENGTH 2.