Создайте Передачу/Сбой и Информационные Проверки 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);
Эта проверка идентифицирует значения блока Constant, которые являются числами, и производит предупреждение, но она не обеспечивает действие фиксации. Для получения дополнительной информации о том, как создать функцию определения проверки с фиксацией, смотрите, Создают Передачу/Сбой, с которой Сверяется Model Advisor, Фиксируют Действие.

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

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

Для информационной проверки 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

Осуществите собственные проверки в 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, чтобы зафиксировать блоки Константа.

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

| | |

Похожие темы