Цитата Сообщение от capzap Посмотреть сообщение
От банального
IF NOT flag THEN
flag := TRUE;
(* некие действия при запуске *)
END_IF;
Действительно банально, и даже обидно: "Почему я сам этого не увидел?". Вот только судя по тому, что только никто здесь до сих пор этого не предложил, самые простые и эффективные решения требуют прокачанного мышления профи

В итоге создал и протестировал следующий ФБ:
Код:
FUNCTION_BLOCK FD (*Проверка условия и обнаружение сбоя*)
VAR_INPUT
In_cond:BOOL; (*Входящее условие (должно быть RETAIN)*)
Rst:BOOL; (*Если нужно сбросить ошибку*)
END_VAR
VAR_OUTPUT
Ouch:BOOL; (*Ой, обнаружен сбой!*)
Start_fl:BOOL; (*Флаг запуска программы*)
END_VAR
VAR
END_VAR
=======================================
IF NOT Start_fl THEN Start_fl:=TRUE;
IF In_cond THEN Ouch:=TRUE; (*Сигнал об ошибке*)
END_IF;
END_IF;

IF Ouch AND Rst THEN Ouch:=FALSE; (*Сброс ошибки*)
END_IF;


Правда, получается что задачу ТС это все равно не решает, т.к. при кратковременном (меньше 2 сек.) пропадании фазы ПЛК реально не выключается. Ему остается только решение Sergey666.

Тема закрыта, благодарю за помощь!