Создайте и разверните пользовательскую конфигурацию Model Advisor

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

Задайте собственные проверки

Этот пример задает эти три типа собственных проверок:

  • Проверка передачи/сбоя, что группы заканчиваются блоками и подсистемами и обеспечивают действие фиксации

  • Проверка, которая проверяет настройки параметра конфигурации модели

  • Проверка, которая задает ограничение для установки параметров блоков и обеспечивает действие фиксации

В этом примере вы добавите три проверки в Model Advisor и удалите все проверки поставки.

1. Установите свою текущую папку на writeable директорию.

2. Скопируйте скрипт prepare_cust_chk_code к вашей текущей папке и запуску скрипт. Скрипт копирует файлы, необходимые для этого примера к вашей текущей папке.

copyfile(fullfile(matlabroot,'examples','slcheck','main','prepare_cust_chk_code.m'),...
    'prepare_cust_chk_code.m','f');
run('prepare_cust_chk_code.m');

3. Один из файлов, sl_customization.m, включает sl_customization функция, которая задает собственные проверки. Откройте и смотрите sl_customization.m файл.

function sl_customization(cm)
% SL_CUSTOMIZATION - Model Advisor customization demonstration.

% Copyright 2019 The MathWorks, Inc.

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

% -----------------------------
% defines Model Advisor Checks
% -----------------------------
function defineModelAdvisorChecks
defineDetailStyleCheck;
defineConfigurationParameterCheck;
defineNewBlockConstraintCheck;

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

Передача/Сбой Сверяется, Фиксируют Действие

defineDetailStyleCheck.m файл содержит defineDetailStyleCheck функция определения, которая задает проверку, которая перечисляет блоки, имена которых не отображены ниже блоков. Эта проверка обеспечивает фиксацию, которая перемещает те имена ниже блоков. Имя этой проверки является Проверкой, появляются ли имена блока ниже блоков. Откройте и смотрите defineDetailStyleCheck.m файл.

function defineDetailStyleCheck

mdladvRoot = ModelAdvisor.Root;

% Create ModelAdvisor.Check object and set properties.
rec = ModelAdvisor.Check('com.mathworks.sample.detailStyle');
rec.Title = 'Check whether block names appear below blocks';
rec.TitleTips = 'Check position of block names';
rec.setCallbackFcn(@DetailStyleCallback,'None','DetailStyle');
% Create ModelAdvisor.Action object for setting fix operation.
myAction = ModelAdvisor.Action;
myAction.setCallbackFcn(@ActionCB);
myAction.Name='Make block names appear below blocks';
myAction.Description='Click the button to place block names below blocks';
rec.setAction(myAction);
mdladvRoot.publish(rec, 'Demo'); % publish check into Demo group.

end

% -----------------------------
% This callback function uses the DetailStyle CallbackStyle type. 
% -----------------------------
function DetailStyleCallback(system, CheckObj)
mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); % get object

% Find all blocks whose name does not appear below blocks
violationBlks = find_system(system, 'Type','block',...
    'NamePlacement','alternate',...
    'ShowName', 'on');
if isempty(violationBlks)
    ElementResults = ModelAdvisor.ResultDetail;
    ElementResults.IsInformer = true;
    ElementResults.Description = 'Identify blocks where the name is not displayed below the block.';
    ElementResults.Status = 'All blocks have names displayed below the block.';
    mdladvObj.setCheckResultStatus(true);
else
    
   for i=1:numel(violationBlks)
        ElementResults(1,i) = ModelAdvisor.ResultDetail;
    end 
    for i=1:numel(ElementResults)
        ModelAdvisor.ResultDetail.setData(ElementResults(i), 'SID',violationBlks{i});
        ElementResults(i).Description = 'Identify blocks where the name is not displayed below the block.';
        ElementResults(i).Status = 'The following blocks have names that do not display below the blocks:';
        ElementResults(i).RecAction =  'Change the location such that the block name is below the block.';
    end
    mdladvObj.setCheckResultStatus(false);
    mdladvObj.setActionEnable(true);
end
CheckObj.setResultDetails(ElementResults);
end

% -----------------------------
% This action callback function changes the location of block names. 
% -----------------------------
function result = ActionCB(taskobj)
mdladvObj = taskobj.MAObj;
checkObj = taskobj.Check;
resultDetailObjs = checkObj.ResultDetails;
for i=1:numel(resultDetailObjs)
    % take some action for each of them
    block=Simulink.ID.getHandle(resultDetailObjs(i).Data);
    set_param(block,'NamePlacement','normal');
end

result = ModelAdvisor.Text('Changed the location such that the block name is below the block.');
mdladvObj.setActionEnable(false);
end

Эта проверка использует setCallbackFcn тип DetailStyle. Применение этого стиля производит форматирование по умолчанию, так, чтобы вы не использовали ModelAdvisor.FormatTemplate или другие API форматирования Model Advisor, чтобы отформатировать результаты, которые появляются в Model Advisor. Для получения дополнительной информации о том, как создать этот тип функции определения проверки, смотрите, Фиксируют Модель, чтобы Выполнить Условия, которые Вы Задаете с Model Advisor.

