Группы операторов машины состояний
Группы операторов — это условия, которые инициируют действия модели внутри состояний.
Группы операторов используются, когда необходимо настроить более сложное поведение модели. Подробнее о логике работы групп операторов см. здесь.
Группы операторов поддерживают только операции на языке Julia и могут содержать несколько частей, которые чередуются в произвольном порядке. Например:
during: du1
entry: en1
during: du2
В этом случае при активации состояния будет выполнен код entry: en1
. После этого, на каждом последующем шаге, пока состояние остается активным, будет выполняться объединенный код группы операторов during
, представленный как "du1; du2"
. Это означает, что du1
и du2
объединяются и выполняются последовательно, будто они соединены вместе в рамках одного during
.
Можно использовать короткие названия для групп операторов —
При перечислении важно, чтобы одно и то же слово не повторялось. Пример некорректного перечисления:
|
Код Julia в блоках состояния может быть многострочным и продолжаться до тех пор, пока в начале строки не встретится ключевое слово entry
, during
, exit
или on
. Например:
during:
if x > 10
y = 1
else
y = 2
end
exit: y = 3
Код в состоянии без групп операторов выполняется как при активации состояния, так и на каждом шаге, пока состояние остается активным. Таким образом, он совмещает действия, характерные для секций entry и during , но не включает логику, связанную с деактивацией состояния (как это делает секция exit ).
|
Группа entry
entry
(вход) — используется для определения действий, которые выполняются при входе в состояние. Действия, указанные в entry
, выполняются каждый раз, когда состояние становится активным.
Группа during
during
(во время) — используется для определения действий, которые выполняются на каждом этапе шага расчета модели (кроме первого), если состояние активно. Действия, указанные в during
, выполняются, пока состояние активно.
Группа exit
exit
(выход) — используется для определения действий, которые выполняются при выходе из состояния. Эти действия выполняются один раз, когда состояние становится неактивным, и происходят после того, как завершатся все действия переходов, инициировавших выход из этого состояния. После выхода из состояния операторы during
больше не выполняются, так как состояние больше не активно. Например, есть следующий конечный автомат:
Здесь конечный автомат на первом шаге активирует состояние "А", а на втором выполнит действия в следующем порядке:
y2 = 2
y1 = 1
y3 = 3
Группа on
on
— выполняется при возникновении указанного действия в активном состоянии. Группа операторов on
позволяет использовать темпоральную логику внутри состояний. Например:
Здесь:
-
on after(5, sec)
определяет, что выполнение начнется с пятой секунды (выполнится и через 6, 7 и т.д. секунд). -
y = 0
определяет, что нужно присвоить переменнойy
значение0
.
Логика работы групп операторов
В машине состояний порядок работы с переходами и группами операторов entry
, during
, exit
, и on
происходит следующим образом:
Типы логики выполнения групп операторов |
entry |
during |
exit |
on |
Порядок выполнения |
|
|
|
|
Особенности активации |
|
|
|
|
Взаимодействие с переходами |
|
До выполнения секции |
|
|