Проверьте модель против условий, которые вы задаете с помощью 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 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.

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

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

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

  • Описание статуса.

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

  • Результаты подмножества.

Эта функция определения проверки использует StyleOne тип функции обратного вызова, поэтому для форматирования результатов, отображаемых в Model Advisor, необходимо использовать API-интерфейсы форматирования 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

Запустите собственные проверки в 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, чтобы исправить блоки Constant.

См. также

| | |

Похожие темы