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

Почему прибор за шлюзом Modbus TCP не отвечает?

Обновлено Редакция GAW

Шлюз Modbus TCP — RTU стоит между двумя сетями, и неисправность может быть с любой стороны. Подсказка — что именно возвращается клиенту: ответ с исключением 0A или 0B приходит от шлюза и указывает на его сторону. Но спецификация описывает эти исключения как специализированные, и шлюз вправе вместо них просто не ответить; тогда тишина не говорит, где неисправность, — до шлюза или на линии (наш вывод).

Что видит клиент

Что приходитГде искать причину
Соединение TCP не устанавливаетсяIP-адрес и маска, порт 502, контроль доступа по IP на шлюзе
Соединение есть, ответа нетлюбая из причин ниже, если шлюз не шлёт исключений; а ещё таймаут клиента меньше времени ответа или идентификатор протокола в заголовке не 0 — такой кадр отбрасывается
Исключение 0Aшлюз не нашёл путь к порту: настройки маршрутизации Unit ID или перегрузка
Исключение 0Bзапрос ушёл на линию, прибор не ответил: Unit ID, скорость, формат порта, проводка RS-485
Исключение 01, 02, 03ответил сам прибор: функция, адрес регистра или значение не подходят

Ответ с исключением в Modbus TCP — 9 байт: заголовок с длиной 3, код функции плюс 0x80 и код исключения. Например, 00 01 00 00 00 03 01 83 0B — шлюз сообщает, что прибор с Unit ID 1 не ответил на чтение регистров (наш пример).

Порядок проверки

  1. Сеть. Шлюз в той же подсети, что и клиент, или маршрут к нему есть; адрес и маску проверит калькулятор подсетей.
  2. Unit ID. В запросе — адрес прибора на линии, 1–247; не 0 и не 255.
  3. Линия. Скорость, чётность и стоп-биты порта шлюза — как у прибора. Проверить прибор отдельно от шлюза можно через USB-адаптер в Modbus RTU мастере.
  4. Проводка RS-485. Если прибор молчит и через адаптер — разбор в ответе «Почему по RS-485 запрос уходит, а ответа нет».
  5. Таймауты. Таймаут клиента больше таймаута линии шлюза, а тот — больше времени ответа прибора (наш вывод).

Разобрать байты ответа по полям можно в калькуляторе Modbus TCP.

Похожие вопросы

Что значит исключение 0A?

GATEWAY PATH UNAVAILABLE: шлюз не смог выделить внутренний путь от входного порта к выходному. По спецификации Modbus это обычно значит, что шлюз неверно настроен или перегружен запросами. Пример неверной настройки — Unit ID, который шлюз не связал ни с одним своим портом (наш пример).

Прибор на RS-485 отвечает с компьютера через USB-адаптер, а через шлюз — нет. Почему?

Значит, линия и прибор в порядке, и разница — в настройках шлюза: скорость, чётность и число стоп-битов его порта, Unit ID в запросе и таймаут ответа линии.

Ответ приходит, но через раз. Что проверить?

Таймауты: если клиент повторяет запрос раньше, чем шлюз дождался ответа с линии, запросы копятся, а ответы приходят к уже отменённым транзакциям. Руководство Modbus по TCP/IP требует, чтобы таймаут повтора был больше наибольшего разумного времени ответа, иначе растёт нагрузка на устройство и сеть.

Источники

  1. Modbus Organization. MODBUS Application Protocol Specification V1.1b3, 2012 — разд. 7: исключение 0A GATEWAY PATH UNAVAILABLE — шлюз не смог выделить путь от входного порта к выходному, обычно неверно настроен или перегружен; 0B GATEWAY TARGET DEVICE FAILED TO RESPOND — от целевого устройства нет ответа, обычно его нет в сети; ответ с исключением — код функции + 0x80 и код исключения; 01 — недопустимая функция, 02 — недопустимый адрес данных, 03 — недопустимое значение
  2. Modbus Organization. MODBUS Messaging on TCP/IP Implementation Guide V1.0b, 2006 — разд. 3.1.3: порт 502; разд. 4.2.3: модуль контроля доступа закрывает соединения с IP-адресов не из списка разрешённых; разд. 4.4.1.2: Unit Identifier за шлюзом — адрес ведомого 1–247; разд. 4.4.1.4: время ответа не нормируется, таймаут клиента выбирают с учётом задержек сети, повтор — не раньше максимального разумного времени ответа; разд. 4.4.2.2: кадр с идентификатором протокола не 0 отбрасывается

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