Задайте переходы между режимами на графике режимов
transitions from_mode
-> to_mode
: predicate_condition
end
transitions
начинает блок объявления переходов на графике режима. The transitions
блок, завершенный end
ключевое слово, может содержать одну или несколько конструкций перехода.
Обычно каждая конструкция перехода имеет следующий синтаксис:
from_mode -> to_mode : predicate_condition
где:
from_mode
является активным режимом перед переходом.
to_mode
является активным режимом после перехода.
predicate_condition
- выражение, которое должно быть верным для перехода.
Для примера, если график режима объявляет два режима, m1
и m2
следующий синтаксис указывает, что система переходит из режима m1
в режим m2
когда p1
предикат равен true:
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
становится true, система переходит из режима 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