Sidebar Left

Ошибки, исключения и тайм-ауты в Modbus

Ошибки в Modbus делятся на два класса: устройство ответило отказом — значит, связь есть и разбираться нужно с запросом; устройство молчит — значит, проблема в линии, адресе или параметрах порта.

Как выглядит отказ
Мы запросили регистр, которого у устройства нет:

01 03 00 6B 00 03 74 17 → 01 83 02 C0 F1

Байты ответа Смысл
01 адрес устройства
83 код функции с установленным старшим битом: 0x03 + 0x80 — признак ошибки
02 код исключения: недопустимый адрес данных
C0 F1 CRC16

Правило простое: если код функции в ответе больше запрошенного на 0x80, это отказ, и следующий байт объясняет причину.

Коды исключений

Код Название Что обычно значит на практике
0x01 Недопустимая функция Устройство не поддерживает эту функцию. Частый случай: пытаемся читать функцией 0x04 то, что лежит в регистрах хранения
0x02 Недопустимый адрес данных Регистра с таким адресом нет или запрошенный блок выходит за границу области. Проверьте смещение адреса
0x03 Недопустимое значение данных Значение вне допустимого диапазона или запрошено слишком много элементов
0x04 Отказ устройства Внутренняя ошибка: не готово, заблокировано, идёт другая операция
0x05 Подтверждение Команда принята, но выполняется долго — ответ придёт позже; редко встречается
0x06 Устройство занято Повторите запрос позже
0x08 Ошибка чётности памяти Проблема с памятью устройства
0x0B Шлюз: устройство не отвечает Ответ пришёл от шлюза Modbus TCP, а не от прибора: за шлюзом никого нет по указанному unit id

Коды 0x0A и 0x0B возвращает именно шлюз — это важная подсказка при работе через преобразователь интерфейсов: связь до шлюза есть, дальше нет.

Когда устройство молчит

  • Не тот адрес. Самое частое. Помогает опрос по всем адресам подряд — короткий запрос 0x03 на один регистр, пауза, следующий адрес.
  • Не те параметры порта. Скорость, чётность, стоп-биты должны совпадать точно. Классика: устройство настроено на 9600 8E1, а мастер работает 9600 8N1.
  • Перепутаны A и B. В RS-485 обозначения у производителей не совпадают; если ответа нет — поменяйте местами, хуже не станет.
  • Нет терминаторов. На длинной линии и высокой скорости без согласующих резисторов 120 Ом на концах связь работает нестабильно: пакеты то проходят, то нет.
  • Слишком короткий тайм-аут. Прибору нужно время на измерение; тайм-аут меньше 300–500 мс на медленной линии часто оказывается преждевременным.
  • Два мастера в одной линии. Опрос двумя программами одновременно даёт «случайные» пропажи ответов.

Повреждённые кадры
Если CRC не сошёлся, кадр молча отбрасывается — ни ответа, ни сообщения об ошибке. Поэтому редкие пропажи ответов на зашумлённой линии выглядят так же, как тайм-аут. Отличить помогает счётчик: если из ста запросов теряются два-три и всегда на длинных ответах — это помехи, а не адресация.

Порядок диагностики

  • Проверьте, идёт ли обмен физически — по индикаторам преобразователя или осциллографом на линии.
  • Убедитесь, что мастер один.
  • Прочитайте один регистр по известному адресу — минимальный запрос отсекает половину причин.
  • Получили отказ — читайте код исключения, он точно указывает, что не так с запросом.
  • Молчание при верных параметрах — переберите адреса, затем скорости и чётность.
  • Работает через раз — смотрите терминаторы, длину линии, экран кабеля и заземление.

В контроллерах ТК16L и E-422 обмен по каждому каналу протоколируется, поэтому разбор обычно сводится к чтению журнала: видно, ушёл ли запрос и что вернулось.

← Все разделы справочника Modbus

Style Selector

Primary Color

Direction