Можно сгенерировать код только для активных значений или и для активных и для неактивных значений различных параметров в 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