Состояния
Состояние (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 (неисправность) — оросители выключены, лампа неисправности включена.
Система переходит из одного состояния в другое посредством переходов:
Переходы между состояниями происходят при выполнении определенных условий (condition), заданных в модели. Условием перехода может быть событие, логическое условие и время. В нашем примере условием перехода от состояния Покой к состоянию Тревога будет «превышение предельно допустимой концентрации дыма», а Неисправность возникает, если датчик показывает отрицательное значение концентрации.
Чтобы добавить в модель более сложные условия, можно использовать узлы:
Верхний узел на рисунке позволяет переключиться в состояние Неисправность из состояния Покой не только в случае отрицательного значения концентрации, но и не позволяет системе перейти из состояния Покой в состояние Тревога, когда показатель концентрации слишком высокий, что не отвечает реальной ситуации. В этом случае система все равно перейдет в состояние Неисправность.