Этот пример показывает, как создать сигналы шины с элементами, имеющими различные условия исполнения. Эта модель имеет два сигнала («a», «b»), которые объединяются, чтобы создать сигнал шины. Эти два сигнала имеют различные условия исполнения, V = = 1 и W = = 1.
Селектор шины питается двумя сигналами, имеющими два различных условия исполнения (V = = 1 и W = = 1). Когда этот сигнал шины подается в селектор шины и когда вы выбираете отдельные сигналы от шины, также выбирается условие варианта.
Примечание
Шина варианта поддерживает использование составных портов в качестве входных и выходных портов.
Чтобы увидеть завершенную модель, откройте slexVariantBus
модель.
Блок Variant Source может принимать как виртуальные, так и невиртуальные входы шины.
Рассмотрим эту модель.
Шина создается с вариантными условиями V = 1 и W = 1. Когда условия V и W распространяются через шину и когда отдельные элементы выбираются из шины, условия также выбираются.
Можно сгенерировать код для модели. Для этого на вкладке Apps панели инструментов нажмите Embedded Coder, затем на вкладке C Code нажмите Build. Для получения дополнительной информации о конфигурировании модели для генерации кода смотрите Подготовку Содержащей Варианты Модели для Генерации Кода.
При генерации кода с условиями препроцессора типы шины и иерархии всех входов шины должны быть одинаковыми.
Виртуальные шины обеспечивают самый простой подход для использования шин для уменьшения загромождения сигнала в блок схеме. Невиртуальные шины поддерживают компоненты моделирования (такие как S-функции или блоки MATLAB Function), которые требуют явно заданных интерфейсов. Не происходит изменений в поведении распространения вариантов условий, когда условия варианта распространяются через виртуальную или невиртуальную шину.
Код, сгенерированный для виртуальной шины, показан ниже.
/* Block states (default storage) for system '<Root>' */ typedef struct { #if V == 1 real_T UnitDelay_1_DSTATE; /* '<Root>/Unit Delay' */ #define D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS #endif /* V == 1 */ #if W == 1 int32_T UnitDelay_2_DSTATE; /* '<Root>/Unit Delay' */ #define D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS #endif /* W == 1 */ #ifndef D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS char _rt_unused; #endif } D_Work_ex_bus_var_cond;
Код, сгенерированный для невиртуальной шины, показан ниже.
/* Block states (default storage) for system '<Root>' */ typedef struct { #if V == 1 || W == 1 myBus UnitDelay_DSTATE; /* '<Root>/Unit Delay' */ #define D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS #endif /* V == 1 || W == 1 */ #ifndef D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS char _rt_unused; #endif } D_Work_ex_bus_var_cond;
Вы должны иметь связанный объект шины в шине, который обеспечивает свойства Simulink® используется для проверки сигнала шины. Для получения дополнительной информации об объектах шины см. Раздел «Задание свойств шины с Simulink типами данных объектов .Bus». Объект шины, используемый в шине, является безусловным и генерирует незащищенный код, как показано ниже.
typedef struct { real_T a; int32_T b; } myBus;
Рассмотрим эту модель, содержащую блок Model.
Эта модель имеет два сигнала («a», «b»), которые имеют различные условия варианта, V = = 1 и V = = 2.
Из блока Model на селектор шины подаются два сигнала, имеющих два различных условия варианта (V = = 1 и V = = 2). При выборе отдельных сигналов от шины также выбираются условия варианта.
Порты элемента корневой шины не поддерживаются элементами варианта.
Объекты шины не поддерживают элементы варианта.
Логгирование состояния не поддерживается для блока (для примера, Unit Delay), который принимает шину, в которой некоторые элементы удаляются.