Состояния Конечных автоматов
Состояние (state) — это одно из состояний КА. В состоянии задаются действия, описывающие поведение системы в этом состоянии в виде программного кода на Julia, потоковой диаграммы или вложенного КА и могут быть настроены с помощью группы операторов.
Состояния подчиняются логике работы КА:
-
В модели конечного автомата в любой момент времени может быть активно только одно состояние.
-
Состояние активируется, если условие для перехода в него выполнено.
-
КА завершает все операции, определенные в текущем состоянии, перед тем, как перейти в следующее.
Состояния поддерживают иерархию КА, подробнее здесь. |
Синтаксис состояний
Правило | Ошибка при нарушении условия |
---|---|
У каждого состояния должно быть название. |
Ошибка цикла обработки результатов в router: ErrorException('имя_модели/Chart': state name ' ' is incorrect.) |
|
Ошибка цикла обработки результатов в router: ErrorException('имя_модели/Chart': state name 'пример некорректного имени' is incorrect.) |
Группы операторов поддерживают только операции на языке Julia. |
Ошибка инициализации модели: [EXEC] Ошибка инициализации модели id_модели id_симуляции: UndefVarError(:некорректный синтаксис) |
Код, написанный в состоянии, будет выполняться на каждом шаге модели конечного автомата. Например, состояние с циклом for выглядит так:
В состояниях можно оставлять комментарии как и в любом коде на языке Julia:
Диаграммы состояний
Диаграмма состояний — это графическое представление конечного автомата, включающее набор состояний и правила переходов между ними.
Рассмотрите работу с КА на примере модели системы автоматического пожаротушения. Она может находиться в следующих состояниях:
-
Rest (покой) — предельная концентрация дыма не превышена.
-
Alarm (тревога) — система включает ороситель.
-
Fault (неисправность) — самодиагностика показала неисправность системы, дальнейшая работа невозможна.
Данный пример демонстрирует логику КА и не является исчерпывающим. |
У системы есть один вход — концентрация дыма в воздухе и два выхода — «оросители» и «лампа неисправности». В зависимости от значения входного сигнала система переходит в одно из возможных состояний, и соответственно устанавливаются значения сигналов на выходе:
-
Rest (покой) — оросители выключены, лампа неисправности выключена.
-
Alarm (тревога) — оросители включены, лампа неисправности включена.
-
Fault (неисправность) — оросители выключены, лампа неисправности включена.
Система переходит из одного состояния в другое посредством переходов (transition):
Переходы между состояниями происходят при выполнении определенных условий (condition), заданных в модели. Условием перехода может быть событие, логическое условие и время. В нашем примере условием перехода от состояния Покой к состоянию Тревога будет «превышение предельно допустимой концентрации дыма», а Неисправность возникает, если датчик показывает отрицательное значение концентрации.
Чтобы добавить в модель более сложные условия, можно использовать соединительные узлы (connective junction).
Верхний соединительный узел на рисунке позволяет переключиться в состояние Неисправность из состояния Покой не только в случае отрицательного значения концентрации, но и не позволяет системе перейти из состояния Покой в состояние Тревога, когда показатель концентрации слишком высокий, что не отвечает реальной ситуации. В этом случае система все равно перейдет в состояние Неисправность.