Варианты элементов в шинах

Создание шин с вариантными условиями

Этот пример показывает, как создать сигналы шины с элементами, имеющими различные условия исполнения. Эта модель имеет два сигнала («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

Рассмотрим эту модель, содержащую блок Model.

Эта модель имеет два сигнала («a», «b»), которые имеют различные условия варианта, V = = 1 и V = = 2.

Из блока Model на селектор шины подаются два сигнала, имеющих два различных условия варианта (V = = 1 и V = = 2). При выборе отдельных сигналов от шины также выбираются условия варианта.

Известные ограничения

  • Порты элемента корневой шины не поддерживаются элементами варианта.

  • Объекты шины не поддерживают элементы варианта.

  • Логгирование состояния не поддерживается для блока (для примера, Unit Delay), который принимает шину, в которой некоторые элементы удаляются.

Похожие темы