Проверка настроек параметра конфигурации модели

defineConfigurationParameterCheck.m файл содержит defineConfigurationParameterCheck проверяйте функцию определения, которая задает проверку, которая идентифицирует настройки параметра конфигурации модели, которые могут повлиять на MISRA C:2012 совместимая генерация кода. Имя этой проверки является параметрами конфигурации модели Check.

Этот тип проверки требует файла данных XML поддержки, который содержит настройки параметра конфигурации модели, которые вы хотите проверять. Этот файл должен быть на пути MATLAB. В данном примере тем файлом является configurationParameterDataFile.xml. Для получения дополнительной информации о том, как создать этот тип проверки, смотрите, Создают Проверку Model Advisor на Параметры конфигурации Модели.

Откройте и смотрите defineConfigurationParameterCheck.m file.

function defineConfigurationParameterCheck

% Create ModelAdvisor.Check object and set properties.
rec = ModelAdvisor.Check('com.mathworks.sample.configurationParameter');
rec.Title = 'Check model configuration parameters';
rec.setCallbackFcn(@(system)(Advisor.authoring.CustomCheck.checkCallback...
    (system)), 'None', 'StyleOne');
rec.TitleTips = 'Identify configuration parameters that might impact MISRA C:2012 compliant code generation.';

% --- data file input parameters
rec.setInputParametersLayoutGrid([1 1]);
inputParam1 = ModelAdvisor.InputParameter;
inputParam1.Name = 'Data File';
inputParam1.Value = 'configurationParameterDataFile.xml';
inputParam1.Type = 'String';
inputParam1.Description = 'Name or full path of XML data file.';
inputParam1.setRowSpan([1 1]);
inputParam1.setColSpan([1 1]);
rec.setInputParameters({inputParam1});

% -- set fix operation
act = ModelAdvisor.Action;
act.setCallbackFcn(@(task)(Advisor.authoring.CustomCheck.actionCallback...
    (task)));
act.Name = 'Modify Settings';
act.Description = 'Modify model configuration settings.';
rec.setAction(act);

% publish check into Demo group.
mdladvRoot = ModelAdvisor.Root;
mdladvRoot.publish(rec, 'Demo'); 

end

Ограничительная проверка параметров блоков

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

Этот тип проверки поддерживает разовую редактированием проверку. Для получения дополнительной информации об этом типе проверки смотрите, Задают Проверки Model Advisor на Поддерживаемые и Неподдерживаемые Блоки и Параметры.

Откройте и смотрите defineNewBlockConstraintCheck.m file.

function defineNewBlockConstraintCheck

rec = Advisor.authoring.createBlockConstraintCheck('com.mathworks.sample.blockConstraint',...
    'Constraints',@createBlockConstraints); % constraint creation is part of block constraint check definition
rec.Title = 'Check icon shape of Logical Operator blocks';
rec.TitleTips = 'Checks icon shape of Logical Operator blocks. Icon shape of Logical Operator should be rectangular.';

% publish check into Demo group.
mdladvRoot = ModelAdvisor.Root;
mdladvRoot.publish(rec, 'Demo'); 

end

function constraints = createBlockConstraints()

% create block constraints
c1 = Advisor.authoring.PositiveBlockParameterConstraint;
c1.ID = 'ID_c1';
c1.BlockType = 'Logic';
c1.ParameterName = 'IconShape';
c1.SupportedParameterValues = {'rectangular'};
c1.ValueOperator = 'eq';

constraints = {c1};

end

createBlockConstraints функция задает ограничение блока c1. Advisor.authoring.createBlockConstraintCheck функция имеет 'Constraints' аргумент значения имени, который вызывает ограничительную функцию создания createBlockConstraints.

Просмотрите собственные проверки в Model Advisor

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

Advisor.Manager.refresh_customizations();

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

open_system('AdvisorCustomizationExample.slx');

3. На вкладке Modeling откройте Model Advisor. Можно также открыть Model Advisor путем ввода этой команды в командной строке MATLAB:

modeladvisor('AdvisorCustomizationExample.slx');
Updating Model Advisor cache...
Model Advisor cache updated. For new customizations, to update the cache, use the Advisor.Manager.refresh_customizations method.

4. Наблюдайте собственные проверки в папке By Product> Demo.

В функциях определения проверки, publish команда добавляет проверки в папку By Product> Demo. Отметьте, если у вас уже есть конфигурация модели по умолчанию, проверки не появляются в Model Advisor. Восстановите настройку поставки значения по умолчанию путем выбора Settings> Restore Default Configuration.

Заметьте, что Проверка, появляются ли имена блока ниже блоков и проверок параметров конфигурации модели Check, содержит поле Action с опцией фиксации любых нарушений проверки. В вашем файле определения собственной проверки вы предоставляете фиксацию как часть функции обратного вызова действия. Для получения дополнительной информации о том, как задать собственные проверки, смотрите, Задают Ваши Собственные Проверки Model Advisor.

