Задайте проверки Model Advisor на поддерживаемые или неподдерживаемые блоки и параметры

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

  • Поддерживаемые или неподдерживаемые значения параметров блоков

  • Поддерживаемые или неподдерживаемые значения параметров модели

  • Поддерживаемые или неподдерживаемые блоки

  • Проверьте, соответствуют ли блоки или параметры комбинации ограничений

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

Пример

The sldemo_bounce модель симулирует мяч, прыгающий на Землю. В этом примере вы создаете две проверки Model Advisor, состоящие из ограничений. Затем проверьте свою модель на соответствие этим ограничениям.

Создайте ограничения параметров блоков

  1. Создайте следующие ограничения параметров блоков:

    c1=Advisor.authoring.PositiveBlockParameterConstraint;
    c1.ID='ID_1';
    c1.BlockType='Gain';
    c1.ParameterName='Gain';
    c1.SupportedParameterValues={'-.7'};
    c1.ValueOperator='eq';
    
    c2=Advisor.authoring.NegativeBlockParameterConstraint;
    c2.ID='ID_2';
    c2.BlockType='InitialCondition';
    c2.ParameterName='Value';
    c2.UnsupportedParameterValues={'0'};
    c2.ValueOperator='le';
    

    Ограничительные c1 задает, что блок Gain должен иметь значение, равное -.7. Ограничительные c2 указывает, что блок Initial Condition должен иметь значение, меньше чем или равное нулю.

  2. Создайте это положительное ограничение параметра модели.

    c3=Advisor.authoring.PositiveModelParameterConstraint;
    c3.ID='ID_3';
    c3.ParameterName='SolverType';
    c3.SupportedParameterValues={'Variable-step'};
    

    Ограничительные c3 задает, что параметр Solver должен быть равен Variable-step.

  3. Создайте это положительное ограничение типа блока:

    c4=Advisor.authoring.PositiveBlockTypeConstraint;
    c4.ID='ID_5';
    s1=struct('BlockType','Constant','MaskType','');
    s2=struct('BlockType','Subsystem','MaskType','');
    s3=struct('BlockType','InitialCondition','MaskType','');
    s4=struct('BlockType','Gain','MaskType','');
    s5=struct('BlockType','Memory','MaskType','');
    s6=struct('BlockType','SecondOrderIntegrator','MaskType','');
    s7=struct('BlockType','Terminator','MaskType','');
    c4.SupportedBlockTypes={s1;s2;s3;s4;s5;s6;s7;};
    c4.addPreRequisiteConstraintID('ID_3');
    

    Ограничительные c4 задает поддерживаемые блоки. Ограничительные c3 является необходимым условием для c4 что означает, что Model Advisor проверяет только c4 если c3 проходит.

  4. Создайте файл данных, содержащий эти ограничения. Этот файл данных соответствует одной проверке Model Advisor.

    Advisor.authoring.generateBlockConstraintsDataFile( ...
                   'sldemo_constraints_1.xml','constraints',{c1,c2,c3,c4});

    Файл данных содержит маркировку специально для ограничений.

    <?xml version="1.0" encoding="utf-8"?>
    <customcheck>
       <checkdata>
          <PositiveBlockParameterConstraint BlockType="Gain" id="ID_1">
             <parameter type="string">Gain</parameter>
             <value>-.7</value>
             <operator>eq</operator>
          </PositiveBlockParameterConstraint>
          <NegativeBlockParameterConstraint BlockType="InitialCondition" id="ID_2">
             <parameter type="string">Value</parameter>
             <value>0</value>
             <operator>le</operator>
          </NegativeBlockParameterConstraint>
          <PositiveModelParameterConstraint id="ID_3">
             <parameter type="enum">SolverType</parameter>
             <value>Variable-step</value>
          </PositiveModelParameterConstraint>
          <PositiveBlockTypeConstraint id="ID_5">
             <BlockType MaskType="">Constant</BlockType>
             <BlockType MaskType="">Subsystem</BlockType>
             <BlockType MaskType="">InitialCondition</BlockType>
             <BlockType MaskType="">Gain</BlockType>
             <BlockType MaskType="">Memory</BlockType>
             <BlockType MaskType="">SecondOrderIntegrator</BlockType>
             <BlockType MaskType="">Terminator</BlockType>
             <dependson>ID_3</dependson>
          </PositiveBlockTypeConstraint>
          <CompositeConstraint>
             <ID>ID_1</ID>
             <ID>ID_2</ID>
             <ID>ID_5</ID>
             <operator>and</operator>
          </CompositeConstraint>
       </checkdata>
    </customcheck>

    Примечание

    Для ограничений параметров конфигурации модели используйте Advisor.authoring.generateBlockConstraintsDataFile метод только при определении ограничений параметров конфигурации модели в качестве необходимых условий для блокирования ограничений или как части составного ограничения, состоящего из ограничений параметров конфигурации блока и модели. В других случаях используйте Advisor_authoring.generateConfigurationParameterDatafile способ.

  5. Создайте два ограничения для параметров блоков и составное ограничение.

    cc1=Advisor.authoring.PositiveBlockParameterConstraint;
    cc1.ID='ID_cc1';
    cc1.BlockType='SecondOrderIntegrator';
    cc1.ParameterName='UpperLimitX';
    cc1.SupportedParameterValues={'inf'};
    cc1.ValueOperator='eq';
    
    cc2=Advisor.authoring.PositiveBlockParameterConstraint;
    cc2.ID='ID_cc2';
    cc2.BlockType='SecondOrderIntegrator';
    cc2.ParameterName='LowerLimitX';
    cc2.SupportedParameterValues={'0.0'};
    cc2.ValueOperator='eq';
    
    cc=Advisor.authoring.CompositeConstraint;
    cc.addConstraintID('ID_cc1');
    cc.addConstraintID('ID_cc2');
    cc.CompositeOperator='and';
    

    Ограничительные cc1 указывает, что для блока Second-Order Integrator параметр Upper limit x должен иметь значение, равное inf. Ограничительные cc2 указывает, что для блока Second-Order Integrator параметр Lower limit x должен иметь значение, равное нулю. Ограничительные cc указывает, что для прохождения этой проверки оба cc1 и cc2 придется пройти.

  6. Создайте файл данных, содержащий эти ограничения. Этот файл данных соответствует второй проверке Model Advisor.

    Advisor.authoring.generateBlockConstraintsDataFile( ...
                   'sldemo_constraints_2.xml','constraints',{cc1,cc2,cc});

