Переход между исключительными государствами

Формат метки для перехода от состояния к состоянию

В следующем примере показан общий формат метки для перехода в состояние.

График выполняет этот переход следующим образом:

  1. Когда происходит событие, состояние S1 проверяет исходящий переход с заданным соответствующим событием.

  2. Если обнаружен переход с совпадающим событием, условие этого перехода ([condition]) оценивается.

  3. Если на condition верно, condition_action выполняется.

  4. При наличии допустимого перехода в состояние назначения выполняется переход.

  5. Конечные S1 завершен.

  6. The transition_action выполняется при выполнении перехода.

  7. Конечные S2 введен.

Переход от состояния к состоянию с событиями

Следующий пример показывает поведение простого перехода, фокусируясь на последствиях того, являются ли состояния активными или неактивными.

Обработка первого события

Изначально график спит. Конечные On и состояние Off являются состояниями OR. Конечные On активно. Событийные E_one происходит и пробуждает график, который обрабатывает событие из корня вниз через иерархию:

  1. Корень графика проверяет, есть ли допустимый переход в результате E_one. Допустимый переход от On состояния в состояние Off обнаруживается.

  2. Конечные On выход действий (exitOn()) выполнить и завершить.

  3. Конечные On помечен как неактивный.

  4. Событийный E_one транслируется как действие перехода.

    Это второе событие E_one обрабатывается, но, поскольку ни одно из состояний не активно, оно не имеет эффекта. Если вторая трансляция E_one что привело к действительному переходу, это прервет обработку первой трансляции E_one. См. раздел «Логика раннего возврата».

  5. Конечные Off отмечен как активный.

  6. Конечные Off действия входа (entOff()) выполнить и завершить.

  7. График возвращается в сон.

Эта последовательность завершает выполнение Stateflow® график, связанная со E_one событий когда состояние On первоначально активно.

Обработка второго события

На том же примере что происходит, когда следующее событие, E_one, происходит в состоянии Off активно?

Изначально график спит. Конечные Off активно. Событийные E_one происходит и пробуждает график, который обрабатывает событие из корня вниз через иерархию:

  1. Корень графика проверяет, есть ли допустимый переход в результате E_one.

    Допустимый переход от Off состояния в состояние On обнаруживается.

  2. Конечные Off выход действий (exitOff()) выполнить и завершить.

  3. Конечные Off помечен как неактивный.

  4. Конечные On отмечен как активный.

  5. Конечные On действия входа (entOn()) выполнить и завершить.

  6. График возвращается в сон.

Эта последовательность завершает выполнение диаграммы Stateflow, связанной со вторым событием E_one когда состояние Off первоначально активно.

Обработка третьего события

На том же примере что происходит, когда третье событие, E_two, происходит?

Заметьте, что событие E_two не используется явным образом в этом примере. Однако его вхождение (или вхождение любого события) действительно приводит к поведению. Первоначально график спит и находится в состоянии On активно.

  1. Событийные E_two происходит и пробуждает график.

    Событийные E_two обрабатывается из корня графика вниз по иерархии графика.

  2. Корень графика проверяет, есть ли допустимый переход в результате E_two. Их нет.

  3. Конечные On во время действий (durOn()) выполнить и завершить.

  4. График возвращается в сон.

Эта последовательность завершает выполнение диаграммы Stateflow, связанной с событием E_two когда состояние On первоначально активно.

Совет

Избегайте использования неориентированных локальных трансляций событий. Неориентированные локальные трансляции событий могут вызвать нежелательное рекурсивное поведение на графике. Вместо этого отправляйте локальные события с помощью ориентированных трансляций. Для получения дополнительной информации смотрите Широковещание локальных событий для синхронизации параллельных состояний.

Можно задать уровень диагностики для обнаружения неориентированных локальных трансляций событий. В диалоговом окне Параметров конфигурации откройте панель Diagnostics > Stateflow и установите параметр Undirected event broadcasts на none, warning, или error. Настройкой по умолчанию является warning.

Переход от подсостояния к подсостоянию с событиями

Этот пример показывает поведение перехода от substate OR к substate OR.

Изначально график спит. Конечные A.A1 активно. Условие C_one является true. Событийные E_one происходит и пробуждает график, который обрабатывает событие из корня вниз через иерархию:

  1. Корень графика проверяет, есть ли допустимый переход в результате E_one. Существует допустимый переход от состояния A. A1 в состояние B. B1. (Условие C_one имеет значение true.)

  2. Конечные A во время действий (durA()) выполнить и завершить.

  3. Конечные A. A1 выход действий (exitA1()) выполнить и завершить.

  4. Конечные A. A1 помечен как неактивный.

  5. Конечные A выход действий (exitA()) выполнить и завершить.

  6. Конечные A помечен как неактивный.

  7. Переходное действие, A, выполняется и завершено.

  8. Конечные B отмечен как активный.

  9. Конечные B действия входа (entB()) выполнить и завершить.

  10. Конечные B. B1 отмечен как активный.

  11. Конечные B. B1 действия входа (entB1()) выполнить и завершить.

  12. График возвращается в сон.

Эта последовательность завершает выполнение этой диаграммы Stateflow, связанной с событием E_one.