Создайте и добавьте собственные проверки - основные примеры

КСмотрите
Добавьте индивидуально настраиваемую проверку в подпапку Model Advisor By Product > Demo.Добавьте собственную проверку в папкой продукта

Создайте проверку передачи/сбоя Model Advisor.

Создайте Индивидуально настраиваемую Проверку Передачи/Сбоя

Создайте передачу/сбой Model Advisor, сверяются с действием фиксации.

Создайте Индивидуально настраиваемую Передачу/Сбой, Сверяются, Фиксируют Действие
Создайте передачу/сбой Model Advisor, сверяются с подробными наборами результата Создайте Индивидуально настраиваемую Передачу/Сбой, Сверяются с Подробными Наборами Результата

Добавьте собственную проверку в папкой продукта

В этом примере показано, как добавить собственную проверку в подпапку Model Advisor By Product > Demo. В этом примере индивидуально настраиваемая проверка не проверяет элементы модели.

  1. В вашей рабочей папке создайте sl_customization.m файл. Этот файл указывает и создает регистрационную функцию проверки defineModelAdvisorChecks, который в свою очередь указывает функцию обратного вызова проверки SimpleCallback. Функциональный defineModelAdvisorChecks использует ModelAdvisor.Root объект задать интерфейс проверки.

    function sl_customization(cm)
    
    % --- register custom checks
    cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);
    
    % --- defineModelAdvisorChecks function
    function defineModelAdvisorChecks
    mdladvRoot = ModelAdvisor.Root;
    rec = ModelAdvisor.Check('exampleCheck');
    rec.Title = 'Example of a customized check';
    rec.TitleTips = 'Added customized check to Product Folder';
    rec.setCallbackFcn(@SimpleCallback,'None','StyleOne');
    mdladvRoot.publish(rec, 'Demo'); 
    
    % --- creates SimpleCallback function
    function result = SimpleCallback(system);
    result={};

  2. Закройте Model Advisor и вашу модель, если любой открыт.

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

    Advisor.Manager.refresh_customizations
  4. Из окна MATLAB® выберите New > Simulink Model, чтобы открыть новое окно модели Simulink®.

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

  6. На левой панели расширьте папку By Product, чтобы отобразить подпапки. Индивидуально настраиваемая проверка Example of a customized check появляется в подпапке By Product > Demo .

    Примечание

    Если папка By Product не отображена в окне Model Advisor, выберите Settings Preferences Show By Product Folder.

    Следующие команды в sl_customization.m файл создает правую панель Model Advisor.

    rec.Title = 'Example of a customized check';
    rec.TitleTips = 'Added customized check to Product Folder';
    

Создайте Индивидуально настраиваемую Проверку Передачи/Сбоя

