Конечные автоматы

Автор
avatar-alexey_bondarevalexey_bondarev
Notebook

Выполнение диаграмм состояний

Общие сведения

Диаграммы состояний в Engee выполняются много раз во время симуляции модели в соответствии с заданным шагом дискретизации и с выбранным решателем. Диаграмма состояний наследует шаг дискретизации из основной модели Engee. Диаграмма выполняется один раз за каждый временной шаг.

glava_5_shag_diskretizatsii.png

Что же конкретно происходит во время выполнения диаграммы состояний? На каждом временном шаге конечный автомат выполняет одно из двух действий:

  • совершает допустимый переход из текущего (активного) состояния в какое-либо другое,

glava_5_dopustimyi_perekhod_lampochki_2.png

  • или остается в активном состоянии.

glava_5_ka_ostaetsia_v_tom_zhe_sostoianii.png

В каждом из этих случаев конечный автомат также выполняет соответствующие действия:

  • entry – при входе в состояние,
  • exit – при выходе из состояния,
  • during – при нахождении в данном состоянии.

При проверке переходов все переходы, выходящие из активного состояния, проверяются в соответствии с порядком их выполнения. Если диаграмма находит допустимый переход, она не проверяет другие переходы.

Действия entry и exit для состояния выполняются последовательно при входе в состояние и при выходе из него. Действие during выполняется на каждом последующем временном шаге, в течение которого состояние остается активным. Например:

Допустимый переход:

glava_5_dopustimyi_perekhod.png

Недопустимый переход:

glava_5_nedopustimyi_perekhod.png

В первом случае, когда переход допустимый, значение переменной x сначала задается равным 1 при выходе из состояния StateA. Затем значение x задается равным 2 при входе в состояние StateB. Во втором случае значение переменной x увеличивается на 1 на каждом временном шаге, и переход из StateA в StateB является недопустимым.

Пример работы диаграммы состояний

Рассмотрим пример работы диаграммы состояний на каждом временном шаге.

glava_5_primer_ds_1.png

В начальный (нулевой) момент времени активным становится то состояние, в которое ведет переход по умолчанию (состояние StateA).

glava_5_primer_ds_2_2.png

Пусть начальное значение переменной x равно 5. На первом шаге выполняется проверка переходов в соответствии с порядком их выполнения. Т.е. сначала выполняется проверка перехода под номером 1: из состояния StateA в состояние StateB. Условие x>5 не выполняется, поэтому начинает проверяться переход под номером 2: из StateA в StateC. Условие x>0 выполняется, поэтому происходит переход в состояние StateC. При выходе из состояния StateA выполняется действие exit, т.е. переменной y присваивается значение 1. На этом действия на первом шаге заканчиваются.

glava_5_primer_ds_3_2.png

Давайте вернемся назад в начальное состояние StateA. Пусть теперь начальное значение переменной x равно 7.

glava_5_primer_ds_4.png

На этот раз выполняется первое проверяемое условие x>5, поэтому конечный автомат переходит из StateA в StateB без проверки второго условия.

glava_5_primer_ds_5.png

На следующем шаге при входе в состояние StateB выполняется действие entry. Переменная y принимает значение x. т.е. теперь y = 7. Далее проверяется условие перехода из состояния StateB в состояние StateA.

Рассмотрим следующую ситуацию. Пусть состояние StateA снова является активным, но теперь x = 0, а y = 1.

glava_5_primer_ds_6.png

Оба условия перехода из состояния StateA (x>5 и x>0) не выполняются. В этом случае конечный автомат остается в состоянии StateA и выполняется действие during для этого состояния: переменная y принимает значение 2.

glava_5_primer_ds_7.png

На каждом последующем временном шаге конечный автомат по-прежнему остается в состоянии StateA и каждый раз выполняется действие during для этого состояния: переменной y последовательно присваиваются значения 3, 4, 5, 6, 7 и т.д.

Тест для получения сертификата