Подготовьте содержащую вариант модель к генерации кода

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

Для получения информации об использовании файла 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 custom 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 пользовательский класс памяти.

Сконфигурируйте модель для генерации условных выражений препроцессора

Если вы представляете различный выбор в блоке Variant Subsystem или Различный Блок модели, код, сгенерированный для каждого различного выбора, заключен в условных выражениях препроцессора C #if, #else, #elif и #endif.

Если вы представляете различный выбор с помощью Различного Исходного блока или блока Variant Sink, код, сгенерированный для каждого различного выбора, заключен в условных выражениях препроцессора C #if и #endif.

Поэтому активный вариант выбран во время компиляции, и условные выражения препроцессора определяют который разделы кода выполниться.

Примечание

У вас должна быть Встроенная лицензия Coder®, чтобы сгенерировать код.

  1. В редакторе Simulink выберите Simulation> Model Configuration Parameters.

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

  3. В панели Отчета выберите отчет генерации кода Create.

    Примечание

    В панели Размещения Кода, если опция Compact выбрана из Файла упаковочный формат выпадающий список, не сгенерирован файл model_types.h, и содержимое файла model_types.h перемещено в model.h hfile .

  4. Выберите панель Генерации кода, и ясный Игнорируют пользовательские классы памяти и Применяются.

  5. В вашей модели щелкните правой кнопкой по блоку, содержащему различный выбор (Различная Подсистема, Различный Источник, Различный Приемник или Различная Модель), и выберите Block Parameters.

  6. Гарантируйте, что Expression (опция по умолчанию) выбран для Различного параметра режима управления.

  7. Выберите опцию, Анализируют весь выбор во время схемы обновления и генерируют условные выражения препроцессора.

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

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

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

Больше о

Была ли эта тема полезной?