Опрашиваю Wirenboard 7 устройства на шине RS485 по протоколу ModbusRTU, данные через TCP отправляю на внешний ОРС сервер (MasterOPC Universal Modbus Server). Данные могу прочитать как из Wirenboard, так и через ОРС, но в случае обрыва связи по RS485 (или когда устройство отключено) на странице “Каналы MQTT” остается последнее полученное с устройства значение и есть сигнал об ошибке на канале, а в ОРС сервере эта проблема никак не отображается, поскольку от Wirenboard в ОРС, без каких либо перебоев, это последнее значение поступает с признаком качества “GOOD”.
Не могу найти такой параметр в Wirenboard, где мог бы настроить отправку кода ошибки Modbus
Добрый день.
Тут не совсем понятно. Между контроллером и “OPC” - что?
Какой протокол используется, как настроен?
Связь между контроллером и ОРС по ModbusTCP по стандартному порту 502, согласно регистрам, прописанным в wb-mqtt-mbgate.conf (Шлюз MQTT - Modbus RTU/TCP slave)
Так, теперь понятно.
А какое значение ожидаете в регистре если устройство имеет ошибки при опросе?
wb-mqtt-mbgate - это шлюз, он просто отдает то что в топике.
Анализировать ошибку - да, можно, как, например описано в Сообщение при отключении или неисправности в Telegram - #3 от пользователя BrainRoot
Я понимаю, что mbgate только транслирует, но на странице контроллера с данными MQTT (/MQTTChannels) ошибка связи регистрируется. Несмотря на это происходит передача данных (последнего принятого значения) во вне без указания каких-либо проблем со связью или опросом устройства. У Вас на сайте в статье о протоколе указаны коды ошибок Протокол Modbus — Wiren Board.
В качестве примера у Инсат, ОРС сервер которого имеется, в случае ошибки опроса (или связи с устройством) признаком качества устанавливается значение OUT_OF_ SERVICE, а значение EMPTY
Да. Для ошибок связи - отдельный топик MQTT meta/error.
Как я вижу архитектуру: какой-то драйвер сохраняет в MQTT значения. Совершенно неважно каким протоколом и как полученные.
То есть - просто именованное значение. Шлюз wb-mqtt-mbgate позволяет это значение получить по протоколу Modbus TCP (RTU). При этом обработка некнсистентности данных - дело уже скриптов контроллера. Надо ли каким-то образом обрабатывать или нет - вопрос конкретной реализации.
Ошибки - канального уровня, уровня шины.
Modbus не предусматривает в отличии от OPC ошибки. Тут надо менять значение скриптами, обрабатывая ошибку.