Добрый день.
Имеется несколько шлюзов Schneider Electric IFE LV434002 для опроса автоматов. Шлюз дает каждому подключенному автомату свой slave_id в ModbusTCP. Если все автоматы, которые прописаны в конфиге wb-mqtt-serial видны шлюзом, то опрос работает нормально. Но если один пропадает, то шлюз судя по всему отвечает на запрос illegal_data_address, в ответ на это wb-mqtt-serial прекращает опрос всего порта, хотя на наем еще остаются девайсы, которые отвечают.
wb-mqtt-serial_20250923T121416.log (64,5 КБ)
Добрый день!
Для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.
Так же прошу уточнить: к одному шлюзу подключено несколько устройств?
При опросе другим способом (например: через modbus_client) связь так же теряется с другими устройствами?
Да, к одному шлюзу подключено несколько устройств, при этом MasterSCADA в тоже время опрашивает их без проблем. В web интерфейсе шлюза видно что счетчик принятых/отправленных запросов останавливается на 8-9 и дальше не увеличивается.
В вашем случае я бы порекомендовал создать на каждое устройство отдельный порт.
Другие способы или настройки wb-mqtt-serial, которые позволили бы избежать закрытия порта при получении illegal_data_address от IFE LV434002, мне не известны и в документации не описаны.
А при создании отдельного порта на каждое устройство WB не будет плодить TCP соединения к шлюзу? Я не знаю какой у шлюза лимит входящих соединений.
Да, такой способ может упереться в ограничение одновременных соединений для шлюза.
Обратите еще внимание на опцию драйвера Объединенное чтение регистров.
В конфигурационном файле или шаблоне к автомату отключите её.
“enable_wb_continuous_read”: false,
“max_bit_hole”: 0,
“max_reg_hole”: 0,
У меня там только один регистр с каждого устройства читается.
В вашем шаблоне задан guard_interval_us?
Добрый день! Прикрепите, пожалуйста, шаблон
Был задан, но в процессе экспериментов я его удалил из шаблона. Это никак не повлияло на работу.
config-ife.json (889 байтов)
Уточните пожалуйста, можно ли настроить ваш шлюз, чтобы он не отправлял ошибку illegal data address или слал другую ошибку?
Коллеги еще подсказали, что можно выставить connection_max_fail_cycles=1 и connection_timeout_ms=0, тогда после любой ошибки соединение должно открываться повторно и все регистры будут опрашиваться.
К сожалению это не мой шлюз, а Schneider Electric, поэтому вряд-ли я смогу повлиять на его ответ.
А куда вставлять эти параметры? В шаблон устройства?
Вы же его настраивали, возможно там есть такая опция. Я никогда не сталкивался с этим устройством и мы его не поддерживаем.
Да.
Добрый день!
Получилось ли решить вопрос?
Добрый день.
Пока просто отключил опрос отсутствующих устройств и забил. Будет свободное время, попробую подкорректировать шаблон, по вашим рекомендациям.
Ещё меня мучает вопрос в чем смысл отключать опрос всего порта при появлении illegal_data_address на одном устройстве? Или проблем в том, что нужно как-то специально настроить опрос, чтобы он не прекращался при ошибке?
Опрос при этом не отключается полностью, а постоянно предпринимается попытка повторного подключения.
Если обратиться к документации, то там для указанных параметров приведено следующее:
// Таймаут соединения (только для TCP или MODBUS TCP порта).
// Если в течение указанного времени ни по одному устройству на порту не поступило данных (а также истек "connection_max_fail_cycles"),
// TCP соединение будет разорвано и произойдет попытка переподключения
"connection_timeout_ms": 5000,
// Количество неудачных циклов опроса (только для TCP или MODBUS TCP порта)
// Если в течение указанного количества циклов опроса ни по одному устройству на порту не поступило данных (а также истек "connection_timeout_ms"),
// TCP соединение будет разорвано и произойдет попытка переподключения
"connection_max_fail_cycles": 2,
Таким образом, для этого шлюза необходимо соответствующим образом настроить интервалы.
Опрос при этом не отключается полностью, а постоянно предпринимается попытка повторного подключения.
Странно. У меня вообще опрос останавливается (счетчик принятых пакетов на шлюзе не увеличивается).
Ещё такой вопрос:
Параметры connection_max_fail_cycles=1 и connection_timeout_ms=0, я так понимаю, относятся к порту. В какой раздел шаблона нужно их добавить в “device” или в “channels” в каждый канал или их нужно в напрямую в исходную конфигурацию писать в соответствующий “port”?
Попробуйте при connection_max_fail_cycles=1 и connection_timeout_ms=0. Но стоит учитывать, что это скорее «костыли», и мы такие режимы не тестировали.
У нас пока нет настраиваемой обработки ошибки illegal data address, поэтому идею о её реализации я передам разработчикам.
Эти параметры относятся к порту. Их нужно указывать в секции "ports".