Смоделируйте систему лифта при помощи атомарных субдиаграмм

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

Похожие темы