Контролируйте действие графика при помощи активных данных состояния

Если ваш график Stateflow® включает данные, которые высоко сопоставляются к иерархии графика, можно упростить проект при помощи активных данных состояния. Путем включения активных данных состояния вы можете:

  • Избегайте ручных обновлений данных, отражающих действие графика.

  • Регистрируйте и контролируйте действие графика в Инспекторе Данных моделирования.

  • Используйте данные о действии графика, чтобы управлять другими подсистемами.

  • Экспортируйте данные о действии графика в другие блоки Simulink®.

Для получения дополнительной информации смотрите, Создают Иерархию, чтобы Управлять Сложностью системы.

Активные данные состояния

Используя активный вывод данных состояния может упростить проект некоторых диаграмм Stateflow. Например, в этой модели сигнала трафика, состояние, которое активно, определяет значение символа color. Когда вы включаете активные данные состояния, Stateflow может обеспечить цвет сигнала трафика путем отслеживания действия состояния. Явным образом обновляющий color более не необходим, таким образом, можно удалить этот символ и упростить проект графика.

Stateflow обеспечивает активные данные состояния через выходной порт к Simulink или как локальные данные к вашему графику. Эта таблица приводит различные режимы активных доступных данных состояния.

Режим действияТип данныхОписание
Сам действиеБулевская переменнаяДействительно ли состояние активно?
Дочернее действиеПеречислениеКакое дочернее состояние активно?
Листовое действие состоянияПеречислениеКакое листовое состояние активно?

Чтобы включить активные данные состояния, используйте Property Inspector.

  1. Установите флажок Create output for monitoring.

  2. Выберите режим действия из выпадающего списка.

  3. Введите Data name для активного символа данных состояния.

  4. (Необязательно) Для Дочернего или Листового действия состояния, введите Enum name для активного типа данных состояния.

По умолчанию Stateflow сообщает о действии состояния как о выходных данных. Чтобы изменить осциллограф активного символа данных состояния к локальным данным, используйте окно Symbols.

Пример активных данных состояния

Пример Stateflow sf_traffic_light использует активные данные состояния, чтобы реализовать систему контроллера для пары светофора.

В графике Диспетчера пара параллельных подграфиков управляет логикой, управляющей светофором. Подграфики имеют идентичную иерархию, состоящую из трех дочерних состояний: Red, Yellow и Green. Выходные данные Light1 и Light2 соответствуют активным дочерним состояниям в подграфиках. Эти сигналы:

  • Определите фазу анимированного светофора.

  • Способствуйте количеству автомобилей, ожидающих в каждом свете.

  • Управляйте подсистемой Утверждения Безопасности, проверяющей, что эти два светофора никогда не являются одновременно зелеными.

Чтобы видеть подграфики в графике Диспетчера, кликните по стрелке в левом нижнем углу графика.

Поведение подграфиков диспетчера

Каждый диспетчер циклы через его дочерние состояния, от Red до Green к Yellow и назад к Red. Каждое состояние соответствует фазе в цикле светофора. Light1 выходных сигналов и Light2 указывают, какое состояние активно в любой момент времени.

Красный свет

Когда состояние Red становится активным, цикл светофора начинается. После малой задержки контроллер проверяет на автомобили, ожидающие на пересечении. Если это обнаруживает по крайней мере один автомобиль, или если фиксированная длина времени протекает, то контроллер запрашивает зеленый свет установкой greenLightRequest к true. После выполнения запроса контроллер остается в состоянии Red в течение короткого промежутка времени, пока это не обнаруживает, что другой сигнал трафика является красным. Контроллер затем делает переход к Green.

Зеленый свет

Когда состояние Green становится активным, контроллер отменяет его запрос зеленого света установки greenLightRequest к false. Контроллер устанавливает greenLightLocked на true, препятствуя другому сигналу трафика стать зеленым. Через какое-то время контроллер проверяет на запрос зеленого света от другого диспетчера. Если это получает запрос, или если фиксированная длина времени протекает, то переходы контроллера к состоянию Yellow.

Желтый свет

Прежде, чем перейти к состоянию Red, контроллер остается в состоянии Yellow для фиксированного количества времени. Когда состояние Yellow становится неактивным, контроллер устанавливает greenLightLocked на false, указывая, что другой светофор может безопасно стать зеленым. Цикл светофора затем начинается снова.

Синхронизация светофора

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

ПараметрЗадайте значениеОписание
REDDELAY6 секундОтрезок времени перед контроллером начинает проверять на автомобили на пересечении. Кроме того, минимальный отрезок времени перед светофором может стать зеленым после того, как контроллер запросит зеленый свет.
MAXREDDELAY360 секундМаксимальный отрезок времени, который контроллер проверяет на автомобили прежде, чем запросить зеленый свет.
GREENDELAY180 секундМаксимальный отрезок времени, что светофор остается зеленым.
MINGREENDELAY120 секундМинимальный отрезок времени, что светофор остается зеленым.
YELLOWDELAY15 секундОтрезок времени, что светофор остается желтым.

Исследуйте пример

  1. В Property Inspector позвольте регистрировать для этих символов:

    • greenLightRequested

    • greenLightLocked

    • Light1

    • Light2

  2. Запустите симуляцию.

  3. В Инспекторе Данных моделирования отобразите регистрируемые сигналы в отдельных осях. Булевская переменная сигнализирует, что greenLightRequested и greenLightLocked появляются как числовые значения нуля или один. Действие состояния сигнализирует, что Light1 и Light2 показываются перечислимыми данными со значениями Green, Yellow, Red и None.

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

ВремяОписаниеLight 1Light2greenLightRequestedgreenLightLocked
t = 0В начале симуляции оба светофора являются красными.RedRedfalsefalse
t = 6После 6 секунд (REDDELAY) существуют автомобили, ожидающие на обеих улицах. Оба светофора запрашивают зеленый свет установкой greenLightRequested = true.RedRedtruefalse
t = 12

Еще после 6 секунд (REDDELAY):

  • Световой сигнал 1 становится зеленым, установка greenLightLocked = true и greenLightRequested = false.

  • Световой сигнал 2 запрашивает зеленый свет установкой greenLightRequested = true.

GreenRedfalse, затем truetrue
t = 132

После 120 секунд (MINGREENDELAY) Световой сигнал 1 становится желтым.

YellowRedtruetrue
t = 147

После 15 секунд (YELLOWDELAY):

  • Световой сигнал 1 покраснел, установка greenLightLocked = false.

  • Световой сигнал 2 становится зеленым, установка greenLightLocked = true и greenLightRequested = false.

RedGreenfalsefalse, затем true
t = 153

После 6 секунд (REDDELAY) Световой сигнал 1 запрашивает зеленый свет установкой greenLightRequested = true.

RedGreentruetrue
t = 267

Световой сигнал 2 становится желтым 120 секунд (MINGREENDELAY) после превращения зеленого.

RedYellowtruetrue
t = 282

После 15 секунд (YELLOWDELAY):

  • Световой сигнал 2 покраснел, установка greenLightLocked = false.

  • Световой сигнал 1 становится зеленым, установка greenLightLocked = true и greenLightRequested = false.

GreenRedfalsefalse, затем true
t = 288

После 6 секунд (REDDELAY) Световой сигнал 2 запрашивает зеленый свет установкой greenLightRequested = true.

GreenRedtruetrue

Повторения цикла до симуляции заканчиваются в t = 1 000 секунд.

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

Больше о

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