Хотя несколько параллельных состояний (AND) в одной и той же диаграмме выполняются одновременно, диаграмма Stateflow ® должна определять, когда активировать каждую из них во время моделирования. Этот порядок определяет, когда каждое параллельное состояние выполняет действия, которые проходят через все стадии выполнения.
В отличие от исключительных состояний (OR), параллельные состояния обычно не используют переходы. Вместо этого порядок выполнения зависит от:
Явное упорядочение
Явно укажите порядок выполнения параллельных состояний по каждому состоянию (см. Явное упорядочение параллельных состояний).
Неявное упорядочение
Переопределите явное упорядочение, разрешив диаграмме Stateflow использовать внутренние правила для упорядочивания параллельных состояний (см. Неявное упорядочение параллельных состояний).
Параллельным состояниям присваиваются номера приоритетов на основе порядка выполнения. Чем меньше число, тем выше приоритет. Номер приоритета каждого состояния отображается в правом верхнем углу.
Поскольку порядок выполнения является свойством диаграммы, все параллельные состояния в диаграмме наследуют настройку свойства. Нельзя смешивать явное и неявное упорядочение в одной диаграмме Stateflow. Однако в одной модели Simulink ® можно смешивать диаграммы с различными режимами упорядочения.
В коде, генерируемом из диаграмм Stateflow, содержащих параллельные состояния, каждое состояние выполняется в соответствии с его порядком.
По умолчанию диаграмма Stateflow явно упорядочивает параллельные состояния на основе заданных приоритетов выполнения.
При открытии новой диаграммы Stateflow или диаграммы, которая еще не содержит параллельных состояний, диаграмма автоматически назначает номера приоритетов параллельным состояниям в порядке их создания. Нумерация начинается со следующего доступного номера в родительском контейнере.
При включении явного упорядочения в диаграмме, которая содержит неявно упорядоченные параллельные состояния, неявные приоритеты сохраняются для существующих параллельных состояний. При добавлении новых параллельных состояний порядок выполнения назначается так же, как для новых диаграмм Stateflow - в порядке создания.
Назначения заказов на выполнение можно сбросить в любое время в зависимости от конкретного состояния, как описано в разделе Установка порядка выполнения для параллельных состояний по отдельности. При изменении порядка выполнения для параллельного состояния диаграмма Stateflow автоматически перенумерует другие параллельные состояния, чтобы сохранить их относительный порядок выполнения. Для получения дополнительной информации см. Ведение заказов для параллельных состояний.
Чтобы использовать явное упорядочение для параллельных состояний, выполните следующие задачи:
Включить явное упорядочение на уровне диаграммы. Чтобы включить явное упорядочение для параллельных состояний, выполните следующие действия.
Щелкните правой кнопкой мыши на верхнем уровне диаграммы и выберите в контекстном меню пункт «Свойства».
Откроется диалоговое окно Свойства диаграммы.
Установите флажок Заданное пользователем состояние/порядок выполнения перехода.
Нажмите кнопку ОК.
Если диаграмма уже содержит параллельные состояния, которые были упорядочены неявно, существующие приоритеты сохраняются до тех пор, пока они не будут явно изменены. При добавлении новых параллельных состояний в явном режиме диаграмма автоматически назначает приоритеты в соответствии с порядком создания (см. раздел Как работает явное упорядочение). Однако теперь можно явно изменять порядок выполнения по каждому состоянию, как описано в разделе Задать порядок выполнения для параллельных состояний по отдельности.
Установка порядка выполнения для параллельных состояний по отдельности. В режиме явного упорядочения можно изменить порядок выполнения отдельных параллельных состояний. Щелкните правой кнопкой мыши по интересующему состоянию параллели и выберите новый приоритет в меню Заказ на выполнение.
В неявном режиме упорядочения диаграмма Stateflow неявно упорядочивает параллельные состояния на основе местоположения. Приоритет идет сверху вниз, а затем слева направо, исходя из следующих правил:
Чем выше вертикальное положение параллельного состояния в диаграмме, тем выше приоритет выполнения для этого состояния.
Среди параллельных состояний с одинаковым вертикальным положением наивысший приоритет получает самое левое состояние.
В следующем примере показано, как эти правила применяются к параллельным состояниям верхнего уровня и параллельным подсостояниям.

Примечание
Неявное упорядочение создает зависимость между макетом конструкции и приоритетом выполнения. При переупорядочивании параллельных состояний в диаграмме можно случайно изменить порядок выполнения и повлиять на результаты моделирования. Для улучшения контроля над конструкциями используйте режим явного упорядочения по умолчанию для задания приоритетов выполнения.
Чтобы использовать неявное упорядочение для параллельных состояний, выполните следующие действия.
Щелкните правой кнопкой мыши на верхнем уровне диаграммы и выберите в контекстном меню пункт «Свойства».
В диалоговом окне Свойства диаграммы снимите флажок Заданное пользователем состояние/порядок выполнения перехода.
Нажмите кнопку ОК.
Независимо от того, используется ли явное или неявное упорядочение, диаграмма пытается согласовать приоритеты выполнения при удалении, перенумеровании или добавлении параллельных состояний. В этих случаях диаграмма переупорядочивает параллельные состояния следующим образом:
Заполните пробелы в последовательности так, чтобы упорядочение было непрерывным
Убедитесь, что ни одно из двух состояний не имеет одинакового приоритета
Сохранение предполагаемого относительного приоритета выполнения
Для явного упорядочения диаграмма сохраняет заданные пользователем приоритеты. Рассмотрим следующий пример явного упорядочения:

Из-за явного упорядочения приоритет каждого состояния и подсостояния соответствует порядку создания в диаграмме. При выполнении следующих действий диаграмма переопределяет приоритеты параллельных состояний и подсостояний.
Изменение приоритета состояния верхнего уровня b до 3.
Добавление состояния верхнего уровня g.
Удалить подсостояние e.

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

При удалении состояния верхнего уровня b и подсостояние e, диаграмма автоматически переупорядочивает оставшиеся параллельные состояния и подсостояния для сохранения неявного геометрического порядка:

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