exponenta event banner

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

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

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

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

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

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

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

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

  5. Государство S1 выполнен выход.

  6. 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 изначально активен.

Совет

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

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

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

В этом примере показано поведение перехода от подсостояния ИЛИ к подсостоянию ИЛИ.

Первоначально чарт спит. Государство A.A1 активен. Состояние C_one является правдой. Событие 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.