Опции для представления параметров варианта в сгенерированном коде

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

Variant parameter in a Gain block

Параметры 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. В сгенерированном коде значения встраиваются в буквальное значение параметров.

Сгенерируйте Inline и настраиваемый код с помощью Simulink Coder

Прежде чем вы сгенерируете код из модели, необходимо сначала убедиться, что у вас есть разрешение на запись в текущую папку.

  1. Подготовьте модель к генерации кода путем определения настроек генерации кода в диалоговом окне Параметров конфигурации. Выберите соответствующий решатель и цель генерации кода и проверьте строение модели на эффективность выполнения. Для получения дополнительной информации о каждом из этих шагов смотрите Сгенерировать код Используя Simulink ® Coder™.

  2. В Apps галерее панели инструментов модели нажмите Simulink Coder.

  3. На вкладке C Code нажмите Build.

    Генератор кода создает папку slexVariantParameters_ert_rtw в текущей рабочей папке и помещает файлы исходного кода в эту папку. Сгенерированный код находится в двух основных файлах: slexVariantParameters.c и slexParameters.h. Файл slexVariantParameters.h содержит значение переменной управления вариантом и файла slexVariantParameters.c содержит значения параметров варианта.

  4. На вкладке C Code выберите Open Report.

  5. Выберите slexVariantParameters.c файл из панели Generated Code отчета. Код генерируется только для активных значений K1 и K2. В сгенерированном коде значения встраиваются в буквальное значение параметров.

    mUDInlined_Y.Out1 = 4.5 * mUDInlined_U.In1; 
    mUDInlined_Y.Out2 = 3.5 * mUDInlined_U.In2;
    
  6. В модели измените время активации на code compile и класс памяти, для ExportedGlobal, затем сгенерируйте код снова. Наблюдайте изменение стиля сгенерированного кода.

    Код генерируется только для всех активных и неактивных значений K1 и K2. В сгенерированном коде значения представлены с помощью символьных имен.

    В этой таблице показано различие в стиле сгенерированного кода для классов памяти Auto и ExportedGlobal с различными временами активации.

    Время активацииКласс памяти
    Auto (по умолчанию)ExportGlobal
    update diagram

    Код генерируется только для активных значений параметров варианта. В сгенерированном коде значения встраиваются в буквальное значение параметров.

    Рассмотрим этот фрагмент сгенерированного кода. 4.5 и 3.5 являются нестрочными активными значениями параметров варианта Gain1 и Gain2.

    mUDInlined_Y.Out1 = 4.5 * mUDInlined_U.In1; 
    mUDInlined_Y.Out2 = 3.5 * mUDInlined_U.In2;
    

    Код генерируется только для активных значений параметров варианта. В сгенерированном коде значения представлены с помощью символьных имен.

    Рассмотрим этот фрагмент сгенерированного кода. Здесь, K1 и K2 являются символьными именами для активных значений параметров варианта Gain1 и Gain2.

    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

    Сгенерированный код аналогичен коду update diagram. Единственное различие заключается в том, что активные и неактивные значения параметров варианта анализируются, чтобы гарантировать согласованность атрибутов сигнала, таких как размерность и тип данных в модели.

    Сгенерированный код аналогичен коду update diagram. Единственное различие заключается в том, что активные и неактивные значения параметров варианта анализируются, чтобы гарантировать согласованность атрибутов сигнала, таких как размерность и тип данных в модели.

    code compile

    Код генерируется для всех активных и неактивных значений параметров варианта. Все значения анализируются, чтобы гарантировать согласованность атрибутов сигнала, таких как размерность и тип данных в модели. В сгенерированный код значения вставляются как макросы.

    Рассмотрим этот фрагмент сгенерированного кода. Активные и неактивные значения заключаются в условные операторы препроцессора C #if и #endif. rtCP_Gain1_K1 и rtCP_Gain_K2 являются макросами для параметров варианта Gain1 и Gain2.

    #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 и #endif. Здесь, K1 и K2 являются символьными именами для параметров варианта Gain1 и Gain2.

    #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;
    

См. также

|

Похожие темы