Если ваш график Stateflow® включает данные, которые высоко сопоставляются к иерархии графика, можно упростить проект при помощи активных данных состояния. Путем включения активных данных состояния вы можете:
Избегайте ручных обновлений данных, отражающих действие графика.
Регистрируйте и контролируйте действие графика в Инспекторе Данных моделирования.
Используйте данные о действии графика, чтобы управлять другими подсистемами.
Экспортируйте данные о действии графика в другие блоки Simulink®.
Для получения дополнительной информации смотрите, Создают Иерархию, чтобы Управлять Сложностью системы.
Используя активный вывод данных состояния может упростить проект некоторых диаграмм Stateflow. Например, в этой модели сигнала трафика, состояние, которое активно, определяет значение символа color
. Когда вы включаете активные данные состояния, Stateflow может обеспечить цвет сигнала трафика путем отслеживания действия состояния. Явным образом обновляющийся color
более не необходимо, таким образом, можно удалить этот символ и упростить проект графика.
Stateflow обеспечивает активные данные состояния через выходной порт к Simulink или как локальные данные к вашему графику. Эта таблица приводит различные режимы активных доступных данных состояния.
Режим действия | Тип данных | Описание |
---|---|---|
Сам действие | Булевская переменная | Действительно ли состояние активно? |
Дочернее действие | Перечисление | Какое дочернее состояние активно? |
Листовое действие состояния | Перечисление | Какое листовое состояние активно? |
Чтобы включить активные данные состояния, используйте Property Inspector.
Установите флажок Create output for monitoring.
Выберите режим действия из выпадающего списка.
Введите Data name для активного символа данных состояния.
(Необязательно) Для Дочернего или Листового действия состояния, введите Enum name для активного типа данных состояния.
По умолчанию Stateflow сообщает о действии состояния как о выходных данных. Чтобы изменить осциллограф активного символа данных состояния к локальным данным, используйте окно Symbols.
Пример Stateflow sf_traffic_light
использует активные данные состояния, чтобы реализовать систему контроллера для пары светофора.
В графике Traffic Controller пара параллельных подграфиков управляет логикой, управляющей светофором. Подграфики имеют идентичную иерархию, состоящую из трех дочерних состояний: Red
, Yellow
, и Green
. Выходные данные Light1
и Light2
соответствуйте активным дочерним состояниям в подграфиках. Эти сигналы:
Определите фазу анимированного светофора.
Способствуйте количеству автомобилей, ожидающих в каждом свете.
Управляйте подсистемой Safety Assertion, проверяющей, что эти два светофора никогда не являются одновременно зелеными.
Чтобы видеть подграфики в графике Traffic Controller, кликните по стреле в левом нижнем углу графика.
Каждый диспетчер циклы через его дочерние состояния, от Red
к Green
к Yellow
и назад к Red
. Каждое состояние соответствует фазе в цикле светофора. Выходные сигналы Light1
и Light2
укажите, какое состояние активно в любой момент времени.
Когда Red
состояние становится активным, цикл светофора начинается. После малой задержки контроллер проверяет на автомобили, ожидающие на пересечении. Если это обнаруживает по крайней мере один автомобиль, или если фиксированная длина времени протекает, то контроллер запрашивает зеленый свет установкой greenLightRequest
к true
. После выполнения запроса контроллер остается в Red
состояние в течение короткого промежутка времени, пока это не обнаруживает, что другой сигнал трафика является красным. Контроллер затем делает переход к Green
.
Когда Green
состояние становится активным, контроллер отменяет его запрос зеленого света установки greenLightRequest
к false
. Контроллер устанавливает greenLightLocked
к true
, препятствование другому трафику сигнализирует стать зеленым. Через какое-то время контроллер проверяет на запрос зеленого света от другого диспетчера. Если это получает запрос, или если фиксированная длина времени протекает, то переходы контроллера к Yellow
состояние.
Прежде, чем перейти к Red
состояние, контроллер остается в Yellow
состояние для фиксированного количества времени. Когда Yellow
состояние становится неактивным, контроллер устанавливает greenLightLocked
к false
, указание, что другой светофор может безопасно стать зеленым. Цикл светофора затем начинается снова.
Несколько параметров задают синхронизацию цикла светофора. Чтобы изменить значения этих параметров, дважды кликните график Traffic Controller и введите новые значения в диалоговое окно Block Parameters.
Параметр | Задайте значение | Описание |
---|---|---|
REDDELAY | 6 секунд | Отрезок времени перед контроллером начинает проверять на автомобили на пересечении. Кроме того, минимальный отрезок времени перед светофором может стать зеленым после того, как контроллер запросит зеленый свет. |
MAXREDDELAY | 360 секунд | Максимальный отрезок времени, который контроллер проверяет на автомобили прежде, чем запросить зеленый свет. |
GREENDELAY | 180 секунд | Максимальный отрезок времени, что светофор остается зеленым. |
MINGREENDELAY | 120 секунд | Минимальный отрезок времени, что светофор остается зеленым. |
YELLOWDELAY | 15 секунд | Отрезок времени, что светофор остается желтым. |
В Property Inspector позвольте регистрировать для этих символов:
greenLightRequested
greenLightLocked
Light1
Light2
Запустите симуляцию.
В Инспекторе Данных моделирования отобразите регистрируемые сигналы в отдельных осях. Булевская переменная сигнализирует о greenLightRequested
и greenLightLocked
появитесь как числовые значения нуля или один. Действие состояния сигнализирует о Light1
и Light2
показываются перечислимыми данными со значениями Green
, Yellow
, Red
, и None
.
Чтобы проследить действие графика во время симуляции, можно использовать изменение масштаба и кнопки курсора в Инспекторе Данных моделирования. Например, эта таблица детализирует действие в течение первых 300 секунд симуляции.
Время | Описание | Light 1 | Light2 | greenLightRequested | greenLightLocked |
---|---|---|---|---|---|
t = 0 | В начале симуляции оба светофора являются красными. | Red | Red | false | false |
t = 6 | После 6 секунд (REDDELAY ), существуют автомобили, ожидающие на обеих улицах. Оба светофора запрашивают зеленый свет установкой greenLightRequested = true . | Red | Red | true | false |
t = 12 | Еще после 6 секунд (
| Green | Red | false , затем true | true |
t = 132 | После 120 секунд ( | Yellow | Red | true | true |
t = 147 | После 15 секунд (
| Red | Green | false | false , затем true |
t = 153 | После 6 секунд ( | Red | Green | true | true |
t = 267 | Световой сигнал 2 становится желтым 120 секунд ( | Red | Yellow | true | true |
t = 282 | После 15 секунд (
| Green | Red | false | false , затем true |
t = 288 | После 6 секунд ( | Green | Red | true | true |
Повторения цикла до симуляции заканчиваются в t = 1 000 секунд.