Эти инструкции гарантируют соответствующее поведение графика в событийно-управляемых системах:
Когда состояние активно, его родительский элемент должен также быть активным.
Состояние (или график) с исключительным (OR) разложение никогда не должно иметь больше чем одного активного подсостояния.
Если параллельное состояние активно, одноуровневые элементы с более высоким приоритетом должны также быть активными.
Графики Stateflow® работают на одном потоке. Поэтому графики должны прервать текущее действие, чтобы обработать события. Действие на основе широковещательной передачи события от состояния или действия перехода может конфликтовать с текущим действием. Графики разрешают эти конфликты при помощи ранней логики возврата для широковещательных сообщений события можно следующим образом:
Тип действия | Рано возвратите логику |
---|---|
Запись | Если состояние более не активно в конце широковещательной передачи события, график не выполняет остающиеся шаги для ввода состояния. |
Выход | Если состояние более не активно в конце широковещательной передачи события, график не выполняет остающиеся действия |
Во время | Если состояние более не активно в конце широковещательной передачи события, график не выполняет остающиеся шаги для выполнения активного состояния. |
Условие | Если состояние источника внутренней или внешней блок-схемы — или метрополия блок-схемы по умолчанию — более не активно в конце широковещательной передачи события, график не выполняет остающиеся шаги для выполнения блок-схемы. |
Переход | Если родительский элемент пути к переходу не активен — или если тот родительский элемент имеет активное подсостояние — график не выполняет остающиеся действия перехода и утверждает действия |
В этом примере примите, что A
состояния первоначально активен. Событие E
имеет место, вызывая следующее поведение:
Корневые проверки графика, чтобы видеть, существует ли допустимый переход из активного A
состояния в результате события E
.
Существует допустимый переход, чтобы утвердить B
.
Действие условия допустимого перехода выполняется и широковещательное событие F
.
Событие F
прерывает переход от A
до B
.
Корневые проверки графика, чтобы видеть, существует ли допустимый переход из активного A
состояния в результате события F
.
Существует допустимый переход, чтобы утвердить C
.
A
состояния выполняет свое действие exit
.
A
состояния становится неактивным.
C
состояния становится активным.
C
состояния выполняет и завершает свое действие entry
.
C
состояния является теперь единственным активным подсостоянием своего графика. Диаграмма Stateflow не может возвратиться к переходу от A
состояния, чтобы утвердить B
и продолжиться после действия условия, которые широковещательно передают событие F
(шаг 3). Во-первых, его источник, утвердите A
, более не активно. Во-вторых, если бы график позволил переход, B
состояния стал бы вторым активным подсостоянием графика. Это поведение нарушает инструкцию, что состояние (или график) с исключительным (OR) разложение никогда не может иметь больше чем одного активного подсостояния. Поэтому график использует, рано возвращают логику, и останавливает переход от A
состояния, чтобы утвердить B
.
Избегайте использования неориентированных локальных широковещательных сообщений события, которые могут вызвать нежелательное рекурсивное поведение в вашем графике. Используйте оператор send
для направленных локальных широковещательных сообщений события. Для получения дополнительной информации смотрите Широковещательную передачу Локальные События, чтобы Синхронизировать Параллельные состояния.
Можно установить диагностический уровень для обнаружения неориентированных локальных широковещательных сообщений события. В диалоговом окне Model Configuration Parameters перейдите к Diagnostics> панель Stateflow и установите диагностику Undirected event broadcasts на none
, warning
или error
. Настройкой по умолчанию является warning
.