Конечные автоматы
Выполнение диаграмм состояний¶
Общие сведения¶
Диаграммы состояний в Engee выполняются много раз во время симуляции модели в соответствии с заданным шагом дискретизации и с выбранным решателем. Диаграмма состояний наследует шаг дискретизации из основной модели Engee. Диаграмма выполняется один раз за каждый временной шаг.
Что же конкретно происходит во время выполнения диаграммы состояний? На каждом временном шаге конечный автомат выполняет одно из двух действий:
- совершает допустимый переход из текущего (активного) состояния в какое-либо другое,
- или остается в активном состоянии.
В каждом из этих случаев конечный автомат также выполняет соответствующие действия:
entry
– при входе в состояние,exit
– при выходе из состояния,during
– при нахождении в данном состоянии.
При проверке переходов все переходы, выходящие из активного состояния, проверяются в соответствии с порядком их выполнения. Если диаграмма находит допустимый переход, она не проверяет другие переходы.
Действия entry
и exit
для состояния выполняются последовательно при входе в состояние и при выходе из него. Действие during
выполняется на каждом последующем временном шаге, в течение которого состояние остается активным. Например:
Допустимый переход:
Недопустимый переход:
В первом случае, когда переход допустимый, значение переменной x
сначала задается равным 1 при выходе из состояния StateA
. Затем значение x
задается равным 2 при входе в состояние StateB
. Во втором случае значение переменной x
увеличивается на 1 на каждом временном шаге, и переход из StateA
в StateB
является недопустимым.
Пример работы диаграммы состояний¶
Рассмотрим пример работы диаграммы состояний на каждом временном шаге.
В начальный (нулевой) момент времени активным становится то состояние, в которое ведет переход по умолчанию (состояние StateA
).
Пусть начальное значение переменной x
равно 5. На первом шаге выполняется проверка переходов в соответствии с порядком их выполнения. Т.е. сначала выполняется проверка перехода под номером 1: из состояния StateA
в состояние StateB
. Условие x>5
не выполняется, поэтому начинает проверяться переход под номером 2: из StateA
в StateC
. Условие x>0
выполняется, поэтому происходит переход в состояние StateC
. При выходе из состояния StateA
выполняется действие exit
, т.е. переменной y
присваивается значение 1. На этом действия на первом шаге заканчиваются.
Давайте вернемся назад в начальное состояние StateA
. Пусть теперь начальное значение переменной x
равно 7.
На этот раз выполняется первое проверяемое условие x>5
, поэтому конечный автомат переходит из StateA
в StateB
без проверки второго условия.
На следующем шаге при входе в состояние StateB
выполняется действие entry
. Переменная y
принимает значение x
. т.е. теперь y = 7. Далее проверяется условие перехода из состояния StateB
в состояние StateA
.
Рассмотрим следующую ситуацию. Пусть состояние StateA
снова является активным, но теперь x = 0, а y = 1.
Оба условия перехода из состояния StateA
(x>5
и x>0
) не выполняются. В этом случае конечный автомат остается в состоянии StateA
и выполняется действие during
для этого состояния: переменная y
принимает значение 2.
На каждом последующем временном шаге конечный автомат по-прежнему остается в состоянии StateA
и каждый раз выполняется действие during
для этого состояния: переменной y
последовательно присваиваются значения 3, 4, 5, 6, 7 и т.д.