Modbus TCP полная строка ответа
В протоколе Modbus TCP структура пакета отличается от Modbus RTU, так как он инкапсулируется в TCP/IP. Для функции 0x03 (Read Holding Registers) ответ в Modbus TCP выглядит следующим образом:
Структура ответа Modbus TCP (функция 0x03)
Пример для 4 регистров (начиная с адреса 0x0000):
Поле | Размер (байт) | Описание | Пример значения (hex) |
---|---|---|---|
MBAP Header | 7 | Заголовок Modbus Application Protocol (MBAP) | |
- Transaction ID | 2 | Идентификатор транзакции (задаётся клиентом, возвращается сервером) | 0x0001 |
- Protocol ID | 2 | Идентификатор протокола (всегда 0x0000 для Modbus) | 0x0000 |
- Length | 2 | Длина оставшейся части пакета (начиная с Unit ID) | 0x0006 (для 4 регистров) |
- Unit ID | 1 | Идентификатор устройства (аналог Address в RTU) | 0x01 |
Function Code | 1 | Код функции (0x03 для Read Holding Registers) | 0x03 |
Byte Count | 1 | Количество байт данных (4 регистра × 2 байта = 8 байт) | 0x08 |
Data | 8 | Значения 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 ID00 00
— Protocol ID00 06
— Length (6 байт после Unit ID)01
— Unit ID03
— Function Code08
— Byte Count00 0A 00 0B 00 0C 00 0D
— Data (4 регистра)
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.