Перейти к содержанию

Сколько регистров можно прочитать одним запросом 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 байта на регистр.

1+1+2⋅125=252≤253,1+1+2⋅126=254>2531 + 1 + 2 \cdot 125 = 252 \le 253, \qquad 1 + 1 + 2 \cdot 126 = 254 > 253

Запрос записи 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 спецификации).

Быстрее ли читать одним большим запросом, чем несколькими малыми?

Да: у каждого запроса и ответа есть служебные байты и пауза между кадрами, поэтому чем больше регистров за раз, тем выше доля полезных данных. Время опроса при разных скоростях оценит калькулятор полезной скорости интерфейсов.

Источники

  1. 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)
  2. Modbus Organization. MODBUS Messaging on TCP/IP Implementation Guide V1.0b, 2006 — разд. 3.1.2: PDU Modbus TCP тот же, что на последовательной линии, к нему добавлен заголовок MBAP

Нашли ошибку?