Для нумерации шагов создайте тип данных перечисление (значения имеют тип INT), программа станет более осмысленной.
Пример:
Код:
TYPE enState : (
gc_step_0 := 0 , (* Шаг 1 *)
gc_step_1 := 1 , (* Шаг 2 *)
gc_step_2 := 2 , (* Шаг 3 *)
gc_step_3 := 3 , (* Шаг 4 *)
gc_step_4 := 4 , (* Шаг 5 *)
gc_step_5 := 5 , (* Шаг 6 *)
gc_step_6 := 6 (* Шаг 7 *)
);
END_TYPE
Писать условия IF в начале программы, в которых есть "AND step=Х" незачем - у вас есть ниже CASE - перенесите эти IFы в соответствующие подпункты CASE (TONы, которые выполняются по "IN := step=Х" тоже в принципе можно убрать внутрь CASE, но могут быть нюансы)