Вообще, мое мнение - вызовы FB - должны выполняться всегда.
В смысле, что вот такое:
IF START THEN
PRG1();
START := FALSE;
END_IF
это жуть!

Начинает прыгать среднее время выполнения цикла, возникают вопросы, а что произойдет с FB, когда его снова вызовут (с учетом того, как его вызывали последний раз). Для оптимизации времени выполнения - тоже не подходит. 3-4 "тяжелых" блока однажды начнут выполняться одновременно - замучаетесь ловить, почему Watchdog стал срабатывать.