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

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

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

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

send(event_name,state_name)

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

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

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

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

Подсистемы модели как параллельные состояния

Модели графика Security System каждая подсистема с отдельным параллельным состоянием. Входной сигнал включения выбирает между 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 происходит как действие в переходе между Pending и Idle подсостояния.

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

  • Входное событие 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 пример, блок Simulink Function-Call Generator управляет синхронизацией системы безопасности путем инициирования входного события sl_call через вызовы периодической функции.

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

График Системы безопасности имеет входные параметры от нескольких блоков Manual Switch и выходных параметров к паре подсистем фиксатора, которые соединяются с блоками Display. В процессе моделирования вы можете:

  • Включите предупреждение и подсистемы датчика и инициируйте обнаружения проникновения путем нажатия на блоки 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 сигналы к вашим действиям.

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

Больше о