Можно объединить сигналы в сигнал шины и затем получить доступ к шине в целом или выбрать определенные сигналы из шины. Эти примеры показывают основные принципы создания и использования шин в моделях и в сгенерированном коде. Для получения дополнительной информации смотрите Виртуальную Шину.
Пример | Описание |
---|---|
Виртуальные шины обеспечивают самый простой подход для использования шин, чтобы уменьшать помеху сигнала в блок-схеме. | |
Создайте и используйте невиртуальные шины | Невиртуальные компоненты моделирования поддержки шин (такие как 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
модель. Когда вы симулируете модель, сигнальные линии шины указывают, что шины являются виртуальными.
Выполните эти шаги, чтобы приобрести опыт, создав и с помощью виртуальных шин.
От Simulink® Start Page выберите пустой шаблон модели.
В Редакторе Simulink добавьте блок Chirp Signal и блок Sine Wave.
Создайте шину для сигналов от двух блоков. Перетащите, чтобы выбрать блоки и в строке меню, которая появляется, нажмите Create Bus.
Simulink добавляет блок Bus Creator и соединяет входные сигналы с тем блоком.
По умолчанию имя блока Bus Creator не появляется. Чтобы добавить имя блока, выберите блок и из строки меню, которая появляется, выберите Show Block Name. Затем отредактируйте имя, изменив его от Bus Creator
к SubBus
.
Вы не должны помечать сигналы в шине. Однако маркировка облегчает видеть отношение между сигналами элемента шины и сигналами шины. Пометьте выходной сигнал для блока Chirp Signal. Щелкните правой кнопкой по сигналу и выберите Properties. В свойстве Signal name введите chirp
. Точно так же определите имя сигнала Sine Wave к sine
.
Входные параметры с блоком Bus Creator должны иметь уникальные имена. Если существуют двойные названия, блок Bus Creator добавляет (signal#)
ко всем именам входного сигнала, где #
индекс входного порта.
Не используйте меньше, чем символ (<
) запустить имя сигнала.
Добавьте блок Step ниже блока Sine Wave.
Чтобы создать вложенную шину, добавьте блок Bus Creator справа от текущих блоков. Соедините сигнал от SubBus
блокируйтесь и сигнал от блока Step до второго блока Bus Creator.
Пометьте выходной сигнал SubBus
блок subBus
и сигнал от блока Step step
.
Покажите имя блока для блока Bus Creator, который создает вложенную шину. Поменяйте имя на NestedBus
.
Присоедините блок Scope к nestedBus
сигнал.
Справа от NestedBus
блокируйте, добавьте блок Subsystem и соедините NestedBus
выходной сигнал к подсистеме.
Соедините выходной порт блока Subsystem с блоком Scope.
В подсистеме отключите Inport и блоки Outport и вставьте блок Bus Selector справа от блока Inport. Соедините блок Inport с блоком Bus Selector.
Покажите имя блока Bus Selector. Поменяйте имя на BusSelector
.
Справа от блока Bus Selector добавьте блок Saturation и установите его параметр Lower limit на -inf
.
Объедините chirp
предупредите и выходной сигнал блока Saturation в шину.
Объедините сигнал шины и step
сигнал во вложенную шину.
Соедините вложенную шину с блоком Outport.
Чтобы видеть результаты симуляции, симулируйте модель и откройте блоки Scope.
Этот пример изменяет виртуальные шины, используемые в ex_bus_tutorial_virtual
модель к невиртуальным шинам. Чтобы видеть завершенную модель, откройте ex_bus_tutorial_nonvirtual
модель. Невиртуальные шины требуются для определенных ситуаций с моделированием. Генерация кода для невиртуальной шины представляет шину как структуру. Для получения дополнительной информации о том, когда использовать невиртуальные шины, смотрите Невиртуальную Шину.
Когда вы симулируете модель, сигнальные линии шины указывают, что виртуальные преобразованы в невиртуальные шины.
Выполните эти шаги, чтобы приобрести опыт, создав и с помощью невиртуальных шин.
Откройте ex_bus_tutorial_virtual
модель.
Сигналы шины не задают, являются ли они виртуальными или невиртуальными; они наследовали ту спецификацию от блока, в котором они происходят. Каждый блок, который создает или требует невиртуальной шины, должен иметь связанный объект шины.
Для SubBus
блокируйте, задайте, чтобы произвести невиртуальную шину выход. В диалоговом окне Block Parameters, набор Output data type к Bus: subBus
. Эта установка использует subBus
соедините шиной объект, который обеспечивает свойства шины, о которых сигнализирует использование Simulink, чтобы подтвердить шину.
Кроме того, выберите параметр Output as nonvirtual bus.
Когда вы используете объекты шины создать невиртуальные шины, объект шины должен быть в базовом рабочем пространстве прежде, чем симулировать модель. Необходимо задать объект шины или использовать уже заданный объект шины. Чтобы упростить этот пример, когда вы открываете модель, коллбэк модели загружает необходимые объекты шины в базовое рабочее пространство. Чтобы видеть коллбэк, на вкладке Modeling, под выпадающим Model Settings, нажимают Model Properties и открывают вкладку Callbacks.
Для получения информации о создании объектов шины смотрите Specify Bus Properties с Объектами Шины.
В NestedBus
блокируйте, установите Output data type на Bus: topBus
и выберите параметр Output as nonvirtual bus.
subBus
объект шины ожидает, что второй входной сигнал в шине будет назван sine
. Несмотря на то, что блок Bus Selector выбрал sine
сигнал от шины, именем по умолчанию выходного сигнала блока Saturation не является sine
. Используйте диалоговое окно Signal Properties, чтобы назвать выходной сигнал блока Saturation sine
.
topBus
объект шины ожидает, что первый входной сигнал в шине будет назван subSignal
. Используйте диалоговое окно Signal Properties, чтобы назвать сигнал bus subSignal
.
Чтобы видеть результаты симуляции, симулируйте модель и откройте блоки 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;
Simulink.BlockDiagram.addBusToVector
| Simulink.Bus.cellToObject
| Simulink.Bus.createMATLABStruct
| Simulink.Bus.createObject
| Simulink.Bus.objectToCell
| Simulink.Bus.save