Создание невиртуальных шин

Невиртуальная шина аналогична struct в коде С Используйте невиртуальные шины для:

  • Упакуйте данные шины как структуры в сгенерированный код C.

  • Создайте массив шин.

  • Интерфейс с внешним кодом через S-функцию.

  • Иметь данные шины через MATLAB® Function блок или Stateflow® контуры графика.

  • Отображение и логгирование шин с блоком Scope.

Невиртуальные автобусы требуют Simulink.Bus тип данных объекта. Чтобы симулировать модель, которая содержит невиртуальные шины, ссылку на Bus объекты должны быть в базовом рабочем пространстве или словаре данных, используемом моделью. Для получения дополнительной информации смотрите Задать свойства шины с Simulink типами данных объекта .Bus.

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

Способ создания невиртуальных шин отличается в зависимости от местоположения шины и блока, который создает шину:

Чтобы сосредоточиться на фундаментальных шагах, эти примеры просты. Однако шины наиболее полезны, когда у вас есть много сигналов для объединения.

Создайте невиртуальные шины в компоненте

Можно использовать блоки Bus Creator для создания невиртуальных шин в компонентах.

Откройте и скомпилируйте модель примера, которая использует блоки Bus Creator для создания иерархии виртуальных шин. Чтобы скомпилировать модель, на вкладке Моделирование (Modeling) панели инструментов Simulink, нажмите Обновить модель (Update Model) или Запуск. Компиляция модели обновляет стили линии, которые можно использовать для визуальной идентификации шин.

Чтобы создать эту модель, смотрите Групповые сигнальные линии в компоненте.

Виртуальные шины в этой модели не заданы Simulink.Bus объекты. Чтобы изменить выход блоков Bus Creator на невиртуальные шины, вы должны иметь Bus объекты, которые соответствуют иерархии шин.

Как создать Bus объекты, которые соответствуют TopBus и NestedBus, используйте Simulink.Bus.createObject функция. В Командном Окне MATLAB введите:

Simulink.Bus.createObject('NonvirtualBusCreationModel',...
  'NonvirtualBusCreationModel/Bus Creator1');

Эта функция создает Bus объект, который соответствует шине выхода указанного блока. Если выход шина содержит вложенные шины, функция также создает Bus объекты, которые соответствуют вложенным шинам. В этом примере функция создает два Bus объекты, которые названы в честь соответствующих автобусов, TopBus и NestedBus.

Чтобы просмотреть Bus откройте Редактор шин. В Командном Окне MATLAB введите:

buseditor

Теперь, когда у вас есть Bus объекты, которые соответствуют невиртуальным шинам, которые вы хотите создать, создают невиртуальные шины. В Редактор дважды кликните блок Bus Creator с именем Bus Creator1. В диалоговом окне Параметры Блоков установите тип выходных данных Bus: TopBusустановите флажок Output as nonvirtual bus и нажмите OK TopBus. теперь является невиртуальной шиной, в то время как NestedBus остается виртуальной шиной. Чтобы идентифицировать невиртуальную шину по стилю линии, скомпилируйте модель.

Дважды кликните блок с именем Bus Creator. В диалоговом окне Параметры Блоков установите тип выходных данных Bus: NestedBusустановите флажок Output as nonvirtual bus и нажмите OK NestedBus. теперь является невиртуальной шиной. Чтобы обновить стиль линии, скомпилируйте модель.

Если вы не сохраняете Bus объекты, затем необходимо воссоздать Bus объекты при повторном открытии модели. Для получения информации о том, как сохранить Bus объекты, см. «Задание свойств шины с Simulink типами данных объектов .Bus».

Создайте невиртуальные шины в интерфейсах

Чтобы создать невиртуальную шину на интерфейсе, соедините элементы шины с блоками Out Bus Element и укажите, что выход шина является невиртуальной.

Откройте пример модели, которая использует три Элемента Out Bus блоков для создания виртуальной шины в выход порту OutBus.

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

Невиртуальные автобусы требуют Simulink.Bus тип данных объекта. Создайте Bus тип данных объекта, который соответствует шине выхода.

  1. На панели инструментов Simulink, на вкладке Modeling, в галерее Design, выберите Bus Editor.

  2. В редакторе шин создайте два Bus дважды нажатие «Добавить шину».

  3. Назовите Bus объекты. Выберите один из Bus Объектами и установите Имя равным OutBus. Выберите другое Bus Объектом и установите Имя равным NestedBus.

  4. Для каждого Bus объект, создайте Simulink.BusElement объекты, которые соответствуют элементам автобусов. Выберите NestedBus, затем дважды нажмите Add/Insert BusElement. Назовите элементы Sine и Step. Выберите OutBus, затем дважды нажмите Add/Insert BusElement. Назовите элементы Chirp и NestedBus.

  5. Задайте Bus тип данных объекта для любых вложенных шин. С NestedBus BusElement выбран объект, установите Тип данных Bus: NestedBus, затем нажмите Применить.

