exponenta event banner

Представление значений условия исполнения перечисляемого типа в сгенерированном коде

Можно создать код C из модели Simulink ® с переменными условия исполнения или значениями поддерживаемых Simulink типов перечисления. Перечисляемые типы улучшают читаемость кода, поскольку значения условий и переменные в выражениях управления представлены как значимые имена, а не целые числа. В этом разделе вы узнаете:

  • Создание кода C из модели со значениями условия исполнения перечисляемых типов.

  • Способ представления значений условия варианта в сгенерированном коде.

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

В этом примере показано, как создать код C из модели Simulink со значениями условия исполнения перечисляемого типа, производного от встроенного целого числа int32.

Откройте окно slexVariantSetupUsingIntEnums модель. В этой модели выполняется PostLoadFcn определено в диалоговом окне Файл (File) > Свойства модели (ModelProperties) > Обратные вызовы (Callbacks). Эта функция заполняет базовую рабочую область управляющими переменными для блоков исполнения.

В этой модели блоки Приемник исполнения (Variant Sink) и Источник исполнения (Variant Source) определяют два потенциальных варианта для подсистем Линейный контроллер (Linear controller) и Нелинейный контроллер (Nonlinear controller). Управляющее выражение для подсистемы линейного контроллера: V == ControllerChoice.Linear. Управляющее выражение для подсистемы нелинейного контроллера: V == ControllerChoice.NonLinear. Здесь, ControllerChoice является целочисленным классом перечисления, производным от встроенного типа данных, int32. Класс определен в ControllerChoice.m файл. Класс имеет два значения перечисления, Linear и Nonlinear. Эти перечисляемые значения имеют базовые целочисленные значения 0 и 1.

Переключение между вариантами вариантов

  1. Щелкните Моделирование (Simulation) > Выполнить (Run) и просмотрите условия исполнения, распространяемые на блоки. По умолчанию модель моделируется для подсистемы линейного контроллера.

  2. Чтобы изменить активный вариант, задайте значение V равным ControllerChoice.Nonlinearзатем снова смоделировать модель. Модель моделируется для нелинейной подсистемы контроллера.

Создать код из модели

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

  1. Чтобы создать код, в галерее приложений панели инструментов модели щелкните Встроенный кодер (Embedded Coder). Появится вкладка C Code.

  2. Щелкните значок «Создать код» > «Построить». ().

Просмотреть созданный код

  1. На вкладке «Код C» панели инструментов выберите «Открыть отчет».

    В созданном коде управляющие значения вариантов ControllerChoice.Linear и ControllerChoice.Nonlinear преобразуются в ControllerChoice_Linear и ControllerChoice_Nonlinearсоответственно. Допустимый процессор C распознает этот формат. Код также включает определения макросов, соответствующих этим вариантам. Активный вариант определяется с помощью препроцессорных условий (#if) на макросах (#define) ControllerChoice_Linear и ControllerChoice_Nonlinear.

    #if V == ControllerChoice_Linear
    
    slexVariantSetupUsingIntEnums_B.VariantMerge_For_Variant_Source =
    slexVariantSetupUsingIntEnums_P.DiscreteTransferFcn_NumCoef_a *
    slexVariantSetupUsingIntEnum_DW.DiscreteTransferFcn_states_o;
    
    #endif
    
    #if V == ControllerChoice_Nonlinear
    
    slexVariantSetupUsingIntEnums_B.VariantMerge_For_Variant_Source =
    look1_binlxpw(slexVariantSetupUsingIntEnums_P.DiscreteTransferFcn_NumCoef_l *
    slexVariantSetupUsingIntEnum_DW.DiscreteTransferFcn_states_n,
    slexVariantSetupUsingIntEnums_P.uDLookupTable_bp01Data,
    slexVariantSetupUsingIntEnums_P.uDLookupTable_tableData, 10U);
    
    #endif
  2. Чтобы просмотреть определения макросов, ControllerChoice_Linear и ControllerChoice_Nonlinear, нажмите кнопку Controller.h на панели «Сгенерированный код» отчета.

    #define ControllerChoice_Linear     (0)  /* Default value */
    #define ControllerChoice_Nonlinear  (1)
    #endif                                  /* RTW_HEADER_Controller_h_ */
  3. Чтобы просмотреть определение переменной управления исполнениями, V, нажмите кнопку slexVariantSetupUsingIntEnums_types.h файл.

    #ifndef V
    #define V                              ControllerChoice_Linear
    #endif

Использовать в памяти перечисляемый тип, производный от Simulink.IntEnumType

Модель Simulink в этом примере показывает, как создать код C из модели, имеющей переменные управления вариантами перечисленного типа, полученные из Simulink.IntEnumType.

  1. Откройте окно slexVariantSetupUsingInMemoryEnums модель. Модель запускает PreLoadFcn определено в диалоговом окне Файл (File) > Свойства модели (ModelProperties) > Обратные вызовы (Callbacks). При этом базовая рабочая область заполняется управляющими переменными для блоков исполнения.

  2. Создать код C. Переменные управления вариантами Controller.Linear и Controller.Nonlinear представлены как Controller_Linear и Controller_Nonlinear в сгенерированном коде, как также показано в приведенном выше примере.

    Макрос Controller_Linear и Controller_Nonlinear определены в Controller.h файл.

    #define Controller_Linear     (0)  /* Default value */
    #define Controller_Nonlinear  (1)
    #endif                                  /* RTW_HEADER_Controller_h_ */

    Управляющая переменная варианта определяется в slexVariantSetupUsingInMemoryEnums_types.h файл.

    #ifndef V
    #define V                              Controller_Linear
    #endif

Связанные темы