exponenta event banner

Синхронизация параллельных состояний посредством трансляции событий

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

Трансляция локальных событий

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

send(event_name,state_name)

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

Пример трансляции событий

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

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

Моделирующие подсистемы как параллельные состояния

Диаграмма системы безопасности моделирует каждую подсистему с отдельным параллельным состоянием. Разрешающий входной сигнал выбирает между On и Off режимы для аварийного сигнала или между Active и Disabled режимы для каждого датчика. Если этот параметр включен, каждый датчик отслеживает запускающий входной сигнал, который указывает на возможное вторжение.

ПодсистемаГосударствоВключение сигналаСигнал запуска
Датчик двериDoorD_modeDoor_sens
Оконный датчикWinW_modeWin_sens
Детектор движенияMotionM_modeMot_sens
ТревогаAlarmAlarm_active 

Если датчик обнаруживает вторжение во время включения подсистемы аварийной сигнализации, то он передает широковещательный сигнал Alert событие с помощью этой команды:

send(Alert,Alarm)

Чтобы смягчить эффект спорадических ложных срабатываний, детектор движения включает схему разгона, так что только устойчивый положительный пусковой сигнал выдает сигнал тревоги. Напротив, датчики дверей и окон интерпретируют один положительный пусковой сигнал как вторжение и выдают немедленный аварийный сигнал.

В подсистеме аварийной сигнализации Alert событие вызывает переход от Idle подсостояние к Pending подсостояние. Когда это состояние становится активным, звуковое предупреждение предупреждает пользователей о возможном вторжении. При случайном срабатывании аварийного сигнала у пассажиров имеется короткое время для отключения системы безопасности. Если этот период времени не отключен, система обращается за помощью в полицию.

Координация с другими блоками Simulink

Диаграммы статусов могут использовать события для обмена данными с другими блоками в модели Simulink ®. Например, в sf_security пример:

  • Выходные события Sound и call_police управлять внешними блоками, которые обрабатывают предупреждающий звук и вызов полиции. Команды для трансляции этих событий происходят в Alarm.On состояние:

    • Команда для Sound происходит как действие записи в Pending подсостояние.

    • Команда для call_police происходит как действие при переходе между Pending и Idle подстанции.

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

  • Входное событие sl_call управляет временем работы устройства обнаружения движения и короткой задержкой перед вызовом в полицию. В каждом случае событие происходит внутри вызова временного оператора. after, что приводит к переходу после того, как диаграмма получает событие несколько раз.

Simulink model that simulates a security system.

Выходные события

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

  1. В момент времени t = 250 секунд включается датчик двери. Начинает звучать аварийный сигнал (Sound = 1) для немедленного отключения системы аварийной сигнализации. Выключите спусковой крючок и снова включите сигнализацию.

  2. В момент времени t = 520 секунд срабатывает оконный датчик и начинает звучать аварийный сигнал (Sound = 0). На этот раз аварийный сигнал не отключается. Примерно в момент времени t = 600 система безопасности вызывает полицию (call_police = 1). Sound и call_police сигналы продолжают переключаться между нулем и одним каждые 80 секунд.

  3. В момент времени t = 1400 секунд аварийный сигнал отключается. Sound и call_police сигналы перестают переключаться.

Инспектор данных моделирования показывает ответ Sound и call_police сигналы вашим действиям.

Simulation Data Inspector showing the output of the chart.

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

Подробнее