Можно создать проверки 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, которая содержит три ограничения параметров блоков, c1
C2
, и 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
равняйтесь массиву ячеек ограничений c1
C2
, и 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
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 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.
Для получения дополнительной информации о разовой редактированием проверке смотрите, что Податливость Модели Проверки Использует разовую Редактированием Проверку.
PositiveBlockParameterConstraint
| NegativeBlockParameterConstraint
| PositiveModelParameterConstraint
| NegativeModelParameterConstraint
| PositiveBlockTypeConstraint
| NegativeBlockTypeConstraint
| Advisor.authoring.generateBlockConstraintsDataFile