Почему прибор за шлюзом 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 не ответил на чтение регистров (наш пример).
Порядок проверки
- Сеть. Шлюз в той же подсети, что и клиент, или маршрут к нему есть; адрес и маску проверит калькулятор подсетей.
- Unit ID. В запросе — адрес прибора на линии, 1–247; не 0 и не 255.
- Линия. Скорость, чётность и стоп-биты порта шлюза — как у прибора. Проверить прибор отдельно от шлюза можно через USB-адаптер в Modbus RTU мастере.
- Проводка RS-485. Если прибор молчит и через адаптер — разбор в ответе «Почему по RS-485 запрос уходит, а ответа нет».
- Таймауты. Таймаут клиента больше таймаута линии шлюза, а тот — больше времени ответа прибора (наш вывод).
Разобрать байты ответа по полям можно в калькуляторе Modbus TCP.
Похожие вопросы
Что значит исключение 0A?
GATEWAY PATH UNAVAILABLE: шлюз не смог выделить внутренний путь от входного порта к выходному. По спецификации Modbus это обычно значит, что шлюз неверно настроен или перегружен запросами. Пример неверной настройки — Unit ID, который шлюз не связал ни с одним своим портом (наш пример).
Прибор на RS-485 отвечает с компьютера через USB-адаптер, а через шлюз — нет. Почему?
Значит, линия и прибор в порядке, и разница — в настройках шлюза: скорость, чётность и число стоп-битов его порта, Unit ID в запросе и таймаут ответа линии.
Ответ приходит, но через раз. Что проверить?
Таймауты: если клиент повторяет запрос раньше, чем шлюз дождался ответа с линии, запросы копятся, а ответы приходят к уже отменённым транзакциям. Руководство Modbus по TCP/IP требует, чтобы таймаут повтора был больше наибольшего разумного времени ответа, иначе растёт нагрузка на устройство и сеть.
Источники
- 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 — недопустимое значение
- 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 отбрасывается
Нашли ошибку?
Смотрите также
- Modbus TCP: кадрыЗаголовок MBAP, функции 01–06, 15, 16 и 23, разбор, сравнение с RTU
- Modbus RTUКадр, паузы 3,5 символа, функции, регистры, CRC-16, RS-485, отладка
- Почему по RS-485 запрос уходит, а ответа нет?Время переключения DE, флаг TC, эхо и полярность A/B
- Modbus RTU мастерОпрос приборов через Web Serial: регистры, исключения, журнал
- Калькулятор подсетей IPv4Маска и CIDR, сеть, broadcast, узлы, частные диапазоны, деление на подсети