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

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

Вы используете ModelAdvisor.Check.CallbackContext свойство задать опцию компиляции:

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

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

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

Проверки на модели, которые не скомпилированы Model Advisor

Для собственных проверок, которые не требуют, чтобы Model Advisor скомпилировал модель перед выполнением проверки в определении проверки, вы задаете ModelAdvisor.Check.CallbackContext свойство как:

rec.CallbackContext = 'None';  

Примечание

По умолчанию Model Advisor не компилирует модель для собственных проверок. Вы не должны включать ModelAdvisor.Check.CallbackContext свойство в определении проверки.

function defineModelAdvisorChecks
mdladvRoot = ModelAdvisor.Root;
% -----------------------------
% Sample Check: Check whose model does not need to be compiled
% -----------------------------

rec = ModelAdvisor.Check('exampleCheck2');
rec.Title = 'Non-compile check example';
rec.TitleID = 'custom.dtcCheck.NonCompile1';
rec.TitleTips = 'A custom check for a model that does not need to be compiled ';
rec.setCallbackFcn(@CheckNoCompile,'None','StyleOne');
rec.CallbackContext = 'None'; % Not compiled

mdladvRoot.publish(rec, 'Demo');

Проверки, Которые Требуют, чтобы Модель была Скомпилирована, и Симулированными Model Advisor

Для собственных проверок, которые требуют, чтобы компиляция модели и симуляция правильно проверяли реализацию модели в определении проверки, вы задаете ModelAdvisor.Check.CallbackContext свойство как:

rec.CallbackContext = 'PostCompile'; 

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

Этот пример показывает определение проверки, которое требует, чтобы модель была скомпилирована и симулирована.

function defineModelAdvisorChecks
mdladvRoot = ModelAdvisor.Root;
% -----------------------------
% Sample Check: Check whose model must be compiled and simulated.
% -----------------------------

rec = ModelAdvisor.Check('exampleCheck3');
rec.Title = 'PostCompile check example';
rec.TitleID = 'custom.dtcCheck.Compile1';
rec.TitleTips = 'A custom check for a model that is compiled and simulated';
rec.setCallbackFcn(@CheckCompileSimulate,'None','StyleOne');
rec.CallbackContext = 'PostCompile'; % Compiled and simulated

mdladvRoot.publish(rec, 'Demo');

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

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

rec.CallbackContext = 'PostCompileForCodegen';

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

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

'PostCompileForCodegen' опция компилирует модель для всех вариантов. Эта компиляция позволяет вам анализировать возможные проблемы, существующие в сгенерированном коде для активных и неактивных различных путей в модели. В примере обеспечивают, Создают Собственную проверку, чтобы Оценить Активные и Неактивные Различные Пути из Модели.

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

function defineModelAdvisorChecks
mdladvRoot = ModelAdvisor.Root;
% -----------------------------
% Sample Check: Check whose model is compiled for generated code.
% Model is not simulated.
% -----------------------------

rec = ModelAdvisor.Check('exampleCheck1');
rec.Title = 'PostCompileForCodegen check example';
rec.TitleID = 'custom.dtcCheck.CompileForCodegen1';
rec.TitleTips = 'A custom check for evaluating the generated code';
rec.setCallbackFcn(@CheckSingleToBoolConversion,'None','StyleOne');
rec.CallbackContext = 'PostCompileForCodegen'; % Compile for generated code

mdladvRoot.publish(rec, 'Demo');

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

Этот пример показывает создание пользовательской проверки Model Advisor, которая оценивает активные и неактивные различные пути из модели вариантной системы. Пример обеспечивает результаты Model Advisor, которые демонстрируют, почему вы используете PostCompileForCodegen по сравнению с PostCompile как значение для ModelAdvisor.Check.CallbackContext свойство при генерации кода из модели является итоговой целью. Смотрите Задают Опцию Компиляции для Пользовательских Проверок Model Advisor.

Модель обновления, чтобы анализировать все варианты

Для Model Advisor, чтобы оценить активные и неактивные пути в вариантной системе, необходимо включить Анализирование всего выбора во время обновления, схематически изображают и генерируют условную опцию препроцессора для различных блоков (Различный Приемник, Различный Источник, и Различная Подсистема, Различная Модель).

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

  1. Откройте модель ex_check_compile_code_gen в качестве примера.

  2. Для каждого Различного Исходного блока откройте параметры блоков и выберите Analyze, весь выбор во время обновления схематически изображает и генерирует условную опцию препроцессора.

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

Обновите sl_customization.m Файл

В вашей рабочей папке обновите sl_customization.m файл. Сохраните свои изменения. Если вас спрашивают, нормально ли перезаписывать файл, нажимать ОК.

function sl_customization(cm)

% --- register custom checks
cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);

end

% --- defineModelAdvisorChecks function
function defineModelAdvisorChecks
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(@CheckSingleToBoolConversion,'None','StyleOne');
rec.CallbackContext = 'PostCompileForCodegen'; % Compile for Code Generation

mdladvRoot.publish(rec, 'Demo');

end

% --- creates SimpleCallback function
function result = CheckSingleToBoolConversion(system)

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

ft = ModelAdvisor.FormatTemplate('ListTemplate');
ft.setInformation(['This check looks for data type conversion blocks that'...
    ' convert single data to boolean data']);
if ~isempty(dtcBlks)
    ft.setSubResultStatusText(['Check has failed. The following '...
        'data type conversion blocks convert single data to boolean:']);
    ft.setListObj(dtcBlks);
    ft.setSubResultStatus('warn');
    ft.setRecAction('Modify the model to avoid converting data type from single to boolean');
    mdladvObj.setCheckResultStatus(false); 
else
    ft.setSubResultStatusText(['Check has passed. No data type conversion blocks '...
        'that convert single data to boolean were found.']);
    ft.setSubResultStatus('pass');
    mdladvObj.setCheckResultStatus(true); 
end
ft.setSubBar(0);
result{end+1} = ft;

end

function result = dummy(~)
result={};
end

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

До открытия Model Advisor и осуществления собственной проверки, необходимо обновить кэш информации о проверке Model Advisor. В Окне Команды MATLAB, введите:

Advisor.Manager.refresh_customizations

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

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

  2. Во вкладке Modeling выберите Model Advisor. Системный Селектор ― диалоговое окно Model Advisor открывается. Нажать ОК. Model Advisor открывается.

  3. На левой панели выберите By Product> Demo> Check, чтобы идентифицировать ОДИН к преобразованию BOOL. Если Папкой продукта не отображен в окне Model Advisor, выберите Settings> Preferences> Show By Product Folder.

  4. Щелкните правой кнопкой по проверке и выберите Run This Check. Model Advisor компилирует модель и выполняет проверку. Model Advisor обновляет диаграмму модели с неактивными различными путями, появляющимися, как потускнел.

Рассмотрите результаты Model Advisor

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

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

rec.CallbackContext = 'PostCompileForCodegen';

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

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

rec.CallbackContext = 'PostCompile';

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

Смотрите также

|

Похожие темы