exponenta event banner

Моделирование лифтовой системы с помощью атомных подчиненных диаграмм

В этом примере показано, как моделировать двухвагонную лифтовую систему с помощью связанных атомных подсхем в Stateflow ®. Лифтовая система состоит из модели Simulink ® и пользовательского интерфейса. Модель содержит две диаграммы 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.

Для просмотра сопоставлений для каждого атомарного подзаголовка щелкните его правой кнопкой мыши и выберите «Сопоставления подзаголовков».

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

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

Включение атомных вложенных диаграмм в дизайн

Модель в этом примере представляет собой переработанную версию старой модели, в которой не используются атомарные подшаблоны. Исходная модель использует отдельные подчасти для управления запросами на этаж (подчасти Elevator_A и Elevator_B схемы системы лифтов) и для управления отображением UI вагонов лифтов (подшарты CarA_Controller и CarB_Controller диаграммы контроллера пользовательского интерфейса). В каждом случае подшаблоны являются почти идентичными копиями друг друга. Они различаются только по названиям данных и событий, которые они используют.

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

1. Перенос этих функций из Elevator_Manager вложенная диаграмма в родительскую диаграмму:

  • exists_in_queue

  • deregister

  • dequeue

Переименуйте эти функции, чтобы отличить их от функций внутри подшаблонов кабины лифта.

2. С помощью обозревателя моделей перенесите эти переменные из Elevator_Manager вложенная диаграмма в родительскую диаграмму:

  • hall_call_queue

  • hall_call_status

3. В окне «Схема системы лифтов» задайте для свойства «Экспортировать таблицу функций уровня» значение true. Дополнительные сведения см. в разделе Экспорт функций потока состояний для повторного использования.

4. Изменение Elevator_Manager и Elevator_A для использования перенесенных функций и переменных.

5. Создать атомарную вложенную диаграмму библиотеки из Elevator_A как описано в разделе Многократное повторное использование состояния в диаграмме.

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

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

Связанные темы