exponenta event banner

Подготовка модели, содержащей варианты, для создания кода

Используя Embedded Coder ®, можно создавать код из моделей Simulink ®, содержащих один или несколько вариантов. Созданный код содержит условия препроцессора, которые управляют активацией каждого варианта выбора.

Примечание

Simulink поддерживает использование многоэкземплярных ссылочных моделей с вариантами Simulink Functions для генерации кода.

Для получения информации об использовании STF_make_rtw_hook чтобы настроить процесс построения, см. раздел Настройка процесса построения с помощью файла STF_make_rtw_hook (Simulink Coder)

Преобразовать переменные управления вариантами в Simulink.Parameter Объекты

Переменные MATLAB ® позволяют быстро создавать прототипы выражений управления вариантами при построении модели и создавать условия препроцессора для генерации кода. Однако если требуется указать другие атрибуты генерации кода (например, тип данных), можно преобразовать переменные MATLAB вSimulink.Parameter объекты.

  1. Укажите модель, в которой требуется заменить переменные управления вариантами MATLAB Simulink.Parameter объекты.

    model = 'my_model_containing_variant_choices';
    open_system(model);
    
  2. Получение переменных, на которые имеются ссылки в выражениях управления исполнениями.

    vars = Simulink.VariantManager.findVariantControlVars(model)
    vars = 
    
    4x1 struct array with fields:
    
        Name
        Value
        Exists
        Source
        SourceType
  3. Создайте внешний файл заголовка для указания управляющих значений вариантов, чтобы определения переменных импортировались при запуске кода.

    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)

    • Собственный класс хранения, определяющий данные как макрос

  4. Выполните цикл через все переменные 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 ®.

  1. На вкладке «Моделирование» панели инструментов «Симуляция» выберите «Параметры модели».

  2. Выберите панель «Создание кода» и задайте для параметра «Системный целевой файл» значение ert.tlc.

  3. На панели «Отчет» выберите Создать отчет о создании кода.

    Примечание

    На панели «Размещение кода», если Compact выбран из выпадающего списка Формат упаковки файлов, model_types.h файл не создан и содержимое model_types.h файл перемещен в model.h файл.

  4. Выберите панель Создание кода и снимите флажки Игнорировать пользовательские классы хранения и Применить.

  5. В модели щелкните правой кнопкой мыши блок, содержащий варианты (подсистема исполнения, источник исполнения, приемник исполнения или блок модели исполнения), и выберите «Параметры блока».

  6. Убедитесь, что Expression (опция по умолчанию) выбран для параметра Режим управления вариантом (Variant control mode).

  7. В списке Время активации варианта выберите code compile.

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

  8. Создайте модель.

Связанные примеры

Подробнее