Рекурсия может быть полезна для управления переходами подсостояний между параллельными состояниями на одном уровне иерархии диаграмм. Например, можно послать направленное событие, передаваемое из одного параллельного состояния в одно параллельное состояние, чтобы указать переход подсостояния. Этот тип рекурсивного поведения является желательным и эффективным. Дополнительные сведения см. в разделе Трансляция локальных событий для синхронизации параллельных состояний.
Однако нежелательная рекурсия также может произойти во время выполнения диаграммы. Чтобы избежать нежелательной рекурсии, не используйте рекурсивные вызовы функций или неориентированные трансляции локальных событий.
Предположим, что у вас есть функции с именем f, g, и h в диаграмме. Эти функции могут представлять собой любую комбинацию графических функций, функций таблицы истинности, функций MATLAB ® или Simulink ®.
Во избежание рекурсивного поведения не следует:
Имеют f запрос g запрос h запрос f.
Имеют f, g, или h сама себя называющая.
Неориентированная широковещательная рассылка событий отправляет локальное событие во все состояния, в которых оно отображается. Формат неориентированной трансляции событий:
send(event_name)
event_name является локальным событием.Чтобы избежать рекурсивного поведения, замените ненаправленные широковещательные передачи событий на направленные широковещательные передачи событий с помощью синтаксиса
send(event_name,state_name)
event_name является локальным событием в диаграмме и state_name является состоянием назначения.
Если локальное событие передается в действии состояния, убедитесь, что состояние назначения не является предком исходного состояния в иерархии диаграммы.
Если локальная широковещательная передача событий происходит при переходе, убедитесь, что:
Состояние назначения не является предком перехода в иерархии диаграммы.
Переход не подключен к конечному состоянию.
Дополнительные сведения см. в разделе Широковещательная рассылка локальных событий для синхронизации параллельных состояний.
Во время моделирования диаграммы Stateflow ® могут обнаруживать неориентированные локальные трансляции событий. Чтобы управлять уровнем диагностического действия, откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters). На панели «Диагностика» > «Поток состояний» можно выбрать для диагностики Undirected event broadcasts.none, warning, или error. Значение по умолчанию: warning. Дополнительные сведения см. в разделе Неориентированные трансляции событий (Simulink).