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

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

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

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

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

Совет

Для моделей, которые включают сигналы шины, состоявшие из многих элементов шины, которые питают подсистемы, рассмотрите использование блоки Out Bus Element и In Bus Element. Можно использовать эти блокировки порта элемента шины вместо Inport с блоками Bus Selector для входных параметров и Outport с блоками Bus Creator для выходных параметров. Эти блокировки порта элемента шины:

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

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

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

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

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

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

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

Совет

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

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

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

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

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

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

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

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

  5. Вы не должны помечать сигналы в шине. Однако маркировка облегчает видеть отношение между сигналами элемента шины и сигналами шины. Пометьте выходной сигнал для блока Chirp Signal. Щелкните правой кнопкой по сигналу и выберите Properties. В свойстве Signal name введите chirp. Точно так же определите имя сигнала Sine Wave к 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 и вставьте блок Bus Selector справа от блока Inport. Соедините блок Inport с блоком Bus Selector.

  14. Покажите имя блока Bus Selector. Поменяйте имя на BusSelector.

  15. Справа от блока Bus Selector добавьте блок 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.

    Примечание

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

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

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

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

  5. topBus объект шины ожидает, что первый входной сигнал в шине будет назван subSignal. Используйте диалоговое окно Signal Properties, чтобы назвать сигнал bus 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 функционируйте эффективно реализует три блока Unit Delay (один для каждого значимого сигнала, такие как 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 комментируются, потому что блоки 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;

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

Блоки

Функции

Классы

Похожие темы