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

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

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

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

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

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

  3. Если condition_1 вычисляет значение true, действие условия condition_action (в скобках) выполняется.

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

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

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

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

  8. Завершенный переход от состояния к состоянию к S1 на S2 происходит.

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

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

Решение if-Then-Else Конструкции

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

Изначально график спит. Конечные A активно. Условие [C_two] является true. Событийные 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-Loop

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

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

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

  2. Условие [i < 10] определяет как true. Действия условия 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()] true, используется переход с самоциклом. Поскольку конечный пункт назначения перехода не был достигнут, этот самоцикл продолжается до [C_one()] является ложным.

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

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

  6. Оценивается следующий возможный сегмент перехода. Существует три исходящих сегмента перехода: два условных и один безусловный. Поскольку применяется неявное упорядоченное расположение, сегмент, помеченный условием [d < 100] вычисляет сначала на основе геометрии двух исходящих условных сегментов перехода. Потому что возвращенное значение d - 84, условие [d < 100] является true, и этот переход в состояние назначения 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. The during действие состояния A шаги a и сокращения b в течение каждого временного шага. Переход от состояния A в состояние B Действительно, если условие [a > 4] является true. Переход от состояния A в состояние C Действительно, если условие [b < 7] является true. Во время симуляции существует временной шаг, где состояние 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 имеют значение true:

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

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

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

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

  4. Условие c4 не соответствует true и поток управления обратные вызовы в состояние A.

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

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

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

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

  8. Условие c4 не соответствует true и поток управления обратные вызовы в состояние A.

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

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

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