В этом примере показано, как создать проверку передачи/сбоя Model Advisor. В этом примере Model Advisor проверяет блоки Константа. Если значение блоков Константа является числовым, сбои проверки.

  1. В вашей рабочей папке обновите sl_customization.m файл. Этот файл указывает и создает регистрационную функцию проверки defineModelAdvisorChecks, который также указывает функцию обратного вызова проверки SimpleCallback. Функциональный SimpleCallback создает проверку, которая находит блоки Константа, которые имеют числовые значения. SimpleCallback использует шаблон формата Model Advisor.

    function sl_customization(cm)
    
    % --- register custom checks
    cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);
    
    % --- defineModelAdvisorChecks function
    function defineModelAdvisorChecks
    mdladvRoot = ModelAdvisor.Root;
    rec = ModelAdvisor.Check('exampleCheck');
    rec.Title = 'Check Constant block usage';
    rec.TitleTips = ['Fail if Constant block value is a number; Pass if' ...
        ' Constant block value is a letter'];
    rec.setCallbackFcn(@SimpleCallback,'None','StyleOne') 
    
    mdladvRoot.publish(rec, 'Demo');
    
    % --- SimpleCallback function that checks constant blocks
    function result = SimpleCallback(system)
    mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);
    result    = {};
    
    all_constant_blk=find_system(system,'LookUnderMasks','all',...
        'FollowLinks','on','BlockType','Constant');
    blk_with_value=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]');
    
    ft = ModelAdvisor.FormatTemplate('ListTemplate');
    ft.setInformation(['This check looks for constant blocks that'...
        ' use numeric values']);
    if ~isempty(blk_with_value)
        ft.setSubResultStatusText(['Check has failed. The following '...
            'Constant blocks have numeric values:']);
        ft.setListObj(blk_with_value);
        ft.setSubResultStatus('warn');
        ft.setRecAction('Parameterize the constant block');
        mdladvObj.setCheckResultStatus(false); 
    else
        ft.setSubResultStatusText(['Check has passed. No constant blocks'...
            ' with numeric values were found.']);
        ft.setSubResultStatus('pass');
        mdladvObj.setCheckResultStatus(true); 
    end
    ft.setSubBar(0);
    result{end+1} = ft;

  2. Закройте Model Advisor и вашу модель, если любой открыт.

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

    Advisor.Manager.refresh_customizations
  4. Из окна MATLAB выберите New > Simulink Model, чтобы открыть новое окно модели Simulink.

  5. В окне модели Simulink создайте два блока Константа по имени Const_one и Const_1. Щелкните правой кнопкой по блоку, выберите Block Parameters и присвойте Constant value можно следующим образом:

    • Для Const_one, установленного значение к one.

    • Для Const_1, установленного значение к 1.

  6. Сохраните свою модель как example2_qs

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

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

    Примечание

    Если папка By Product не отображена в окне Model Advisor, выберите Settings Preferences Show By Product Folder.

  9. Выберите Run This Check. Проверка Model Advisor приводит к сбою для блока Const_1 и отображений Recommended Action.

    Следующие команды в sl_customization.m файл создает правую панель в Model Advisor.

    Check Constant block usage

    rec.Title = 'Check Constant block usage';
    rec.TitleTips = ['Fail if Constant block value is a number; Pass if' ...
        ' Constant block value is a letter'];
    
    Recommended Action
    ft.setInformation(['This check looks for constant blocks that'...
        ' use numeric values']);
    ft.setSubResultStatusText(['Check has failed. The following '...
            'Constant blocks have numeric values:']);
    ft.setListObj(blk_with_value);
    ft.setSubResultStatus('warn');
    ft.setRecAction('Parameterize the constant block');
    

  10. Следуйте за Recommended Action для фиксации не пройдено блока Constant. В диалоговом окне Model Advisor:

    • Дважды кликните the example2_qs/Const_1 гиперссылка.

    • Измените Constant value в two, или нечисловое значение.

    • Повторно выполните проверку Model Advisor. Оба Постоянных блока теперь передают проверку.

