Спасибо, за подробный ответ.

Если я Вас правильно понял, то переменная Enable:BOOL; объявляется в VAR_INPUT ФБ и потом эта переменная разрешает записывать другие переменные INPUT/OUTPUT, все верно?

Функциональные блоки я уже сделал для каждого режима с локальными переменным INPUT/OUTPUT, только вот на языке CFC. Весь алгоритм выполнен на блоках.

В PLC_PRG выбор режима сделал через операторы IF. Далее для каждого ФБ (PCHV_cont_mode, PCHV_step_mode, PCHV_progon_mode) в зависимости от выбранного режима через оператор CASE присваиваю значения переменным INPUT/OUTPUT для каждого ФБ.

Вот кусок кода из PLC_PRG. Как мне можно интегрировать переменную ENABLE:BOOL;? Можно ли в разных ФБ локальные переменные делать с одинаковым названием? Например, Vybeg, pusk, revers я использую во всех трех ФБ.

Код:
IF Rezh_post_dv THEN
        Rezhim:=1;
ELSE
        IF Rezh_shag THEN
            Rezhim:=2;
        ELSE
                IF Rezh_progon THEN
                    Rezhim:=3;
                END_IF
        END_IF
END_IF

CASE Rezhim OF

1: 	PCHV_cont_mode1 (Cont_mode_avar:=Avaria, (*Сигнал авария из блока аварий*)
					vybeg:=Privod_stop, (* Привод конвейера: стоп *)
					pusk:=Privod_vpered, (* Привод конвейера: вперед *)
					revers:=Privod_nazad, (* Привод конвейера: назад *)
					Com_word=>Com_slovo, (*Командное слово*)
					Stat_word:=Slovo_sost, (*Слово состояния*)
					);

	PCHV_prog_mode1(Prog_mode_avar:=FALSE,
					Prog_mode_polozh_izlozh:=FALSE,
					Prog_mode_Podogrev_Stop=>Prog_mode_podogr_stop,
					vybeg:=FALSE,
					pusk:=FALSE,
					Com_word=>,
					Stat_word:=0,
					);

	PCHV_step_mode1(Step_mode_avar:=FALSE,
					Step_mode_pol_izl:=FALSE,
					vybeg:=FALSE,
					pusk:=FALSE,
					revers:=FALSE,
					Com_word=>,
					Stat_word:=0,
					);

2:	PCHV_step_mode1(Step_mode_avar:=avaria,
					Step_mode_pol_izl:=Polozh_izlozh,
					vybeg:=Privod_stop,
					pusk:=Privod_vpered,
					revers:=Privod_nazad,
					Com_word=>Com_slovo,
					Stat_word:=Slovo_sost,
					);

	PCHV_cont_mode1(Cont_mode_avar:=FALSE,
					vybeg:=FALSE,
					pusk:=FALSE,
					revers:=FALSE,
					Com_word=>,
					Stat_word:=0,
					);

	PCHV_prog_mode1(Prog_mode_avar:=FALSE,
					Prog_mode_polozh_izlozh:=FALSE,
					Prog_mode_Podogrev_Stop=>Prog_mode_podogr_stop,
					vybeg:=FALSE,
					pusk:=FALSE,
					Com_word=>,
					Stat_word:=0,
					);

3:	PCHV_prog_mode1(Prog_mode_avar:=Avaria,
					Prog_mode_polozh_izlozh:=Polozh_izlozh,
					Prog_mode_Podogrev_Stop=>Prog_mode_podogrev_end,
					vybeg:=Privod_stop,
					pusk:=Privod_vpered,
					Com_word=>Com_slovo,
					Stat_word:=Slovo_sost,
					);

	PCHV_cont_mode1(Cont_mode_avar:=FALSE,
					vybeg:=FALSE,
					pusk:=FALSE,
					revers:=FALSE,
					Com_word=>,
					Stat_word:=0,
					);

	PCHV_step_mode1(Step_mode_avar:=FALSE,
					Step_mode_pol_izl:=FALSE,
					vybeg:=FALSE,
					pusk:=FALSE,
					revers:=FALSE,
					Com_word=>,
					Stat_word:=0,
					);
ELSE
           Alarm_ne_vybran_rezhim:=TRUE;
END_CASE