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

Формат этикетки для межгосударственного перехода

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

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

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

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

  3. Если condition верно, 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Предупреждение, или error. Настройкой по умолчанию является warning.

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

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

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

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

  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.