Создал глобальный массив из структур. Каждая запись описывает одно событие. В структуре имеются:
флаг состояния, текстовое описание, уровень критичности, период повторения формирования сообщения о событии (ФБ TON), и еще несколько служебных полей.
Каждая программа при обнаружении выхода параметра за пределы нормы - выставляет флаг соответствующего события.
Отдельная программа (запускается так же по таймеру) при каждом входе проверяет одну строку глобального массива событий. Если флаг взведен - генерирует различные сигналы (в том числе устанавливает требование отправки СМС)
Код:
VAR_GLOBAL
Control : ARRAY[1..11] OF Alarm := (Alert := FALSE, Level := 16#01, mode :=0, t_idle := T#24h, Count :=0 ), (* 01 *)
(Alert := FALSE, Level := 16#00, mode :=0, t_idle := T#10m, Count :=0 ), (* 02 *)
(Alert := FALSE, Level := 16#00, mode :=0, t_idle := T#10m, Count :=0 ), (* 03 *)
(Alert := FALSE, Level := 16#00, mode :=0, t_idle := T#10m, Count :=0 ), (* 04 *)
(Alert := FALSE, Level := 16#00, mode :=0, t_idle := T#20m, Count :=0 ), (* 05 *)
(Alert := FALSE, Level := 16#01, mode :=0, t_idle := T#10m, Count :=0 ), (* 06 *)
(Alert := FALSE, Level := 16#00, mode :=0, t_idle := T#10m, Count :=0 ), (* 07 *)
(Alert := FALSE, Level := 16#01, mode :=0, t_idle := T#10m, Count :=0 ), (* 08 *)
(Alert := FALSE, Level := 16#01, mode :=0, t_idle := T#30m, Count :=0 ), (* 09 *)
(Alert := FALSE, Level := 16#01, mode :=0, t_idle := T#30m, Count :=0 ), (* 10 *)
(Alert := FALSE, Level := 16#01, mode :=0, t_idle := T#3m, Count :=0 ); (* 11 *)