События помогают параллельным состояниям скоординировать друг с другом, позволяя одному состоянию инициировать действие в другом состоянии. Чтобы синхронизировать параллельные состояния в том же графике Stateflow®, широковещательно передайте события непосредственно от одного состояния до другого. Для получения дополнительной информации о параллельных состояниях смотрите Синхронные Подсистемы Модели при помощи Параллелизма.
Локальное событие является неграфическим объектом, который может инициировать переходы или действия в параллельном состоянии диаграммы Stateflow. Когда вы широковещательно передаете событие к состоянию, событие вступает в силу в состоянии получения и в любых подсостояниях в иерархии того состояния. Чтобы широковещательно передать событие, используйте send
оператор:
send(event_name,state_name)
event_name
имя события, которое будет широковещательно передано. state_name
активное состояние во время широковещательной передачи.
Этот пример использует локальные события в качестве части проекта домашней системы безопасности.
Система безопасности состоит из предупреждения и трех датчиков антипроникновения (датчик окна, дверной датчик и детектор движения). После того, как система обнаруживает проникновение, у вас есть небольшое количество времени, чтобы отключить предупреждение. В противном случае, системные вызовы полиция.
Модели графика Security System каждая подсистема с отдельным параллельным состоянием. Входной сигнал включения выбирает между On
и Off
режимы для предупреждения, или между Active
и Disabled
режимы для каждого датчика. Когда включено, каждый датчик контролирует входной сигнал инициирования, который указывает на возможное проникновение.
Подсистема | Состояние | Включение сигнала | Инициирование сигнала |
---|---|---|---|
Дверной датчик | Door | D_mode | Door_sens |
Датчик окна | Win | W_mode | Win_sens |
Детектор движения | Motion | M_mode | Mot_sens |
Предупреждение | Alarm | Alarm_active |
Если датчик обнаруживает проникновение, в то время как сигнальная подсистема включена, то это широковещательно передает Alert
событие с этой командой:
send(Alert,Alarm)
Чтобы смягчить последствие спорадических ложных положительных сторон, детектор движения включает проект debouncing, так, чтобы только длительный положительный триггерный сигнал произвел предупреждение. В отличие от этого датчики двери и окна интерпретируют один положительный триггерный сигнал как проникновение и выпускают мгновенное предупреждение.
В сигнальной подсистеме, Alert
событие вызывает переход от Idle
подутвердите к Pending
подсостояние. Когда это состояние становится активным, звук предупреждения предупреждает жителей к возможному проникновению. Если существует случайное предупреждение, у жителей есть короткое время, чтобы отключить систему безопасности. Если не отключенный в том периоде времени, системные вызовы полиция для справки.
Диаграммы 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 и начинаете симуляцию со всех включенных подсистем и всех выключенных триггеров датчика. Во время симуляции вы выполняете эти действия:
Во время t = 250 секунд, вы инициировали дверной датчик. Предупреждение начинает звучать (Sound
= 1), таким образом, вы сразу отключаете систему сигнализации. Вы выключаете триггер и снова включаете предупреждение.
Во время t = 520 секунд, вы инициировали датчик окна, и предупреждение начинает звучать (Sound
= 0). На этот раз вы не отключаете предупреждение. Приблизительно во время t = 600, система безопасности вызывает полицию (call_police
= 1). Sound
и call_police
сигналы продолжают переключаться между нулем и один каждые 80 секунд.
Во время t = 1 400 секунд, вы отключаете предупреждение. Sound
и call_police
сигналы прекращают переключаться.
Инспектор Данных моделирования показывает ответ Sound
и call_police
сигналы к вашим действиям.