В этом примере показано, как создать сигналы шины с элементами, имеющими различные различные условия. Эта модель имеет два сигнала (‘b’), которые объединены, чтобы создать сигнал шины. Эти два сигнала имеют различные различные условия, V == 1 и W == 1.
Селектор шины питается двумя сигналами, имеющими два различных различных условия (V == 1 и W == 1). Когда этот сигнал шины подан в селектор шины и когда вы выбираете отдельные сигналы из шины, различное условие также выбрано.
Примечание
Различные поддержки шины с помощью портов Composite в качестве портов ввода и вывода.
Чтобы видеть завершенную модель, откройте 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® использование, чтобы подтвердить сигнал шины. Для получения дополнительной информации об объектах шины смотрите Specify Bus Properties с Типами данных Object Simulink.Bus. Объект шины, используемый в шине, является безусловным, и это генерирует неосторожный код как показано ниже.
typedef struct { real_T a; int32_T b; } myBus;
Рассмотрите эту модель, содержащую блок Model.
Эта модель имеет два сигнала (‘b’), которые имеют различные различные условия, V == 1 и V == 2.
От блока Model селектор шины питается два сигнала, имеющие два различных различных условия (V == 1 и V == 2). Когда вы выбираете отдельные сигналы из шины, различные условия также выбраны.
Логгирование состояния не поддерживается для блока (например, Unit Delay), который берет в шине, в которой удалены некоторые элементы.