Можно сгенерировать код только для активных значений или и для активных и для неактивных значений различных параметров в Simulink®. Можно также представлять значения различных параметров как встроенные переменные или как настраиваемые переменные в сгенерированном коде.
Примечание
Чтобы сгенерировать код только для активных значений различных параметров, необходимо установить Simulink Coder™. Чтобы сгенерировать код для активных и неактивных значений различных параметров, необходимо установить Embedded Coder®.
Различные параметры могут иметь несколько значений. Каждое значение различного параметра сопоставлено с различным выражением условия. В процессе моделирования значение различного параметра сопоставило с условием, которое оценивает к true
активное значение различного параметра. Значение сопоставило с условием, которое оценивает к false
неактивное значение различного параметра. Когда вы генерируете код, можно принять решение включать только активное значение или и активные и неактивные значения в сгенерированном коде. Можно также принять решение представлять значения как встроенные или как настраиваемые переменные в сгенерированном коде. Для получения дополнительной информации о различных параметрах смотрите Параметры Варианта Использования к Параметрам блоков Повторного использования с Различными Значениями.
Поддержки 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
, затем различный параметр встраивается к литеральному числовому значению параметра в сгенерированном коде. Если вы задаете класс памяти различного параметра как 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. Выберите соответствующий решатель и цель генерации кода, и проверяйте настройку модели на КПД выполнения. Для получения дополнительной информации о каждом из этих шагов смотрите, Генерируют Код Используя 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; |
Выберите Storage Class for Controlling Data Representation in Generated Code | Используйте различные параметры, чтобы снова использовать параметры блоков с различными значениями