Можно сгенерировать код только для активных значений или как для активных, так и для неактивных значений параметров варианта в Simulink®. Можно также представлять значения параметров варианта как встроенные переменные или как настраиваемые переменные в сгенерированном коде.
Примечание
Чтобы сгенерировать код только для активных значений параметров варианта, необходимо установить Simulink Coder™. Чтобы сгенерировать код для активных и неактивных значений параметров варианта, необходимо установить Embedded Coder®.
Параметры варианта могут иметь несколько значений. Каждое значение параметра варианта связано с выражением условия варианта. Во время симуляции значение параметра варианта, связанное с условием, которое вычисляется как true
- активное значение параметра варианта. Значение, сопоставленное с условием, которое вычисляется как false
- неактивное значение параметра варианта. При генерации кода можно принять решение включить в сгенерированный код только активное значение или как активное, так и неактивное значения. Можно также принять решение представлять значения как встроенные или как настраиваемые переменные в сгенерированном коде. Для получения дополнительной информации о параметрах варианта смотрите Использование параметров варианта для повторного использования параметров блоков с различными значениями.
Simulink поддерживает генерацию кода только для активных значений или как для активных, так и для неактивных значений параметров варианта. Значения, включенные в код, основаны на времени активации варианта, заданном для параметров варианта.
Когда вы задаете время активации варианта как:
update diagram
-- Simulink устанавливает активные значения параметров варианта во время обновления схемы перед распространением атрибутов сигнала. Неактивные варианты удаляются перед распространением атрибутов сигнала. Атрибуты сигнала, такие как размерности и тип данных, не анализируются на согласованность в модели. Сгенерированный код содержит только активное значение параметров варианта.
update diagram analyze all choices
-- Simulink устанавливает активные значения параметров варианта во время обновления схемы после распространения атрибутов сигнала. Атрибуты сигнала распространяются как на активные, так и на неактивные значения. Атрибуты сигнала, такие как размерности и тип данных, анализируются на согласованность по всей модели. Сгенерированный код содержит только активное значение параметров варианта.
code compile
--Simulink устанавливает активный выбор во время компиляции кода. Атрибуты сигнала распространяются как на активные, так и на неактивные значения. Атрибуты сигнала, такие как размерности и тип данных, анализируются на согласованность по всей модели. Сгенерированный код содержит как активные, так и неактивные значения параметров варианта. Значения заключаются в условные операторы препроцессора C #if
и #endif
.
Simulink поддерживает представление значений параметров варианта как встроенных переменных или как настраиваемых переменных в сгенерированном коде. Представление значений в коде основано на классе памяти, заданном для параметров варианта.
Inline переменная: Если вы задаете класс памяти параметра варианта следующим Auto
, который является классом памяти по умолчанию, и временем активации как update diagram
или update diagram analyze all choices
, затем параметр варианта вставляется в буквальное числовое значение параметра в сгенерированном коде. Если вы задаете класс памяти параметра варианта следующим Auto
и время активации как code compile
, затем параметр варианта вставляется как макрос в сгенерированный код. Встроенные переменные уменьшают глобальное использование оперативной памяти и повышают эффективность сгенерированного кода. Код не выделяет память для представления числовых параметров блоков, таких как параметр Gain блока Gain. Вместо этого код вставляется в буквальное числовое значение параметра.
Настраиваемый: Если вы задаете класс памяти параметра варианта как что-либо кроме Auto
затем параметр варианта представляется с использованием символьных имен в сгенерированном коде, как описано в разделе «Выбор класса памяти для управления представлением данных в сгенерированном коде».
В этом примере показано, как сгенерировать код С для параметров варианта. Стиль сгенерированного кода основан на времени активации варианта и классах памяти, заданных для параметров варианта.
Рассмотрим slexVariantParameters.slx
модель.
Параметры Gain блоков 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
. В сгенерированном коде значения встраиваются в буквальное значение параметров.
Прежде чем вы сгенерируете код из модели, необходимо сначала убедиться, что у вас есть разрешение на запись в текущую папку.
Подготовьте модель к генерации кода путем определения настроек генерации кода в диалоговом окне Параметров конфигурации. Выберите соответствующий решатель и цель генерации кода и проверьте строение модели на эффективность выполнения. Для получения дополнительной информации о каждом из этих шагов смотрите Сгенерировать код Используя Simulink ® Coder™.
В Apps галерее панели инструментов модели нажмите Simulink Coder.
На вкладке C Code нажмите Build.
Генератор кода создает папку slexVariantParameters_ert_rtw
в текущей рабочей папке и помещает файлы исходного кода в эту папку. Сгенерированный код находится в двух основных файлах: slexVariantParameters.c
и slexParameters.h
. Файл slexVariantParameters.h
содержит значение переменной управления вариантом и файла slexVariantParameters.c
содержит значения параметров варианта.
На вкладке C Code выберите Open Report.
Выберите slexVariantParameters.c
файл из панели Generated Code отчета. Код генерируется только для активных значений 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; |
Выберите класс памяти для контроля представления данных в сгенерированном коде | Используйте параметры варианта для повторного использования параметров блоков с различными значениями