exponenta event banner

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

Локальное событие - это событие, которое происходит в диаграмме Stateflow ® и отображается только в диаграмме. Этот тип события позволяет параллельным состояниям (AND) в одной и той же диаграмме синхронизироваться друг с другом, так что действия в одном состоянии запускают действия в другом состоянии. Действие в одной диаграмме не может транслировать локальные события в состояния в другой диаграмме. Для определения локального события:

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

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

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

Трансляция локальных событий

Направленная широковещательная передача события передает локальное событие непосредственно из одного состояния в другое с помощью оператора. send:

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

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

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

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, переход от подсостояния A1 подуказывать A2 использует направленную трансляцию событий формы send(B.E_one) для отправки локального события E_one указывать B. В B, событие запускает переход от подсостояния 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.

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

send(A.A1.E)

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

Неориентированная широковещательная рассылка событий отправляет локальное событие во все состояния, в которых оно видно, используя имя события в качестве действия условия:

event_name;

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

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

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

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

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

См. также

Связанные темы