Группы операторов машины состояний
Группы операторов — это условия, которые инициируют действия модели внутри состояний.
Группы операторов используются, когда необходимо настроить более сложное поведение модели. Подробнее о логике работы групп операторов см. здесь.
Группы операторов поддерживают только операции на языке 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
(выход) — используется для определения действий, которые выполняются при выходе из состояния. Эти действия выполняются один раз, когда состояние становится неактивным, и происходят после того, как завершатся все действия, связанные с переходом из этого состояния. Во время выполнения exit,
все операции, которые могут быть заданы в группе during
, прекращаются. После выхода из состояния операторы 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 |
Порядок выполнения |
|
|
|
|
Особенности активации |
|
|
|
|
Взаимодействие с переходами |
|
Во время выполнения |
|
|