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

Система безопасности состоит из сигнализации и трех датчиков защиты от вторжений (оконный датчик, датчик двери и детектор движения). После того, как система обнаружит вторжение, у вас будет небольшое время для отключения аварийного сигнала. В противном случае система вызывает полицию.
Диаграмма системы безопасности моделирует каждую подсистему с отдельным параллельным состоянием. Разрешающий входной сигнал выбирает между 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 подсостояние. Когда это состояние становится активным, звуковое предупреждение предупреждает пользователей о возможном вторжении. При случайном срабатывании аварийного сигнала у пассажиров имеется короткое время для отключения системы безопасности. Если этот период времени не отключен, система обращается за помощью в полицию.
Диаграммы статусов могут использовать события для обмена данными с другими блоками в модели Simulink ®. Например, в sf_security пример:
Выходные события Sound и call_police управлять внешними блоками, которые обрабатывают предупреждающий звук и вызов полиции. Команды для трансляции этих событий происходят в Alarm.On состояние:
Команда для Sound происходит как действие записи в Pending подсостояние.
Команда для call_police происходит как действие при переходе между Pending и Idle подстанции.
В каждом случае команда для выдачи выходного события является именем события.
Входное событие sl_call управляет временем работы устройства обнаружения движения и короткой задержкой перед вызовом в полицию. В каждом случае событие происходит внутри вызова временного оператора. after, что приводит к переходу после того, как диаграмма получает событие несколько раз.

Выходное событие происходит в диаграмме Stateflow, но отображается в блоках Simulink вне диаграммы. Этот тип события позволяет диаграмме уведомлять другие блоки модели о событиях, происходящих в диаграмме.
Каждое выходное событие соответствует выходному порту в правой части диаграммы. В зависимости от конфигурации, соответствующий сигнал может управлять триггерной подсистемой или подсистемой функционального вызова. Для настройки выходного события в инспекторе свойств установите в поле Триггер один из следующих параметров.
| Тип триггера | Описание |
|---|---|
Either Edge | Передача выходного события приводит к переключению исходящего сигнала между нулем и единицей. |
Function call | Трансляция выходного события вызывает событие вызова функции Simulink. |
В sf_security например, выходные события Sound и call_police используйте краевые триггеры для активации пары подсистем-защелок в модели Simulink. Когда каждая защелка обнаруживает изменение значения в своем входном сигнале, она коротко выдает значение единицы, прежде чем вернуться к выходу нуля.
Входное событие происходит в блоке Simulink, но отображается в диаграмме Stateflow. Этот тип событий позволяет другим блокам Simulink, включая другие диаграммы Stateflow, уведомлять конкретную диаграмму о событиях, происходящих вне ее.
Внешний блок Simulink посылает входное событие через сигнал, подключенный к порту триггера в верхней части диаграммы Stateflow. В зависимости от конфигурации, входное событие является результатом изменения значения сигнала или вызова функции из блока Simulink. Чтобы настроить входное событие, в инспекторе свойств установите в поле Триггер один из следующих параметров.
| Тип триггера | Описание |
|---|---|
Rising | Диаграмма активируется, когда входной сигнал изменяется с нуля или отрицательного значения на положительное. |
Falling | Диаграмма активируется, когда входной сигнал изменяется с положительного на нулевое или отрицательное значение. |
Either | Диаграмма активируется, когда входной сигнал пересекает нуль при его изменении в любом направлении. |
Function call | Диаграмма активируется вызовом функции из блока Simulink. |
В sf_security например, блок генератора вызовов функции Simulink управляет синхронизацией системы безопасности путем запуска входного события sl_call посредством периодических вызовов функций.
Диаграмма системы безопасности содержит входные данные от нескольких блоков ручного переключения и выходные данные для пары подсистем-защелок, которые подключаются к блокам отображения. Во время моделирования можно:
Включите подсистемы аварийной сигнализации и датчиков и активируйте обнаружение вторжений, нажав на блоки переключения.
Посмотрите анимацию диаграммы, чтобы выделить различные активные состояния диаграммы.
Просмотрите выходные сигналы в блоке «Scope» и в инспекторе данных моделирования.
Для настройки времени моделирования дважды щелкните по блоку «Генератор вызовов функции» и в диалоговом окне измените поле «Время выборки». Например, предположим, что вы установили время выборки равным 1 и начали моделирование, включив все подсистемы и выключив все триггеры сенсора. Во время моделирования выполните следующие действия:
В момент времени t = 250 секунд включается датчик двери. Начинает звучать аварийный сигнал (Sound = 1) для немедленного отключения системы аварийной сигнализации. Выключите спусковой крючок и снова включите сигнализацию.
В момент времени t = 520 секунд срабатывает оконный датчик и начинает звучать аварийный сигнал (Sound = 0). На этот раз аварийный сигнал не отключается. Примерно в момент времени t = 600 система безопасности вызывает полицию (call_police = 1). Sound и call_police сигналы продолжают переключаться между нулем и одним каждые 80 секунд.
В момент времени t = 1400 секунд аварийный сигнал отключается. Sound и call_police сигналы перестают переключаться.
Инспектор данных моделирования показывает ответ Sound и call_police сигналы вашим действиям.
