Представляйте разнообразные пути при помощи соединительных соединений

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

Формат этикетки для сегмента перехода, вводящего соединение, эквивалентен для переходов, вводящих состояния, как показано в следующем примере. График использует неявное упорядоченное расположение исходящих переходов (см. Неявное Упорядоченное расположение).

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

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

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

  3. Если condition_1 оценивает к истине, действие условия, condition_action (в фигурных скобках) выполняется.

  4. Исходящие переходы от соединения проверяются на допустимый переход. Поскольку condition_2 верен, допустимый межгосударственный переход от S1 до S2 существует.

  5. Выходные действия S1 состояния выполняются и завершаются.

  6. S1 состояния отмечен неактивный.

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

  8. Завершенный межгосударственный переход от S1 до S2 происходит.

  9. S2 состояния отмечен активный.

  10. Действия записи S2 состояния выполняются и завершаются.

Построение решения, "если затем еще"

Этот пример показывает поведение построения решения if-then-else. График использует неявное упорядоченное расположение исходящих переходов (см. Неявное Упорядоченное расположение).

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

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

    Существует допустимый сегмент перехода от A состояния до соединительного соединения. Поскольку неявное упорядоченное расположение применяется, сегменты перехода, начинающиеся с 12-часовой позиции по соединительному соединению, оценены для валидности. Первый сегмент перехода, маркированный условием [C_one], не допустим. Следующий сегмент перехода, маркированный условием [C_two], допустим. Полный переход от A состояния, чтобы утвердить C допустим.

  2. Выходные действия A состояния (exitA()) выполняются и завершаются.

  3. A состояния отмечен неактивный.

  4. C состояния отмечен активный.

  5. Действия записи C состояния (entC()) выполняются и завершаются.

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

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

Переход самоцикла

Этот пример показывает поведение перехода самоцикла с помощью соединительного соединения. График использует неявное упорядоченное расположение исходящих переходов (см. Неявное Упорядоченное расположение).

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

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

  2. Выходные действия A состояния (exitA()) выполняются и завершаются.

  3. A состояния отмечен неактивный.

  4. Действие перехода A_two выполняется и завершается.

  5. A состояния отмечен активный.

  6. Действия записи A состояния (entA()) выполняются и завершаются.

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

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

Построение цикла for

Этот пример показывает поведение цикла for с помощью соединительного соединения. График использует неявное упорядоченное расположение исходящих переходов (см. Неявное Упорядоченное расположение).

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

  1. Корневые проверки графика, чтобы видеть, существует ли допустимый переход в результате E_one. Существует допустимый сегмент перехода от A состояния до соединительного соединения. Действие условия сегмента перехода, i = 0, выполняется и завершается. Из двух сегментов перехода, оставляя соединительное соединение, сегмент перехода, который является самоциклом назад к соединительному соединению, оценивает затем для валидности. Тот сегмент берет приоритет в оценке, потому что это имеет условие, тогда как другой сегмент не маркирован. Это поведение оценки отражает неявное упорядоченное расположение исходящих переходов в графике.

  2. Условие [i < 10] оценивает как верное. Действия условия i++ и вызов func1 выполняются и завершаются, пока условие не становится ложным. Поскольку соединительное соединение не является конечным пунктом назначения, место назначения перехода все еще неизвестно.

  3. Безусловный сегмент, чтобы утвердить B теперь допустим. Полный переход от A состояния, чтобы утвердить B допустим.

  4. Выходные действия A состояния (exitA()) выполняются и завершаются.

  5. A состояния отмечен неактивный.

  6. B состояния отмечен активный.

  7. Действия записи B состояния (entB()) выполняются и завершаются.

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

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

Обозначение блок-схемы

Этот пример показывает поведение диаграммы Stateflow что обозначение блок-схемы использования. График использует неявное упорядоченное расположение исходящих переходов (см. Неявное Упорядоченное расположение).

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

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

  2. A состояния проверяется для допустимых переходов и обнаруживает допустимый внутренний переход к соединительному соединению.

  3. Следующие возможные сегменты перехода оценены. Только один исходящий переход существует, и ему задали действие условия. Действие условия выполняется и завершается.

  4. Следующие возможные сегменты оценены. Существуют два исходящих перехода: условный переход самоцикла и безусловный сегмент перехода. Поскольку неявное упорядоченное расположение применяется, условный сегмент перехода более приоритетен. Начиная с условия [C_one()] верен, переход самоцикла взят. Поскольку итоговое место назначения перехода не было достигнуто, этот самоцикл продолжается, пока [C_one()] не является ложным.

    Примите, что после пяти итераций, [C_one()] является ложным.

  5. Следующий возможный сегмент перехода (к следующему соединительному соединению) оценен. Это - безусловный сегмент перехода с действием условия. Сегмент перехода взят и действие условия, {d=my_func()}, выполняется и завершается. Возвращенное значение d равняется 84.

  6. Следующий возможный сегмент перехода оценен. Существуют три исходящих сегмента перехода: два условных выражения и одно безусловное. Поскольку неявное упорядоченное расположение применяется, сегмент, маркированный условием, [d < 100] оценивает сначала на основе геометрии двух исходящих условных сегментов перехода. Поскольку возвращенное значение d равняется 84, условие, [d < 100] верен, и этот переход к целевому A.A1 состояния допустим.

  7. Выходные действия A.A1 состояния (exitA1()) выполняются и завершаются.

  8. A.A1 состояния отмечен неактивный.

  9. A.A1 состояния отмечен активный.

  10. Действия записи A.A1 состояния (entA1()) выполняются и завершаются.

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

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

