Курс 8 • Урок 2 из 2 • 4 акад. ч.

Автомат состояний и обработка неподтверждённого действия

Цель: Сделать последовательность с определёнными переходами, тайм-аутом и восстановлением после отказа.

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 и одновременные события. Зафиксируйте ожидаемые команды. Итог — проверенный учебный алгоритм и перечень ограничений, а не утверждение о готовности реальной машины.

Что нужно запомнить

  • Каждое состояние имеет определённые переходы и выходы.
  • В ожидании нужна реакция на отсутствие подтверждения.
  • Неизвестное состояние и восстановление после отказа проверяют отдельно.

Документация и дополнительное чтение

Проверка знаний

Вопросы по уроку

Нужно 75%
Загрузка вопросов…