Еще раз.
Давайте четко разделим программу, и работу с флагами в SFC.
1. Работа программы:
По умолчанию системой исполнения в ПЛК выполняется основная программа. То есть для программы a:=a+1; как будет работать ПЛК:
Система исполнения смотрит состояние переменных в области ввода. Передает управление программе. Программа выполняется один раз с верху в низ. То есть a будет равно 1. Далее система исполнения записывает значение переменной а (если указано) в область выходов.
Опять возвращается к входам, опрашивает их, передает управление основной программе... a равно 2. Заканчивается выполнении программы - записываем результат.
С этим вопросы?
Теперь добавляем подпрограмму b:=b+2;
Отбрасываем запись входов и выходов.
Первый цикл...
идем с верху по приложенному проекту:
считаем один раз а. а=1
видим вызов подпрограммы переходим к ней.
считаем один раз b. b=2
выходим из подпрограммы в основную.
Видим что программа закончилась и идем в начало.
И так постоянно.
Теперь просто представьте, что у Вас подпрограмма не на st а на SFC.
Идем по основной, переходим в подпрограмму - смотрим какой шаг на SFC активный. Один раз выполняем активный шаг, и автоматически возвращаемся в основную программу. Без всяких флагов.