Документация Engee

Состояния Конечных автоматов

Состояние (state) — это одно из состояний КА. В состоянии задаются действия, описывающие поведение системы в этом состоянии в виде программного кода на Julia, потоковой диаграммы или вложенного КА и могут быть настроены с помощью группы операторов.

stateflow actions

Состояния подчиняются логике работы КА:

  1. В модели конечного автомата в любой момент времени может быть активно только одно состояние.

  2. Состояние активируется, если условие для перехода в него выполнено.

  3. КА завершает все операции, определенные в текущем состоянии, перед тем, как перейти в следующее.

Состояния поддерживают иерархию КА, подробнее здесь.

Синтаксис состояний

Правило Ошибка при нарушении условия

У каждого состояния должно быть название.

Ошибка цикла обработки результатов в router: ErrorException('имя_модели/Chart': state name ' ' is incorrect.)

  • Имя состояния может состоять из:

    • Букв латинского алфавита в любом регистре.

    • Цифр.

    • Символа подчеркивания.

  • Имя должно начинаться с буквы латинского алфавита.

  • Имя не должно повторяться на одном уровне вложенности.

Ошибка цикла обработки результатов в router: ErrorException('имя_модели/Chart': state name 'пример некорректного имени' is incorrect.)

Группы операторов поддерживают только операции на языке Julia.

Ошибка инициализации модели: [EXEC] Ошибка инициализации модели id_модели id_симуляции: UndefVarError(:некорректный синтаксис)

Код, написанный в состоянии, будет выполняться на каждом шаге модели конечного автомата. Например, состояние с циклом for выглядит так:

stateflow cycles variables

В состояниях можно оставлять комментарии как и в любом коде на языке Julia:

stateflow commentary 2

Диаграммы состояний

Диаграмма состояний — это графическое представление конечного автомата, включающее набор состояний и правила переходов между ними.

Рассмотрите работу с КА на примере модели системы автоматического пожаротушения. Она может находиться в следующих состояниях:

  • Rest (покой) — предельная концентрация дыма не превышена.

  • Alarm (тревога) — система включает ороситель.

  • Fault (неисправность) — самодиагностика показала неисправность системы, дальнейшая работа невозможна.

im1

Данный пример демонстрирует логику КА и не является исчерпывающим.

У системы есть один вход — концентрация дыма в воздухе и два выхода — «оросители» и «лампа неисправности». В зависимости от значения входного сигнала система переходит в одно из возможных состояний, и соответственно устанавливаются значения сигналов на выходе:

  • Rest (покой) — оросители выключены, лампа неисправности выключена.

  • Alarm (тревога) — оросители включены, лампа неисправности включена.

  • Fault (неисправность) — оросители выключены, лампа неисправности включена.

Система переходит из одного состояния в другое посредством переходов (transition):

im2

Переходы между состояниями происходят при выполнении определенных условий (condition), заданных в модели. Условием перехода может быть событие, логическое условие и время. В нашем примере условием перехода от состояния Покой к состоянию Тревога будет «превышение предельно допустимой концентрации дыма», а Неисправность возникает, если датчик показывает отрицательное значение концентрации.

im3

Чтобы добавить в модель более сложные условия, можно использовать соединительные узлы (connective junction).

im4

Верхний соединительный узел на рисунке позволяет переключиться в состояние Неисправность из состояния Покой не только в случае отрицательного значения концентрации, но и не позволяет системе перейти из состояния Покой в состояние Тревога, когда показатель концентрации слишком высокий, что не отвечает реальной ситуации. В этом случае система все равно перейдет в состояние Неисправность.