Введение в Конечные автоматы
Общая информация
Конечные автоматы Engee — это библиотека, которая предоставляет графический язык, включающий диаграммы перехода состояний и потоковые диаграммы.
Конечный автомат (КА) — это представление управляемой событиями системы, которая переходит из одного режима работы в другой, когда условие, определяющее изменение, истинно.
Конечные автоматы Engee позволяют строить модели двух типов:
Для более полного понимания статьи рекомендуется изучить основные компоненты среды моделирования: |
Логика работы конечного автомата
-
В модели конечного автомата в любой момент времени может быть активно только одно состояние.
-
Состояние активируется, если условие для перехода в него выполнено.
-
КА завершает все операции, определенные в текущем состоянии, перед тем, как перейти в следующее.
Пример реализации конечного автомата в Engee (подробный разбор см. здесь):
Начало работы с блоком Chart
Вызов Chart. Описание принципов работы с блоком
Для начала работы с блоком Chart поставьте его на рабочее пространство Engee и зайдите в него двойным кликом мыши.
Внутри Chart библиотека блоков меняет вид:
-
Состояние (state) — это одно из состояний КА. В состоянии задаются действия, описывающие поведение системы в этом состоянии в виде программного кода на Julia, потоковой диаграммы или вложенного КА.
-
Узел (connective junction) — это точки соединения переходов в системе. Узел является точкой принятия решения на пути перехода.
Если переход из узла зациклен и условия для него всегда выполняются, то должен быть безусловный выход из этого цикла, чтобы избежать ошибки решателя. Например, так делать нельзя (бесконечный цикл):
-
Переход по умолчанию (default transition) — это переход, который выполняется до активации какого-либо состояния.
-
Переход (transition) — это линия со стрелкой, описывающая переход от одного состояния КА, в котором переход начинается, к другому. Для перехода можно определить условия и действия. Условия перехода определяют, когда произойдет смена состояния, а действия – что должно произойти в момент смены (подробнее см. в статье).
Потоковые диаграммы
Потоковая диаграмма (flow chart) — это графическая конструкция, представляющая собой поток выполнения операций или логики в системе. Диаграмма строится из комбинаций соединительных узлов и переходов. Такие диаграммы применяются в моделировании деревьев решений, итерационных циклов и т.д.
Логика работы потоковой диаграммы:
-
Потоковая диаграмма выполняется на каждом шаге работы блока Chart.
-
Результат каждого выполнения потоковой диаграммы не зависит от предыдущего.
-
Выполнение потоковой диаграммы начинается с перехода по умолчанию и заканчивается на выходном узле, который не имеет исходящих переходов.
-
На переходах задаются действия и условия, определяющие поведение модели (подробнее в статье).
Переходы в потоковой диаграмме происходят в соответствии с приоритетом переходов. Приоритет перехода определяет порядок, в котором они оцениваются и выполняются, если условия нескольких переходов одновременно истинны. Если из узла возможно несколько переходов, то их приоритеты будут назначены автоматически. В дальнейшем их можно поменять вручную (см. статью).
Примеры реализации конструкций if-else и while с помощью потоковых диаграмм:
If-Else | While |
---|---|
|
|
|
|
Диаграммы состояний
Диаграмма состояний — это графическое представление конечного автомата, включающее набор состояний и правила переходов между ними.
Рассмотрите работу с КА на примере модели системы автоматического пожаротушения. Она может находиться в следующих состояниях:
-
Rest (покой) — предельная концентрация дыма не превышена.
-
Alarm (тревога) — система включает ороситель.
-
Fault (неисправность) — самодиагностика показала неисправность системы, дальнейшая работа невозможна.
Данный пример демонстрирует логику КА и не является исчерпывающим. Для корректной настройки и сборки полноценной модели КА рекомендуем ознакомиться со статьей. |
У системы есть один вход — концентрация дыма в воздухе и два выхода — «оросители» и «лампа неисправности». В зависимости от значения входного сигнала система переходит в одно из возможных состояний, и соответственно устанавливаются значения сигналов на выходе:
-
Rest (покой) — оросители выключены, лампа неисправности выключена.
-
Alarm (тревога) — оросители включены, лампа неисправности включена.
-
Fault (неисправность) — оросители выключены, лампа неисправности включена.
Система переходит из одного состояния в другое посредством переходов (transition):
Переходы между состояниями происходят при выполнении определенных условий (condition), заданных в модели. Условием перехода может быть событие, логическое условие и время. В нашем примере условием перехода от состояния Покой к состоянию Тревога будет «превышение предельно допустимой концентрации дыма», а Неисправность возникает, если датчик показывает отрицательное значение концентрации.
Чтобы добавить в модель более сложные условия, можно использовать соединительные узлы (connective junction).
Верхний соединительный узел на рисунке позволяет переключиться в состояние Неисправность из состояния Покой не только в случае отрицательного значения концентрации, но и не позволяет системе перейти из состояния Покой в состояние Тревога, когда показатель концентрации слишком высокий, что не отвечает реальной ситуации. В этом случае система все равно перейдет в состояние Неисправность.
Визуализация результатов
Процесс визуализации КА не имеет отличий от визуализации моделей:
-
В окне графиков , при включенном логировании сигнальных линий выберите выводимый сигнал (в нашем случае Chart.a — выходную переменную
a
из блока Chart): -
Запустите симуляцию модели . Результат симуляции будет показан на координатной плоскости окна графиков:
Подробнее о визуализации в Engee смотрите здесь.