Хорошим тоном в программировании является не использовать каких либо чисел. Ваши числа 16, 17 по сути константы из списка. Создайте перечисление в типах данных и назовите все ваши шаги(состояния) подпрограммы. Причем числа им присваивать не обязательно компилятор сделает сам. Предположим перечисление назовем State. Объявим тип вашего Step как перечисление. (Step: StateТеперь Step может принимать только значения из перечисления. Если назвать элементы перечислений со смыслом, то можно избавиться от комментариев типа
16: (*Запись*)
Теперь эта строка будет выглядеть
State.Write:
А переход на новый шаг оформится так:
Step:=State.MB16Func;
Write и MB16Func - это просто примеры элементов из перечисления.
Подобный подход делает код не только более понятным, но и предотвращает ошибки, когда вы случайно записываете в step какое-то не то значение или выходите за границы.
Действие в 16 степе логично не делать отдельным шагом, а впихнуть в 17:
Это так называемое входное действие, которое выполняется только один раз при переходе к этому шагу.17:
IF NOT(WriteAddr236.Enable) THEN
;(*запись в буфер*)
END_IF
(*далее действие 17 как оно у вас*)
Вообще есть в codesys SFC язык, который эту концепцию в графическом виде показывает. Сам не пробовал, но надо бы уже.




Теперь Step может принимать только значения из перечисления. Если назвать элементы перечислений со смыслом, то можно избавиться от комментариев типа
Ответить с цитированием