Пакет: ModelAdvisor
Определение объектов детализации результата
Как часть функции обратного вызова проверки, ModelAdvisor.ResultDetail создаются для каждого блока, find_system() API возвращается как нарушающий проверку. Чтобы связать эти объекты с ModelAdvisor.Check объект, используйте setResultDetails способ. ModelAdvisor.ResultDetail объекты сохраняются как ResultDetails имущества ModelAdvisor.Check класс.
| setData | Связать идентификатор Simulink с объектом ModelAdvisor.ResultDetail |
В этом примере показаны подробные данные результата, соответствующие выполнению проверки Проверьте, отображаются ли имена блоков под блоками в AdvisorCustomizationExample модель. Чтобы просмотреть файлы в этом примере, см. раздел Создание и развертывание пользовательской конфигурации Model Advisor.
defineDetailStyleCheck функция определения проверки содержит DetailStyleCallback проверьте функцию обратного вызова. Возврат элементов модели в system , которые соответствуют указанным критериям, DetailStyleCallback функция использует find_system API. В этом примере find_system() API возвращает блоки, имя которых не отображается под блоком (violationBlks).
% find all blocks whose name does not appear below blocks violationBlks = find_system('System','Type','block','NamePlacement','alternate','ShowName', 'on');
ModelAdvisor.ResultDetail создает ResultDetailObjs для каждого элемента модели, возвращаемого find_system API. Когда violationBlks пуст, поле ElementResults состоит из одного объекта. Name,Value пары определяют коллекцию для ненарушенной проверки. Для этого типа коллекции, Simulink.ModelAdvisor.setCheckResultStatus(true) метод указывает, что проверка не нарушена, и отображает Passed на панели «Консультант по модели».
В этом образце кода find_system API не идентифицирует блоки, имя которых отображается под блоком, поэтому ElementResults предоставляет только информационное содержимое.
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);
Когда find_system API возвращает список элементов модели, которые соответствуют указанным критериям, ModelAdvisor.ResultDetail класс создает ResultDetailObjs объект для каждого элемента в violationBlks. Name,Value пары определяют ElementResults как совокупность объектов, нарушающих проверку. Для этой коллекции, Simulink.ModelAdvisor.setCheckResultStatus(false) метод указывает, что проверка нарушена, и отображает Warning или Failed на панели «Консультант по модели». Simulink.ModelAdvisor.setActionEnable(true) метод позволяет устранить проблему нарушения проверки из Model Advisor.
В этом образце кода find_system API возвращает список блоков, имя которых отображается под блоком. ElementResults включает каждый ResultDetailObjs объект, нарушающий проверку и предоставляющий сообщение о рекомендуемом действии для устранения нарушения проверки.
else ElementResults(1,numel(violationBlks))=ModelAdvisor.ResultDetail; for i=1:numel(ElementResults) ElementResults(i).setData(violationBlks{i}); ElementResults.Description = 'Identify blocks where the name is not displayed below the block.'; ElementResults.Status = 'The following blocks have names that do not display below the blocks:'; ElementResults.RecAction = 'Change the location such that the block name is below the block.'; end mdladvObj.setCheckResultStatus(false); mdladvObj.setActionEnable(true);
ModelAdvisor.Check.setResultDetails метод связывает результаты с проверкой (CheckObj).
CheckObj.setResultDetails(ElementResults);
После выполнения проверки можно просмотреть результаты в Model Advisor в виде набора, например, рекомендуемым действием, блоком или подсистемой. Чтобы определить этот стиль отчета, укажите 'DetailStyle'как стиль обратного вызова в ModelAdvisor.Check.setCallbackFcn способ.
% 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');