Переход от общего источника до Множественных адресов

Этот пример показывает поведение переходов от общего источника до нескольких условных мест назначения, использующих соединительное соединение. График использует неявное упорядоченное расположение исходящих переходов (см. Неявное Упорядоченное расположение).

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

  1. Корневые проверки графика, чтобы видеть, существует ли допустимый переход в результате E_two. Допустимый сегмент перехода существует от A состояния до соединительного соединения. Поскольку неявное упорядоченное расположение применяется, оценка сегментов с эквивалентным приоритетом метки начинается с 12-часовой позиции по соединительному соединению и прогрессу по часовой стрелке. Первый сегмент перехода, маркированный событием E_one, не допустим. Следующий сегмент перехода, маркированный событием E_two, допустим. Полный переход от A состояния, чтобы утвердить C допустим.

  2. Выходные действия A состояния (exitA()) выполняются и завершаются.

  3. A состояния отмечен неактивный.

  4. C состояния отмечен активный.

  5. Действия записи C состояния (entC()) выполняются и завершаются.

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

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

Разрешите одинаково Допустимые пути к переходу

Что конфликтует переходы?

Конфликтные переходы являются двумя одинаково допустимыми путями из того же источника в диаграмме Stateflow во время симуляции. В случае конфликта график оценивает одинаково допустимые переходы на основе упорядоченного расположения режима в графике: явный или неявный.

  • Для явного упорядоченного расположения (режим по умолчанию), оценка конфликтных переходов происходит на основе порядка, который вы задаете для каждого перехода. Для получения дополнительной информации смотрите Явное Упорядоченное расположение.

  • Для неявного упорядоченного расположения в графиках C оценка конфликтных переходов происходит на основе внутренних правил, описанных в Неявном Упорядоченном расположении.

Пример конфликтных переходов

Следующий график имеет два одинаково допустимых пути к переходу:

Разрешение конфликтов для неявного упорядоченного расположения

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

Разрешение конфликтов для явного упорядоченного расположения

Для явного упорядоченного расположения график разрешает конфликт путем оценки исходящих переходов в порядке, который вы задаете явным образом. Например, если вы щелкаете правой кнопкой по переходу от A состояния, чтобы утвердить C и выбрать Execution Order> 1 из контекстного меню, график оценивает тот переход сначала. В этом случае переход от A состояния, чтобы утвердить C происходит.

Как конфликт перехода происходит

Переход по умолчанию, чтобы утвердить A присваивает данные a, равный 1 и данные b, равный 10. Действие during A состояния постепенно увеличивает a и постепенно уменьшает b во время каждого временного шага. Переход от A состояния, чтобы утвердить B допустим, если условие [a > 4] верно. Переход от A состояния, чтобы утвердить C допустим, если условие [b < 7] верно. Во время симуляции существует временной шаг, где A состояния активен, и оба условия верны. Этой проблемой является конфликт перехода.

Переход от многочисленных источников до общего места назначения

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

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

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

  2. Выходные действия A состояния (exitA()) выполняются и завершаются.

  3. A состояния отмечен неактивный.

  4. C состояния отмечен активный.

  5. Действия записи C состояния (entC()) выполняются и завершаются.

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

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

Переход от источника до места назначения на основе общего события

Этот пример показывает поведение переходов от многочисленных источников до одного места назначения на основе того же события с помощью соединительного соединения.

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

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

  2. Выходные действия B состояния (exitB()) выполняются и завершаются.

  3. B состояния отмечен неактивный.

  4. C состояния отмечен активный.

  5. Действия записи C состояния (entC()) выполняются и завершаются.

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

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

Отследите в обратном порядке в блок-схемах

Этот пример показывает поведение переходов с соединениями что поведение отслеживания в обратном порядке силы в блок-схемах. График использует неявное упорядоченное расположение исходящих переходов (см. Неявное Упорядоченное расположение).

Первоначально, A состояния активен и условия c1, c2, и c3 верен:

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

    Существует допустимый сегмент перехода, отмеченный условием c1 от A состояния до соединительного соединения.

  2. Условие c1 верен и действие a1, выполняется.

  3. Условие c3 верен и действие a3, выполняется.

  4. Условие c4 не является отслеживанием в обратном порядке истинного и потока управления, чтобы утвердить A.

  5. Корневые проверки графика, чтобы видеть, существует ли другой допустимый переход от A состояния.

    Существует допустимый сегмент перехода, отмеченный условием c2 от A состояния до соединительного соединения.

  6. Условие c2 верен и действие a2, выполняется.

  7. Условие c3 верен и действие a3, выполняется.

  8. Условие c4 не является отслеживанием в обратном порядке истинного и потока управления, чтобы утвердить A.

  9. График засыпает.

Предыдущий пример показывает неожиданное поведение выполнения обоих действий a1 и a2. Другое неожиданное поведение является выполнением действия a3 дважды. Чтобы разрешить эту проблему, рассмотрите добавляющие безусловные переходы к останавливающимся соединениям.

Останавливающиеся соединения позволяют потоку заканчиваться, если или c3 или c4 не верны. Этот проект листы утверждает активное, не выполняя ненужные действия.