Определение переходов между режимами в диаграмме режимов
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 предикат имеет значение true:
transitions
m1 -> m2 : p1
end
Для выполнения сброса состояния диаграммы режимов могут содержать мгновенные режимы и составные переходы. Составные переходы имеют следующий синтаксис:
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 (первый переход указан).
Во время инициализации решатель сначала устанавливает начальный режим, а затем проверяет переходы. Если предикат перехода имеет значение true во время инициализации, система может запуститься в режиме, отличном от указанного первым (или указанного initial конструкция). Например, рассмотрим диаграмму режимов, которая объявляет два режима, m1 и m2, и определяет следующий переход:
transitions
m1 -> m2 : p1
end
Если предикат p1 true во время инициализации, система немедленно переходит из режима m1 (первый перечисленный режим) в режим m2, и моделирование запускается в режиме m2.
Аналогично, если предикат перехода остается верным после завершения перехода, система может войти в бесконечный цикл и в конечном итоге сгенерировать ошибку. Эта ошибка моделирования более распространена при сложных переходах, где после завершения перехода система часто оказывается в том же режиме, где она находилась до входа в переход. Чтобы избежать этой ситуации, попробуйте смоделировать составные переходы таким образом, чтобы мгновенный режим аннулировал предикат. Дополнительные сведения см. в разделе Пример сброса состояния.
initial | modecharts | modes