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

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

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

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

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

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

Можно также использовать addPreRequisiteConstraintID функция, чтобы добавить необходимые как условие ограничения, которые должны передать перед Model Advisor, проверяет фактическое ограничение. Можно проверять модель по этим ограничениям, как вы редактируете или путем осуществления проверок от Model Advisor.

Пример

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

Подготовьте свою работающую директорию

1. Установите свою текущую папку на writeable директорию.

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

copyfile(fullfile(matlabroot,'examples','slcheck','main','prepare_chk_define_code.m'),...
    'prepare_chk_define_code.m','f');
run('prepare_chk_define_code.m');

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

Во-первых, создайте проверку Model Advisor, которая содержит три ограничения параметров блоков, c1C2 , и c3, это задает поддерживаемые и неподдерживаемые значения параметров блоков.

1. Задайте новую функцию.

function constraints = createConstraints_Check1()
end

2. В функции создайте два ограничения параметров блоков, c1 и c2.

function constraints = createConstraints_Check1()

    c1=Advisor.authoring.PositiveBlockParameterConstraint;
    c1.ID='ID_1';
    c1.BlockType='Gain';
    c1.ParameterName='Gain';
    c1.SupportedParameterValues={'-0.7'};
    c1.ValueOperator='eq'; % equal to
    
    c2=Advisor.authoring.NegativeBlockParameterConstraint;
    c2.ID='ID_2';
    c2.BlockType='InitialCondition';
    c2.ParameterName='Value';
    c2.UnsupportedParameterValues={'0'};
    c2.ValueOperator='le'; % less than or equal to

end

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

3. Создайте положительное ограничение блока, c3, и набор constraints равняйтесь массиву ячеек ограничений c1C2 , и c3.

function constraints = createConstraints_Check1()

    c1=Advisor.authoring.PositiveBlockParameterConstraint;
    c1.ID='ID_1';
    c1.BlockType='Gain';
    c1.ParameterName='Gain';
    c1.SupportedParameterValues={'-0.7'};
    c1.ValueOperator='eq'; % equal to
    
    c2=Advisor.authoring.NegativeBlockParameterConstraint;
    c2.ID='ID_2';
    c2.BlockType='InitialCondition';
    c2.ParameterName='Value';
    c2.UnsupportedParameterValues={'0'};
    c2.ValueOperator='le'; % less than or equal to
    
    c3=Advisor.authoring.PositiveBlockTypeConstraint;
    c3.ID='ID_3';
    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','');
    c3.SupportedBlockTypes={s1;s2;s3;s4;s5;s6;s7;};
    
    constraints = {c1,c2,c3};

end

Ограничение c3 задает поддерживаемые блоки. constraints массив ячеек ограничений блока.

4. Задайте новый Model Advisor, проверяют создание другой функции, check1. Используйте функциональный Advisor.authoring.createBlockConstraintCheck создать проверку Model Advisor, rec, с этими ограничениями блока. Затем используйте mdladvRoot.register(rec) чтобы указать ограничения блока сверяются с Model Advisor.

function check1()

    rec = Advisor.authoring.createBlockConstraintCheck('mathworks.check_0001',...
                                             'Constraints',@createConstraints_Check1);
    
    rec.Title = 'Example 1: Check three block parameter constraints';
    rec.TitleTips = 'Example check three block parameter constraints';
    
    mdladvRoot = ModelAdvisor.Root;
    mdladvRoot.register(rec);

end

function constraints = createConstraints_Check1()

    c1=Advisor.authoring.PositiveBlockParameterConstraint;
    c1.ID='ID_1';
    c1.BlockType='Gain';
    c1.ParameterName='Gain';
    c1.SupportedParameterValues={'-0.7'};
    c1.ValueOperator='eq'; % equal to
    
    c2=Advisor.authoring.NegativeBlockParameterConstraint;
    c2.ID='ID_2';
    c2.BlockType='InitialCondition';
    c2.ParameterName='Value';
    c2.UnsupportedParameterValues={'0'};
    c2.ValueOperator='le'; % less than or equal to
    
    c3=Advisor.authoring.PositiveBlockTypeConstraint;
    c3.ID='ID_3';
    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','');
    c3.SupportedBlockTypes={s1;s2;s3;s4;s5;s6;s7;};
    
    constraints = {c1,c2,c3};

end

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

Затем создайте проверку Model Advisor, которая содержит три ограничения параметров блоков cc1, cc2, и cc. Ограничения cc1 и cc2 задайте, какие параметры блоков поддерживаются и ограничение cc составное ограничение, которое содержит cc1 и cc2.

1. Задайте новую функцию.

function constraints = createConstraints_Check2()
end

2. Создайте два ограничения параметров блоков, cc1 и cc2, и составное ограничение, cc. Установите constraints равняйтесь массиву ячеек ограничений cc1, cc2, и cc.

function constraints = createConstraints_Check2()

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

    constraints = {cc1,cc2,cc};

end

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

3. Задайте новый Model Advisor, регистрируются в новой функции, check2. Используйте функциональный Advisor.authoring.createBlockConstraintCheck создать проверку Model Advisor на ограничения блока, заданные функциональным createConstraints_Check2.

function check2()

    rec = Advisor.authoring.createBlockConstraintCheck('mathworks.check_0002',...
                                             'Constraints',@createConstraints_Check2);
    
    rec.Title = 'Example 2: Check three block parameter constraints';
    rec.TitleTips = 'Example check three block parameter constraints';
    
    mdladvRoot = ModelAdvisor.Root;
    mdladvRoot.register(rec);


end

function constraints = createConstraints_Check2()

    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';
    
    constraints = {cc1,cc2,cc};

end

Создайте и осуществленные проверки Model Advisor

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

function sl_customization(cm)

    % register custom checks.
    cm.addModelAdvisorCheckFcn(@check1);
    cm.addModelAdvisorCheckFcn(@check2);
    
    % register items to factory group.
    cm.addModelAdvisorTaskFcn(@defineModelAdvisorGroups);



%% 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);

2. В командной строке создайте Пример 1: Проверяйте ограничения параметров блоков и Пример 2: Проверяйте, что ограничения параметров блоков проверяют ввод этой команды:

Advisor.Manager.refresh_customizations

3. В командной строке откройте модель sldemo_bounce.

open_system('sldemo_bounce')

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

5. На левой панели выберите By Task> Example: Моя Группа.

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

Пример 1: Проверяйте, что три ограничительных проверки параметров блоков производят предупреждение, потому что блок Gain имеет значение -0.8. Пример 2: Проверяйте три ограничительных передачи проверки параметров блоков, потому что блок Second-Order Integrator соответствует обоим ограничениям.

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

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

Можно выбрать, который проверки Model Advisor оценивают во время разовой редактированием проверки путем выбора желаемых регистраций Model Advisor Configuration Editor и сохранения пользовательской конфигурации.

1. Чтобы открыть Model Advisor Configuration Editor, откройте Model Advisor и выберите Settings> Open Configuration Editor.

Проверки, которые вы создали, появляются в Model Advisor Configuration Editor> Задачей> Пример: Моя Группа.

2. Ищите собственную проверку check_0001 и выберите его.

3. Нажмите Save.

4. Нажмите кнопку Да, чтобы сделать файл настройкой по умолчанию и закрыть Model Advisor Configuration Editor.

5. В редакторе моделей Simulink, на вкладке Modeling, нажимают Model Advisor> Edit-Time Checks.

6. Нажмите на подсвеченные блоки в модели, чтобы просмотреть разовые редактированием предупреждения.

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

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

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

| | | | | |