0x01 — Read Coils (DO)
- Назначение: чтение дискретных выходов; биты упакованы младшим битом вперёд, недостающие биты добиваются нулями до полного байта.
- Пример запрос: 11 01 00 13 00 25 0E 84 — адрес 0x11, функция 0x01, старт 0x0013 (19), количество 0x0025 (37), CRC 0x0E84.
- Пример ответ: 11 01 05 CD 6B B2 0E 1B 45 E6 — адрес 0x11, функция 0x01, далее 5 байт данных: CD, 6B, B2, 0E, 1B; последние 2 байта — CRC.
0x02 — Read Discrete Inputs (DI)
- Назначение: чтение дискретных входов; упаковка битов и поле Byte Count аналогичны 0x01.
- Пример запрос: 11 02 00 C4 00 16 BA A9 — старт 0x00C4 (196), количество 0x0016 (22), CRC 0xBAA9.
- Пример ответ: 11 02 03 AC DB 35 20 18 — 3 байта данных AC, DB, 35; далее CRC 0x2018.
0x03 — Read Holding Registers (AO/Holding)
- Назначение: чтение 16‑битных регистров хранения; параметры адрес/количество 16‑битные, старший байт вперёд.
- Пример запрос: 11 03 00 6B 00 03 76 87 — адрес первого регистра 0x006B (107, что для 40108 с учетом смещения 40001), количество 3, CRC 0x7687.
- Пример ответ: 11 03 06 AE 41 56 52 43 40 49 AD — Byte Count 0x06, далее три регистра: AE41, 5652, 4340; CRC 0x49AD.
0x04 — Read Input Registers (AI)
- Назначение: чтение 16‑битных входных регистров; формат аналогичен 0x03.
- Пример запрос: 11 04 00 08 00 01 B2 98 — чтение одного регистра с адреса 0x0008 (для #30009), CRC 0xB298.
- Пример ответ: 11 04 02 00 0A F8 F4 — Byte Count 0x02, значение регистра 0x000A, CRC 0xF8F4.
0x05 — Write Single Coil
- Назначение: запись одного дискретного выхода; допустимые значения: FF00 = ON, 0000 = OFF.
- Пример запрос: 11 05 00 AC FF 00 4E 8B — запись ON в регистр по адресу 0x00AC (для #173), CRC 0x4E8B.
- Пример ответ: эхо запроса 11 05 00 AC FF 00 4E 8B после успешной записи.
0x06 — Write Single Register
- Назначение: запись одного 16‑битного регистра хранения.
- Пример запрос: 11 06 00 01 00 03 9A 9B — запись значения 0x0003 в адрес 0x0001 (для #40002), CRC 0x9A9B.
- Пример ответ: эхо запроса 11 06 00 01 00 03 9A 9B после успешной записи.
0x0F — Write Multiple Coils
- Назначение: запись нескольких дискретных выходов; после количества регистров указывается Byte Count и далее байты битовых масок.
- Пример запрос: 11 0F 00 13 00 0A 02 CD 01 BF 0B — старт 0x0013, количество 10, Byte Count 0x02, данные CD 01, CRC 0xBF0B.
- Пример ответ: 11 0F 00 13 00 0A 26 99 — подтверждение адреса и количества записанных регистров, CRC 0x2699.
0x10 — Write Multiple Registers
- Назначение: запись нескольких 16‑битных регистров; после количества указывается Byte Count и последовательность значений.
- Пример запрос: 11 10 00 01 00 02 04 00 0A 01 02 C6 F0 — запись двух регистров с адреса 0x0001 значениями 0x000A и 0x0102, CRC 0xC6F0.
- Пример ответ: 11 10 00 01 00 02 12 98 — подтверждение адреса и количества записанных регистров, CRC 0x1298.
Формат ошибки (Exception)
- При ошибке ответ возвращается с тем же адресом и кодом функции с установленным старшим битом (добавляется 0x80), далее 1 байт кода исключения и CRC.
- Пример: запрос 0A 01 00 A1 00 01 AC 63 → ответ 0A 81 02 B0 53 (код функции 0x81 и код ошибки 0x02; далее CRC).