События помогают параллельным состояниям скоординировать друг с другом, позволяя одному состоянию инициировать действие в другом состоянии. Чтобы синхронизировать параллельные состояния в том же графике Stateflow®, широковещательно передайте события непосредственно от одного состояния до другого. Для получения дополнительной информации о параллельных состояниях смотрите Образцовые Синхронные Подсистемы при помощи Параллелизма.
Локальное событие является неграфическим объектом, который может инициировать переходы или действия в параллельном состоянии диаграммы Stateflow. Когда вы широковещательно передаете событие к состоянию, событие вступает в силу в состоянии получения и в любых подсостояниях в иерархии того состояния. Чтобы широковещательно передать событие, используйте оператор send
:
send(event_name,state_name)
event_name
является именем события, которое будет широковещательно передано. state_name
является активным состоянием во время широковещательной передачи.Пример Stateflow sf_security
использует локальные события в качестве части проекта домашней системы безопасности.
Система безопасности состоит из предупреждения и трех датчиков антипроникновения (датчик окна, дверной датчик и детектор движения). После того, как система обнаруживает проникновение, у вас есть небольшое количество времени, чтобы отключить предупреждение. В противном случае, системные вызовы полиция.
Модели графика Системы безопасности каждая подсистема с отдельным параллельным состоянием. Входной сигнал включения выбирает между режимами 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
происходит как действие в переходе между подсостояниями 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 и запускаете симуляцию со всех включенных подсистем и всех выключенных триггеров датчика. Во время симуляции вы выполняете эти действия:
Во время 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
к вашим действиям.