Хотя несколько параллельных состояний (AND) на одном графике выполняются одновременно, Stateflow® график должен определить, когда активировать каждый из них во время симуляции. Это упорядоченное расположение определяет, когда каждое параллельное состояние выполняет действия, которые берут его на все этапы выполнения.
В отличие от исключительных (OR) состояний, параллельные состояния обычно не используют переходы. Вместо этого порядок выполнения зависит от:
Явное упорядоченное расположение
Явно задайте порядок выполнения параллельных состояний на основе состояния за состоянием (см. «Явное упорядоченное расположение параллельных состояний»).
Неявное упорядоченное расположение
Переопределите явное упорядоченное расположение путем разрешения диаграмме Stateflow использовать внутренние правила для упорядочивания параллельных состояний (см. «Неявное упорядоченное расположение параллельных состояний»).
Параллельным состояниям присваивают номера приоритета на основе порядка выполнения. Чем меньше число, тем выше приоритет. Номер приоритета каждого состояния появляется в правом верхнем углу.
Поскольку порядок выполнения является свойством диаграммы, все параллельные состояния на графике наследуют настройку свойства. Вы не можете смешивать явное и неявное упорядоченное расположение в той же диаграмме Stateflow. Однако можно смешать графики с различными режимами упорядоченного расположения в том же Simulink® модель.
В коде, который генерируется из диаграмм Stateflow, которые содержат параллельные состояния, каждое состояние выполняется на основе его порядка.
По умолчанию диаграмма Stateflow упорядочивает параллельные состояния явно на основе заданных вами приоритетов выполнения.
Когда вы открываете новую диаграмму Stateflow - или ту, которая еще не содержит никаких параллельных состояний - график автоматически присваивает номера приоритетов параллельным состояниям в том порядке, в котором они создаются. Нумерация начинается со следующего доступного номера в родительском контейнере.
Когда вы разрешаете явное упорядоченное расположение в графике, которая содержит неявно упорядоченные параллельные состояния, неявные приоритеты сохраняются для существующих параллельных состояний. Когда вы добавляете новые параллельные состояния, порядок выполнения назначается так же, как и для новых диаграмм Stateflow - в порядке создания.
Вы можете сбросить назначения порядков выполнения в любое время на основе состояния по состоянию, как описано в Set Порядок Выполнения for Parallel States индивидуально. Когда вы изменяете порядок выполнения для параллельного состояния, диаграмма Stateflow автоматически перенумерует другие параллельные состояния, чтобы сохранить их относительный порядок выполнения. Для получения дополнительной информации смотрите Обслуживание порядка для параллельных состояний.
Чтобы использовать явное упорядоченное расположение для параллельных состояний, выполните следующие задачи:
Включите явное упорядоченное расположение на уровне графика. Чтобы включить явное упорядоченное расположение для параллельных состояний, выполните следующие шаги:
Щелкните правой кнопкой мыши в верхний уровень диаграммы и выберите Properties из контекстного меню.
Откроется диалоговое окно Свойства графика.
Установите флажок User-specified state/transition execution order.
Нажмите OK.
Если ваш график уже содержит параллельные состояния, которые были упорядочены неявно, существующие приоритеты сохраняются до тех пор, пока вы их явно не измените. При добавлении новых параллельных состояний в явном режиме график автоматически присваивает приоритеты на основе порядка создания (см. «Как работает явное упорядоченное расположение»). Однако теперь можно явным образом изменить порядок выполнения по базису состояния, как описано в Set Execution Order для параллельных состояний индивидуально.
Установите порядок выполнения для параллельных состояний индивидуально. В явном режиме упорядоченного расположения можно изменить порядок выполнения отдельных параллельных состояний. Щелкните правой кнопкой мыши по интересующему параллельному состоянию и выберите новый приоритет из меню Execution Order.
В неявном упорядоченном расположении режиме диаграмма Stateflow упорядочивает параллельные состояния неявно на основе местоположения. Приоритет идет сверху вниз, а затем слева направо, основываясь на этих правилах:
Чем выше вертикальное положение параллельного состояния на графике, тем выше приоритет выполнения для этого состояния.
Среди параллельных состояний с таким же вертикальным положением самое левое состояние получает наивысший приоритет.
В следующем примере показано, как эти правила применяются к параллельным состояниям верхнего уровня и параллельным подсостояниям.
Примечание
Неявное упорядоченное расположение создает зависимость между размещением проекта и приоритетом выполнения. Когда вы переставляете параллельные состояния на графике, можно случайно изменить порядок выполнения и повлиять на результаты симуляции. Для дополнительного контроля над вашими проектами используйте режим явного упорядоченного расположения по умолчанию, чтобы задать приоритеты выполнения.
Чтобы использовать неявное упорядоченное расположение для параллельных состояний, выполните следующие шаги:
Щелкните правой кнопкой мыши в верхний уровень диаграммы и выберите Properties из контекстного меню.
В диалоговом окне Свойства графика снимите флажок User-specified state/transition execution order.
Нажмите OK.
Независимо от того, используете ли вы явное или неявное упорядоченное расположение, график пытается согласовать приоритеты выполнения, когда вы удаляете, перенумеруете или добавляете параллельные состояния. В этих случаях график изменяет приоритеты параллельных состояний на:
Заполните погрешности в последовательности, чтобы упорядоченное расположение было непрерывным
Убедитесь, что ни одно из двух состояний не имеет одинакового приоритета
Сохраните предполагаемый относительный приоритет выполнения
Для явного упорядоченного расположения график сохраняет заданные пользователем приоритеты. Рассмотрим этот пример явного упорядоченного расположения:
Из-за явного упорядоченного расположения приоритет каждого состояния и подсостояния совпадает с порядком создания на графике. График изменяет приоритеты параллельных состояний и подсостояний при выполнении следующих действий:
Измените приоритет состояния верхнего уровня b
к 3.
Добавьте состояние верхнего уровня g
.
Удалите подсостояние e
.
График явно сохраняет набор приоритетов для состояния верхнего уровня b
, но перенумерует все другие параллельные состояния, чтобы сохранить их предшествующий относительный порядок.
Для неявного упорядоченного расположения график сохраняет предполагаемый относительный приоритет на основе геометрии. Рассмотрим этот пример неявного упорядоченного расположения:
Если вы удаляете состояние верхнего уровня b
и подсостояние e
график автоматически изменяет приоритеты остальных параллельных состояний и подсоединяет для сохранения неявного геометрического порядка:
Существуют ситуации, в которых вам нужно восстановить параллельное состояние после удаления его из диаграммы Stateflow. В неявном упорядоченном расположении режиме график переопределяет приоритет выполнения в зависимости от того, где вы восстанавливаете состояние. Если вы возвращаете состояние в его исходное положение на графике, вы восстанавливаете его первоначальный приоритет.
Однако в явном режиме упорядоченного расположения график не всегда может восстановить первоначальный приоритет выполнения в восстановленном состоянии. Это зависит от того, как вы восстановите состояние.
Если вы удалите состояние... | И восстановить состояние... | Каков приоритет? |
---|---|---|
Удаление, вырезание, перетаскивание за контуры родительского состояния или перетаскивание так, чтобы его контуры перекрывали родительское состояние | Использование команды undo | Первоначальный приоритет восстанавливается. |
Перетаскивание за контуры родительского состояния или так его контуров перекрывают родительское состояние и отпускает кнопку мыши | Перетаскивание его назад в родительское состояние | Первоначальный приоритет потерян. Диаграмма Stateflow рассматривает восстановленное состояние как последнее созданное и присваивает ему самый низкий приоритет выполнения. |
Перетаскивание за контуры родительского состояния или так его контуров перекрывают родительское состояние, не отпуская кнопку мыши | Перетаскивание его назад в родительское состояние | Первоначальный приоритет восстанавливается. |
Перетаскивание так, чтобы его контуры перекрывали одно или несколько состояний одноуровневого типа | Перетаскивание его в место без перекрываемых контуров внутри того же родительского состояния | Первоначальный приоритет восстанавливается. |
Сокращение | Приклеивание | Первоначальный приоритет потерян. Диаграмма Stateflow рассматривает восстановленное состояние как последнее созданное и присваивает ему самый низкий приоритет выполнения. |
Если вы переходите в неявный режим после явного упорядоченного расположения параллельных состояний, диаграмма Stateflow сбрасывает порядок выполнения, чтобы следовать неявным правилам геометрии. Однако, если вы переходите от неявного к явному режиму, график не восстанавливает исходный явный порядок выполнения.
Когда вы группируете параллельные состояния внутри коробки, состояния сохраняют свой относительный порядок выполнения. В сложение диаграмма Stateflow присваивает рамке свой собственный приоритет на основе применяемых явных или неявных правил упорядоченного расположения. Этот приоритет определяет, когда график активирует параллельные состояния внутри коробки.
Когда вы преобразовываете состояние с параллельным разложением в субдиаграмму, его подсостояния сохраняют свой относительный порядок выполнения на основе преобладающих явных или неявных правил.