Задайте опцию компиляции для собственных проверок

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

Вы используете свойство 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 моделирует модель. Model Advisor не компилирует модель.

Примечание

По умолчанию 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, чтобы оценить модель.

  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. От окна модели выберите Analysis> Model Advisor> Model Advisor.

  3. Диалоговое окно System Selector — Model Advisor открывается. Нажать ОК. Окно Model Advisor открывается.

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

  5. Щелкните правой кнопкой по проверке и выберите 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';

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

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

|

Похожие темы