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

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

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

Сгенерируйте Встроенный и Настраиваемый Код для Различных Параметров с помощью Embedded Coder

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

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

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

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

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

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

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

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

    slexVariantParameters_Y.Out1 = 3.5 * slexVariantParameters_U.In1;
    slexVariantParameters_Y.Out2 = 4.5 * slexVariantParameters_U.In2;

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

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

    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

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

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

    code compile

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

    Рассмотрите этот отрывок сгенерированного кода. Активные и неактивные значения заключены в условные операторы препроцессора C #if и #elif. 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
    
    slexVariantParameters_Y.Out1 = rtCP_Gain_K1 * slexVariantParameters_U.In1;
    slexVariantParameters_Y.Out2 = rtCP_Gain1_K2 * slexVariantParameters_U.In2;
    

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

    Рассмотрите этот отрывок сгенерированного кода. Активные и неактивные значения заключены в условные операторы препроцессора C #if и #elif. Здесь, K1 и K2 символьные имена для различных параметров Gain1 и Gain2.

    #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 условия.

    Рассмотрите этот отрывок сгенерированного кода. Активные и неактивные значения заключены в регулярный if операторы условия в model_initialize функция. model_initialize функция также содержит оператор контроля, чтобы проверять в наименьшем количестве одного различного значения, активно при выполнении исполняемого файла. slexVariantParameters_P.K1 и slexVariantParameters_P.K2 члены структуры для различных параметров Gain1 и Gain2.

    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 условия.

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

    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;

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

|

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте