Следующий пример показывает общий формат этикетки для перехода, вводящего состояние.
График выполняет этот переход можно следующим образом:
Когда событие имеет место, 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
состояния первоначально активно.
Совет
Избегайте использования неориентированных локальных широковещательных сообщений события. Неориентированные локальные широковещательные сообщения события могут вызвать нежелательное рекурсивное поведение в вашем графике. Вместо этого отправьте локальные события при помощи направленных широковещательных сообщений. Для получения дополнительной информации смотрите Широковещательную передачу Локальные События, чтобы Синхронизировать Параллельные состояния.
Можно установить диагностический уровень для обнаружения неориентированных локальных широковещательных сообщений события. В диалоговом окне Configuration Parameters откройте Diagnostics> панель Stateflow и установите параметр Undirected event broadcasts на none
Предупреждение
, или 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
.