Если ваш Stateflow® график включает данные, которые сильно коррелируют с иерархией графика, можно упростить проект с помощью данных о активном состоянии. Включив данные о активном состоянии, можно:
Избегайте ручных обновлений данных, отражающих активность графика.
Регистрируйте и контролируйте график активность в Данные моделирования Inspector.
Используйте данные о деятельности графика для управления другими подсистемами.
Экспорт данных о деятельности графика в другой Simulink® блоки.
Для получения дополнительной информации смотрите Создание иерархии для управления сложностью системы.
Использование активных данных о выходе может упростить проект некоторых диаграмм Stateflow. Для примера в этой модели сигнала трафика состояние, которое активно, определяет значение символа color
. Когда вы активируете данные о активном состоянии, Stateflow может предоставить цвет сигнала трафика путем отслеживания активности состояния. Явное обновление color
больше не требуется, поэтому можно удалить этот символ и упростить проект графика.
Stateflow предоставляет данные о активном состоянии через порт выхода в Simulink или как локальные данные в ваш график. В этой таблице перечислены различные доступные режимы данных о активном состоянии.
Режим действия | Тип данных | Описание |
---|---|---|
Самодеятельность | Булев | Состояние активно? |
Дочерняя деятельность | Перечисление | Какое дочернее состояние активно? |
Деятельность в состоянии листа | Перечисление | Какое состояние листа активно? |
Чтобы включить активные данные о состоянии, используйте Property Inspector.
Установите флажок Create output for monitoring.
Выберите режим действия из раскрывающегося списка.
Введите Data name для символа данных о активном состоянии.
(Необязательно) Для действий в состоянии дочернего элемента или листа введите Enum name для типа данных активного состояния.
По умолчанию Stateflow сообщает об активности состояния как о выходных данных. Чтобы изменить возможности символа данных активного состояния на локальные данные, используйте панель «Символы».
Этот пример использует данные о активном состоянии, чтобы смоделировать систему контроллера для пары светофоров.
Внутри графика Контроллер две параллельные субдиаграммы управляют логикой, управляющей светофорами. Субдиаграммы имеют идентичную иерархию, состоящую из трех дочерних состояний: Red
, Yellow
, и Green
. Данные о выход Light1
и Light2
соответствуют активным дочерним состояниям в субдиаграммах. Эти сигналы:
Определите фазу анимированных светофоров.
Способствуйте количеству автомобилей, ожидающих на каждом свете.
Управляйте подсистемой Safety Assertion, проверяющей, что два светофора никогда не являются одновременно зелеными.
Чтобы увидеть субдиаграммы в графике Контроллера трафика, щелкните стреле в нижнем левом углу графика.
Каждый контроллер трафика переходит через свои дочерние состояния, от Red
на Green
на Yellow
и назад к Red
. Каждое состояние соответствует фазе в цикле светофора. Сигналы выхода Light1
и Light2
указать, какое состояние активно в любой момент времени.
Когда Red
состояние становится активным, начинается цикл светофора. После короткой задержки контроллер проверяет наличие автомобилей, ожидающих на перекрестке. Если он обнаруживает хотя бы один автомобиль, или если истекает фиксированный промежуток времени, то контроллер запрашивает зеленый свет путем установки greenLightRequest
на true
. После выполнения запроса контроллер остается в Red
состояние в течение короткого периода времени, пока оно не обнаруживает, что другой сигнал трафика является красным. Затем контроллер выполняет переход к Green
.
Когда Green
состояние становится активным, контроллер отменяет свой запрос зеленого света путем установки greenLightRequest
на false
. Контроллер устанавливает greenLightLocked
на true
, препятствуя тому, чтобы другой сигнал трафика становился зеленым. Через некоторое время контроллер проверяет наличие запроса зеленого света от другого контроллера. Если он получает запрос, или если истекает фиксированный промежуток времени, то контроллер переходит к Yellow
состояние.
Перед переходом на Red
состояние, контроллер остается в Yellow
состояние в течение фиксированного количества времени. Когда Yellow
состояние становится неактивным, устанавливает контроллер greenLightLocked
на false
, что указывает на то, что другой светофор может безопасно стать зеленым. Затем снова начинается цикл светофора.
Несколько параметров определяют время цикла светофора. Чтобы изменить значения этих параметров, дважды кликните Traffic Controller график и введите новые значения в диалоговом окне Параметров блоков.
Параметр | Предустановленное значение | Описание |
---|---|---|
REDDELAY | 6 секунд | Продолжительность времени до начала проверки контроллером автомобилей на перекрестке. Кроме того, минимальная продолжительность времени до того, как светофор может стать зеленым после того, как контроллер запросит зеленый свет. |
MAXREDDELAY | 360 секунд | Максимальное время проверки контроллером автомобилей перед запросом зеленого света. |
GREENDELAY | 180 секунд | Максимальное время, в течение которого светофор остается зеленым. |
MINGREENDELAY | 120 секунд | Минимальный промежуток времени, в течение которого светофор остается зеленым. |
YELLOWDELAY | 15 секунд | Продолжительность времени, в течение которого светофор остается желтым. |
Включите ведение журнала для каждого из этих символов. На панели «Символы» выберите каждый символ. В Property Inspector в разделе Logging выберите Log signal data.
greenLightRequested
greenLightLocked
Light1
Light2
На вкладке Simulation нажмите Run.
На вкладке Simulation, под Review Results, нажмите Data Inspector.
В Данные Моделирования Inspector отобразите записанные сигналы в отдельных осях. Логические сигналы greenLightRequested
и greenLightLocked
появляются как числовые значения нуля или единицы. Активность состояния сигнализирует Light1
и Light2
показаны в виде перечисленных данных со значениями Green
, Yellow
, Red
, и None
.
Чтобы проследить активность графика во время симуляции, можно использовать кнопки масштаба и курсора в Данные моделирования Inspector. Для примера в этой таблице подробно описывается активность в течение первых 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 = 1000 секунд.