Задайте опцию компиляции для пользовательских проверок Model Advisor

В зависимости от реализации вашей модели и того, чего вы хотите, чтобы ваша собственная проверка достигла, важно, чтобы вы указали правильную опцию компиляции. Вы задаете опцию компиляции для функции определения проверки ModelAdvisor.Check объект путем установки CallbackContext свойство следующим образом:

  • None указывает, что Model Advisor не должен компилировать модель перед анализом по собственной проверке. None - настройка по умолчанию для CallbackContext свойство.

  • PostCompile указывает, что Model Advisor должен скомпилировать модель, чтобы обновить диаграмму модели, а затем моделировать модель, чтобы выполнить собственную проверку. Model Advisor не помечает проблемы моделирования, которые отказывают во время генерации кода, потому что эти проблемы не влияют на моделируемую модель.

  • PostCompileForCodegen указывает, что Model Advisor должен скомпилировать и обновить диаграмму модели специально для генерации кода, но не моделирует модель. Используйте эту опцию для проверок Model Advisor, которые анализируют готовность генерации кода модели.

Проверки, которые оценивают готовность генерации кода модели

Можно создать пользовательские проверки Model Advisor, которые позволят модулю Model Advisor идентифицировать проблемы настройки генерации кода в модели на более раннем этапе, чтобы можно было избежать неожиданных ошибок во время генерации кода. Для примера в этой модели Red перечисление в BasicColors и OtherColors являются OK для использования в моделируемой модели. Однако в сгенерированном коде эти Red перечисления приводят к конфликту перечислений. При помощи 'PostCompileForCodegen' опция, ваша пользовательская проверка Model Advisor может идентифицировать этот тип проблемы настройки генерации кода.

The 'PostCompileForCodegen' опция компилирует модель для всех вариантов выбора. Эта компиляция позволяет вам анализировать возможные проблемы, существующие в сгенерированном коде, для активных и неактивных путей вариантов в модели. Пример приведен в разделе «Создание собственной проверки для оценки активных и неактивных путей исполнения из модели».

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

В этом примере показано создание пользовательской проверки Model Advisor, которая оценивает активные и неактивные пути исполнения из вариантной системной модели. Пример предоставляет результаты Model Advisor, которые демонстрируют, почему вы используете PostCompileForCodegen вместо PostCompile как значение для ModelAdvisor.Check.CallbackContext свойство при генерации кода из модели является конечной целью.

Обновите модель, чтобы проанализировать все варианты выбора

Чтобы Model Advisor вычислял активные и неактивные пути в вариантную систему, необходимо задать значение параметра Variant activation time Code compile для блоков варианта (Варианта Sink, Variant Source и Variant Subsystem, Варианта Модели). Необходимо также задать системную цель, файл параметра конфигурации равной ert.tlc.

Примечание. Выбор этой опции может повлиять на время выполнения и увеличить время, необходимое Model Advisor для оценки модели.

  1. Откройте пример модели ex_check_compile_code_gen.

  2. Для каждого исходного блока Variant Source откройте параметры блоков и установите параметр Variant activation на Code compile.

  3. Сохраните модель в локальной рабочей папке.

Создайте sl_customization Функция

В рабочей папке создайте эту sl_customization функцию и сохранить ее.

function sl_customization(cm)

% register custom checks 
cm.addModelAdvisorCheckFcn(@defineModelAdvisorCheck);

% -----------------------------
% defines Model Advisor Checks
% -----------------------------
function defineModelAdvisorCheck
CheckSingleToBoolConversion;

The sl_customization функция принимает объект диспетчера индивидуальных настроек. Объект менеджера индивидуальной настройки включает в себя addModelAdvisorCheckFcn метод регистрации собственных проверок. Вход этого метода является указателем на функцию (defineModelAdvisorCheck). Эта функция содержит вызов функции определения проверки, соответствующий собственной проверке.

Откройте и осмотрите функцию определения проверки, CheckSingleToBoolConversion.m:

