Код:
FUNCTION_BLOCK koptilna
VAR_INPUT
ProgramRun : BOOL; //программа в работе
BtnStart : BOOL; //запуск программы
BtnStop : BOOL; //стоп рограммы
SelectRecipe : UDINT; // выбранный рецепт
EditStep : UDINT; // редактирование шага
SelectProcess : UDINT; // выбранный процесс
END_VAR
VAR_OUTPUT
HeatCamera : BOOL; //нагрев камеры
HeatGen : BOOL; //розжиг дымогенератора
Speed1 : BOOL; //двигатели скорость 1
Speed2 : BOOL; //двигатели скорость 2
Valve1 : BOOL; //выброс 1/3
Valve2 : BOOL; //выброс 2/3
Boost : BOOL; //наддув
Blowdown : BOOL; //поддув
Firefighting : BOOL; //пожаротушение
Stirrer : BOOL; //ворошитель
Sink : BOOL; //мойка
Hydration : BOOL; //увлажнение
CurenStep : UDINT; //позицая шага
END_VAR
VAR
RecipeSteps : ARRAY [0..200] OF UDINT;
RecipeIndex : UDINT; // индекс рецепта
EditIndex : UDINT; // индекс редактирования
SelectProcessOld : UDINT; //старое значение выбраного процесса
StepNomber : UDINT; //номер шага
END_VAR
//Значение по умолчанию для выходов
HeatCamera := FALSE;
HeatGen := FALSE;
Speed1 := FALSE;
Speed2 := FALSE;
Valve1 := FALSE;
Valve2 := FALSE;
Boost := FALSE;
Blowdown := FALSE;
Firefighting := FALSE;
Stirrer := FALSE;
Sink := FALSE;
Hydration := FALSE;
//Запуск программы
IF BtnStart THEN
ProgramRun := TRUE;
CurenStep := 1;
END_IF;
//Остановка программы
IF BtnStop THEN
ProgramRun := FALSE;
CurenStep := 1;
END_IF
//Автоматическое сохранние при редактировании рецепта
IF SelectProcess <> SelectProcessOld THEN
IF (SelectProcess >= 0) AND (SelectProcessOld <=10) THEN
IF (EditStep >= 0) AND (EditStep <=20) THEN
EditIndex := (SelectRecipe - 1) * 20 + EditStep;
RecipeSteps [EditIndex] := SelectProcess;
END_IF
END_IF
END_IF
StepNomber := RecipeSteps [RecipeIndex];
//Режимы работы
CASE StepNomber OF
0://Завершение процессов
HeatCamera := FALSE;
HeatGen := FALSE;
Speed1 := FALSE;
Speed2 := FALSE;
Valve1 := FALSE;
Valve2 := FALSE;
Boost := FALSE;
Blowdown := FALSE;
Firefighting := FALSE;
Stirrer := FALSE;
Sink := FALSE;
Hydration := FALSE;
1://Нагрев
HeatCamera := TRUE;
HeatGen := FALSE;
Speed1 := TRUE;
Speed2 := FALSE;
Valve1 := FALSE;
Valve2 := FALSE;
Boost := FALSE;
Blowdown := FALSE;
Firefighting := FALSE;
Stirrer := FALSE;
Sink := FALSE;
Hydration := FALSE;
2://Розжиг
HeatCamera := TRUE;
HeatGen := TRUE;
Speed1 := TRUE;
Speed2 := FALSE;
Valve1 := TRUE;
Valve2 := TRUE;
Boost := TRUE;
Blowdown := TRUE;
Firefighting := FALSE;
Stirrer := TRUE;
Sink := FALSE;
Hydration := TRUE;
3://Копчения
HeatCamera := TRUE;
HeatGen := TRUE;
Speed1 := FALSE;
Speed2 := TRUE;
Valve1 := FALSE;
Valve2 := TRUE;
Boost := TRUE;
Blowdown := TRUE;
Firefighting := FALSE;
Stirrer := TRUE;
Sink := FALSE;
Hydration := TRUE;
4://Проветривание
HeatCamera := FALSE;
HeatGen := FALSE;
Speed1 := FALSE;
Speed2 := TRUE;
Valve1 := TRUE;
Valve2 := TRUE;
Boost := FALSE;
Blowdown := FALSE;
Firefighting := FALSE;
Stirrer := FALSE;
Sink := FALSE;
Hydration := FALSE;
5://Мойка
HeatCamera := TRUE;
HeatGen := FALSE;
Speed1 := FALSE;
Speed2 := FALSE;
Valve1 := FALSE;
Valve2 := FALSE;
Boost := FALSE;
Blowdown := FALSE;
Firefighting := FALSE;
Stirrer := FALSE;
Sink := TRUE;
Hydration := FALSE;
6://Сушка
HeatCamera := TRUE;
HeatGen := FALSE;
Speed1 := FALSE;
Speed2 := TRUE;
Valve1 := FALSE;
Valve2 := FALSE;
Boost := FALSE;
Blowdown := FALSE;
Firefighting := FALSE;
Stirrer := FALSE;
Sink := FALSE;
Hydration := FALSE;
END_CASE;
END_FUNCTION_BLOCK