Код можно создать только для активных значений или для активных и неактивных значений параметров исполнения в Simulink ®. Значения параметров вариантов можно также представить в виде встроенных переменных или настраиваемых переменных в сгенерированном коде.
Примечание
Чтобы создать код только для активных значений параметров исполнения, необходимо установить Simulink Coder™. Чтобы создать код для активных и неактивных значений параметров варианта, необходимо установить Embedded Coder ®.
Параметры варианта могут иметь несколько значений. Каждое значение параметра variant связано с выражением условия variant. Во время моделирования значение параметра исполнения, связанного с условием, которое вычисляется как true - активное значение параметра variant. Значение, связанное с условием, которое вычисляется как false - неактивное значение параметра variant. При создании кода можно включить в созданный код только активное значение или как активное, так и неактивное значение. Можно также выбрать представление значений как встроенных или как настраиваемых переменных в сгенерированном коде. Дополнительные сведения о параметрах исполнения см. в разделе Использование параметров исполнения для повторного использования параметров блока с различными значениями.
Simulink поддерживает генерацию кода только для активных значений или для активных и неактивных значений параметров исполнения. Значения, включенные в код, основаны на времени активации варианта, указанном для параметров варианта.
При указании времени активации варианта как:
update diagram - Simulink устанавливает активные значения параметров вариантов во время диаграммы обновления перед распространением атрибутов сигнала. Неактивные варианты удаляются до распространения атрибутов сигнала. Атрибуты сигнала, такие как измерение и тип данных, не анализируются на предмет согласованности в модели. Созданный код содержит только активное значение параметров варианта.
update diagram analyze all choices- Simulink устанавливает активные значения параметров вариантов во время диаграммы обновления после распространения атрибутов сигнала. Атрибуты сигнала распространяются как на активные, так и на неактивные значения. Атрибуты сигнала, такие как измерение и тип данных, анализируются на предмет согласованности в модели. Созданный код содержит только активное значение параметров варианта.
code compile - Simulink задает активный выбор во время компиляции кода. Атрибуты сигнала распространяются как на активные, так и на неактивные значения. Атрибуты сигнала, такие как измерение и тип данных, анализируются на предмет согласованности в модели. Созданный код содержит как активные, так и неактивные значения параметров варианта. Значения заключены в условные операторы препроцессора C #if и #endif.
Simulink поддерживает представление значений параметров вариантов в виде встроенных переменных или настраиваемых переменных в сгенерированном коде. Представление значений в коде основано на классе хранения, указанном для параметров варианта.
Встроенная переменная: если указан класс хранения параметра варианта как Auto, который является классом хранения по умолчанию, и время активации как update diagram или update diagram analyze all choices, затем параметр variant встраивается в литеральное числовое значение параметра в сгенерированном коде. Если указан класс хранения параметра варианта как Auto и время активации как code compileзатем параметр variant встраивается в создаваемый код в виде макросов. Встроенные переменные снижают глобальное использование ОЗУ и повышают эффективность генерируемого кода. Код не выделяет память для представления числовых параметров блока, таких как параметр усиления блока усиления. Вместо этого код привязывается к литеральному числовому значению параметра.
Настраиваемый: Если указать класс хранения параметра variant как что-либо, отличное от Autoзатем параметр варианта представляется с использованием символьных имен в сгенерированном коде, как описано в разделе Выбор класса склада для представления контроллинговых данных в сгенерированном коде.
В этом примере показано, как создать код C для параметров вариантов. Стиль созданного кода основан на времени активации варианта и классе хранения, указанном для параметров варианта.
Рассмотрим slexVariantParameters.slx модель.

