Рассмотрите Модель Против Условий, которые Вы Задаете с Model Advisor

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

Создайте 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 a value that is a letter.';
    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 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);
Эта проверка идентифицирует значения блока Constant, которые являются числами, и производит предупреждение, но она не обеспечивает действие фиксации. Для получения дополнительной информации о том, как создать функцию определения проверки с фиксацией, смотрите, Фиксируют Модель, чтобы Выполнить Условия, которые Вы Задаете с Model Advisor.

Создайте функцию определения проверки для информационной проверки

В этом разделе вы создаете функцию определения проверки для информационной проверки, которая находит и отображает настройку модели и информацию о контрольной сумме.

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

  • Описание состояния.

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

  • Подпроверяйте результаты.

Создайте новый файл, 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_Detail,'None','DetailStyle');

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

end

% -----------------------------
% This callback function uses the DetailStyle CallbackStyle type. 
% -----------------------------

function modelVersionChecksumCallbackUsingFT_Detail(system,CheckObj)

model = bdroot(system);
mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);
ElementResults = ModelAdvisor.ResultDetail;
ElementResults.Description = 'Display model configuration and checksum information';   

% If running the Model Advisor on a subsystem, add note to description.
if strcmp(system, model) == false    
    ElementResults.IsInformer = true;      
    ElementResults.Status = 'NOTE: The Model Advisor is reviewing a subsystem, but these results are based on root-level settings.';    
    ElementResults(end + 1) = ModelAdvisor.ResultDetail;
end

% 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))];
    ElementResults(end).IsInformer = true;    
    mdladvObj.setCheckResultStatus(true);    
catch 
    ElementResults(end).IsViolation = true;
    mdladvObj.setCheckResultStatus(false);    
end

lbStr ='<br/>';
resultStr = ['Model Version: ' mdlver lbStr 'Author: ' mdlauthor lbStr ...
        'Date: ' mdldate lbStr 'Model Checksum: ' mdlsum];
ElementResults(end).Status = resultStr;
CheckObj.setResultDetails(ElementResults);

end

Осуществите собственные проверки в Model Advisor

  1. В Командном окне, введите:

    Advisor.Manager.refresh_customizations
  2. Откройте модель sldemo_fuelsys путем ввода этой команды в командной строке MATLAB:

    sldemo_fuelsys

  3. Во вкладке Modeling выберите Model Advisor. Диалоговое окно System Selector ― Model Advisor открывается. Нажмите OK.

  4. На левой панели выберите By Product > Demo> Identify model configuration and checksum information.

  5. Нажмите Run This Check.

    Проверка передает и отображает информацию.

  6. На левой панели выберите By Product > Demo> Check Constant block usage.

  7. Нажмите Run This Check.

    Проверка производит предупреждение, потому что несколько блоков содержат значения, которые являются числами. Результаты содержат ссылки на эти блоки. Результат отображает Recommended Action.

  8. Следуйте за Recommended Action, чтобы зафиксировать блоки Константа.

Смотрите также

| |

Похожие темы