Как определить "метод" включения реле

Здравствуйте!

Пишу собственную логику для работы с датчиками движения с расширенным функционалом. Возникла необходимость определять, каким образом включилась та или иная группа света (или реле) — автоматически по движению или вручную.

Рассматриваю два основных способа включения:

  1. :satellite: Автоматическое включение по сработке датчика движения
  2. :technologist: Ручное включение — к нему я отношу:
  • нажатие кнопки (в том числе моностабильной),
  • команды по MQTT,
  • действия из Home Assistant,
  • или управление через веб-интерфейс самого WB.

На текущий момент я реализовал простой механизм:

  • сохраняю время последнего срабатывания датчика;
  • сохраняю время последнего включения света;
  • если разница между ними < ~2 секунд, считаю включение автоматическим;
  • иначе — ручным.

Этот подход отлично работает в простых системах, где нет задержек между физическим событием и регистрацией на контроллере.


Однако в более сложной системе (более 100 модулей WB), где некоторые датчики подключены через модули WB-MIO (по фазе 220 В), появилась проблема:

  • при детекции движения замыкается 220 В на вход MIO;
  • контроллер фиксирует это событие, но с заметной задержкой (до 2 секунд).

Это ломает определение типа включения — потому что датчик срабатывает слишком поздно, и событие распознаётся как ручное, хотя оно было автоматическим.


:question: Вопросы:

  1. Есть ли способы уменьшить задержку регистрации входов WB-MIO, особенно при передаче по RS-485 (с подключением через расширитель или прямо к WB)?
  • Есть ли рекомендации по частоте опроса, настройкам Modbus?
  • Поддерживают ли эти модули какие-либо быстрые режимы обмена?
  1. Как бы вы реализовали в системе с WB распознавание типа включения реле: датчик или ручное управление?
  • Может быть, есть более надёжный способ, кроме как сравнивать времена?

Буду благодарен за советы, примеры и любые рекомендации!

С уважением!

Здравствуйте.

Не понятно какие модули (Modbus или MIO) вы подключаете через какой шлюз? Прошу уточнить. В идеале схему показать…

Есть общие рекомендации для обеспечения быстродействия в масштабных системах управления:

  • Использовать как можно меньше преобразований сигнала;
  • Добиться работы на высокой скорости (115200) с наименьшим количеством ошибок (для Modbus);
  • Использовать меньшее количество устройств на шине Modbus;

С учетом определенного только одного источника сигнала - автоматического, то да, ваш алгоритм кажется оптимальным.

Не только. Если не используется быстрый Modbus - то для регистров можно указать приоритет чтений
Но, логикой расчета пропускной способности шины в таком случие пользоваться такой: “приоритетные чтения” должны занимать до 70% (лцчше 60%) ibhbys/

Доброго дня!

Датчики движения подключены через связку WB-MIO - WBIO-DI-HVD-8 и WB-MIO - WBIO-DI-HVD-16 (по шинам суммарно 4 модуля WB-MIO, к ним кроме детекторов ничего не подключено), и один модуль WBIO-DI-HVD-8 подключен непосредственно в контроллер.
Шина работает на 115200.

Не должно быть таких задержек…
Пришлите, пожалуйста, диагностический архив. Создание архива описано в документации.

Прикладываю диагностический Архив
diag_AJBU7CTE_2025-05-20-22.05.10.zip (179,8 КБ)

Здравствуйте. Простите за задержку.

Сделайте, пожалуйста, следующее. После каждого пункта проверьте реакцию системы на нажатие.

  1. Отключите порт /dev/ttyMOD3;
  2. Отключите все порты кроме /dev/ttyRS485-2 и проверяйте нажатия на “98:1” или “65:1”
  3. Установите, например, “98:1” единственным устройством на /dev/ttyMOD3, остальные порты отключите.

Прошу поделиться временем сработки в каждом пункте.

Я бы не стал завязывать определение на временные интервалы совсем. У меня, для примера сделано так: Если включен “вручную” - включается одитн виртуальный свич. Если автоматически - другой. Правило, управляющее состоянием устройства (каналом реле) подписано на оба свича и обрабатывает их как “или”. То есть если включен хотя б один - то реле включено.

1 лайк

Добрый день!
Удалось ли решить вопрос?