Следующий пример показывает общий формат этикетки для перехода, вводящего состояние.
График выполняет этот переход можно следующим образом:
Когда событие имеет место, проверки S1
состояния на исходящий переход с соответствующим заданным событием.
Если переход с соответствующим событием найден, условие для того перехода ([condition]
) оценено.
Если condition
верен, condition_action
выполняется.
Если существует допустимый переход к целевому состоянию, переход взят.
Из S1
состояния выходят.
transition_action
выполняется, когда переход взят.
S2
состояния вводится.
Следующий пример показывает поведение простого перехода, фокусирующегося на последствиях того, активны ли состояния или неактивны.
Первоначально, график спит. On
состояния и Off
состояния являются состояниями OR. On
состояния активен. Событие E_one
имеет место и пробуждает график, который обрабатывает событие от корня вниз через иерархию:
Корневые проверки графика, чтобы видеть, существует ли допустимый переход в результате E_one
. Обнаруживается допустимый переход от On
состояния, чтобы утвердить Off
.
Выходные действия On
состояния (exitOn()
) выполняются и завершаются.
On
состояния отмечен неактивный.
Событие E_one
широковещательно передается как действие перехода.
Это второе событие E_one
обрабатывается, но потому что никакое состояние не активно, это не имеет никакого эффекта. Если бы вторая широковещательная передача E_one
привела к допустимому переходу, это вытеснило бы обработку первой широковещательной передачи E_one
. Смотрите Рано Возвращают Логику для Широковещательных сообщений События.
Off
состояния отмечен активный.
Действия записи Off
состояния (entOff()
) выполняются и завершаются.
График возвращается ко сну.
Эта последовательность завершает выполнение графика Stateflow®, сопоставленного с событием E_one
, когда On
состояния первоначально активен.
Используя тот же пример, что происходит, когда следующее событие, E_one
, имеет место, в то время как Off
состояния активен?
Первоначально, график спит. Off
состояния активен. Событие E_one
имеет место и пробуждает график, который обрабатывает событие от корня вниз через иерархию:
Корневые проверки графика, чтобы видеть, существует ли допустимый переход в результате E_one
.
Обнаруживается допустимый переход от Off
состояния, чтобы утвердить On
.
Выходные действия Off
состояния (exitOff()
) выполняются и завершаются.
Off
состояния отмечен неактивный.
On
состояния отмечен активный.
Действия записи On
состояния (entOn()
) выполняются и завершаются.
График возвращается ко сну.
Эта последовательность завершает выполнение диаграммы Stateflow, сопоставленной со вторым событием E_one
, когда Off
состояния первоначально активен.
Используя тот же пример, что происходит, когда третье событие, E_two
, имеет место?
Заметьте, что событие E_two
не используется явным образом в этом примере. Однако его вхождение (или вхождение любого события) действительно приводят к поведению. Первоначально, график спит, и On
состояния активен.
Событие E_two
имеет место и пробуждает график.
Событие E_two
обрабатывается от корня графика вниз через иерархию графика.
Корневые проверки графика, чтобы видеть, существует ли допустимый переход в результате E_two
. Нет ни одного.
On
состояния во время действий (durOn()
) выполняется и завершается.
График возвращается ко сну.
Эта последовательность завершает выполнение диаграммы Stateflow, сопоставленной с событием E_two
, когда On
состояния первоначально активен.
Избегайте использования неориентированных локальных широковещательных сообщений события, которые могут вызвать нежелательное рекурсивное поведение в вашем графике. Используйте оператор send
для направленных локальных широковещательных сообщений события. Для получения дополнительной информации смотрите Широковещательную передачу Локальные События, чтобы Синхронизировать Параллельные состояния.
Можно установить диагностический уровень для обнаружения неориентированных локальных широковещательных сообщений события. В диалоговом окне Model Configuration Parameters перейдите к Diagnostics> панель Stateflow и установите диагностику Undirected event broadcasts на none
, warning
или error
. Настройкой по умолчанию является warning
.
Этот пример показывает поведение перехода от подсостояния OR до подсостояния OR.
Первоначально, график спит. A.A1
состояния активен. Условие C_one
верно. Событие E_one
имеет место и пробуждает график, который обрабатывает событие от корня вниз через иерархию:
Корневые проверки графика, чтобы видеть, существует ли допустимый переход в результате E_one
. Существует допустимый переход от A
состояния.A1
, чтобы утвердить B
.B1
. (Условие C_one
верно.)
A
состояния во время действий (durA()
) выполняется и завершается.
A
состояния.A1
выходные действия (exitA1()
) выполняется и завершается.
A
состояния.A1
отмечен неактивный.
Выходные действия A
состояния (exitA()
) выполняются и завершаются.
A
состояния отмечен неактивный.
Действие перехода, A
, выполняется и завершается.
B
состояния отмечен активный.
Действия записи B
состояния (entB()
) выполняются и завершаются.
B
состояния.B1
отмечен активный.
B
состояния.B1
действия записи (entB1()
) выполняется и завершается.
График возвращается ко сну.
Эта последовательность завершает выполнение этой диаграммы Stateflow, сопоставленной с событием E_one
.