Можно сгенерировать код только для активных значений или и для активных и для неактивных значений различных параметров в Simulink®. Можно также представлять значения различных параметров как встроенные переменные или как настраиваемые переменные в сгенерированном коде.
Примечание
Для различных параметров, сопоставленных с startup
время активации, можно сгенерировать код и для активного и для неактивного выбора путем установки Simulink Coder™ или Embedded Coder®.
Для различных параметров, сопоставленных с code compile
время активации:
Необходимо установить Simulink Coder, чтобы сгенерировать код только для активных значений различных параметров.
Необходимо установить Embedded Coder, чтобы сгенерировать код и для активных и для неактивных значений различных параметров.
Различные параметры не поддерживают генерирующийся код для целей AUTOSAR.
Различные параметры могут иметь несколько значений. Каждое значение различного параметра сопоставлено с различным выражением условия. В процессе моделирования значение различного параметра сопоставило с условием, которое оценивает к true
активное значение различного параметра. Значение сопоставило с условием, которое оценивает к false
неактивное значение различного параметра. Когда вы генерируете код, можно принять решение включать только активное значение или и активные и неактивные значения в сгенерированном коде. Можно также принять решение представлять значения как встроенные или как настраиваемые переменные в сгенерированном коде. Для получения дополнительной информации о различных параметрах смотрите Параметры Варианта Использования к Параметрам блоков Повторного использования с Различными Значениями.
Поддержки Simulink, генерирующие код только для активных значений или и для активных и для неактивных значений различных параметров. Значения, включенные в код, основаны на различном времени активации, которое вы задаете для различных параметров. Для получения дополнительной информации смотрите, Активируют Вариант Во время Различных Этапов Рабочего процесса Симуляции и Генерации кода.
Когда вы задаете различное время активации как:
'update diagram'
– Simulink не анализирует значения различных параметров для несовместимостей в атрибутах сигнала. Это генерирует код только для активных значений различных параметров.
'update diagram analyze all choices'
– Simulink анализирует и активные и неактивные значения различных параметров для несовместимостей в атрибутах сигнала, однако он генерирует код только для активных значений различных параметров.
'code compile'
– Simulink анализирует и активные и неактивные значения различных параметров для несовместимостей в атрибутах сигнала, и он также генерирует код и для активных и для неактивных значений различных параметров. Значения заключены в условные операторы препроцессора C #if
и #endif
это условно скомпилировано, когда вы компилируете сгенерированный код.
'startup'
– Simulink анализирует и активные и неактивные значения различных параметров для несовместимостей в атрибутах сигнала, и он также генерирует код и для активных и для неактивных значений различных параметров. Значения заключены в регулярный if
условия в model_initialize
функция сгенерированного кода, которые условно оценены, когда вы запускаете исполняемый файл, который создается из кода.
Поддержки Simulink, представляющие значения различных параметров как встроенные переменные или как настраиваемые переменные в сгенерированном коде. Представление значений в коде основано на классе памяти, который вы задаете для различных параметров.
Встроенная переменная: Если вы задаете класс памяти различного параметра как Auto
, который является классом памяти по умолчанию, и время активации как update diagram
или update diagram analyze all choices
, затем различный параметр встраивается к литеральному числовому значению параметра в сгенерированном коде. Если вы задаете класс памяти различного параметра как Auto
и время активации как code compile
, затем различный параметр встраивается как макросы в сгенерированном коде. Встроенные переменные уменьшают глобальный КПД Использования оперативной памяти и увеличения сгенерированного кода. Код не выделяет память, чтобы представлять числовые параметры блоков, такие как параметр Gain блока Gain. Вместо этого код встраивается к литеральному числовому значению параметра.
Настраиваемый: Если вы задаете класс памяти различного параметра как что-нибудь кроме Auto
, затем различный параметр представлен с помощью символьных имен в сгенерированном коде, как описано в Выбирают Storage Class for Controlling Data Representation in Generated Code.
В этом примере показано, как сгенерировать код С для различных параметров. Стиль сгенерированного кода основан на различном времени активации и классе памяти, который вы задаете для различных параметров.
Рассмотрите 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
. В сгенерированном коде значения встраиваются к литеральному значению параметров.
Прежде чем вы сгенерируете код из модели, необходимо сначала гарантировать, что у вас есть разрешение записи в вашей текущей папке.
Подготовьте модель к генерации кода путем определения настроек генерации кода в диалоговом окне Configuration Parameters. Выберите соответствующий решатель и цель генерации кода, и проверяйте настройку модели на КПД выполнения. Для получения дополнительной информации о каждом из этих шагов смотрите, Генерируют Код Используя Embedded 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
. В сгенерированном коде значения встраиваются к литеральному значению параметров.
slexVariantParameters_Y.Out1 = 3.5 * slexVariantParameters_U.In1; slexVariantParameters_Y.Out2 = 4.5 * slexVariantParameters_U.In2;
В модели измените время активации в code compile
и класс памяти к ExportedGlobal
, затем сгенерируйте код снова. Наблюдайте изменение в стиле сгенерированного кода.
Код сгенерирован только для всех активных и неактивных значений K1
и K2
. В сгенерированном коде значения представлены с помощью символьных имен.
Эта таблица показывает различие в стиле сгенерированного кода для классов памяти Auto
и ExportedGlobal
с различными временами активации.
Время активации | Класс памяти | |
Auto (значение по умолчанию) | ExportedGlobal | |
update diagram | Код сгенерирован только для активных значений различных параметров. В сгенерированном коде значения встраиваются к литеральному значению параметров. Рассмотрите этот отрывок сгенерированного кода. slexVariantParameters_Y.Out1 = 3.5 * slexVariantParameters_U.In1; slexVariantParameters_Y.Out2 = 4.5 * slexVariantParameters_U.In2; | Код сгенерирован только для активных значений различных параметров. В сгенерированном коде значения представлены с помощью символьных имен. Рассмотрите этот отрывок сгенерированного кода. Здесь, real_T K1 = 3.5; real_T K2 = 4.5; … … slexVariantParameters_Y.Out1 = K1 * slexVariantParameters_U.In1; slexVariantParameters_Y.Out2 = K2 * slexVariantParameters_U.In2; |
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 slexVariantParameters_Y.Out1 = rtCP_Gain_K1 * slexVariantParameters_U.In1; slexVariantParameters_Y.Out2 = rtCP_Gain1_K2 * slexVariantParameters_U.In2; | Код сгенерирован для всех активных и неактивных значений различных параметров. Все значения анализируются, чтобы гарантировать непротиворечивость атрибутов сигнала, таких как размерность и тип данных через модель. В сгенерированном коде значения представлены с помощью символьных имен и заключены в условные выражения препроцессора Рассмотрите этот отрывок сгенерированного кода. Активные и неактивные значения заключены в условные операторы препроцессора C #if V == 1 real_T K1 = 3.5; real_T K2 = 4.5; #elif V == 2 real_T K1 = 8.5; real_T K2 = 9.5; #endif slexVariantParameters_Y.Out1 = K1 * slexVariantParameters_U.In1; slexVariantParameters_Y.Out2 = K2 * slexVariantParameters_U.In2; |
startup | Код сгенерирован для всех активных и неактивных значений различных параметров. Все значения анализируются, чтобы гарантировать непротиворечивость атрибутов сигнала, таких как размерность и тип данных через модель. В сгенерированном коде значения встраиваются как макросы и заключены в регулярный Рассмотрите этот отрывок сгенерированного кода. Активные и неактивные значения заключены в регулярный if (V == 1) { slexVariantParameters_P.K1 = 3.5; slexVariantParameters_P.K2 = 4.5; } else if (V == 2) { slexVariantParameters_P.K1 = 8.5; slexVariantParameters_P.K2 = 9.5; } utAssert((V == 1) || (V == 2)); slexVariantParameters_Y.Out1 = slexVariantParameters_P.K1 * ... slexVariantParameters_U.In1; slexVariantParameters_Y.Out2 = slexVariantParameters_P.K2 * ... slexVariantParameters_U.In2; | Код сгенерирован для всех активных и неактивных значений различных параметров. Все значения анализируются, чтобы гарантировать непротиворечивость атрибутов сигнала, таких как размерность и тип данных через модель. В сгенерированном коде значения представлены с помощью символьных имен и заключены в регулярный Рассмотрите этот отрывок сгенерированного кода. Активные и неактивные значения заключены в регулярный if (V == 1) { K1 = 3.5; K2 = 4.5; } else if (V == 2) { K1 = 8.5; K2 = 9.5; } utAssert((V == 1) || (V == 2)); slexVariantParameters_Y.Out1 = K1 * slexVariantParameters_U.In1; slexVariantParameters_Y.Out2 = K2 * slexVariantParameters_U.In2; |
Используйте различные параметры, чтобы снова использовать параметры блоков с различными значениями | Выберите Storage Class for Controlling Data Representation in Generated Code