Задайте переходы между режимами в графике режима
transitions from_mode
-> to_mode
: predicate_condition
end
transitions
начинает блок объявлений переходов в графике режима. transitions
блокируйтесь, отключенный end
ключевое слово, может содержать одно или несколько построений перехода.
Обычно каждое построение перехода имеет следующий синтаксис:
from_mode -> to_mode : predicate_condition
где:
from_mode
режим, активный перед переходом.
to_mode
режим, активный после перехода.
predicate_condition
выражение, которое должно быть верно для перехода, чтобы произойти.
Например, если график режима объявляет два режима, m1
и m2
, следующий синтаксис указывает что системные переходы от режима m1
к режиму m2
когда p1
предикат верен:
transitions m1 -> m2 : p1 end
Чтобы реализовать сброс состояния, графики режима могут содержать instantaneous modes и compound transitions. Составные переходы имеют следующий синтаксис:
from_mode -> instantaneous_mode -> to_mode : predicate_condition
где:
from_mode
режим, активный перед переходом.
instantaneous_mode
режим, активный для одной итерации события во время перехода. Только один мгновенный режим позволен на переход, поэтому, составной переход не может содержать больше чем три режима.
to_mode
режим, активный после перехода. Для составного перехода, to_mode
может совпасть с from_mode
.
predicate_condition
выражение, которое должно быть верно для перехода, чтобы произойти.
Например, в этом составном переходе, когда предикат t
становится верным, системные переходы от режима A
к режиму B
, выполняет одну итерацию события, и затем сразу переходы к режиму C
.
A -> B -> C : t
Если несколько предикатов становятся верными одновременно, приоритет перехода задан порядком, они перечислены. Например, график режима объявляет три режима, m1
, m2
, и m3
, и задает следующие переходы:
transitions m1 -> m2 : p1 m1 -> m3 : p2 end
Если предикаты p1
и p2
станьте верными одновременно, системные переходы от режима m1
к режиму m2
(первый перечисленный переход).
Во время инициализации решатель устанавливает начальный режим сначала, и затем проверяет переходы. Если предикат перехода верен во время инициализации, система может запуститься в различном режиме, чем это, перечислил сначала (или задал initial
создайте). Например, рассмотрите график режима, который объявляет два режима, m1
и m2
, и задает следующий переход:
transitions m1 -> m2 : p1 end
Если предикат p1
верно во время инициализации, система сразу переходы от режима m1
(первый перечисленный режим) к режиму m2
, и симуляция запускается в режиме m2
.
Точно так же, если предикат перехода все еще верен после завершения перехода, система может ввести бесконечный цикл и в конечном счете сгенерировать ошибку. Эта ошибка моделирования более распространена с составными переходами, где после завершения перехода система часто заканчивается в том же режиме, где это прежде вводило переход. Чтобы избежать этой ситуации, попытайтесь смоделировать составные переходы таким способом, которым мгновенный режим делает недействительным предикат. Для получения дополнительной информации смотрите Пример Сброса состояния.
initial
| modecharts
| modes