0
Under review

Триггер с таймером

lele89 3 years ago updated by Vladimir Ovchinnikov (expert) 3 years ago 1

Здравствуйте! Чего-то не соображу как реализовать такую функцию.

Есть массив переменных (приходит с модбаса) - данные о состоянии датчиков. В реальном времени все четко считывается. Но надо чтобы при сработке любого из этих датчиков, его состояние некоторое время висело как "замкнуто". Чтобы не городить журнал и в то же время не пропустить сработку. 

Например сработал датчик1 на пару секунд и разомкнулся - сразу запустился таймер (2 минуты). В это время произошла сработка датчика2 также на несколько секунд - таймер перезапустился и опять отсчитывает эти 2 минуты ( датчик1 и датчик2 при этом отображаются как замкнутые). И если в течение этих 2 минут новых сработок не было, то по истечении времени датчики уже отображаются как разомкнутые.

Надеюсь понятно описала)) 

Проект на i3.

Заранее спасибо!

PS можно даже в новый массив "триггернутые" состояния записывать

Under review

Добрый день.

В фидбэки нативного драйвера такие состояния записывать смысла нет, т. к. они будут перезаписываться следующим успешным опросом. Варианты: создать 2 виртуальных фидбэка и записывать в них, либо записывать в пользовательскую БД. Если хранить значения в скриптовых переменных, то после рестарта сервера значения будут потеряны.

Допустим, выбран вариант с виртуальными фидбэками. В слушателе с EVENT_TAG_CHANGE брать значения из нативного драйвера и записывать в одноимённые виртуальные фидбэки и сразу стартовать SetTimout с нужной задержкой, который будет принудительно отправлять 0 в эти фидбэки. Если EVENT_TAG_CHANGE сработал раньше выставленной задержки, то в виртуальный фидбэк будет записано новое значение.