Создайте Индивидуально настраиваемую Передачу/Сбой, Сверяются, Фиксируют Действие

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

  1. В вашей рабочей папке обновите sl_customization.m файл. Этот файл содержит три функции, каждая из которых используют шаблон формата Model Advisor:

    • defineModelAdvisorChecks — Задает проверку, создает входные параметры и задает действие фиксации.

    • simpleCallback — Создает функцию обратного вызова проверки, которая находит блоки Константа с числовыми значениями.

    • simpleActionCallback — Создает фиксацию для блоков Константа, которые приводят проверку к сбою.

    function sl_customization(cm)
    
    % --- register custom checks
    cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);
    
    % --- defineModelAdvisorChecks function
    function defineModelAdvisorChecks
    mdladvRoot = ModelAdvisor.Root;
    rec = ModelAdvisor.Check('exampleCheck');
    rec.Title = 'Check Constant block usage';
    rec.TitleTips = ['Fail if Constant block value is a number; Pass if '...
        'Constant block value is a letter'];
    rec.setCallbackFcn(@SimpleCallback,'None','StyleOne') 
    
    % --- input parameters 
    rec.setInputParametersLayoutGrid([1 1]);
    inputParam1 = ModelAdvisor.InputParameter;
    inputParam1.Name = 'Text entry example';
    inputParam1.Value='VarNm';
    inputParam1.Type='String';
    inputParam1.Description='sample tooltip';
    inputParam1.setRowSpan([1 1]);
    inputParam1.setColSpan([1 1]);
    rec.setInputParameters({inputParam1});
    
    % -- set fix operation
    myAction = ModelAdvisor.Action;
    myAction.setCallbackFcn(@simpleActionCallback);
    myAction.Name='Fix Constant blocks';
    myAction.Description=['Click the button to update all blocks with'...
        ' Text entry example'];
    rec.setAction(myAction);
    
    mdladvRoot.publish(rec, 'Demo'); 
    
    % --- SimpleCallback function that checks constant blocks
    function result = SimpleCallback(system)
    mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);
    result    = {};
    
    all_constant_blk=find_system(system,'LookUnderMasks','all',...
        'FollowLinks','on','BlockType','Constant');
    blk_with_value=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]');
    
    ft = ModelAdvisor.FormatTemplate('ListTemplate');
    ft.setInformation(['This check looks for constant blocks that'...
        ' use numeric values']);
    if ~isempty(blk_with_value)
        ft.setSubResultStatusText(['Check has failed. The following '...
            'Constant blocks have numeric values:']);
        ft.setListObj(blk_with_value);
        ft.setSubResultStatus('warn');
        ft.setRecAction('Parameterize the constant block');
        mdladvObj.setCheckResultStatus(false);
        mdladvObj.setActionEnable(true);
    else
        ft.setSubResultStatusText(['Check has passed. No constant blocks'...
            'with numeric values were found.']);
        ft.setSubResultStatus('pass');
        mdladvObj.setCheckResultStatus(true);
    end
    ft.setSubBar(0);
    result{end+1} = ft;
    
    % --- creates SimpleActionCallback function that fixes failed check
    function result = simpleActionCallback(taskobj)
    mdladvObj = taskobj.MAObj;
    result    = {};
    
    system = getfullname(mdladvObj.System);
    
    % Get the string from the input parameter box.
    inputParams = mdladvObj.getInputParameters;
    textEntryEx = inputParams{1}.Value;
    
    all_constant_blk=find_system(system,'LookUnderMasks','all',...
        'FollowLinks','on','BlockType','Constant');
    blk_with_value=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]');
    ft = ModelAdvisor.FormatTemplate('TableTemplate');
    % Define table col titles
    ft.setColTitles({'Block','Old Value','New Value'})
    for inx=1:size(blk_with_value)
       oldVal = get_param(blk_with_value{inx},'Value');
       ft.addRow({blk_with_value{inx},oldVal,textEntryEx});
       set_param(blk_with_value{inx},'Value',textEntryEx);    
    end
    
    ft.setSubBar(0);
    result = ft;
    mdladvObj.setActionEnable(false);

  2. Закройте Model Advisor и вашу модель, если любой открыт.

  3. В командной строке, введите:

    Advisor.Manager.refresh_customizations
  4. Из Командного окна выберите New > Simulink Model, чтобы открыть новую модель.

  5. В окне модели Simulink создайте два блока Константа по имени Const_one и Const_1. Щелкните правой кнопкой по блоку, выберите Block Parameters и присвойте Constant value можно следующим образом:

    • Для Const_one, установленного значение к one.

    • Для Const_1, установленного значение к 1.

  6. Сохраните свою модель как example3_qs.

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

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

  9. Примечание

    Если папка By Product не отображена в окне Model Advisor, выберите Settings Preferences Show By Product Folder.

  10. Выберите Run This Check. Проверка Model Advisor перестала работать для блока Const_1.

    Следующие команды в sl_customization.m файл создает правую панель в Model Advisor.

    Check Constant block usage

    rec.Title = 'Check Constant block usage';
    rec.TitleTips = ['Fail if Constant block value is a number; Pass if '...
        'Constant block value is a letter'];
    rec.setInputParametersLayoutGrid([1 1]);
    inputParam1 = ModelAdvisor.InputParameter;
    inputParam1.Name = 'Text entry example';
    inputParam1.Value='VarNm';
    inputParam1.Type='String';
    inputParam1.Description='sample tooltip';
    inputParam1.setRowSpan([1 1]);
    inputParam1.setColSpan([1 1]);
    rec.setInputParameters({inputParam1});
    
    Action
    myAction.Name='Fix Constant blocks';
    myAction.Description=['Click the button to update all blocks with'...
        'Text entry example'];
    

    Поле Model Advisor имеет кнопку Fix Constant blocks в разделе Action диалогового окна Model Advisor.

  11. В диалоговом окне Model Advisor введите нечисловое значение в поле параметра Text entry example в. В этом примере значением является VarNm.

  12. Нажмите Fix Constant blocks. Constant block value Const_1 изменяется от 1 до нечислового значения, которое вы ввели. Раздел Result диалогового окна перечисляет Старое Значение и Новое Значение блока Const_1.

    Следующие команды в sl_customization.m файл создает правую панель в Model Advisor.

    Action

    ft = ModelAdvisor.FormatTemplate('TableTemplate');
    
    ft.setColTitles({'Block','Old Value','New Value'})
    for inx=1:size(blk_with_value)
       oldVal = get_param(blk_with_value{inx},'Value');
       ft.addRow({blk_with_value{inx},oldVal,textEntryEx});
       set_param(blk_with_value{inx},'Value',textEntryEx);    
    end
    

  13. В диалоговом окне Model Advisor нажмите Run This Check. Оба постоянных блока теперь передают проверку.

