Создайте и разверните пользовательское строение Model Advisor

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

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

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

  • Проверка pass/fail, которая группирует результаты по блокам и подсистемам и обеспечивает действие исправления.

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

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

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

1. Установите текущую папку в директорию с возможностью записи.

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;
defineBlockConstraintCheck;

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

Пройдите/Неудача Проверки с Исправлением Действия

The 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
    ElementResults(1,numel(violationBlks))=ModelAdvisor.ResultDetail;
    for i=1:numel(ElementResults)
        ElementResults(i).setData(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.

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

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

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

Откройте и осмотрите defineConfigurationParameterCheck.m файловой .

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

Параметры блоков

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

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

Откройте и осмотрите defineBlockConstraintCheck .m файловой .

function defineBlockConstraintCheck

rec = Advisor.authoring.createBlockConstraintCheck('com.mathworks.sample.blockConstraint');
rec.Title = 'Check icon shape of Logical Operator blocks';
rec.setCallbackFcn(@(system)(Advisor.authoring.CustomCheck.checkCallback...
    (system)), 'None', 'StyleOne');
rec.TitleTips = 'Checks icon shape of Logical Operator blocks. Icon shape of Logical Operator should be rectangular.';

% --- data file input parameters
rec.setInputParametersLayoutGrid([1 1]);
inputParam1 = ModelAdvisor.InputParameter;
inputParam1.Name = 'Data File';
inputParam1.Value = 'blockConstraintDataFile.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});
rec.SupportExclusion = false;
rec.SupportLibrary = true;

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

end

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

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

Advisor.Manager.refresh_customizations();

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

open_system('AdvisorCustomizationExample.slx');

3. На вкладке Моделирование откройте 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.
Model Advisor is removing the existing report.

4. Наблюдайте собственные проверки в папке «По продукту» > «Демонстрация».

В функциях определения проверки publish команда добавляет проверки в папку «По продукту» > «Демонстрация». Обратите внимание, что если у вас уже есть конфигурация модели по умолчанию, проверки не появляются в Model Advisor. Восстановите строение доставки по умолчанию, выбрав Настройки > Восстановить строение по умолчанию.

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

На холсте модели обратите внимание, что блоки Unit Delay и Logical Operator подсвечены желтым цветом, потому что проверка во время редактирования включена. Эти блоки содержат нарушения проверки. Проверка во время редактирования позволяет вам в интерактивном режиме проверять и исправлять модель для проблем податливости.

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

Чтобы включить или выключить проверку во время редактирования, на вкладке Моделирование, выберите Model Advisor > Проверки во время редактирования.

Задайте и разверните пользовательское строение Model Advisor

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

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

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

3. Чтобы сохранить строение, выберите Сохранить. Откроется окно с приглашением сохранить строение в файле .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. Загрузите пользовательское строение, выбрав Настройки > Загрузить строение. В диалоговом окне Open перейдите к и выберите demoConfiguration.json файл. Или введите эту команду в командной строке MATLAB:

modeladvisor('AdvisorCustomizationExample.slx', 'configuration',...
    'demoConfiguration.json');
Model Advisor is removing the existing report.

3. Откроется диалоговое окно Предупреждение (Warning). Нажмите Удалить существующий отчет и продолжите.

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

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

4. Щелкните Проверить, появляются ли имена блоков под блоками. Эта проверка содержит предупреждения. Чтобы применить исправление и разрешить предупреждения, на правой панели нажмите кнопку Сделать имена блоков показанными под блоками.

5. Щелкните Проверка параметров конфигурации модели. Эта проверка содержит предупреждения. Чтобы применить исправление и устранить предупреждения, нажмите кнопку «Изменить параметры».

6. Щелкните форму значка проверки блоков логического оператора. Эта проверка содержит предупреждение, но автоматическое исправление отсутствует. Чтобы применить исправление, следуйте рекомендуемому действию.

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. Нажмите «Продолжить» в диалоговом окне. Теперь можно применить исправления и устранить предупреждения, как это было сделано в конце предыдущего раздела.

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

bdclose;

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

Advisor.Manager.refresh_customizations