Сколько регистров можно прочитать одним запросом Modbus?
Обновлено Редакция GAW
Все функции Modbus — одни и те же на RS-485 и в Ethernet, и их пределы задаёт не транспорт, а размер PDU — кода функции с данными. Спецификация ограничивает его 253 байтами: на последовательной линии к нему добавляются адрес и CRC (256 байт), в Modbus TCP — заголовок MBAP (260 байт), разд. 4.1.
Пределы функций
| Функция | Что делает | Наибольшее количество |
|---|---|---|
| 01, 02 | чтение выходов и входов | 2000 битов (0x7D0) |
| 03, 04 | чтение регистров хранения и входных | 125 регистров (0x7D) |
| 15 (0x0F) | запись нескольких выходов | 1968 битов (0x7B0) |
| 16 (0x10) | запись нескольких регистров | 123 регистра (0x7B) |
Откуда 125
Наш расчёт по формату ответа на функцию 03: код функции (1 байт), счётчик байт (1 байт) и данные по 2 байта на регистр.
Запрос записи 16 длиннее: код функции, адрес (2), количество (2), счётчик байт (1) и данные — 6 + 2 · 123 = 252 байта, а 124 регистра дали бы 254. Для битов то же: 2000 битов — это 250 байт данных в ответе на чтение.
Что будет, если попросить больше
По диаграмме обработки запроса в спецификации устройство сначала проверяет количество: если оно вне диапазона 1–125, приходит ответ с исключением 03 — недопустимое значение данных. Если количество допустимо, но адрес плюс количество выходят за карту регистров устройства, — исключение 02.
Как связаны номера вида 40001 и адреса в кадре, объясняет словарная статья «Регистр Modbus», а сам протокол — статья «Modbus RTU». Собрать запрос на любое количество регистров и проверить ответ можно в калькуляторе Modbus RTU и калькуляторе Modbus TCP, а сколько времени займёт опрос — в калькуляторе полезной скорости.
Похожие вопросы
Можно ли прочитать 200 регистров подряд?
Только двумя запросами, например 125 и 75 регистров. Устройство вправе ограничить количество ещё сильнее — тогда на запрос сверх своего предела оно тоже ответит исключением; предел конкретного прибора указан в его документации.
Почему на запись меньше, чем на чтение?
Запрос записи несёт больше служебных полей: код функции, адрес, количество и счётчик байт — 6 байт против 2 у ответа на чтение. Оставшиеся 247 байт данных вмещают 123 регистра по 2 байта (наш расчёт по разд. 6.12 спецификации).
Быстрее ли читать одним большим запросом, чем несколькими малыми?
Да: у каждого запроса и ответа есть служебные байты и пауза между кадрами, поэтому чем больше регистров за раз, тем выше доля полезных данных. Время опроса при разных скоростях оценит калькулятор полезной скорости интерфейсов.
Источники
- Modbus Organization. MODBUS Application Protocol Specification V1.1b3, 2012 — разд. 4.1: PDU не длиннее 253 байт, ADU RS-485 — 256 байт, ADU TCP — 260 байт; разд. 6.1 и 6.2: количество битов 1–2000 (0x7D0); разд. 6.3 и 6.4: количество регистров 1–125 (0x7D), при выходе за предел — исключение 03; разд. 6.11: запись битов 1–1968 (0x7B0); разд. 6.12: запись регистров 1–123 (0x7B)
- Modbus Organization. MODBUS Messaging on TCP/IP Implementation Guide V1.0b, 2006 — разд. 3.1.2: PDU Modbus TCP тот же, что на последовательной линии, к нему добавлен заголовок MBAP
Нашли ошибку?
Смотрите также
- Modbus RTUКадр, паузы 3,5 символа, функции, регистры, CRC-16, RS-485, отладка
- Modbus RTU: кадрыЗапрос с CRC, разбор ответа, float, адреса 4xxxx
- Modbus TCP: кадрыЗаголовок MBAP, функции 01–06, 15, 16 и 23, разбор, сравнение с RTU
- Полезная скорость интерфейсовБиты на байт, кадры в секунду и доля данных для UART, SPI, I²C, CAN, Modbus и USB
- Регистр ModbusHolding и input registers, номер и адрес в кадре