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

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

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

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

  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 состояния первоначально активен.

Совет

Избегайте использования неориентированных локальных широковещательных сообщений события, которые могут вызвать нежелательное рекурсивное поведение в вашем графике. Используйте оператор send для направленных локальных широковещательных сообщений события. Для получения дополнительной информации смотрите Широковещательную передачу Локальные События, чтобы Синхронизировать Параллельные состояния.

Можно установить диагностический уровень для обнаружения неориентированных локальных широковещательных сообщений события. В диалоговом окне Model Configuration Parameters перейдите к Diagnostics> панель Stateflow и установите диагностику Undirected event broadcasts на none, warning или 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.