function CheckSingleToBoolConversion
mdladvRoot = ModelAdvisor.Root;

rec = ModelAdvisor.Check('exampleCheck1');
rec.Title = 'Check to identify Single to Bool conversions';
rec.TitleID = 'custom.dtcCheck.CompileForCodegen1';
rec.TitleTips = 'Custom check to identify Single to Bool conversions';
rec.setCallbackFcn(@DetailStyleCallback,'None','DetailStyle');
rec.CallbackContext = 'PostCompileForCodegen'; % Compile for Code Generation

mdladvRoot.publish(rec, 'Demo');

end
    
function DetailStyleCallback(system, CheckObj)

mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);

violationBlks = find_system(system, 'BlockType', 'DataTypeConversion');
for ii = numel(violationBlks):-1:1
    dtcBlk = violationBlks{ii};
    compDataTypes = get_param(dtcBlk, 'CompiledPortDataTypes');
    if isempty(compDataTypes)
        violationBlks(ii) = [];
        continue;
    end
    if ~(strcmp(compDataTypes.Inport, 'single') && strcmp(compDataTypes.Outport, 'boolean'))
        violationBlks(ii) = [];
        continue;
    end
end

if isempty(violationBlks)
    ElementResults = ModelAdvisor.ResultDetail;
    ElementResults(1,numel(violationBlks))=ModelAdvisor.ResultDetail;
    ElementResults.IsInformer = true;
    ElementResults.Description = 'This check looks for data type conversion blocks that convert single data to boolean data';
    ElementResults.Status = 'Check has passed. No data type conversion blocks that convert single data to boolean were found.';
    mdladvObj.setCheckResultStatus(true);
else
    ElementResults(1,numel(violationBlks))=ModelAdvisor.ResultDetail;
    for i=1:numel(ElementResults)
        ElementResults(i).setData(violationBlks{i});
        ElementResults(i).Description = 'This check looks for data type conversion blocks that convert single data to boolean data';
        ElementResults(i).Status = 'Check has failed. The following data type conversion blocks convert single data to boolean:';
        ElementResults(i).RecAction =  'Modify the model to avoid converting data type from single to boolean';
    end
    mdladvObj.setCheckResultStatus(false);
    mdladvObj.setActionEnable(true);
end
CheckObj.setResultDetails(ElementResults);
end

Для получения дополнительной информации о создании собственных проверок смотрите Задать свои собственные пользовательские проверки Model Advisor.

Откройте Model Advisor и выполните собственную проверку

Перед открытием Model Advisor и запуском собственной проверки необходимо обновить кэш данных проверки Model Advisor. В Командном Окне MATLAB введите:

Advisor.Manager.refresh_customizations

Чтобы открыть Model Advisor и выполнить собственную проверку:

  1. Откройте сохраненную модель.

  2. На вкладке Моделирование выберите Model Advisor. Откроется диалоговое окно System Selector - Model Advisor. Нажмите OK. Откроется Model Advisor.

  3. На левой панели выберите По продукту > Демонстрация > Проверить, чтобы идентифицировать преобразование Сингл в Bool. Если Папкой продукта не показан в окне Model Advisor, выберите Параметры настройки> Настройки> Показ Папкой продукта.

  4. Щелкните правой кнопкой мыши по проверке и выберите Запуск This Check. Model Advisor компилирует модель и выполняет проверку. Model Advisor обновляет диаграмму модели. Неактивные пути к варианту отображаются затемненными.

Просмотр результатов Model Advisor

Проверьте результаты анализа проверки в Model Advisor. Щелкните гиперссылки, чтобы открыть блок в редакторе моделей.

В этом примере, потому что вы определили опцию компиляции в sl_customization.m файл как

rec.CallbackContext = 'PostCompileForCodegen';

Model Advisor генерирует предупреждения для блоков преобразования типов данных в активных путях и неактивных путях вариантных систем.

Если вы определили опцию компиляции в sl_customization.m файл как

rec.CallbackContext = 'PostCompile';

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

См. также

|

Похожие темы