В этом примере показано, как смоделировать 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. Замените две субдиаграммы лифта на соединенную атомарную субдиаграмму. Для каждой соединенной атомарной субдиаграммы сопоставьте данные и события к вышестоящей диаграмме. Для получения дополнительной информации смотрите Переменные Карты для Атомарных Субдиаграмм и Полей.