exponenta event banner

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сведения о создании этой модели см. в разделе Группирование сигнальных линий внутри компонента.

Виртуальные шины в этой модели не определены 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 объекты, которые соответствуют невиртуальным шинам, которые вы хотите создать, создайте невиртуальные шины. В редакторе Simulink дважды щелкните на блоке Bus Creator с именем Bus Creator1. В диалоговом окне «Параметры блока» задайте для параметра «Тип выходных данных» значение Bus: TopBusустановите флажок Вывести как невиртуальную шину (Output as nonvirtual bus) и нажмите кнопку ОК. TopBus теперь является невиртуальной шиной, в то время как NestedBus остается виртуальной шиной. Чтобы идентифицировать невиртуальную шину по стилю линии, скомпилируйте модель.

Дважды щелкните блок с именем Bus Creator. В диалоговом окне «Параметры блока» задайте для параметра «Тип выходных данных» значение Bus: NestedBusустановите флажок Вывести как невиртуальную шину (Output as nonvirtual bus) и нажмите кнопку ОК. NestedBus теперь является невиртуальной шиной. Чтобы обновить стиль линии, скомпилируйте модель.

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

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

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

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

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

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

  1. На панели инструментов Simulink на вкладке «Моделирование» в галерее Design выберите «Редактор шины».

  2. В редакторе шины создайте два Bus дважды щелкните Добавить шину (Add Bus).

  3. Назовите имя Bus объекты. Выберите один из вариантов Bus объекты и задайте для параметра «Имя» значение OutBus. Выберите другой Bus объект и задайте для параметра «Имя» значение NestedBus.

  4. Для каждого Bus объект, создайте Simulink.BusElement объекты, соответствующие элементам шин. Выбрать NestedBusзатем дважды нажмите кнопку «Добавить/Вставить шину». Назовите элементы Sine и Step. Выбрать OutBusзатем дважды нажмите кнопку «Добавить/Вставить шину». Назовите элементы 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) или Выполнить (Run).

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

Блоки Root (верхнего уровня) Inport и Outport также могут создавать невиртуальные шины на интерфейсах. Для определения виртуальности шины:

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

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

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

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

Виртуальную шину можно преобразовать в невиртуальную шину в любом месте модели с помощью блока преобразования сигналов.

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

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

Для просмотра обратного вызова на панели инструментов Simulink на вкладке «Моделирование» выберите «Параметры модели» > «Свойства модели». В диалоговом окне Свойства модели (Model Properties) откройте вкладку Обратные вызовы (Callbacks) и выберите обратный вызов модели PreLoadFcn.

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

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

  1. Добавьте в модель блок «К невиртуальной шине».

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

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

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

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

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

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

Блок константы можно использовать для компактного представления невиртуальной шины с элементами с постоянным значением. В блоке «Константа» укажите:

  • Структура MATLAB для значения константы.

  • A Simulink.Bus в качестве типа данных Output.

Блоки констант поддерживают только структуры 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.

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

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

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

См. также

Блоки

Объекты

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