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

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

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

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

send(event_name,state_name)

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

Пример вещания событий

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

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

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

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

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

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

send(Alert,Alarm)

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

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

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

Диаграммы Stateflow могут использовать события для связи с другими блоками в 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 за пределами графика. Этот тип события позволяет графику уведомлять другие блоки в модели о событиях, которые происходят на графике.

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

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

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

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

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

Simulation Data Inspector showing the output of the chart.

Похожие примеры

Подробнее о