Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

サポートされる、またはサポートされないブロックおよびパラメーターのモデル アドバイザー チェックの定義

ブロックまたはパラメーターの値のサブセットを使用する必要のあるモデリング ガイドラインの場合、次の制約を指定して、それを含むモデル アドバイザー チェックを作成できます。

  • サポートされる、またはサポートされないブロック パラメーター値

  • サポートされる、またはサポートされないモデル パラメーター値

  • サポートされる、またはサポートされないブロック

  • ブロックまたはパラメーターが制約の組み合わせを満たすかどうかのチェック

実際の制約をチェックする前に前提条件の制約をチェックする制約も作成できます。編集時にこれらの制約に対してモデルをチェックできるほか、モデルの設計完了後にチェックを対話的に実行することもできます。

sldemo_bounce モデルは、地球上でバウンドするボールをシミュレートします。この例では、制約で構成される 2 つのモデル アドバイザー チェックを作成します。次に、それらの制約に対してモデルをチェックします。

ブロック パラメーターの制約の作成

  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 は、[ソルバー] パラメーターが 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 はサポートされるブロックを指定します。制約 c3c4 の前提条件です。つまり、モデル アドバイザーは、c3 がパスした場合にのみ c4 をチェックします。

  4. 上記の制約を含むデータ ファイルを作成します。このデータ ファイルは 1 つのモデル アドバイザー チェックに対応します。

    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. 2 つのブロック パラメーター制約と 1 つの複合制約を作成します。

    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 ブロックの [上限 x] パラメーターが inf と等しい値をもたなければならないことを指定します。制約 cc2 は、Second-Order Integrator ブロックの [下限 x] パラメーターがゼロと等しい値をもたなければならないことを指定します。制約 cc は、このチェックがパスするためには、cc1cc2 の両方がパスしなければならないことを指定します。

  6. 上記の制約を含むデータ ファイルを作成します。このデータ ファイルは 2 番目のモデル アドバイザー チェックに対応します。

    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: Check block parameter constraints] チェックと [Example2: Check block parameter constraints] チェックを、次のコマンドを入力することによって作成します。

    Advisor.Manager.refresh_customizations

  3. コマンド プロンプトで、sldemo_bounce と入力します。

  4. [モデル化] タブで [モデル アドバイザー] を選択してモデル アドバイザーを開きます。

  5. 左側のペインで、[タスク別]、[Example: My Group] を選択します。チェックごとに、右側のペインで、[データ ファイル] パラメーターが、前に作成したデータ ファイルに設定されます。

  6. [選択したチェックを実行] をクリックします。

  7. [Example1: Check block parameter constraints] チェックでは警告が生成されます。これは、Gain ブロックのもつ値が -0.7 ではなく -0.8 であるためです。[Example2: Check block parameter constraints] チェックはパスします。Second-Order Integrator ブロックが両方の制約を満たすためです。

制約を使用したモデル アドバイザーの編集時チェックの作成

編集時のチェックを有効にするには、モデル アドバイザーの設定エディターで、以下を行います。

  1. モデル アドバイザーの設定エディターを開きます。

  2. 登録済みのカスタム チェックを検索して選択します。

  3. 構成を保存します。

  4. 保存した構成を既定としてマークし、モデル アドバイザーの設定エディターを閉じます。

  5. Simulink ウィンドウから、[モデル アドバイザー] ドロップダウンをクリックして [編集時チェック] を選択します。

検証:

モデル内の (黄色で) 強調表示されたブロックをクリックして、編集時のエラーを表示します。

エラーのポップアップ ウィンドウから、エラーになったパラメーターのハイパーリンクをクリックすることにより、パラメーターの値を編集できます。この操作により、編集可能な [ブロック パラメーター] ウィンドウが開きます。

編集時のチェックの詳細については、編集時チェックを使用したモデルの準拠性のチェックを参照してください。

参考

| | | | | |