Автомат состояний и обработка неподтверждённого действия
Цель: Сделать последовательность с определёнными переходами, тайм-аутом и восстановлением после отказа.
4 акад. ч. Лекция, работа с документацией, практическое задание на учебной модели или согласованном стенде и самопроверка.
Состояние вместо набора случайных флагов
Когда алгоритм состоит из этапов, удобнее явно задать состояние: 0 — ожидание, 10 — запуск, 20 — работа, 900 — отказ. В каждый момент обычный последовательный механизм находится в одном определённом состоянии. Выходы формируют из состояния и действующих разрешений. Это облегчает проверку, потому что нельзя случайно одновременно объявить разные шаги завершёнными несогласованными флагами.
Для перехода записывают событие и условия. Для входа в состояние — начальные действия. Для ожидания — тайм-аут и признак выполнения. Для выхода — сброс временных условий, если он нужен. Неизвестный код состояния обрабатывают отдельно, не считая его разрешением включить оборудование.
Приоритет событий
Подтверждение, обычный останов и отказ могут появиться в одном цикле. Ожидаемую реакцию задают в требованиях. В учебном примере потеря обязательного разрешения запрещает команду независимо от номера шага. Тайм-аут запуска переводит алгоритм в отказ и фиксирует причину. Простое исчезновение сообщения не даёт автоматического разрешения нового запуска.
Функции безопасности реального оборудования реализуются предусмотренными средствами; обычный автомат состояний курса не подменяет их. Во время наладки особенно опасно временно форсировать подтверждение, а затем забыть вернуть нормальный режим обработки.
Проверяемый учебный фрагмент
StartTimer(IN := State = 10, PT := T#5s);
CASE State OF
0: IF Start AND Ready THEN State := 10; END_IF;
10: IF NOT Ready THEN State := 900;
ELSIF Running THEN State := 20;
ELSIF StartTimer.Q THEN State := 900; END_IF;
20: IF Stop THEN State := 0;
ELSIF NOT Ready THEN State := 900; END_IF;
900: IF Reset AND Ready AND NOT Running THEN State := 0; END_IF;
ELSE State := 900;
END_CASE;
RunCommand := ((State = 10) OR (State = 20)) AND Ready;Фрагмент показывает структуру, а не полный готовый привод. В проекте дополнительно определяют и проверяют начальный запуск, источник Start, недостоверность Running, защёлкивание причины отказа, приоритет Stop во всех шагах и аппаратные защиты. Скопированный пример без этих требований не является завершённым алгоритмом объекта.
Практическое задание
На программной модели составьте таблицу переходов и проверьте все строки. Добавьте реакцию обычного Stop в состоянии запуска и сброс причины после подтверждённого восстановления. Подайте неподтверждение дольше 5 с, неизвестный код состояния, потерю Ready и одновременные события. Зафиксируйте ожидаемые команды. Итог — проверенный учебный алгоритм и перечень ограничений, а не утверждение о готовности реальной машины.
Что нужно запомнить
- Каждое состояние имеет определённые переходы и выходы.
- В ожидании нужна реакция на отсутствие подтверждения.
- Неизвестное состояние и восстановление после отказа проверяют отдельно.