diff --git a/Modbus/RTU_Framing_Source_Analysis.md b/Modbus/RTU_Framing_Source_Analysis.md new file mode 100644 index 00000000..7bfbe36f --- /dev/null +++ b/Modbus/RTU_Framing_Source_Analysis.md @@ -0,0 +1,28 @@ +# 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`.