Пытаюсь сделать управление нагревателем, 2 режима. Первый: Нагрев, второй: Поддержание температуры на заданном уровне. Я попробовал описать функциональный блок, но он не работает. Подскажите, как будет правильно реализовать? Может, тут надо таймеры в отдельный функциональный блок как-то вынести?

Код:
FUNCTION_BLOCK Heater
VAR_INPUT
	Temper_k :WORD; (*Температура с термопары*)
	Time_grow :TIME; (*Время изменения мощности, скорость нагрева*)
	Temper_oper: UINT; (*Температура, которую задает оператор*)
	Time_work_elect_heat :TIME; (*Время поддержания температуры*)
END_VAR
VAR_OUTPUT
	Out_elect_heat :WORD; (*Мощность нагревателя*)
END_VAR
VAR
	Timer_grow : TON;
	Operation_time: TON;
	Time_step :TIME;	(*Время приращения мощности ТЭНа*)
	capacity_ADC :UINT := 4096; (*Разрядность АЦП*)
	step_grow :UINT := 128; (*Приращение АЦП*)
	heating_mode :UINT; (*Режим нагревателя, 0 - нагрев, 1 - поддержание температуры*)
END_VAR
Код:
	Time_step := Time_grow / capacity_ADC; (*Это время идет на таймер, который вызывает сигнал Timer*)
	Timer_grow(IN := 1, PT := Time_step);
	Operation_time(IN := 1, PT := Time_work_elect_heat);
	CASE heating_mode OF
	0:
		IF Timer_grow.Q AND (Temper_k < Temper_oper) AND Out_elect_heat < capacity_ADC THEN
			Out_elect_heat := Out_elect_heat + step_grow; (*32 шага при 12-битном АЦП*)
		ELSIF Timer_grow.Q AND (Temper_k > Temper_oper) AND Out_elect_heat > 0 THEN
			heating_mode :=1;
		END_IF
	1:
		IF Operation_time.Q AND (Temper_k < Temper_oper) AND Out_elect_heat < capacity_ADC THEN
			Out_elect_heat := Out_elect_heat + step_grow; (*32 шага при 12-битном АЦП*)
		ELSIF Operation_time.Q AND (Temper_k > Temper_oper) AND Out_elect_heat > 0 THEN
			Out_elect_heat := Out_elect_heat - step_grow; (*32 шага при 12-битном АЦП*)
		ELSE
			Out_elect_heat := 0;
		END_IF
	END_CASE