Создайте проверки Model Advisor из ограничений

  1. Чтобы задать и зарегистрировать эти проверки, используйте эту sl_customization.m файл.

    function sl_customization(cm)
    
    % register custom checks.
    cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);
    
    % register items to factory group.
    cm.addModelAdvisorTaskFcn(@defineModelAdvisorGroups);
    
    
    % defineModelAdvisorChecks
    function defineModelAdvisorChecks
    
    % check1
    rec = Advisor.authoring.createBlockConstraintCheck('mathworks.check_0001');
    rec.Title = 'Example1: Check block parameter constraints';
    rec.setCallbackFcn(@(system)(Advisor.authoring.CustomCheck.checkCallback...
        (system)), 'None', 'StyleOne');
    rec.TitleTips = 'Example check block parameter constraints';
    
    % --- data file input parameters
    rec.setInputParametersLayoutGrid([1 1]);
    inputParam1 = ModelAdvisor.InputParameter;
    inputParam1.Name = 'Data File';
    inputParam1.Value = 'sldemo_constraints_1.xml';
    inputParam1.Type = 'String';
    inputParam1.Description = 'Name or full path of XML data file.';
    inputParam1.setRowSpan([1 1]);
    inputParam1.setColSpan([1 1]);
    rec.setInputParameters({inputParam1});
    rec.SupportExclusion = false;
    rec.SupportLibrary = true;
    
    % check2
    rec1 = Advisor.authoring.createBlockConstraintCheck('mathworks.check_0002');
    rec1.Title = 'Example2: Check block parameter constraints';
    rec1.setCallbackFcn(@(system)(Advisor.authoring.CustomCheck.checkCallback...
        (system)), 'None', 'StyleOne');
    rec1.TitleTips = 'Example check block parameter constraints';
    
    % --- data file input parameters
    rec1.setInputParametersLayoutGrid([1 1]);
    inputParam1 = ModelAdvisor.InputParameter;
    inputParam1.Name = 'Data File';
    inputParam1.Value = 'sldemo_constraints_2.xml';
    inputParam1.Type = 'String';
    inputParam1.Description = 'Name or full path of XML data file.';
    inputParam1.setRowSpan([1 1]);
    inputParam1.setColSpan([1 1]);
    rec1.setInputParameters({inputParam1});
    rec1.SupportExclusion = false;
    rec1.SupportLibrary = true;
    mdladvRoot = ModelAdvisor.Root;
    mdladvRoot.register(rec);
    mdladvRoot.register(rec1);
    
    %% defineModelAdvisorGroups
    function defineModelAdvisorGroups
    mdladvRoot = ModelAdvisor.Root;
    
    % --- sample factory group 1
    rec = ModelAdvisor.FactoryGroup('com.mathworks.Test.factoryGroup');
    rec.DisplayName='Example: My Group';
    rec.addCheck('mathworks.check_0001');
    rec.addCheck('mathworks.check_0002');
    
    mdladvRoot.publish(rec);
    
    Вы должны использовать Advisor.authoring.createBlockConstraintCheck функция для создания ModelAdvisor.Check и задайте файл данных ограничений как параметр входа для этого объекта.

    Обратите внимание, что параметры блоков и проверки ограничений параметров модели должны использовать setCallbackFcn тип StyleOne.

  2. В командной строке введите создать Example1: Check block parameter constraints и Example2: Check block parameter constraints проверки путем ввода этой команды:

    Advisor.Manager.refresh_customizations

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

  4. На вкладке Modeling выберите Model Advisor, чтобы открыть Model Advisor.

  5. На левой панели выберите By Task > Example: My Group. Для каждой проверки на правой панели параметры Data File устанавливаются в файлы данных, которые вы ранее создали.

  6. Нажмите Run Selected Checks.

  7. Проверка Example1: Check block parameter constraints выдает предупреждение, потому что блок Gain имеет значение -0.8 не -0.7. Проверка Example2: Check block parameter constraints проходит, потому что блок Second-Order Integrator соответствует обоим ограничениям.

Создайте Model Advisor Править проверки времени с помощью ограничений

Чтобы включить проверку во время редактирования, в Model Advisor Configuration Editor:

  1. Откройте Model Advisor Configuration Editor.

  2. Выполните поиск собственной проверки и выберите ее.

  3. Сохраните строение.

  4. Отметьте сохранённое строение как конфигурацию по умолчанию и закройте Model Advisor Configuration Editor.

  5. В окне Simulink щелкните по раскрывающемуся списку Model Advisor и выберите Edit-Time Checks.

Верификация:

Щелкните на подсвеченных (желтым) блоках в модели, чтобы просмотреть время редактирования отказов.

Можно отредактировать значения параметров из всплывающего окна ошибки, щелкнув гиперссылки неудачного параметра. Это действие открывает окно Block Parameters с возможностью редактирования.

Для получения дополнительной информации о проверке во время редактирования смотрите Проверить податливость модели с помощью проверки во время редактирования.

См. также

| | | | | |