В этом примере показано, как смоделировать 2D автомобильную систему лифта при помощи соединенных атомарных подграфиков в Stateflow®. Система лифта состоит из модели Simulink® и пользовательского интерфейса (UI). Модель содержит две диаграммы Stateflow:
Системные модели лифта логика ядра, которая делегирует входящие запросы от пользовательского интерфейса до самого близкого доступного автомобиля лифта. Этот график содержит пару атомарных подграфиков, которые реализуют идентичную логику для автомобилей.
Контроллер пользовательского интерфейса информация о процессах из Системного графика Лифта и обновлений отображение пользовательского интерфейса. В этом графике каждый атомарный подграфик определяет, когда переместить автомобиль лифта и когда открыть его двери.
В начале симуляции модель открывает пользовательский интерфейс. Пользовательский интерфейс показывает два автомобиля лифта, которые могут остановиться в девяти этажах. В нижней части пользовательского интерфейса два желтых прямоугольника представляют внутреннюю часть автомобилей лифта. В то время как пример запускается, вы вызываете автомобиль лифта, запрашиваете остановку в полу или выделяете пожарную сигнализацию путем нажатия кнопок на каждой прихожей пола и в автомобилях лифта. Пользовательский интерфейс отвечает путем изменения входных значений и инициирования входных событий для Системного графика Лифта.
Системный график Лифта состоит из трех параллельных подграфиков. Каждый из этих подграфиков управляет очередью запросов от пользовательского интерфейса:
Elevator_Manager
подграфик реализует основную управляющую логику для системы лифта. Этот подграфик управляет очередью Холла, которая содержит все запросы, которые сгенерированы, когда вы нажимаете кнопку в одной из прихожих пола. Подграфик обрабатывает эти запросы и делегирует их к одному из автомобилей лифта, в зависимости от доступности и близости к запросу.
Elevator_A
и Elevator_B
представляйте логику для двух автомобилей лифта. Каждый автомобиль имеет свою собственную очередь, которая содержит все его запросы пола. Запросы пола сгенерированы, когда вы нажимаете кнопку в автомобиле лифта или когда Elevator_Manager
делегирует запрос от очереди Холла к автомобилю.
Автомобили лифта используют идентичную логику, чтобы обработать их отдельные очереди запроса. Системный график Лифта моделирует их поведение при помощи соединенных атомарных подграфиков из модели библиотеки.
В модели библиотеки, графике Elevator
реализует логику для типового автомобиля лифта. Программировать подграфики Elevator_A
и Elevator_B
так, чтобы они управляли соответствующим автомобилем, вы сопоставляете данные и события в каждом подграфике к соответствующим данным и события в основном графике. Например, для Elevator_B
:
Вход floor_request
подграфика карты к входу
CarB_floor_request
графика.
Подграфик выход position
карты к графику выход B_position
.
Подграфик выход doorOpen
карты к графику выход doorBOpen
.
Событие CAR_CALL
подграфика карты к событию
CAR_CALL_B
графика.
Чтобы видеть отображения для каждого атомарного подграфика, щелкните правой кнопкой по подграфику и выберите Subchart Mappings.
Чтобы управлять отображением пользовательского интерфейса каждого автомобиля лифта, Контроллером пользовательского интерфейса, график использует два атомарных подграфика, соединенные из модели библиотеки.
Для получения дополнительной информации об использовании атомарных подграфиков, чтобы инкапсулировать и снова использовать логику, смотрите, Создают Допускающие повторное использование Субкомпоненты при помощи Атомарных Подграфиков.
Модель в этом примере является перепроектированной версией более старой модели, которая не использует атомарные подграфики. Отдельные подграфики исходного использования модели, чтобы справиться с запросами пола (подстроит диаграмму Elevator_A
и Elevator_B
из Системного графика Лифта) и управлять отображением пользовательского интерфейса автомобилей лифта (подстроит диаграмму CarA_Controller
и CarB_Controller
из Контроллера пользовательского интерфейса график). В каждом случае подграфики являются почти идентичными копиями друг друга. Они отличаются только по именам данных и событий, которые они используют.
Чтобы преобразовать дублирующиеся подграфики в атомарные подграфики, сначала сделайте библиотеку атомарным подграфиком из одного из подграфиков. Затем используйте соединенные экземпляры этой библиотеки, чтобы заменить дублирующиеся подграфики. Например, рассмотрите дублирующиеся автомобильные подграфики лифта Системного графика Лифта. Эти подграфики вызывают несколько функций и локальных переменных, которые заданы в Elevator_Manager
подграфик. Прежде, чем создать атомарный подграфик, необходимо сделать эти подграфики независимыми и автономными модулями.
1. Переместите эти функции от Elevator_Manager
подграфик в вышестоящую диаграмму:
exists_in_queue
deregister
dequeue
Переименуйте эти функции, чтобы отличить их от функций в автомобильных подграфиках лифта.
2. Используя Model Explorer, переместите эти переменные из Elevator_Manager
подграфик в вышестоящую диаграмму:
hall_call_queue
hall_call_status
3. В Системном графике Лифта, набор свойство диаграммы Функций Уровня Графика Экспорта к true
. Для получения дополнительной информации смотрите Экспорт Функции Stateflow для Повторного использования.
4. Измените Elevator_Manager
и Elevator_A
подграфики, чтобы использовать перемещенные функции и переменные.
5. Создайте библиотеку атомарный подграфик из Elevator_A
подстройте диаграмму, как описано в Повторном использовании состояние Многократно в Графике.
6. Чтобы позволить атомарному подграфику передать положение автомобиля лифта к содержанию графика, измените Осциллограф данных о подграфике position
от Local
к Output
.
7. Замените два подграфика лифта на соединенный атомарный подграфик. Для каждого соединенного атомарного подграфика сопоставьте данные и события к вышестоящей диаграмме. Для получения дополнительной информации смотрите Переменные Карты для Атомарных Подграфиков и Полей.