Чтобы убедиться, что модель соответствует стандартам и правилам моделирования компании, можно настроить Model Advisor. В этом примере показано, как добавить пользовательские чеки в Model Advisor и удалить ненужные чеки доставки. Можно сохранить пользовательскую конфигурацию и развернуть ее для других пользователей в группе разработки. Развертывание пользовательской конфигурации позволяет группе разработчиков просматривать модели с использованием одного и того же набора проверок.
В этом примере определяются следующие три типа пользовательских проверок:
Проверка прохождения/отказа, которая группирует результаты по блокам и подсистемам и обеспечивает действие исправления.
Проверка параметров конфигурации модели.
Проверка, определяющая ограничение для параметра блока и обеспечивающая операцию фиксации.
В этом примере необходимо добавить три чека в 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;
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 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. Дополнительные сведения о том, как создать этот тип функции определения проверки, см. в разделе Исправление модели для соответствия условиям, заданным с помощью помощника по модели.
defineConfigurationParameterCheck.m содержит defineConfigurationParameterCheck функция определения проверки, которая определяет проверку, определяющую настройки параметров конфигурации модели, которые могут повлиять на формирование кода, совместимого с MISRA C:2012. Имя этой проверки - Проверить параметры конфигурации модели.
Для этого типа проверки требуется поддерживающий XML-файл данных, содержащий параметры конфигурации модели, которые необходимо проверить. Этот файл должен находиться в пути MATLAB. В этом примере этот файл имеет значение configurationParameterDataFile.xml. Дополнительные сведения о том, как создать этот тип проверки, см. в разделе Создание проверки конфигурации модели (Create Model Advisor Check for Model Configuration Parameters).
Откройте и осмотрите 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
defineBlockConstraintCheck.m содержит функцию определения проверки defineBlockConstraintCheck, которая определяет проверку, идентифицирующую блоки логического оператора, не имеющие прямоугольной формы. Имя этой проверки - форма значка проверки блоков логического оператора.
Этот тип проверки поддерживает проверку времени редактирования и требует наличия поддерживающего XML-файла, содержащего информацию об ограничениях блока. Этот XML-файл должен находиться в пути MATLAB. В этом примере это имя файла blockConstraintDataFile.xml. Дополнительные сведения об этом типе проверки см. в разделе Определение проверок поддерживаемых или неподдерживаемых блоков и параметров помощника по модели.
Откройте и осмотрите 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
1. Чтобы пользовательские проверки были видны в Model Advisor, необходимо обновить кэш сведений о проверке Model Advisor. В командной строке MATLAB введите следующую команду:
Advisor.Manager.refresh_customizations();
2. Откройте пример модели.
open_system('AdvisorCustomizationExample.slx');3. На вкладке Моделирование (Modeling) откройте Помощник по модели (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 добавляет проверки в папку By Product > Demo. Обратите внимание, что если у вас уже есть набор конфигурации по умолчанию, проверки не отображаются в Model Advisor. Восстановите конфигурацию доставки по умолчанию, выбрав Параметры > Восстановить конфигурацию по умолчанию.
Обратите внимание, что Проверка наличия имен блоков под блоками и Проверка параметров конфигурации модели содержат поле Действие (Action) с возможностью фиксации любых нарушений проверки. В файле определения пользовательской проверки исправление указывается как часть функции обратного вызова действия. Дополнительные сведения об определении пользовательских проверок см. в разделе Определение собственных пользовательских проверок помощника по модели.
На холсте модели обратите внимание, что блоки «Единичная задержка» и «Логический оператор» выделены желтым цветом, поскольку включена проверка времени редактирования. Эти блоки содержат проверочные нарушения. Проверка времени редактирования позволяет в интерактивном режиме проверять и устранять проблемы с соответствием требованиям.
Чтобы устранить эти нарушения, наведите курсор на выделенный блок и щелкните желтый значок. Откроется окно диагностики с кнопкой Исправить (Fix).
Чтобы включить или выключить проверку времени редактирования, на вкладке Моделирование (Modeling) выберите Мастер модели (Model Advisor) > Править (Edit) - Проверки времени (Time Checks).
Чтобы указать, какие проверки включить в Model Advisor, а какие использовать для проверки времени правки, используйте редактор конфигурации Model Advisor.
1. Чтобы открыть редактор конфигурации, на вкладке Моделирование (Modeling) выберите Мастер модели (Model Advisor) > Редактор конфигурации помощника модели (Model Advisor Configuration Editor).
2. Чтобы добавить или удалить чеки и папки, выберите опцию в разделе Править (Edit) редактора конфигурации Model Advisor.
3. Для сохранения конфигурации выберите Сохранить. Откроется окно с запросом на сохранение конфигурации в виде JSON-файла. Для этого примера не требуется сохранять конфигурацию, как соответствующую demoConfiguration.json файл поставляется с этим примером. Ранее этот файл был скопирован в рабочую папку.
4. Закройте модель и редактор конфигурации Model Advisor.
bdclose;
При сохранении конфигурации появляется запрос на сохранение этой конфигурации в качестве конфигурации по умолчанию. Установка конфигурации по умолчанию позволяет Model Advisor использовать эту конфигурацию при каждом открытии Model Advisor. Дополнительные сведения см. в разделе Использование редактора конфигурации Model Advisor для настройки Model Advisor.
1. Откройте пример модели.
open_system('AdvisorCustomizationExample.slx');2. Откройте мастер модели. Загрузите пользовательскую конфигурацию, выбрав Параметры > Загрузить конфигурацию. В диалоговом окне «Открыть» перейдите к и выберите demoConfiguration.json файл. Или введите эту команду в командной строке MATLAB:
modeladvisor('AdvisorCustomizationExample.slx', 'configuration',... 'demoConfiguration.json');
Model Advisor is removing the existing report.
3. Откроется диалоговое окно Предупреждение (Warning). Нажмите Удалить существующий отчет и продолжите.
Model Advisor содержит только папку By Product > Demo с тремя пользовательскими проверками.

3. Щелкните папку Демонстрация и выберите Выполнить выбранные проверки.
4. Установите флажок «Проверять, отображаются ли имена блоков под блоками». Эта проверка содержит предупреждения. Чтобы применить исправление и устранить предупреждения, на правой панели нажмите кнопку «Создать имена блоков под блоками».
5. Щелкните Проверить параметры конфигурации модели (Check model configuration parameters). Эта проверка содержит предупреждения. Чтобы применить исправление и устранить предупреждения, нажмите кнопку «Изменить параметры».
6. Щелкните по форме значка Check (Проверка) при проверке логических блоков оператора. Эта проверка содержит предупреждение, но не содержит автоматического исправления. Чтобы применить исправление, выполните рекомендуемое действие.
7. Закройте модель и мастер модели.
bdclose;
8. Удалите файлы из рабочего каталога. Обновите кэш сведений проверки Model Advisor, введя эту команду в тип команды:
Advisor.Manager.refresh_customizations
Можно программно запустить конфигурацию Model Advisor, а затем открыть результаты в Model Advisor.
1. Позвоните в ModelAdvisor.run функция.
SysResultObjArray = ModelAdvisor.run({'AdvisorCustomizationExample'},...
'Configuration','demoConfiguration.json');
2. Просмотрите результаты в Model Advisor:
viewReport(SysResultObjArray{1},'MA')
3. Нажмите Продолжить в диалоговом окне. Теперь можно применять исправления и устранять предупреждения, как в конце предыдущего раздела.
4. Закройте модель и мастер модели.
bdclose;
5. Удалите файлы из рабочего каталога. Обновите кэш сведений проверки Model Advisor, введя эту команду в тип команды:
Advisor.Manager.refresh_customizations