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

Упорядоченное расположение для параллельных состояний

Хотя несколько параллельных состояний (AND) на одном графике выполняются одновременно, Stateflow® график должен определить, когда активировать каждый из них во время симуляции. Это упорядоченное расположение определяет, когда каждое параллельное состояние выполняет действия, которые берут его на все этапы выполнения.

В отличие от исключительных (OR) состояний, параллельные состояния обычно не используют переходы. Вместо этого порядок выполнения зависит от:

Параллельным состояниям присваивают номера приоритета на основе порядка выполнения. Чем меньше число, тем выше приоритет. Номер приоритета каждого состояния появляется в правом верхнем углу.

Поскольку порядок выполнения является свойством диаграммы, все параллельные состояния на графике наследуют настройку свойства. Вы не можете смешивать явное и неявное упорядоченное расположение в той же диаграмме Stateflow. Однако можно смешать графики с различными режимами упорядоченного расположения в том же Simulink® модель.

В коде, который генерируется из диаграмм Stateflow, которые содержат параллельные состояния, каждое состояние выполняется на основе его порядка.

Явное упорядоченное расположение параллельных состояний

По умолчанию диаграмма Stateflow упорядочивает параллельные состояния явно на основе заданных вами приоритетов выполнения.

Как работает явное упорядоченное расположение

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

Когда вы разрешаете явное упорядоченное расположение в графике, которая содержит неявно упорядоченные параллельные состояния, неявные приоритеты сохраняются для существующих параллельных состояний. Когда вы добавляете новые параллельные состояния, порядок выполнения назначается так же, как и для новых диаграмм Stateflow - в порядке создания.

Вы можете сбросить назначения порядков выполнения в любое время на основе состояния по состоянию, как описано в Set Порядок Выполнения for Parallel States индивидуально. Когда вы изменяете порядок выполнения для параллельного состояния, диаграмма Stateflow автоматически перенумерует другие параллельные состояния, чтобы сохранить их относительный порядок выполнения. Для получения дополнительной информации смотрите Обслуживание порядка для параллельных состояний.

Порядок параллельные состояния явным образом

Чтобы использовать явное упорядоченное расположение для параллельных состояний, выполните следующие задачи:

Включите явное упорядоченное расположение на уровне графика.  Чтобы включить явное упорядоченное расположение для параллельных состояний, выполните следующие шаги:

  1. Щелкните правой кнопкой мыши в верхний уровень диаграммы и выберите Properties из контекстного меню.

    Откроется диалоговое окно Свойства графика.

  2. Установите флажок User-specified state/transition execution order.

  3. Нажмите OK.

    Если ваш график уже содержит параллельные состояния, которые были упорядочены неявно, существующие приоритеты сохраняются до тех пор, пока вы их явно не измените. При добавлении новых параллельных состояний в явном режиме график автоматически присваивает приоритеты на основе порядка создания (см. «Как работает явное упорядоченное расположение»). Однако теперь можно явным образом изменить порядок выполнения по базису состояния, как описано в Set Execution Order для параллельных состояний индивидуально.

Установите порядок выполнения для параллельных состояний индивидуально.  В явном режиме упорядоченного расположения можно изменить порядок выполнения отдельных параллельных состояний. Щелкните правой кнопкой мыши по интересующему параллельному состоянию и выберите новый приоритет из меню Execution Order.

Неявное упорядоченное расположение параллельных состояний

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

В неявном упорядоченном расположении режиме диаграмма Stateflow упорядочивает параллельные состояния неявно на основе местоположения. Приоритет идет сверху вниз, а затем слева направо, основываясь на этих правилах:

  • Чем выше вертикальное положение параллельного состояния на графике, тем выше приоритет выполнения для этого состояния.

  • Среди параллельных состояний с таким же вертикальным положением самое левое состояние получает наивысший приоритет.

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

Примечание

Неявное упорядоченное расположение создает зависимость между размещением проекта и приоритетом выполнения. Когда вы переставляете параллельные состояния на графике, можно случайно изменить порядок выполнения и повлиять на результаты симуляции. Для дополнительного контроля над вашими проектами используйте режим явного упорядоченного расположения по умолчанию, чтобы задать приоритеты выполнения.

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