Форма значка Проверки проверки блоков Логического оператора содержит Рекомендуемое Действие и поддерживает разовую редактированием проверку. Можно использовать кнопку Fix в разовом редактированием окне диагностики проверки, чтобы внести изменение и обратиться к нарушению ограничений блока. Для получения дополнительной информации о том, как к ограничительным проверкам блока define, видят, Задают Проверки Model Advisor на Поддерживаемые и Неподдерживаемые Блоки и Параметры.

На холсте модели заметьте, что Unit Delay и блоки Логического оператора подсвечены в желтом, потому что разовая редактированием проверка включена. Эти блоки содержат нарушения проверки. Разовая редактированием проверка позволяет вам в интерактивном режиме проверять и фиксировать свою модель для проблем соответствия.

Чтобы зафиксировать эти нарушения, наведите на подсвеченный блок и кликните по желтому значку. Окно диагностики с кнопкой Fix открывается.

Чтобы включить или выключить разовую редактированием проверку, на вкладке Modeling, выбирают Model Advisor> Edit-Time Checks.

Задайте и разверните пользовательскую конфигурацию Model Advisor

Чтобы задать который проверки включать в Model Advisor и который проверяет, чтобы использовать для разовой редактированием проверки, используйте Model Advisor Configuration Editor.

1. Чтобы открыть Редактора конфигурации, на вкладке Modeling, выбирают Model Advisor> Configuration Editor.

2. Чтобы добавить или удалить проверки и папки, выберите из опций в разделе Edit Model Advisor Configuration Editor.

3. Чтобы сохранить настройку, выберите Save. Окно открывает и предлагает вам сохранять настройку как .json файл. В данном примере вы не должны сохранять настройку как соответствующий demoConfiguration.json файл поставляется с этим примером. Вы ранее скопировали этот файл в свою рабочую папку.

4. Закройте модель и Model Advisor Configuration Editor.

bdclose;

Когда вы сохраняете настройку, вы получаете подсказку, спрашивая вас, хотите ли вы сохранить ту настройку как настройку по умолчанию. Установка настройки по умолчанию позволяет Model Advisor использовать ту настройку каждый раз, когда вы открываете Model Advisor. Для получения дополнительной информации смотрите Использование Model Advisor Configuration Editor, чтобы Настроить Model Advisor.

Загрузите и запустите пользовательскую конфигурацию Model Advisor

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

open_system('AdvisorCustomizationExample.slx');

2. Откройте Model Advisor. Загрузите пользовательскую конфигурацию путем выбора Settings> Load Configuration. В диалоговом окне Open перейдите к и выберите demoConfiguration.json файл. Или введите эту команду в командной строке MATLAB:

modeladvisor('AdvisorCustomizationExample.slx', 'configuration',...
    'demoConfiguration.json');

3. Диалоговое окно Warning открывается. Нажмите Remove существующий отчет и продолжите.

Model Advisor содержит только папку By Product> Demo с этими тремя собственными проверками.

3. Кликните по папке Demo и нажмите Run Selected Checks.

4. Нажмите Check, появляются ли имена блока ниже проверки блоков. Эта проверка содержит предупреждения. Чтобы применить фиксацию и разрешить предупреждения, на правой панели, нажимают, имена блока Make появляются ниже кнопки блоков.

5. Кликните по проверке параметров конфигурации модели Check. Эта проверка содержит предупреждения. Чтобы применить фиксацию и разрешить предупреждения, нажмите кнопку Modify Settings.

6. Кликните по форме значка Проверки проверки блоков Логического оператора. Эта проверка содержит предупреждение, но никакую автоматическую фиксацию в Model Advisor. Чтобы применить фиксацию, или следовать за рекомендуемым действием или используют кнопку Fix от разовой редактированием проверки, чтобы взять предлагаемое действие.

7. Закройте модель и Model Advisor.

bdclose;

8. Удалите файлы из своей рабочей директории. Обновите кэш информации о проверке Model Advisor путем ввода этой команды в типе команды:

Advisor.Manager.refresh_customizations

Программно запустите пользовательскую конфигурацию Model Advisor и просмотрите результаты

Можно программно запустить настройку Model Advisor и затем открыть результаты в Model Advisor.

1. Вызовите ModelAdvisor.run функция.

SysResultObjArray = ModelAdvisor.run({'AdvisorCustomizationExample'},...
'Configuration','demoConfiguration.json');

2. Просмотрите результаты в Model Advisor:

viewReport(SysResultObjArray{1},'MA')

3. Нажмите Continue в диалоговом окне. Можно теперь применяться, фиксирует и предупреждения твердости, как вы сделали к концу предыдущего раздела.

4. Закройте модель и Model Advisor.

bdclose;

5. Удалите файлы из своей рабочей директории. Обновите кэш информации о проверке Model Advisor путем ввода этой команды в типе команды:

Advisor.Manager.refresh_customizations