Используя Embedded Coder ®, можно создавать код из моделей Simulink ®, содержащих один или несколько вариантов. Созданный код содержит условия препроцессора, которые управляют активацией каждого варианта выбора.
Примечание
Simulink поддерживает использование многоэкземплярных ссылочных моделей с вариантами Simulink Functions для генерации кода.
Для получения информации об использовании STF_make_rtw_hook чтобы настроить процесс построения, см. раздел Настройка процесса построения с помощью файла STF_make_rtw_hook (Simulink Coder)
Simulink.Parameter ОбъектыПеременные MATLAB ® позволяют быстро создавать прототипы выражений управления вариантами при построении модели и создавать условия препроцессора для генерации кода. Однако если требуется указать другие атрибуты генерации кода (например, тип данных), можно преобразовать переменные MATLAB вSimulink.Parameter объекты.
Укажите модель, в которой требуется заменить переменные управления вариантами MATLAB Simulink.Parameter объекты.
model = 'my_model_containing_variant_choices';
open_system(model);
Получение переменных, на которые имеются ссылки в выражениях управления исполнениями.
vars = Simulink.VariantManager.findVariantControlVars(model)
vars =
4x1 struct array with fields:
Name
Value
Exists
Source
SourceTypeСоздайте внешний файл заголовка для указания управляющих значений вариантов, чтобы определения переменных импортировались при запуске кода.
headerFileName = [model '_importedDefines.h']; headerPreamble = strrep(upper(headerFileName),'.','_'); fid = fopen(headerFileName,'w+'); fidErr = (fid == -1); if (fidErr) fprintf('There was an error creating header file %s:... \n', headerFileName); else fprintf('+++ Creating header file ''%s'' with variant control... variable definitions.\n\n', headerFileName); fprintf(fid, '#ifndef %s\n', headerPreamble); fprintf(fid, '#define %s\n', headerPreamble); end
Переменные управления вариантами, определенные как Simulink.Parameter объекты могут иметь один из этих классов хранения.
Define или ImportedDefine с указанным файлом заголовка
CompilerFlag
SystemConstant (AUTOSAR)
Собственный класс хранения, определяющий данные как макрос
Выполните цикл через все переменные MATLAB, чтобы преобразовать их в Simulink.Parameter объекты.
count = 0; for countVars = 1:length(vars) var = vars(countVars).Name; val = vars(countVars).Value; if isa(val, 'Simulink.Parameter') % Do nothing continue; end count = count+1; % Create and configure Simulink.Parameter objects % corresponding to the control variable names. % Specify the storage class as Define (Custom). newVal = Simulink.Parameter(val); newVal.DataType = 'int16'; newVal.CoderInfo.StorageClass = 'Custom'; newVal.CoderInfo.CustomStorageClass = 'Define (Custom)'; newVal.CoderInfo.CustomAttributes.HeaderFile = headerFileName; Simulink.data.assigninGlobal(model, var, newVal); if ~fidErr fprintf(fid, '#endif\n'); fclose(fid); end end
Примечание
Файл заголовка может быть пустым для Define класс хранения.
При представлении вариантов в блоке подсистемы исполнений или в блоке модели исполнений код, генерируемый для каждого варианта, включается в условия препроцессора C #if, #else, #elif, и #endif.
При представлении вариантов с использованием блока Источник исполнения (Variant Source) или блок Получатель исполнения (Variant Sink) код, генерируемый для каждого варианта, включается в условия препроцессора C #if и #endif.
Поэтому активный вариант выбирается во время компиляции, и условия препроцессора определяют, какие разделы кода должны выполняться.
Примечание
Для создания кода необходимо иметь лицензию Embedded Coder ®.
На вкладке «Моделирование» панели инструментов «Симуляция» выберите «Параметры модели».
Выберите панель «Создание кода» и задайте для параметра «Системный целевой файл» значение ert.tlc.
На панели «Отчет» выберите Создать отчет о создании кода.
Примечание
На панели «Размещение кода», если Compact выбран из выпадающего списка Формат упаковки файлов, model_types.h файл не создан и содержимое model_types.h файл перемещен в model.h файл.
Выберите панель Создание кода и снимите флажки Игнорировать пользовательские классы хранения и Применить.
В модели щелкните правой кнопкой мыши блок, содержащий варианты (подсистема исполнения, источник исполнения, приемник исполнения или блок модели исполнения), и выберите «Параметры блока».
Убедитесь, что Expression (опция по умолчанию) выбран для параметра Режим управления вариантом (Variant control mode).
В списке Время активации варианта выберите code compile.

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