Modbus TCP полная строка ответа

  • Михаил
  • 8 мин. на прочтение
  • 13
  • 14 Oct 2025
  • 14 Oct 2025

В протоколе Modbus TCP структура пакета отличается от Modbus RTU, так как он инкапсулируется в TCP/IP. Для функции 0x03 (Read Holding Registers) ответ в Modbus TCP выглядит следующим образом:


Структура ответа Modbus TCP (функция 0x03)

Пример для 4 регистров (начиная с адреса 0x0000):

ПолеРазмер (байт)ОписаниеПример значения (hex)
MBAP Header7Заголовок Modbus Application Protocol (MBAP) 
- Transaction ID2Идентификатор транзакции (задаётся клиентом, возвращается сервером)0x0001
- Protocol ID2Идентификатор протокола (всегда 0x0000 для Modbus)0x0000
- Length2Длина оставшейся части пакета (начиная с Unit ID)0x0006 (для 4 регистров)
- Unit ID1Идентификатор устройства (аналог Address в RTU)0x01
Function Code1Код функции (0x03 для Read Holding Registers)0x03
Byte Count1Количество байт данных (4 регистра × 2 байта = 8 байт)0x08
Data8Значения 4 регистров (по 2 байта на регистр, порядок байт зависит от реализации)0x000A 0x000B 0x000C 0x000D
Итого18 байт  

Пояснения

  • MBAP Header — обязательная часть для Modbus TCP, отсутствует в RTU.
  • Transaction ID — используется для сопоставления запросов и ответов.
  • Protocol ID — всегда 0x0000.
  • Length — рассчитывается как: 1 (Unit ID) + 1 (Function Code) + 1 (Byte Count) + N (Data).
  • Unit ID — аналог адреса устройства в RTU.
  • CRC — в Modbus TCP не используется, так как контроль ошибок обеспечивается на уровне TCP.

Пример полного ответа (hex)

00 01 00 00 00 06 01 03 08 00 0A 00 0B 00 0C 00 0D

  • Разбор:
    • 00 01 — Transaction ID
    • 00 00 — Protocol ID
    • 00 06 — Length (6 байт после Unit ID)
    • 01 — Unit ID
    • 03 — Function Code
    • 08 — Byte Count
    • 00 0A 00 0B 00 0C 00 0D — Data (4 регистра)