Широковещательная передача локальных событий для синхронизации параллельных состояний

A local event является событием, которое происходит в Stateflow® диаграмма и видна только на графике. Этот тип события позволяет параллельным (И) состояниям на одном графике синхронизироваться друг с другом, так что действия в одном состоянии запускают действия в другом состоянии. Действие в одном графике не может транслировать локальные события в состояния в другом графике. Чтобы определить локальное событие:

  1. Добавьте событие к диаграмме Stateflow, как описано в разделе Задать события на графике.

  2. Задайте для свойства Scope для события значение Local.

Локальные события поддерживаются только в диаграммах Stateflow в Simulink® модели. Для получения дополнительной информации смотрите Синхронизация компонентов модели посредством широковещательных событий.

Широковещательная передача локальных событий

A directed event broadcast отправляет локальное событие непосредственно из одного состояния в другое с помощью оператора send:

send(event_name,state_name)
event_name является локальным событием и state_name является состоянием приема. Локальное событие транслируется непосредственно в принимающее состояние и любое из его подсостояний. Локальное событие должно быть видимым как в состоянии отправки, так и в состоянии приема. Состояние приема должно быть активным во время широковещательной передачи события.

Для примера этот график содержит два параллельных (И) состояния, A и B. Локальное событие E_one принадлежит графику и видна обоим состояниям. В состоянии A, переход от substate A1 для подсоединения A2 использует ориентированную трансляцию события формы send(E_one,B) чтобы отправить локальное событие E_one в состояние B. В Bсобытие запускает переход от substate B1 для подсоединения B2. Поэтому активные подсостояния в A и B синхронизируются. Для получения дополнительной информации о семантике этого примера, смотрите Направленное Вещание События Используя Отправку.

Stateflow chart that uses a directed event broadcast to synchronize the substates of two parallel (AND) states.

The state_name аргумент может включать полный путь иерархии к состоянию. Для примера, если состояние A содержит состояние A1можно отправить событие E в состояние A1 с этой трансляцией:

send(E,A.A1)

Совет

Не включать имя графика в полный путь иерархии к состоянию.

Использование квалифицированных имен событий в широковещательных передачах событий

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

send(state_name.event_name)
event_name является локальным событием, которое принадлежит принимающему состоянию state_name. Локальное событие транслируется непосредственно в принимающее состояние и любое из его подсостояний. Локальное событие отображается в состоянии приема, но не в состоянии отправки. Состояние приема должно быть активным во время широковещательной передачи события.

Для примера этот график содержит два параллельных (И) состояния, A и B. Локальное событие E_one принадлежит состояние B и видна только этому состоянию. В состоянии A, переход от substate A1 для подсоединения A2 использует ориентированную трансляцию события формы send(B.E_one) чтобы отправить локальное событие E_one в состояние B. В Bсобытие запускает переход от substate B1 для подсоединения B2. Поэтому активные подсостояния в A и B синхронизируются. Для получения дополнительной информации о семантике этого примера, смотрите Направленное Вещание События Используя Квалифицированное Имя События.

Stateflow chart that uses a directed event broadcast to synchronize the substates of two parallel (AND) states. The broadcast uses the qualified event name B.E_one.

The state_name аргумент может включать полный путь иерархии к принимающему состоянию. Не используйте имя графика в полном пути состояния. Например, предположим, что состояние A содержит состояние A1, и что A1 владеет локальным событием E. Можно отправить E события в состояние A1 с этой трансляцией:

send(A.A1.E)

Неориентированные трансляции событий

undirected event broadcast отправляет локальное событие во все состояния, в которых оно отображается, используя имя события в качестве действия условия:

event_name;

или вызовом оператора send без указания состояния приема:

send(event_name)
event_name является локальным событием, которое отображается в состоянии отправки.

Когда это возможно, используйте ориентированные трансляции событий вместо неориентированных трансляций событий. Ориентированные трансляции событий предотвращают нежелательную рекурсию во время симуляции и улучшают эффективность сгенерированного кода. Для получения дополнительной информации см. раздел «Избегать нежелательной рекурсии на графике».

Диагностика для обнаружения неориентированных локальных трансляций событий

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

См. также

Похожие темы