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

В этом примере показано, как смоделировать систему лифтов с двумя автомобилями с помощью связанных атомарных субдиаграмм в Stateflow ®. Лифтовая система состоит из модели Simulink ® и пользовательского интерфейса (UI). Модель содержит две диаграммы Stateflow:

  • Система лифтов моделирует логику ядра, которая делегирует входящие запросы от UI к ближайшему доступному вагону лифта. Этот график содержит пару атомарных субдиаграмм, которые реализуют идентичную логику для автомобилей.

  • UI Controller обрабатывает информацию из графика системы лифтов и обновляет отображение пользовательского интерфейса. На этом графике каждая атомарная субдиаграмма определяет, когда перемещать вагон лифта и когда открывать его двери.

В начале симуляции модель открывает пользовательский интерфейс. UI показывает две машины лифта, которые могут остановиться на девяти этажах. В нижней части UI два желтых прямоугольника представляют интерьер вагонов лифта. В то время как пример бежит, вы вызываете автомобиль лифта, запрашиваете остановку на полу, или запускаете пожарную сигнализацию, нажимая кнопки на каждом этажном коридоре и внутри вагонов лифта. Пользовательский интерфейс реагирует, изменяя входные значения и вызывая входные события для графика системы лифта.

Управление запросами из пользовательского интерфейса

Система лифтов графика состоит из трёх параллельных субдиаграмм. Каждая из этих субдиаграмм управляет очередью запросов от пользовательского интерфейса:

  • The 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.

Чтобы просмотреть преобразования для каждого атомарного подграфика, щелкните правой кнопкой мыши подграфик и выберите Сопоставления подграфика.

Чтобы управлять отображением пользовательского интерфейса каждого вагона лифта, на графике UI Controller используются две атомарные субдиаграммы, соединенные из библиотечной модели.

Для получения дополнительной информации об использовании атомарных субдиаграмм для инкапсуляции и повторного использования логики, смотрите, Создают переиспользуемые подкомпоненты при помощи атомарных субдиаграмм.

Включите атомарные субдиаграммы в свой проект

Модель в этом примере является переработанной версией старой модели, которая не использует атомарные субдиаграммы. Исходная модель использует отдельные субдиаграммы, чтобы управлять запросами этажа (субдиаграмм Elevator_A и Elevator_B системы лифтов графика) и для управления UI-дисплеем лифтовых вагонов (субдиаграммы 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 субдиаграмма, как описано в Reuse a State Multiple Times in a Chart.

6. Чтобы позволить атомарной субдиаграмме передать положение кабины лифта на содержащий график, измените возможности данных субдиаграммы position от Local на Output.

7. Замените две субдиаграммы лифтов на связанные атомарные субдиаграммы. Для каждой связанной атомарной субдиаграммы сопоставьте данные и события с родительским графиком. Для получения дополнительной информации смотрите Map Переменных для Atomic Субдиаграмм и Boxes.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте