Избегайте нежелательной рекурсии на графике

Рекурсия может быть полезной для управления переходами субстанций среди параллельных состояний на том же уровне иерархии графиков. Для примера можно послать направленное событие, широковещательное из одного параллельного состояния, в одноуровневое параллельное состояние, чтобы задать переход subsate. Этот тип рекурсивного поведения желателен и эффективен. Для получения дополнительной информации смотрите Широковещание локальных событий для синхронизации параллельных состояний.

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

Рекурсивные вызовы функций

Предположим, что у вас есть функции с именем 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 Параметры Конфигурации. На панели Diagnostics > Stateflow для диагностики Undirected event broadcasts можно выбрать none, warning, или error. Настройкой по умолчанию является warning. Для получения дополнительной информации смотрите Неориентированные трансляции событий (Simulink).

См. также

Похожие темы