Моделирование системы лифта Используя атомарные подграфики

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

Пример:

  1. Демонстрирует преимущества использования атомарных подграфиков в таком приложении путем сравнения модели до и после представления этого построения.

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

Модель лифта

Симуляция модели поднимает этот графический интерфейс пользователя (пользовательский интерфейс):

В пользовательском интерфейсе вы нажимаете кнопки на каждой прихожей пола (пустые квадраты под каждым номером пола) и в отдельных автомобилях лифта (пронумерованные белые кнопки на желтом фоне в нижней части пользовательского интерфейса).

Краткий обзор исходной модели

Система Лифта графика состоит из трех основных компонентов.

Рабочие лошади этого графика являются подграфиками Elevator_A и Elevator_B: эти подграфики представляют автомобили лифта в модели. Автомобилями лифта управляет подграфик Elevator_Manager.

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

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

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

Основная цель подграфика Elevator_Manager состоит в том, чтобы обработать и делегировать все входящие пользовательские запросы (представленный как входные события в модели) или к Elevator_A или к Elevator_B в зависимости от критериев, таких как близость к запросу и доступности.

Каждый автомобиль лифта итеративно запросы процессов в его очереди и постоянно обновляет оба своих состояния (BUSY или IDLE) и его положение. Обновленное положение затем используется, чтобы управлять представлением пользовательского интерфейса автомобиля лифта (чтобы переместить автомобиль или открыть его двери).

Чтобы открыть исходную модель, щелкнуть здесь.

Модификации к исходной модели Используя атомарные подграфики

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

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

В этом примере Elevator_A и Elevator_B оба относятся, чтобы строить диаграмму Elevator в модели библиотеки sf_elevator_lib. Можно затем настроить библиотеку атомарный подграфик, не имея необходимость изменять соединенные экземпляры.

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

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

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

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

Преимущества Использования атомарных подграфиков

Вся логика, характерная для автомобиля лифта, теперь помещена в корпус в отдельном графике Stateflow®. Этот проект обладает несколькими преимуществами:

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

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

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

  4. Это повторное использование также помогает Simulink® Coder™ в генерации повторно используемого кода для обоих лифтов. В этом случае код для подсистемы лифта уменьшает почти на 500 строк кода: приблизительно от 1 500 строк приблизительно до 1 000 строк.

  5. Разделение логики для лифта в график также позволяет пользователям опциям упаковки файла генерации кода системы управления для графика лифта.

Приложение: как включить атомарные подграфики в исходную модель

Чтобы преобразовать автомобильные подграфики лифта в атомарные подграфики, несколько шагов необходимы. Эти шаги отражают правила, которые управляют использованием атомарных подграфиков. Для описания этих правил см. Правила для Использования Атомарных Подграфиков.

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

Шаг 1. Экспортируйте функции Elevator_Manager и данные, чтобы сделать их видимыми к атомарным подграфикам

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

Чтобы экспортировать функции на уровне графика, переместите все функции, используемые автомобильными подграфиками лифта из подграфика Elevator_Manager и в вышестоящую диаграмму как показано ниже:

Перемещенные графические функции должны быть переименованы, чтобы отличить их от функций в автомобильных подграфиках лифта. Например, функциональный deregister может быть переименован к Main_deregister.

После этого, в Системном графике Лифта, необходимо установить свойство Export Chart Level Functions быть верными. Теперь измените подграфик Elevator_Manager, чтобы использовать эти функции.

Примечание: автомобильные подграфики лифта непосредственно получают доступ к локальной переменной (hall_call_status), заданный в подграфике Elevator_Manager. Поскольку атомарные подграфики могут только получить доступ к данным уровня графика, эти переменные должны быть повторно порождены к содержанию графика (Система Лифта). Переменная hall_call_queue также должна быть повторно порождена к Системе Лифта, потому что это используется одной из экспортируемых функций.

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

Шаг 2. Сделайте Elevator_A полностью заданным и независимым от Системы Лифта

Чтобы сделать подграфик Elevator_A полностью заданным, сделайте следующее:

  1. Используя Образцовый проводник, переместите постоянные объекты данных Stateflow, такие как VELOCITY и NUM_FLOORS к Elevator_A. Эти константы используются обоими автомобилями лифта.

  2. Обновите Elevator_A, чтобы вызвать недавно переименованные экспортируемые функции Системы Лифта.

Шаг 3. Создайте библиотеку атомарный подграфик, чтобы заменить автомобильные подграфики лифта

Если вы удовлетворили все требования, чтобы сделать Elevator_A атомарным подграфиком, щелкните правой кнопкой по подграфику и выберите Make Contents> Atomic Subcharted. Подстройте диаграмму Elevator_A будет теперь иметь маркировать (Atomic) как показано ниже:

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

Затем, создайте библиотеку атомарный подграфик с помощью Elevator_A. Если вы создали библиотеку атомарный подграфик:

  1. Измените Осциллограф объекта данных Stateflow position от Local до Output. Это позволит вам соединить атомарный подграфик вывод с тем из содержания графика.

  2. (Необязательно) Переименуйте вводы и выводы атомарного подграфика, чтобы быть более общими. Например, замените doorAOpen на doorOpen.

Если вы закончены, сохраняете модель библиотеки и затем копируете и вставляете атомарный подграфик дважды в Системном графике Лифта, чтобы заменить подграфики Elevator_A и Elevator_B.

Чтобы открыть модель библиотеки, щелкнуть здесь.

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

Система Лифта графика имеет 4 выходных параметров, 2 выходных параметров для каждого автомобильного подграфика лифта: каждый автомобиль лифта подстроит диаграмму выходных параметров текущее положение и текущий статус на том, открыта ли дверь лифта. Эти выходные параметры должны быть сопоставлены соответственно с отдельными автомобильными подграфиками лифта.

Одни из Системных входных параметров Лифта (fire_alarm) питаются непосредственно автомобильные подграфики лифта так, чтобы также был сопоставлен.

Поскольку автомобили лифта должны знать о состоянии каждой кнопки пола Холла (сохраненный в переменной hall_call_status в Системе Лифта), мы должны сопоставить это с памятью хранилища данных в атомарном подграфике.

Наконец, входные события, используемые каждым автомобилем лифта, а именно, часы и автомобильные события запроса вызова, должны быть сопоставлены с теми из Системы Лифта.

Похожие темы