Параметры усиления блоков Gain1 и Gain2 являются параметрами вариантов, для которых установлены значения K1 и K2соответственно. Переменная K1 имеет два значения: 3.5 и 8.5. Переменная K2 имеет два значения: 4.5 и 9.5.
Simulink выбирает активные значения K1 и K2 на основе значения переменной управления вариантом V. Если V==1 вычисляется как true, то значение K1 имеет значение 3.5и значение K2 имеет значение 8.5. Если V==2 вычисляется как true, то значение K1 имеет значение 4.5и значение K2 имеет значение 9.5.
Стиль созданного кода основан на времени активации варианта и классе хранения, указанном для параметров варианта. В этом примере для времени активации варианта установлено значение update diagram, и класс хранения устанавливается как Auto. При создании кода из этой модели код генерируется только для активных значений K1 и K2. В созданном коде значения привязываются к литеральному значению параметров.
Прежде чем создавать код из модели, необходимо убедиться в наличии разрешения на запись в текущей папке.
Подготовьте модель к созданию кода, указав параметры создания кода в диалоговом окне Параметры конфигурации (Configuration Parameters). Выберите соответствующий решатель и цель генерации кода и проверьте конфигурацию модели на эффективность выполнения. Дополнительные сведения о каждом из этих шагов см. в разделе Создание кода с помощью Simulink ® Coder™.
В галерее «Приложения» панели инструментов модели щелкните Кодер Simulink.
На вкладке C Code нажмите кнопку Build.
Генератор кода создает папку slexVariantParameters_ert_rtw в текущей рабочей папке и помещает файлы исходного кода в эту папку. Созданный код находится в двух основных файлах: slexVariantParameters.c и slexParameters.h. Файл slexVariantParameters.h содержит значение переменной управления вариантом и файл slexVariantParameters.c содержит значения параметров варианта.
На вкладке Код C выберите Открыть отчет.
Выберите slexVariantParameters.c на панели «Сгенерированный код» отчета. Код генерируется только для активных значений K1 и K2. В созданном коде значения привязываются к литеральному значению параметров.
mUDInlined_Y.Out1 = 4.5 * mUDInlined_U.In1; mUDInlined_Y.Out2 = 3.5 * mUDInlined_U.In2;
В модели измените время активации на code compile и класс хранения для ExportedGlobal, затем снова создайте код. Обратите внимание на изменение стиля созданного кода.
Код генерируется только для всех активных и неактивных значений K1 и K2. В созданном коде значения представлены с использованием символьных имен.
В этой таблице показаны различия в стиле созданного кода для классов хранения. Auto и ExportedGlobal с различным временем активации.
| Время активации | Класс хранения | |
Auto (по умолчанию) | ExportGlobal | |
update diagram | Код создается только для активных значений параметров варианта. В созданном коде значения привязываются к литеральному значению параметров. Рассмотрим этот фрагмент созданного кода. mUDInlined_Y.Out1 = 4.5 * mUDInlined_U.In1; mUDInlined_Y.Out2 = 3.5 * mUDInlined_U.In2; | Код создается только для активных значений параметров варианта. В созданном коде значения представлены с использованием символьных имен. Рассмотрим этот фрагмент созданного кода. Здесь, real_T K1 = 3.5; real_T K2 = 4.5; … … mUDInlined_Y.Out1 = K2 * mUDInlined_U.In2; mUDInlined_Y.Out2 = K1 * mUDInlined_U.In1; |
update diagram analyze all choices | Сгенерированный код совпадает с кодом | Сгенерированный код совпадает с кодом |
code compile | Код генерируется для всех активных и неактивных значений параметров варианта. Все значения анализируются для обеспечения непротиворечивости атрибутов сигнала, таких как размерность и тип данных в модели. В созданном коде значения встраиваются как макросы. Рассмотрим этот фрагмент созданного кода. Активные и неактивные значения заключены в условные операторы препроцессора C #if V == 1 #define rtCP_Gain1_K1 (3.5) #elif V == 2 #define rtCP_Gain1_K1 (8.5) #endif #if V == 1 #define rtCP_Gain_K2 (4.5) #elif V == 2 #define rtCP_Gain_K2 (9.5) #endif mUDInlined_Y.Out1 = rtCP_Gain_K2 * mUDInlined_U.In2; mUDInlined_Y.Out2 = rtCP_Gain1_K1 * mUDInlined_U.In1; | Код генерируется для всех активных и неактивных значений параметров варианта. Все значения анализируются для обеспечения непротиворечивости атрибутов сигнала, таких как размерность и тип данных в модели. В созданном коде значения представлены с использованием символьных имен. Рассмотрим этот фрагмент созданного кода. Активные и неактивные значения заключены в условные операторы препроцессора C #if V == 1 #real_T K1 = 3.5; #elif V == 2 #real_T K1 = 8.5; #endif #if V == 1 #real_T K2 = 4.5; #elif V == 2 #real_T K2 = 9.5; #endif mUDInlined_Y.Out1 = K2 * mUDInlined_U.In2; mUDInlined_Y.Out2 = K1 * mUDInlined_U.In1; |
Выбор класса склада для представления контроллинговых данных в сгенерированном коде | Использование параметров варианта для повторного использования параметров блока с различными значениями