Main Content

カスタム チェックからのブロックの対象外指定

この例では、カスタム チェックからブロックを対象外指定する方法を説明します。モデルの開発と検証の時間を短縮するため、モデル アドバイザー解析中にブロックをカスタム チェックから個別に対象外指定できます。カスタム チェックを Simulink ブロックおよび Stateflow チャートから除外するには、関数 ModelAdvisor.Check.supportExclusion および Simulink.ModelAdvisor.filterResultWithExclusion をチェック定義ファイルで使用します。

チェック定義ファイルの更新

  1. この例のサポート ファイルが含まれている例を開きます。

    openExample('slcheck/CreateAndDeployAModelAdvisorCustomConfigurationExample')

  2. AdvisorCustomizationExample モデルと defineDetailStyleCheck.m ファイルおよび sl_customization.m ファイルを除いて、サポート ファイルを作業ディレクトリから削除します。

  3. sl_customization ファイルを開き、以下のように変更します。

    function sl_customization(cm)
    % SL_CUSTOMIZATION - Model Advisor customization demonstration.
    
    % Copyright 2019 The MathWorks, Inc.
    
    % register custom checks 
    cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);
    
    % -----------------------------
    % defines Model Advisor Checks
    % -----------------------------
    function defineModelAdvisorChecks
    defineDetailStyleCheck;
    
  4. defineDetailStyleCheck ファイルを開きます。

  5. [ブロック名がブロックの下になっているかどうかをチェック] チェックを更新して、モデル アドバイザー解析中にブロックを除外するようにするには、defineDetailStyleCheck ファイルに 2 つ変更を加えます。

    1. [ブロック名がブロックの下になっているかどうかをチェック] チェックを有効にし、ModelAdvisor.Check.supportExclusion プロパティを使用したチェックの対象外指定をサポートします。rec.setCallbackFcn(@DetailStyleCallback,'None','DetailStyle'); の後に、rec.supportExclusion = true; を追加します。function defineDetailStyleCheck の最初のセクションは次のようになります。

      % Create ModelAdvisor.Check object and set properties.
      rec = ModelAdvisor.Check('com.mathworks.sample.detailStyle');
      rec.Title = 'Check whether block names appear below blocks';
      rec.TitleTips = 'Check position of block names';
      rec.setCallbackFcn(@DetailStyleCallback,'None','DetailStyle');
      rec.supportExclusion = true;
      

    2. 関数 Simulink.ModelAdvisor.filterResultWithExclusion を使用すると、対象外指定が有効になっているチェックで警告または失敗の原因となっているモデル オブジェクトをフィルターすることができます。そのためには、関数 DetailStyleCallback(system, CheckObj) を次のように変更します。

      % Find all blocks whose name does not appear below blocks
      violationBlks = find_system(system, 'Type','block',...
          'NamePlacement','alternate',...
          'ShowName', 'on');
      violationBlks = mdladvObj.filterResultWithExclusion(violationBlks);
      

  6. DefineDetailStyleCheck ファイルを保存します。ファイルを上書きするか確認するメッセージが表示されたら、[OK] をクリックします。

対象外指定の作成と保存

  1. カスタマイズがモデル アドバイザーに表示されるためには、モデル アドバイザー チェック情報キャッシュをリフレッシュする必要があります。MATLAB コマンド プロンプトで次のコマンドを入力します。

    Advisor.Manager.refresh_customizations();

  2. モデルを開くには、AdvisorCustomizationExample.slx をダブルクリックします。

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

  4. モデル アドバイザー ウィンドウの左側のペインで、[製品別][デモ][ブロック名がブロックの下になっているかどうかをチェック] チェックを選択します。右側のペインで [チェックの実行] を選択します。このチェックは失敗します。

  5. モデル ウィンドウで X ブロックを右クリックし、[モデル アドバイザー][ブロックのみを除外][チェックの選択] を選択します。[デモ] フォルダーに移動し、[ブロック名がブロックの下になっているかどうかをチェック] チェックを選択します。

  6. モデル アドバイザーの対象外指定エディターで [保存] をクリックし、対象外指定ファイルを作成します。

  7. モデル ウィンドウで Amplifier サブシステムを開き、GainBlock ブロックを右クリックし、[モデル アドバイザー][ブロックのみを除外][チェックの選択] を選択します。[デモ] フォルダーに移動し、[ブロック名がブロックの下になっているかどうかをチェック] チェックを選択します。

  8. モデル アドバイザーの対象外指定エディターで [保存] をクリックし、対象外指定ファイルを更新します。

対象外指定の確認

  1. モデル アドバイザー ウィンドウの左側のペインで、[製品別][デモ][ブロック名がブロックの下になっているかどうかをチェック] チェックを選択します。右側のペインで [チェックの実行] を選択します。このチェックはパスします。モデル アドバイザー ウィンドウの右側のペインに、解析時にモデル アドバイザーが適用する [対象外指定規則のチェック] が表示されます。

  2. モデルとモデル アドバイザーを閉じます。

参考

|

関連する例

詳細