События помогают параллельным состояниям координировать друг с другом, позволяя одному состоянию запускать действие в другом состоянии. Чтобы синхронизировать параллельные состояния в том же 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)
Чтобы уменьшить эффект спорадических ложных срабатываний, детектор движения включает в себя проект отторжения, так что только устойчивый положительный триггерный сигнал выдает предупреждение. Напротив, датчики двери и окна интерпретируют один положительный триггерный сигнал как вторжение и выдают немедленный сигнал тревоги.
В подсистеме аварийных сигналов Alert
событие вызывает переход от Idle
подсостояние для Pending
подсостояние. Когда это состояние становится активным, предупреждение звука предупреждает пользователей о возможном вторжении. Если есть случайный сигнал тревоги, у жильцов есть короткое время, чтобы отключить систему безопасности. Если не отключен в течение этого периода времени, система вызывает полицию на помощь.
Диаграммы Stateflow могут использовать события для связи с другими блоками в Simulink® модель. Для образца, в sf_security
пример:
События выхода Sound
и call_police
управляйте внешними блоками, которые обрабатывают предупреждающий звук и вызов полиции. Команды для широковещательной передачи этих событий происходят в Alarm.On
состояние:
Команда для Sound
происходит как действие входа в Pending
подсостояние.
Команда для call_police
происходит как действие в переходе между Pending
и Idle
подсостояния.
В каждом случае команда для выдачи выхода события является именем события.
Событие входа sl_call
управляет временем отладчика детектора движения и короткой задержкой перед вызовом полиции. В каждом образце событие происходит внутри вызова темпорального оператора 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
посредством периодических вызовов функций.
График системы безопасности имеет входы от нескольких блоков Manual Switch и выходы к паре подсистем защелки, которые соединяются с блоками Display. Во время симуляции можно:
Включите подсистемы аварийных сигналов и датчиков и инициируйте обнаружение вторжений, нажав на блоки Switch.
Смотрите анимацию на графике, чтобы выделить различные активные состояния на графике.
Просмотрите сигналы выхода в блоке Scope и в Данных моделирования Inspector.
Чтобы настроить время симуляции, дважды кликните блок Function-Call Generator и в диалоговом окне измените поле Sample time. Например, предположим, что вы устанавливаете шаг расчета равное 1 и запускаете симуляцию с включенными всеми подсистемами и отключенными всеми триггерами датчика. Во время симуляции вы выполняете следующие действия:
В момент времени t = 250 секунд, вы запускаете датчик двери. Сигнал тревоги начинает звучать (Sound
= 1) поэтому вы немедленно отключите систему аварийной сигнализации. Выключите триггер и включите сигнал тревоги.
В момент времени t = 520 секунд, вы запускаете датчик окна и предупреждение начинает звучать (Sound
= 0). На этот раз вы не отключаете аварийный сигнал. Примерно в то же время t = 600 система безопасности вызывает полицию (call_police
= 1). The Sound
и call_police
сигналы продолжают переключаться между нулем и одним каждые 80 секунд.
В момент времени t = 1400 секунд, вы отключаете аварийный сигнал. The Sound
и call_police
сигналы прекращают переключаться.
Инспектор Данных моделирования показывает ответ Sound
и call_police
сигналы к вашим действиям.