Чтобы использовать неявное упорядоченное расположение для параллельных состояний, выполните следующие шаги:

  1. Щелкните правой кнопкой мыши в верхний уровень диаграммы и выберите Properties из контекстного меню.

  2. В диалоговом окне Свойства графика снимите флажок User-specified state/transition execution order.

  3. Нажмите OK.

Порядок для параллельных состояний

Независимо от того, используете ли вы явное или неявное упорядоченное расположение, график пытается согласовать приоритеты выполнения, когда вы удаляете, перенумеруете или добавляете параллельные состояния. В этих случаях график изменяет приоритеты параллельных состояний на:

  • Заполните погрешности в последовательности, чтобы упорядоченное расположение было непрерывным

  • Убедитесь, что ни одно из двух состояний не имеет одинакового приоритета

  • Сохраните предполагаемый относительный приоритет выполнения

Как график сохраняет относительные приоритеты в явном режиме

Для явного упорядоченного расположения график сохраняет заданные пользователем приоритеты. Рассмотрим этот пример явного упорядоченного расположения:

Из-за явного упорядоченного расположения приоритет каждого состояния и подсостояния совпадает с порядком создания на графике. График изменяет приоритеты параллельных состояний и подсостояний при выполнении следующих действий:

  1. Измените приоритет состояния верхнего уровня b к 3.

  2. Добавьте состояние верхнего уровня g.

  3. Удалите подсостояние e.

График явно сохраняет набор приоритетов для состояния верхнего уровня b, но перенумерует все другие параллельные состояния, чтобы сохранить их предшествующий относительный порядок.

Как график сохраняет относительные приоритеты в неявном режиме

Для неявного упорядоченного расположения график сохраняет предполагаемый относительный приоритет на основе геометрии. Рассмотрим этот пример неявного упорядоченного расположения:

Если вы удаляете состояние верхнего уровня b и подсостояние eграфик автоматически изменяет приоритеты остальных параллельных состояний и подсоединяет для сохранения неявного геометрического порядка:

Приоритеты выполнения в восстановленных состояниях

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

Однако в явном режиме упорядоченного расположения график не всегда может восстановить первоначальный приоритет выполнения в восстановленном состоянии. Это зависит от того, как вы восстановите состояние.

Если вы удалите состояние...И восстановить состояние...Каков приоритет?
Удаление, вырезание, перетаскивание за контуры родительского состояния или перетаскивание так, чтобы его контуры перекрывали родительское состояниеИспользование команды undoПервоначальный приоритет восстанавливается.
Перетаскивание за контуры родительского состояния или так его контуров перекрывают родительское состояние и отпускает кнопку мышиПеретаскивание его назад в родительское состояниеПервоначальный приоритет потерян. Диаграмма Stateflow рассматривает восстановленное состояние как последнее созданное и присваивает ему самый низкий приоритет выполнения.
Перетаскивание за контуры родительского состояния или так его контуров перекрывают родительское состояние, не отпуская кнопку мышиПеретаскивание его назад в родительское состояниеПервоначальный приоритет восстанавливается.
Перетаскивание так, чтобы его контуры перекрывали одно или несколько состояний одноуровневого типаПеретаскивание его в место без перекрываемых контуров внутри того же родительского состоянияПервоначальный приоритет восстанавливается.
СокращениеПриклеиваниеПервоначальный приоритет потерян. Диаграмма Stateflow рассматривает восстановленное состояние как последнее созданное и присваивает ему самый низкий приоритет выполнения.

Переключение между явным и неявным упорядоченным расположением

Если вы переходите в неявный режим после явного упорядоченного расположения параллельных состояний, диаграмма Stateflow сбрасывает порядок выполнения, чтобы следовать неявным правилам геометрии. Однако, если вы переходите от неявного к явному режиму, график не восстанавливает исходный явный порядок выполнения.

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

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

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