Если ваш график Stateflow® включает данные, которые высоко сопоставляются к иерархии графика, можно упростить проект при помощи активных данных состояния. Путем включения активных данных состояния вы можете:
Избегайте ручных обновлений данных, отражающих действие графика.
Регистрируйте и контролируйте действие графика в Инспекторе Данных моделирования.
Используйте данные о действии графика, чтобы управлять другими подсистемами.
Экспортируйте данные о действии графика в другие блоки Simulink®.
Для получения дополнительной информации смотрите, Создают Иерархию, чтобы Управлять Сложностью системы.
Используя активный вывод данных состояния может упростить проект некоторых диаграмм Stateflow. Например, в этой модели сигнала трафика, состояние, которое активно, определяет значение символа color
. Когда вы включаете активные данные состояния, Stateflow может обеспечить цвет сигнала трафика путем отслеживания действия состояния. Явным образом обновляющий color
более не необходим, таким образом, можно удалить этот символ и упростить проект графика.
Stateflow обеспечивает активные данные состояния через выходной порт к Simulink или как локальные данные к вашему графику. Эта таблица приводит различные режимы активных доступных данных состояния.
Режим действия | Тип данных | Описание |
---|---|---|
Сам действие | Булевская переменная | Действительно ли состояние активно? |
Дочернее действие | Перечисление | Какое дочернее состояние активно? |
Листовое действие состояния | Перечисление | Какое листовое состояние активно? |
Чтобы включить активные данные состояния, используйте Property Inspector.
Установите флажок Create output for monitoring.
Выберите режим действия из выпадающего списка.
Введите Data name для активного символа данных состояния.
(Необязательно) Для Дочернего или Листового действия состояния, введите 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.
Параметр | Задайте значение | Описание |
---|---|---|
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 секунд.