Начало работы с шинами

Можно объединить сигналы в сигнал шины и затем получить доступ к шине в целом или выбрать определенные сигналы из шины. Эти примеры показывают основные принципы создания и использования шин в моделях и в сгенерированном коде. Для получения дополнительной информации смотрите Шины.

ПримерОписание

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

Виртуальные шины обеспечивают самый простой подход для использования шин, чтобы уменьшать помеху сигнала в блок-схеме.
Создайте и используйте невиртуальные шиныНевиртуальные компоненты моделирования поддержки шин (такие как S-функции или блоки MATLAB function), которые требуют явным образом заданных интерфейсов.
Сгенерируйте код для шинСгенерированный код для виртуальных и невиртуальных шин отличается. Генерация кода для невиртуальной шины производит структуру, которая может быть полезной для трассировки соответствия между моделью и ее сгенерированным кодом.
slexBusExampleПростые примеры, которые вводят использующие связанные с шиной блоки, включая анимации для умного редактирования сигналов шины.

Совет

Для моделей, которые включают сигналы шины, состоявшие из многих элементов шины, которые питают подсистемы, рассмотрите использование В Элементе Шины и блоках Элемента Шины. Можно использовать эти блокировки порта элемента шины вместо Inport с блоками Селектора Шины для входных параметров и Выходной порт с блоками Создателя Шины для выходных параметров. Эти блокировки порта элемента шины:

  • Уменьшайте сложность сигнальной линии и помеху в блок-схеме.

  • Облегчите изменять интерфейс инкрементно.

  • Предоставьте доступ к элементу шины ближе на грани использования, избежав использования настройки блока Селектор и Goto Шины.

Для получения дополнительной информации смотрите, Упрощают Интерфейсы шины Подсистемы.

Эти примеры просты, чтобы фокусироваться на основных шагах в создании и использовании шин. Шины являются самыми полезными, когда у вас есть много сигналов, которые целесообразны объединяться, чтобы уменьшать визуальную сложность. Примеры также включают шаги в блоки меток и сигналы, чтобы разъяснить отношение между сигналами и шинами и между блоками. Если вы принимаете решение создать постепенные модели в качестве примера, можно пропустить те шаги, если вам нравится.

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

Этот пример показывает, как объединить сигналы в виртуальные шины. Модель выбирает отдельные сигналы (элементы шины) от виртуальной шины и использует элементы шины в качестве отдельных сигналов.

Совет

Чтобы изменить значения элемента шины, не добавляя блоки Создателя Селектора и Шины Шины, которые выбирают элементы шины и повторно собирают их в шину, можно использовать блок Bus Assignment. Для получения дополнительной информации смотрите Значения сигналов Присвоения к Шине.

