Синхронизируйте параллельные состояния широковещательными Событиями

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

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

Локальное событие является неграфическим объектом, который может инициировать переходы или действия в параллельном состоянии диаграммы Stateflow. Когда вы широковещательно передаете событие к состоянию, событие вступает в силу в состоянии получения и в любых подсостояниях в иерархии того состояния. Чтобы широковещательно передать событие, используйте оператор send:

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

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

Пример Stateflow sf_security использует локальные события в качестве части проекта домашней системы безопасности.

Система безопасности состоит из предупреждения и трех датчиков антипроникновения (датчик окна, дверной датчик и детектор движения). После того, как система обнаруживает проникновение, у вас есть небольшое количество времени, чтобы отключить предупреждение. В противном случае, системные вызовы полиция.

Модели графика Системы безопасности каждая подсистема с отдельным параллельным состоянием. Входной сигнал включения выбирает между режимами On и Off для предупреждения, или между режимами Active и Disabled для каждого датчика. Когда включено, каждый датчик контролирует входной сигнал инициирования, который указывает на возможное проникновение.

ПодсистемаСостояниеВключение сигналаИнициирование сигнала
Дверной датчикDoorD_modeDoor_sens
Датчик окнаWinW_modeWin_sens
Детектор движенияMotionM_modeMot_sens
ПредупреждениеAlarmAlarm_active 

Если датчик обнаруживает проникновение, в то время как сигнальная подсистема включена, то это широковещательно передает событие Alert с этой командой:

send(Alert,Alarm)
Чтобы смягчить последствие спорадических ложных положительных сторон, детектор движения включает проект debouncing, так, чтобы только длительный положительный триггерный сигнал произвел предупреждение. Напротив, датчики двери и окна интерпретируют один положительный триггерный сигнал как проникновение и выпускают мгновенное предупреждение.

В сигнальной подсистеме событие Alert вызывает переход от подсостояния Idle до подсостояния Pending. Когда это состояние становится активным, звук предупреждения предупреждает жителей к возможному проникновению. Если существует случайное предупреждение, у жителей есть короткое время, чтобы отключить систему безопасности. Если не отключенный в том периоде времени, системные вызовы полиция для справки.

Координата с другими блоками Simulink

Диаграммы Stateflow могут использовать события, чтобы связаться с другими блоками в модели Simulink®. Например, в примере sf_security:

  • Выходные события Sound и call_police управляют внешними блоками, которые обрабатывают звук предупреждения и вызов полиции. Команды для широковещательной передачи этих событий происходят в состоянии Alarm.On:

    • Команда для Sound происходит, как действие записи в Pending подутверждает.

    • Команда для call_police происходит как действие в переходе между подсостояниями Idle и Pending.

    В каждом случае команда, чтобы выпустить выходное событие является именем события.

  • Входное событие sl_call управляет синхронизацией детектора движения debouncer и малой задержки перед вызовом полиции. В каждом экземпляре событие имеет место в вызове темпорального оператора after, который приводит к переходу после того, как график получает событие некоторое число раз.

Выведите События

Выходное событие имеет место в диаграмме Stateflow, но видимо в блоках Simulink вне графика. Этот тип события позволяет графику уведомить другие блоки в модели о событиях, которые происходят в графике.

Каждое выходное событие сопоставляет с выходным портом на правой стороне графика. В зависимости от его настройки соответствующий сигнал может управлять Инициированной Подсистемой или Подсистемой вызова функций. Чтобы сконфигурировать выходное событие, в Property Inspector, устанавливают поле Trigger на одну из этих опций.

Тип триггераОписание
Either EdgeВыведите широковещательные причины события исходящий сигнал, чтобы переключиться между нулем и один.
Function callВыведите широковещательные причины события событие вызова функции Simulink.

В примере sf_security выходные события Sound и call_police используют триггеры ребра, чтобы активировать пару подсистем фиксатора в модели Simulink. Когда каждый фиксатор обнаруживает изменение значения в его входном сигнале, это кратко выводит значение одного прежде, чем возвратиться к выводу нуля.

Введите События

Входное событие имеет место в блоке Simulink, но видимо в диаграмме Stateflow. Этот тип события позволяет другим блокам Simulink, включая другие диаграммы Stateflow, уведомить определенный график событий, которые происходят снаружи.

Внешний блок Simulink отправляет входное событие через сигнал, соединенный с триггерным портом на верхней части диаграммы Stateflow. В зависимости от его настройки входное событие следует из изменения в значении сигналов или посредством вызова функции от блока Simulink. Чтобы сконфигурировать входное событие, в Property Inspector, устанавливают поле Trigger на одну из этих опций.

Тип триггераОписание
RisingГрафик активируется, когда входной сигнал изменяется или от нуля или от отрицательной величины к положительному значению.
FallingГрафик активируется, когда входной сигнал изменяется от положительного значения, чтобы или обнулить или отрицательная величина.
EitherГрафик активируется, когда входной сигнал пересекает нуль, когда это изменяется в любом направлении.
Function callГрафик активируется вызовом функции от блока Simulink.

В примере sf_security Блок Function-Call Generator Simulink управляет синхронизацией системы безопасности путем инициирования входного события sl_call через вызовы периодической функции.

Исследуйте пример

График Системы безопасности имеет входные параметры от нескольких Ручных блоков switch и выходных параметров к паре подсистем фиксатора, которые соединяются с блоками Отображения. Во время симуляции вы можете:

  • Включите предупреждение и подсистемы датчика и инициируйте обнаружения проникновения путем нажатия на блоки switch.

  • См., что анимация графика подсвечивает различные активные состояния в графике.

  • Просмотрите выходные сигналы в блоке Scope и в Инспекторе Данных моделирования.

Чтобы настроить синхронизацию симуляции, дважды кликните Блок Function-Call Generator и, в диалоговом окне, измените поле Sample time. Например, предположите, что вы устанавливаете шаг расчета на 1 и запускаете симуляцию со всех включенных подсистем и всех выключенных триггеров датчика. Во время симуляции вы выполняете эти действия:

  1. Во время t = 250 секунд, вы инициировали дверной датчик. Предупреждение начинает звучать (Sound = 1), таким образом, вы сразу отключаете систему сигнализации. Вы выключаете триггер и снова включаете предупреждение.

  2. Во время t = 520 секунд, вы инициировали датчик окна, и предупреждение начинает звучать (Sound = 0). На этот раз вы не отключаете предупреждение. Приблизительно во время t = 600, система безопасности вызывает полицию (call_police = 1). Sound и сигналы call_police продолжают переключаться между нулем и один каждые 80 секунд.

  3. Во время t = 1 400 секунд, вы отключаете предупреждение. Sound и сигналы call_police прекращают переключаться.

Инспектор Данных моделирования показывает ответ Sound и сигналов call_police к вашим действиям.

Связанные примеры

Больше о

Для просмотра документации необходимо авторизоваться на сайте