В следующем примере показан общий формат метки для перехода в состояние.
График выполняет этот переход следующим образом:
Когда происходит событие, состояние S1
проверяет исходящий переход с заданным соответствующим событием.
Если обнаружен переход с совпадающим событием, условие этого перехода ([condition]
) оценивается.
Если на condition
верно, condition_action
выполняется.
При наличии допустимого перехода в состояние назначения выполняется переход.
Конечные S1
завершен.
The 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
первоначально активно.
Совет
Избегайте использования неориентированных локальных трансляций событий. Неориентированные локальные трансляции событий могут вызвать нежелательное рекурсивное поведение на графике. Вместо этого отправляйте локальные события с помощью ориентированных трансляций. Для получения дополнительной информации смотрите Широковещание локальных событий для синхронизации параллельных состояний.
Можно задать уровень диагностики для обнаружения неориентированных локальных трансляций событий. В диалоговом окне Параметров конфигурации откройте панель Diagnostics > Stateflow и установите параметр Undirected event broadcasts на none
, warning
, или error
. Настройкой по умолчанию является warning
.
Этот пример показывает поведение перехода от substate OR к substate OR.
Изначально график спит. Конечные A.A1
активно. Условие C_one
является true. Событийные E_one
происходит и пробуждает график, который обрабатывает событие из корня вниз через иерархию:
Корень графика проверяет, есть ли допустимый переход в результате E_one
. Существует допустимый переход от состояния A
. A1
в состояние B
. B1
. (Условие C_one
имеет значение true.)
Конечные A
во время действий (durA()
) выполнить и завершить.
Конечные A
. A1
выход действий (exitA1()
) выполнить и завершить.
Конечные A
. A1
помечен как неактивный.
Конечные A
выход действий (exitA()
) выполнить и завершить.
Конечные A
помечен как неактивный.
Переходное действие, A
, выполняется и завершено.
Конечные B
отмечен как активный.
Конечные B
действия входа (entB()
) выполнить и завершить.
Конечные B
. B1
отмечен как активный.
Конечные B
. B1
действия входа (entB1()
) выполнить и завершить.
График возвращается в сон.
Эта последовательность завершает выполнение этой диаграммы Stateflow, связанной с событием E_one
.