Чтобы видеть завершенную модель, откройте модель ex_bus_tutorial_virtual. Когда вы моделируете модель, сигнальные линии шины указывают, что шины являются виртуальными.

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

  1. От Simulink® Start Page выберите пустой образцовый шаблон.

  2. В Редакторе Simulink добавьте блок Chirp Signal и блок Sine Wave.

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

    Simulink добавляет блок Bus Creator и соединяет входные сигналы с тем блоком.

  4. По умолчанию имя блока Создателя Шины не появляется. Чтобы добавить имя блока, выберите блок и из строки меню, которая появляется, выберите Show Block Name. Затем отредактируйте имя, изменив его от Bus Creator до SubBus.

  5. Вы не должны маркировать сигналы в шине. Однако маркировка облегчает видеть отношение между сигналами элемента шины и сигналами шины. Маркируйте выходной сигнал для блока Chirp Signal. Щелкните правой кнопкой по сигналу и выберите Properties. В свойстве Signal name введите chirp. Точно так же определите имя Синусоидального сигнала к sine.

    Примечание

    Входные параметры к блоку Bus Creator должны иметь уникальные имена. Если существуют двойные названия, блок Bus Creator добавляет (signal#) ко всем именам входного сигнала, где # является индексом входного порта.

    Не используйте меньше, чем символ (<), чтобы запустить имя сигнала.

  6. Добавьте блок Step ниже блока Sine Wave.

  7. Чтобы создать вложенную шину, добавьте блок Bus Creator справа от текущих блоков. Соедините сигнал от блока SubBus и сигнал от блока Step до второго блока Bus Creator.

  8. Маркируйте выходной сигнал блока SubBus subBus и сигналом от блока Step step.

  9. Покажите имя блока для блока Bus Creator, который создает вложенную шину. Поменяйте имя на NestedBus.

  10. Присоедините блок Scope к сигналу nestedBus.

  11. Справа от блока NestedBus добавьте блок Subsystem и соедините выходной сигнал NestedBus с подсистемой.

  12. Соедините выходной порт блока Subsystem с блоком Scope.

  13. В подсистеме отключите блоки Inport и Outport и вставьте блок Селектора Шины справа от блока Inport. Соедините блок Inport с блоком Селектора Шины.

  14. Покажите имя блока Селектора Шины. Поменяйте имя на BusSelector.

  15. Справа от блока Селектора Шины добавьте блок Saturation и установите его параметр Lower limit на -inf.

  16. Объедините сигнал chirp и выходной сигнал блока Saturation в шину.

  17. Объедините сигнал шины и сигнал step во вложенную шину.

  18. Соедините вложенную шину с блоком Outport.

  19. Чтобы видеть результаты симуляции, моделируйте модель и откройте блоки Scope.

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

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

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

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

  1. Откройте модель ex_bus_tutorial_virtual.

  2. Сигналы шины не задают, являются ли они виртуальными или невиртуальными; они наследовали ту спецификацию от блока, в котором они происходят. Каждый блок, который создает или требует невиртуальной шины, должен иметь связанный объект шины.

    Для блока SubBus задайте, чтобы произвести невиртуальную шину вывод. В диалоговом окне Block Parameters, набор Output data type к Bus: subBus. Эта установка использует объект шины subBus, который обеспечивает свойства шины, о которых сигнализирует использование Simulink, чтобы подтвердить шину.

    Кроме того, выберите параметр Output as nonvirtual bus.

    Примечание

    Когда вы используете объекты шины создать невиртуальные шины, объект шины должен быть в базовом рабочем пространстве прежде, чем моделировать модель. Необходимо задать объект шины или использовать уже заданный объект шины. Чтобы упростить этот пример, когда вы открываете модель, образцовый коллбэк загружает необходимые объекты шины в базовое рабочее пространство. Чтобы видеть коллбэк, откройте File> Model Properties> Model Properties и откройте вкладку Callbacks.

    Для получения информации о создании объектов шины смотрите, Создают Объекты Шины.

  3. В блоке NestedBus, набор Output data type к Bus: topBus и выбору параметр Output as nonvirtual bus.

  4. Объект шины subBus ожидает, что второй входной сигнал в шине будет назван sine. Несмотря на то, что блок Селектора Шины выбрал сигнал sine из шины, именем по умолчанию выходного сигнала блока Saturation не является sine. Используйте диалоговое окно Signal Properties, чтобы назвать выходной сигнал блока Saturation sine.

  5. Объект шины topBus ожидает, что первый входной сигнал в шине будет назван subSignal. Используйте диалоговое окно Signal Properties, чтобы назвать сигнал шины subSignal.

  6. Чтобы видеть результаты симуляции, моделируйте модель и откройте блоки Scope. Результаты эквивалентны, когда вы моделируете модель ex_bus_tutorial_virtual, которую вы использовали в качестве основы для этой модели.

Сгенерируйте код для шин

Результаты симуляции являются тем же самым для модели, которая использует виртуальные шины (ex_bus_tutorial_virtual) и для модели, которая использует невиртуальные шины (ex_bus_tutorial_nonvirtual). Однако сгенерированный код отличается.

При добавлении блока Unit Delay и блока Outport после того, как блок Subsystem в каждой из моделей помогает подсветить различия в сгенерированном коде.

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

Сгенерируйте код из модели ex_bus_tutorial_virtual_code_gen.

Виртуальные шины не влияют на сгенерированный код. Например, в сгенерированном файле ex_bus_tutorial_virtual_code_gen.c, алгоритм в функции модели step эффективно реализует три блока Единичной задержки (один для каждого значимого сигнала, такие как chirp, который проходит через блок).

  /* UnitDelay: '<Root>/Unit Delay' */
  rtb_chirp = ex_bus_tutorial_virtual_code_DW.UnitDelay_1_DSTATE;

  /* UnitDelay: '<Root>/Unit Delay' */
  rtb_signal2 = ex_bus_tutorial_virtual_code_DW.UnitDelay_2_DSTATE;

  /* UnitDelay: '<Root>/Unit Delay' */
  rtb_step = ex_bus_tutorial_virtual_code_DW.UnitDelay_3_DSTATE;

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

Для невиртуальной модели шины Output data type установлен в блоки Bus: topBus и Scope, комментируются, потому что блоки Осциллографа не нужны для сгенерированного кода и не поддерживают генерацию кода.

Сгенерируйте код из модели ex_bus_tutorial_nonvirtual_code_gen.

Невиртуальные шины появляются в сгенерированном коде как структуры. Каждый объект Simulink.Bus появляется как тип структуры. Определения типа появляются в ex_bus_tutorial_nonvirtual_code_gen_types.h.

typedef struct {
  real_T chirp;
  real_T sine;
} subBus;

typedef struct {
  subBus subSignal;
  real_T step;
} topBus;

Алгоритм в функции модели step может реализовать блок Unit Delay как одну строку кода. Состояние блока и вывод являются структурами типа topBus.

  /* UnitDelay: '<Root>/Unit Delay' */
  rtb_UnitDelay = ex_bus_tutorial_nonvirtual_c_DW.UnitDelay_DSTATE;

Смотрите также

Блоки

Функции

Классы

Похожие темы