exponenta event banner

Проверка поддерживаемых или неподдерживаемых блоков и параметров с помощью диспетчера моделей

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

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

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

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

  • Проверка соответствия блоков или параметров сочетанию зависимостей

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

Пример

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

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

  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 указывает, что блок усиления должен иметь значение, равное -.7. Ограничение c2 указывает, что значение блока «Начальное условие» должно быть меньше или равно нулю.

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

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

    Ограничение c3 указывает, что параметр решателя должен быть равен 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 означает, что помощник по модели проверяет только 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 указывает, что для блока интегратора второго порядка параметр верхнего предела x должен иметь значение, равное inf. Ограничение cc2 указывает, что для блока интегратора второго порядка параметр Lower limit x должен иметь значение, равное нулю. Ограничение cc указывает, что для прохождения этой проверки оба cc1 и cc2 должны пройти.

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

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

Создание проверок помощника по модели на основе ограничений

  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: Проверка ограничений параметров блока и Example2: Проверка проверок ограничений параметров блока путем ввода следующей команды:

    Advisor.Manager.refresh_customizations

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

  4. На вкладке Моделирование (Modeling) выберите Мастер модели (Model Advisor), чтобы открыть Мастер модели (Model Advisor).

  5. На левой панели выберите По задаче > Пример: Моя группа. Для каждой проверки на правой панели параметры файла данных задаются для ранее созданных файлов данных.

  6. Щелкните Выполнить выбранные проверки (Run Selected Checks).

  7. Проверка ограничений параметров блока Example1: Check выдает предупреждение, поскольку блок усиления имеет значение -0.8 нет -0.7. Проверка ограничений параметров блока Example2: Check проходит, поскольку блок интегратора второго порядка соответствует обоим ограничениям.

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

Чтобы включить проверку времени редактирования, в редакторе конфигурации Model Advisor выполните следующие действия.

  1. Откройте редактор конфигурации Model Advisor.

  2. Найдите зарегистрированную пользовательскую проверку и выберите ее.

  3. Сохраните конфигурацию.

  4. Отметьте сохраненную конфигурацию как стандартную и закройте редактор конфигурации Model Advisor.

  5. В окне Симуляция (Simulink) щелкните раскрывающийся список Помощник по модели (Model Advisor) и выберите Править (Edit) Проверки времени (Time Checks).

Проверка:

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

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

Дополнительные сведения о проверке времени правки см. в разделе Проверка соответствия модели с помощью проверки времени правки.

См. также

| | | | | |