Опции, чтобы представлять различные параметры в сгенерированном коде

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

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

Сгенерируйте встроенный и настраиваемый код Используя Simulink Coder

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

  1. Подготовьте модель к генерации кода путем определения настроек генерации кода в диалоговом окне Configuration Parameters. Выберите соответствующий решатель и цель генерации кода, и проверяйте настройку модели на КПД выполнения. Для получения дополнительной информации о каждом из этих шагов смотрите, Генерируют Код Используя 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;
    

Смотрите также

|

Похожие темы