Чтобы вывести невиртуальную шину, задайте Bus тип данных объекта и виртуальность шины.

  1. Откройте диалоговое окно для порта, дважды щелкнув один из блоков Out Bus Element.

  2. В древовидной иерархии диалогового окна сделайте паузу на OutBus, и щелкните значок карандаша, который появляется рядом с OutBus.

  3. Задайте Bus тип данных объекта. Установите тип данных на Bus: OutBus.

  4. В древовидной иерархии диалогового окна щелкните атрибуты сигнала, которые теперь появляются рядом с OutBus.

  5. Укажите виртуальность шины. Установите виртуальность шины на nonvirtual, затем закройте диалоговое окно.

Выходы модели являются невиртуальной шиной. Чтобы увидеть невиртуальную шину, ссылитесь на модель в другой модели или переместите блоки Out Bus Element в подсистему. Обновление стилей линии при компиляции модели. Чтобы скомпилировать модель, на вкладке Моделирование (Modeling) панели инструментов Simulink, нажмите Обновить модель (Update Model) или Запуск.

Если вы не сохраняете Bus объекты, затем необходимо воссоздать Bus объекты при повторном открытии модели. Для получения информации о том, как сохранить Bus объекты, см. «Задание свойств шины с Simulink типами данных объектов .Bus».

Корневые (верхний уровень) блоки Inport и Outport могут также создавать невиртуальные шины на интерфейсах. Чтобы задать виртуальность шины:

  • Для корневого блока Inport на вкладке Signal Attributes диалогового окна выберите Output as nonvirtual bus.

  • Для корневого блока Outport на вкладке Signal Attributes диалогового окна выберите Output as nevirtual bus в родительской модели.

В блоках Bus Element используйте параметр Bus virtuality, чтобы определить, наследуют ли они или определяют виртуальность шины. Если блок определяет виртуальность шины, а виртуальность входа шины не совпадает, компиляция модели приводит к ошибке.

Преобразование виртуальной шины в невиртуальную

Можно преобразовать виртуальную шину в невиртуальную шину в любом месте модели с помощью блока Signal Conversion.

Откройте и скомпилируйте модель примера, которая содержит виртуальную иерархию шин, созданную блоками Bus Creator. Чтобы скомпилировать модель, на вкладке Моделирование (Modeling) панели инструментов Simulink, нажмите Обновить модель (Update Model) или Запуск. Компиляция модели обновляет стили линии, которые можно использовать для визуальной идентификации шин.

Чтобы определить шины и поддержать преобразование в невиртуальные шины, блоки Bus Creator задают Simulink.Bus типы данных объекта. Как создать Bus объекты в базовом рабочем пространстве, когда модель загружена, модель использует PreLoadFcn коллбэк.

Чтобы просмотреть коллбэк, на панели инструментов Simulink, на вкладке « Моделировании», щелкните Настройки модели > Свойства модели. В диалоговом окне Свойства модели откройте вкладку Коллбэки и выберите коллбэк модели PreLoadFcn.

Чтобы преобразовать виртуальную шину в невиртуальную, используйте блок To Nonvirtual Bus, который является предварительно сконфигурированной версией блока Signal Conversion, у которого значение Output установлено на Nonvirtual bus.

В модели примера:

  1. Добавьте блок To Nonvirtual Bus в модель.

  2. Перетащите блок To Nonvirtual Bus на линию между блоками Bus Creator1 и Scope. Когда вы перетаскиваете блок на линию, блок соединяется с линией на обоих концах.

Предположим, что тип данных шины, которую вы хотите преобразовать, не задан Bus объект. Вам потребуется выполнить следующие дополнительные действия:

  1. Создание соответствующей Bus объекты.

  2. Определение Bus тип данных объекта для шины. Например, установка параметра Data type блока To Nonvirtual Bus на Bus объект, который соответствует шине входа.

Вход в блок To Nonvirtual Bus является виртуальной шиной, а выход - невиртуальной шиной. Чтобы увидеть невиртуальный стиль линии шины, скомпилируйте модель.

Создайте невиртуальную шину из структуры MATLAB

Можно использовать блок Constant, чтобы компактно представлять невиртуальную шину с постоянными элементами. На блоке Constant задайте:

  • Структура MATLAB для Constant value.

  • A Simulink.Bus объект как тип выходных данных.

Постоянные блоки поддерживают структуры MATLAB только, когда типом выходных данных является Bus объект.

Например, задайте структуру MATLAB с именем const_param_struct с именованными элементами Offset, Gain, и Threshold.

const_param_struct.Offset = 197;
const_param_struct.Gain = 4.32;
const_param_struct.Threshold = 795.68;

Определите соответствующую Bus тип данных объекта.

Simulink.Bus.createObject(const_param_struct)

Новая Bus объект использует имя по умолчанию slBus1.

Откройте и симулируйте модель примера, которая содержит блок Constant с установленным на const_param_struct Постоянным значением и выход данных, установленный на Bus: slBus1.

open_system('NonvirtualBusFromStructModel')
sim('NonvirtualBusFromStructModel');

Выходы блока Constant являются невиртуальной шиной.

См. также

Блоки

Объекты

Похожие темы