Создайте Индивидуально настраиваемую Передачу/Сбой, Сверяются с Подробными Наборами Результата

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

Можно рассмотреть результаты в Model Advisor путем выбора:

  • View By> Recommended Action ─, Когда проверка нарушена, это представление, показывает список элементов модели, которые нарушают проверку. Когда нет никакого нарушения, это представление предоставляет краткое описание, утверждая, что проверка не была нарушена.

  • View By> Subsystem ─ Это представление показывает таблицу элементов модели, которые нарушают проверку, организованную моделью или подсистемой (когда применимый).

  • View By> Block ─ Это представление предоставляет список нарушений проверки для каждого блока.

Когда проверка не передает, результаты включают гиперссылку на каждый элемент модели, который нарушает проверку. Используйте эти гиперссылки, чтобы легко определить местоположение областей в вашей модели или подсистеме.

Чтобы создать индивидуально настраиваемое сверяются с подробным результатом, представленным как набор:

  1. В вашей рабочей папке обновите sl_customization.m файл, как показывает в примере. Этот файл содержит три функции, специфичные для создания проверки, результаты которой представлены на Model Advisor как набор:

    function sl_customization(cm)
    
    % -----------------------------
    % Register custom checks
    cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);
    
    % -----------------------------
    % Define Model Advisor check "Check whether block names appear 
    % below blocks".
    function defineModelAdvisorChecks
    mdladvRoot = ModelAdvisor.Root;
    rec = ModelAdvisor.Check('com.mathworks.sample.Check0');
    rec.Title = 'Check whether block names appear below blocks 
        (recommended check style)';
    rec.TitleTips = 'Example new style callback (recommended 
        check style)';
    rec.setCallbackFcn(@SampleNewCheckStyleCallback,'None',
        'DetailStyle');
    % set fix operation
    myAction0 = ModelAdvisor.Action;
    myAction0.setCallbackFcn(@sampleActionCB0);
    myAction0.Name='Make block names appear below blocks';
    myAction0.Description='Click the button to place block     
        names below blocks';
    rec.setAction(myAction0);
    mdladvRoot.publish(rec, 'Demo'); % publish check into Demo group.
    
    % -----------------------------
    % Callback function for check "Check whether block names appear     
    % below blocks".
    function SampleNewCheckStyleCallback(system, CheckObj)
    mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); % get object
    % find all blocks whose name does not appear below blocks
    violationBlks = find_system(system, 'Type','block',...
                               'NamePlacement','alternate',...
                               'ShowName', 'on');
    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);  
    else
        ElementResults(1,numel(violationBlks))=ModelAdvisor.ResultDetail;
        for i=1:numel(ElementResults)
            ElementResults(i).setData(violationBlks{i});
            ElementResults(i).Description = 'Identify blocks where the 
                name is not displayed below the block.';
            ElementResults(i).Status = 'The following blocks have names     
                that do not display below the blocks:';
            ElementResults(i).RecAction =  'Change the location such that     
                the block name is below the block.';
        end                        
        mdladvObj.setCheckResultStatus(false);  
        mdladvObj.setActionEnable(true);
    end
    CheckObj.setResultDetails(ElementResults);
    
    % -----------------------------
    % Action callback function for check "Check whether block names 
    % appear below blocks". 
    function result = sampleActionCB0(taskobj)
    mdladvObj = taskobj.MAObj;
    checkObj = taskobj.Check;
    resultDetailObjs = checkObj.ResultDetails;
    for i=1:numel(resultDetailObjs)
        % take some action for each of them
        block=Simulink.ID.getHandle(resultDetailObjs(i).Data);
        set_param(block,'NamePlacement','normal');
    end
    result = ModelAdvisor.Text('Changed the location such that the 
    block name is below the block.');
    mdladvObj.setActionEnable(false);
  2. Закройте Model Advisor и вашу модель, если любой открыт.

  3. В окне команды MATLAB, введите:

    Advisor.Manager.refresh_customizations
  4. Из окна MATLAB откройте модель sldemo_fuelsys.

  5. В окне модели Simulink:

    • В топ-модели щелкните правой кнопкой по Engine Speed блокируйте и выберите Rotate & Flip> Flip Block Name.

    • Откройте fuel_rate_control подсистема. Щелкните правой кнопкой по validate_sample_time блокируйте и выберите Rotate & Flip> Flip Block Name.

    Возвратитесь к топ-модели и сохраните как example_sldemo_fuelsys.

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

  7. На левой панели выберите By Product > Demo > Check whether block names appear below blocks.

    Примечание

    Если папка By Product не отображена в окне Model Advisor, выберите Settings Preferences Show By Product Folder.

  8. Выберите Run This Check. Проверка Model Advisor перестала работать для блоков.

  9. Рассмотрите результаты путем выбора одной из опций View by.

    Отчет обеспечивает рекомендуемое действие для каждой проверки. Можно кликнуть по пути к гиперссылке, чтобы открыть блок нарушения в редакторе моделей. Например,

    Следующие команды в sl_customization.m файл создает правую панель в Model Advisor.

    Check title and subtitle

    rec.Title = 'Check whether block names appear below blocks 
        (recommended check style)';
    rec.TitleTips = 'Example new style callback (recommended 
        check style)';
    
    Result
    ElementResults(i).Description = 'Identify blocks where the name is
        not displayed below the block.';
    ElementResults(i).Status = 'The following blocks have names that do   
        not display below the blocks:';
    ElementResults(i).RecAction =  'Change the location such that the block
        name is below the block.';
    
    Action
    myAction0.Name='Make block names appear below blocks';
    myAction0.Description='Click the button to place block names 
        below blocks';
    

  10. Следуйте за рекомендуемым действием для фиксации блоков нарушения при помощи одного из этих методов:

    • Обновите каждое нарушение индивидуально путем двойного клика по гиперссылке, чтобы открыть блок. Щелкните правой кнопкой по блоку и выберите Rotate & Flip> Flip Block Name.

    • Нажмите кнопку Make block names appear below blocks. Model Advisor автоматически фиксирует проблемы в модели. Заметьте, что кнопка отображается серым после того, как нарушения фиксируются.

  11. Сохраните модель и повторно выполните проверку Model Advisor. Передачи проверки.

    Следующие команды в sl_customization.m файл создает правую панель в Model Advisor.

    Result

    ElementResults.Description = 'Identify blocks where the name is not 
        displayed below the block.';
    ElementResults.Status = 'All blocks have names displayed below the block.';
    

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

| | |

Похожие темы