Можно создать код 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.
Щелкните Моделирование (Simulation) > Выполнить (Run) и просмотрите условия исполнения, распространяемые на блоки. По умолчанию модель моделируется для подсистемы линейного контроллера.

Чтобы изменить активный вариант, задайте значение V равным ControllerChoice.Nonlinearзатем снова смоделировать модель. Модель моделируется для нелинейной подсистемы контроллера.
Прежде чем создавать код из модели, необходимо убедиться в наличии разрешения на запись в текущей папке.
Чтобы создать код, в галерее приложений панели инструментов модели щелкните Встроенный кодер (Embedded Coder). Появится вкладка C Code.
Щелкните значок «Создать код» > «Построить».
().
На вкладке «Код 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
Чтобы просмотреть определения макросов, ControllerChoice_Linear и ControllerChoice_Nonlinear, нажмите кнопку Controller.h на панели «Сгенерированный код» отчета.
#define ControllerChoice_Linear (0) /* Default value */ #define ControllerChoice_Nonlinear (1) #endif /* RTW_HEADER_Controller_h_ */
Чтобы просмотреть определение переменной управления исполнениями, V, нажмите кнопку slexVariantSetupUsingIntEnums_types.h файл.
#ifndef V #define V ControllerChoice_Linear #endif
Модель Simulink в этом примере показывает, как создать код C из модели, имеющей переменные управления вариантами перечисленного типа, полученные из Simulink.IntEnumType.
Откройте окно slexVariantSetupUsingInMemoryEnums модель. Модель запускает PreLoadFcn определено в диалоговом окне Файл (File) > Свойства модели (ModelProperties) > Обратные вызовы (Callbacks). При этом базовая рабочая область заполняется управляющими переменными для блоков исполнения.
Создать код 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