Этот пример демонстрирует, как создать два простых типа проверки: проверка передачи/сбоя без действия фиксации и информационная проверка. Основная проверка передачи/сбоя находит и сообщает, что проверка рассматривает и ли передачи проверки или сбои. Информационная проверка находит и отображает описание того, что проверка рассматривает и любые ссылки на применимые стандарты.
sl_customization
ФункцияВ вашей рабочей папке создайте sl_customization.m
файл. Указывать собственные проверки, в sl_customization.m
файл, создайте sl_customization(cm)
функционируйте как показано здесь. Эта функция принимает один аргумент, объект индивидуальной настройки. Этот менеджер по индивидуальной настройке объект включает addModelAdvisorCheckFcn
метод для регистрации собственных проверок. Вход к этому методу является указателем на функцию (defineModelAdvisorChecks
) это содержит вызовы двух функций определения проверки. Эти функции содержат определения простой проверки передачи/сбоя и информационной проверки.
function sl_customization(cm) % SL_CUSTOMIZATION - Model Advisor customization demonstration. % Copyright 2019 The MathWorks, Inc. % register custom checks cm.addModelAdvisorCheckFcn(@defineModelAdvisorCheck); % ----------------------------- % defines Model Advisor Checks % ----------------------------- function defineModelAdvisorCheck definePassFailCheck defineInformationCheck
В этом разделе вы создаете функцию определения проверки, которая проверяет, является ли значение блока Constant номером или буквой. Если значение является номером, проверка производит предупреждение. Если значение является буквой, передачами проверки.
Эта проверка использует DetailStyle
тип функции обратного вызова. Этот стиль позволяет вам просматривать результаты блоком, подсистемой или рекомендуемым действием. Применение этого стиля производит форматирование по умолчанию, так, чтобы вы не использовали ModelAdvisor.FormatTemplate
класс или другие API форматирования Model Advisor, чтобы отформатировать результаты, которые появляются в Model Advisor. Вы задаете этот стиль как вход к setCallbackFcn
метод.
Создайте новый файл, definePassFailCheck.m
, и введите функцию, показанную здесь:
function definePassFailCheck mdladvRoot = ModelAdvisor.Root; rec = ModelAdvisor.Check('simplePassFailCheck'); rec.Title = 'Check Constant block usage'; rec.TitleTips = ['Warn if Constant block value is a number; Pass if' ... ' Constant block value is a letter']; rec.setCallbackFcn(@simplePassFailCheck,'None','DetailStyle') mdladvRoot.publish(rec, 'Demo'); % --- Callback function that checks Constant blocks function simplePassFailCheck(system,CheckObj) mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); all_constant_blk=find_system(system,'LookUnderMasks','all',... 'FollowLinks','on','BlockType','Constant'); violationBlks=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]'); if isempty(violationBlks) ElementResults = ModelAdvisor.ResultDetail; ElementResults.IsInformer = true; ElementResults.Description = 'Identify Constant blocks with a value that is a number.'; ElementResults.Status = 'All Constant blocks have have a value that is a letter.'; mdladvObj.setCheckResultStatus(true); else ElementResults(1,numel(violationBlks))=ModelAdvisor.ResultDetail; for i=1:numel(ElementResults) ElementResults(i).setData(violationBlks{i}); ElementResults(i).Description = 'Identify Constant blocks with a value that is a number.'; ElementResults(i).Status = 'The following Constant blocks have values that are numbers:'; ElementResults(i).RecAction = 'Change the Constant block value to a letter.'; end mdladvObj.setCheckResultStatus(false); mdladvObj.setActionEnable(true); end CheckObj.setResultDetails(ElementResults);
В этом разделе вы создаете функцию определения проверки для информационной проверки, которая находит и отображает настройку модели и информацию о контрольной сумме.
Для информационной проверки Model Advisor отображает полное состояние проверки, но состояние не находится в результате. Кроме того, информационная проверка не включает следующие элементы в результаты:
Описание состояния.
Рекомендуемое действие, чтобы взять, когда проверка не передает.
Подпроверяйте результаты.
Эта функция определения проверки использует StyleOne
тип функции обратного вызова, таким образом, необходимо использовать API форматирования Model Advisor, чтобы отформатировать результаты, которые появляются в Model Advisor. Вы задаете StyleOne
как вход к setCallbackFcn
метод.
Создайте новый файл, defineInformationCheck.m
, и введите функцию, показанную здесь:
function defineInformationCheck % Create ModelAdvisor.Check object and set properties. rec = ModelAdvisor.Check('com.mathworks.sample.infocheck'); rec.Title = 'Identify model configuration and checksum information'; rec.TitleTips = 'Display model configuration and checksum information'; rec.setCallbackFcn(@modelVersionChecksumCallbackUsingFT,'None','StyleOne'); % Publish check into Demo group. mdladvRoot = ModelAdvisor.Root; mdladvRoot.publish(rec, 'Demo'); end % ----------------------------- % This callback function uses the StyleOne CallbackStyle type. % ----------------------------- function resultDescription = modelVersionChecksumCallbackUsingFT(system) resultDescription = []; system = getfullname(system); model = bdroot(system); % Format results in a list using Model Advisor Result Template API. ft = ModelAdvisor.FormatTemplate('ListTemplate'); % Description of check in results setInformation(ft, 'Display model configuration and checksum information'); % Add See Also section for references to standards. docLinkSfunction{1} = {['IEC 61508-3, Table A.8 (5)' ... ' ''Software configuration management'' ']}; setRefLink(ft,docLinkSfunction); % If running the Model Advisor on a subsystem, add note to description. if strcmp(system, model) == false setInformation(ft,{['NOTE: The Model Advisor is reviewing a' ... ' sub-system, but these results are based on root-level settings.']}); end mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); % If error is encountered, use these values. mdlver = 'Error - could not retrieve Version'; mdlauthor = 'Error - could not retrieve Author'; mdldate = 'Error - could not retrieve Date'; mdlsum = 'Error - could not retrieve CheckSum'; % Get model configuration and checksum information. try mdlver = get_param(model,'ModelVersion'); mdlauthor = get_param(model,'LastModifiedBy'); mdldate = get_param(model,'LastModifiedDate'); mdlsum = Simulink.BlockDiagram.getChecksum(model); mdlsum = [num2str(mdlsum(1)) ' ' num2str(mdlsum(2)) ' ' ... num2str(mdlsum(3)) ' ' num2str(mdlsum(4))]; mdladvObj.setCheckResultStatus(true); % init to true catch err mdladvObj.setCheckResultStatus(false); setSubResultStatusText(ft,err.message); resultDescription{end+1} = ft; return end lbStr ='<br/>'; resultStr = ['Model Version: ' mdlver lbStr 'Author: ' mdlauthor lbStr ... 'Date: ' mdldate lbStr 'Model Checksum: ' mdlsum]; % Display the results setSubResultStatusText(ft,resultStr); % The check does not have subresults and does not need a bar. setSubBar(ft,0); resultDescription{end+1} = ft; end
В Командном окне, введите:
Advisor.Manager.refresh_customizations
Откройте модель sldemo_fuelsys
путем ввода этой команды в командной строке MATLAB:
sldemo_fuelsys
Во вкладке Modeling выберите Model Advisor. Диалоговое окно System Selector ― Model Advisor открывается. Нажмите OK.
На левой панели выберите By Product > Demo> Identify model configuration and checksum information.
Нажмите Run This Check.
Проверка передает и отображает информацию.
На левой панели выберите By Product > Demo> Check Constant block usage.
Нажмите Run This Check.
Проверка производит предупреждение, потому что несколько блоков содержат значения, которые являются числами. Результаты содержат ссылки на эти блоки. Результат отображает Recommended Action.
Следуйте за Recommended Action, чтобы зафиксировать блоки Константа.
ModelAdvisor.Check
| ModelAdvisor.Check.CallbackContext
| ModelAdvisor.FormatTemplate
| ModelAdvisor.FormatTemplate