exponenta event banner

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

Создание шин с условиями исполнения

В этом примере показано, как создавать сигналы шины с элементами, имеющими различные условия исполнения. Эта модель имеет два сигнала («a», «b»), которые объединяются для создания сигнала шины. Эти два сигнала имеют различные вариационные условия, V = = 1 и W = = 1.

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

Примечание

Вариативная шина поддерживает использование составных портов в качестве портов ввода и вывода.

Чтобы увидеть завершенную модель, откройте slexVariantBus модель.

Распространение условия исполнения с шиной

Блок Variant Source может принимать либо виртуальные, либо невиртуальные входы шины.

Рассмотрим эту модель.

Шина создается с условиями варианта V = 1 и W = 1. Когда условия V и W распространяются по шине и когда отдельные элементы выбираются из шины, условия также выбираются.

Создание кода

Для модели можно создать код. Для этого на вкладке «Приложения» панели инструментов щелкните «Внедренный кодер», затем на вкладке «Код C» щелкните «Сборка». Дополнительные сведения о настройке модели для создания кода см. в разделе Подготовка модели, содержащей варианты, к созданию кода.

При формировании кода с предпроцессорными условиями типы шин и иерархии всех входов шины должны быть одинаковыми.

Поведение виртуальной и невиртуальной шины

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

Код, сгенерированный для виртуальной шины, показан ниже.

/* 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 Object Data Types. Объект шины, используемый в шине, является безусловным и генерирует незащищенный код, как показано ниже.

typedef struct {
real_T a;
int32_T b;
} myBus;

Шина исполнения с блоком модели

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

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

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

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

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

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

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

Связанные темы