ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

カスタム チェックの作成と追加 - 基本的な例

目的参照先
カスタマイズしたチェックをモデル アドバイザーの [製品別]、[デモ] サブフォルダーに追加します。カスタマイズしたチェックを [製品別] フォルダーに追加

モデル アドバイザーのパス/失敗チェックを作成します。

カスタマイズしたパス/失敗チェックの作成

モデル アドバイザーのパス/失敗チェックを修正アクションにより作成します。

カスタマイズしたパス/失敗チェックの修正アクションによる作成

カスタマイズしたチェックを [製品別] フォルダーに追加

この例では、カスタマイズしたチェックをモデル アドバイザーの [製品別]、[デモ] サブフォルダーに追加する方法を示します。この例では、カスタマイズしたチェックはモデル要素をチェックしません。

  1. 作業ディレクトリに、次のように sl_customization.m ファイルを作成します。このファイルはチェック登録関数 defineModelAdvisorChecks を登録および作成します。その後、チェック コールバック関数 SimpleCallback を登録します。関数 defineModelAdvisorChecks では ModelAdvisor.Root オブジェクトを使用してチェック インターフェイスを定義します。

    function sl_customization(cm)
    
    % --- register custom checks
    cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);
    
    % --- defineModelAdvisorChecks function
    function defineModelAdvisorChecks
    mdladvRoot = ModelAdvisor.Root;
    rec = ModelAdvisor.Check('exampleCheck');
    rec.Title = 'Example of a customized check';
    rec.TitleTips = 'Added customized check to Product Folder';
    rec.setCallbackFcn(@SimpleCallback,'None','StyleOne');
    mdladvRoot.publish(rec, 'Demo'); 
    
    % --- creates SimpleCallback function
    function result = SimpleCallback(system);
    result={};

  2. モデル アドバイザーとモデルが開いている場合は、閉じます。

  3. コマンド ウィンドウで次を入力します。

    sl_refresh_customizations
  4. MATLAB® ウィンドウで [新規作成][Simulink モデル] を選択して、新しい Simulink® モデル ウィンドウを開きます。

  5. モデル ウィンドウで [解析][モデル アドバイザー][モデル アドバイザー] を選択して、モデル アドバイザーを開きます。

  6. [システム セレクター — モデル アドバイザー] ダイアログ ボックスが開きます。[OK] をクリックします。[モデル アドバイザー] ウィンドウが開きます。この処理には数分かかることがあります。

  7. モデル アドバイザー ウィンドウに [製品別] フォルダーが表示されない場合、[設定][設定] ダイアログ ボックスで [製品別フォルダーを表示] を選択します。

  8. 左側のペインで、[製品別] フォルダーを開き、そのサブフォルダーを表示します。カスタマイズしたチェック [Example of a customized check][製品別]、[デモ] サブフォルダーに表示されます。

    sl_customization.m ファイルの次のコマンドにより、モデル アドバイザーの右側のペインが作成されます。

    rec.Title = 'Example of a customized check';
    rec.TitleTips = 'Added customized check to Product Folder';
    

カスタマイズしたパス/失敗チェックの作成

この例では、モデル アドバイザーのパス/失敗チェックを作成する方法を示します。この例では、モデル アドバイザーにより Constant ブロックがチェックされます。Constant ブロックの値が数値の場合、このチェックは失敗します。

  1. 作業ディレクトリで、次のように sl_customization.m ファイルを更新します。このファイルはチェック登録関数 defineModelAdvisorChecks を登録および作成します。この関数によりチェック コールバック関数 SimpleCallback が登録されます。この関数 SimpleCallback により、数値が設定されている Constant ブロックを検索するチェックが作成されます。SimpleCallback はモデル アドバイザー形式テンプレートを使用します。

    function sl_customization(cm)
    
    % --- register custom checks
    cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);
    
    % --- defineModelAdvisorChecks function
    function defineModelAdvisorChecks
    mdladvRoot = ModelAdvisor.Root;
    rec = ModelAdvisor.Check('exampleCheck');
    rec.Title = 'Check Constant block usage';
    rec.TitleTips = ['Fail if Constant block value is a number; Pass if' ...
        ' Constant block value is a letter'];
    rec.setCallbackFcn(@SimpleCallback,'None','StyleOne') 
    
    mdladvRoot.publish(rec, 'Demo');
    
    % --- SimpleCallback function that checks constant blocks
    function result = SimpleCallback(system)
    mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);
    result    = {};
    
    all_constant_blk=find_system(system,'LookUnderMasks','all',...
        'FollowLinks','on','BlockType','Constant');
    blk_with_value=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]');
    
    ft = ModelAdvisor.FormatTemplate('ListTemplate');
    ft.setInformation(['This check looks for constant blocks that'...
        ' use numeric values']);
    if ~isempty(blk_with_value)
        ft.setSubResultStatusText(['Check has failed. The following '...
            'Constant blocks have numeric values:']);
        ft.setListObj(blk_with_value);
        ft.setSubResultStatus('warn');
        ft.setRecAction('Parameterize the constant block');
        mdladvObj.setCheckResultStatus(false); 
    else
        ft.setSubResultStatusText(['Check has passed. No constant blocks'...
            ' with numeric values were found.']);
        ft.setSubResultStatus('pass');
        mdladvObj.setCheckResultStatus(true); 
    end
    ft.setSubBar(0);
    result{end+1} = ft;

  2. モデル アドバイザーとモデルが開いている場合は、閉じます。

  3. コマンド ウィンドウで次を入力します。

    sl_refresh_customizations
  4. MATLAB ウィンドウで [新規作成][Simulink モデル] を選択して、新しい Simulink モデル ウィンドウを開きます。

  5. Simulink モデル ウィンドウで、Const_one と Const_1 という 2 つの Constant ブロックを作成します。

    • Const_one ブロックを右クリックして、[ブロック パラメーター (Constant)] を選択し、[定数値] を one に設定します。

    • Const_1 ブロックを右クリックして、[ブロック パラメーター (Constant)] を選択し、[定数値] を 1 に設定します。

    • example2_qs という名前でモデルを保存します。

  6. モデル ウィンドウで [解析][モデル アドバイザー][モデル アドバイザー] を選択して、モデル アドバイザーを開きます。

  7. [システム セレクター — モデル アドバイザー] ダイアログ ボックスが開きます。[OK] をクリックします。[モデル アドバイザー] ウィンドウが開きます。この処理には数分かかることがあります。

  8. モデル アドバイザー ウィンドウに [製品別] フォルダーが表示されない場合、[設定][設定] ダイアログ ボックスで [製品別フォルダーを表示] を選択します。

  9. 左側のペインで [製品別]、[デモ]、[Check Constant block usage] を選択します。

  10. [このチェックを実行] を選択します。Const_1 ブロックに対するモデル アドバイザー チェックは失敗し、定数ブロックをパラメーター化するための [推奨アクション] が表示されます。

    sl_customization.m ファイルの次のコマンドにより、モデル アドバイザーの右側のペインが作成されます。

    • Check Constant block usage

      rec.Title = 'Check Constant block usage';
      rec.TitleTips = ['Fail if Constant block value is a number; Pass if' ...
          ' Constant block value is a letter'];
      

    • 推奨アクション

      ft.setInformation(['This check looks for constant blocks that'...
          ' use numeric values']);
      ft.setSubResultStatusText(['Check has failed. The following '...
              'Constant blocks have numeric values:']);
      ft.setListObj(blk_with_value);
      ft.setSubResultStatus('warn');
      ft.setRecAction('Parameterize the constant block');
      

  11. [推奨アクション] に従って、失敗した Constant ブロックを修正します。[モデル アドバイザー] ダイアログ ボックスで、次の操作を行います。

    • example2_qs/Const_1 ハイパーリンクをダブルクリックします。

    • [ブロック パラメーター (Constant)]、[定数値] の値を two または非数値の値に変更します。

    • モデル アドバイザー チェックを再実行します。どちらの Constant ブロックもチェックにパスします。

カスタマイズしたパス/失敗チェックの修正アクションによる作成

この例では、モデル アドバイザーのパス/失敗チェックを修正アクションにより作成する方法を示しています。この例では、モデル アドバイザーにより Constant ブロックがチェックされます。Constant ブロックの値が数値の場合、このチェックは失敗します。モデル アドバイザーは失敗したチェックに対する修正アクションを作成するようカスタマイズされます。

  1. 作業ディレクトリで、次のように sl_customization.m ファイルを更新します。このファイルには 3 つの関数があり、それぞれがモデル アドバイザー形式テンプレートを使用しています。

    • defineModelAdvisorChecks: チェックの定義、入力パラメーターの作成、修正アクションの定義に使用します。

    • simpleCallback: 数値が設定されている Constant ブロックを検索するチェックを作成します。

    • simpleActionCallback: チェックに失敗する Constant ブロックの修正を作成します。

    function sl_customization(cm)
    
    % --- register custom checks
    cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);
    
    % --- defineModelAdvisorChecks function
    function defineModelAdvisorChecks
    mdladvRoot = ModelAdvisor.Root;
    rec = ModelAdvisor.Check('exampleCheck');
    rec.Title = 'Check Constant block usage';
    rec.TitleTips = ['Fail if Constant block value is a number; Pass if '...
        'Constant block value is a letter'];
    rec.setCallbackFcn(@SimpleCallback,'None','StyleOne') 
    
    % --- input parameters 
    rec.setInputParametersLayoutGrid([1 1]);
    inputParam1 = ModelAdvisor.InputParameter;
    inputParam1.Name = 'Text entry example';
    inputParam1.Value='VarNm';
    inputParam1.Type='String';
    inputParam1.Description='sample tooltip';
    inputParam1.setRowSpan([1 1]);
    inputParam1.setColSpan([1 1]);
    rec.setInputParameters({inputParam1});
    
    % -- set fix operation
    myAction = ModelAdvisor.Action;
    myAction.setCallbackFcn(@simpleActionCallback);
    myAction.Name='Fix Constant blocks';
    myAction.Description=['Click the button to update all blocks with'...
        ' Text entry example'];
    rec.setAction(myAction);
    
    mdladvRoot.publish(rec, 'Demo'); 
    
    % --- SimpleCallback function that checks constant blocks
    function result = SimpleCallback(system)
    mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);
    result    = {};
    
    all_constant_blk=find_system(system,'LookUnderMasks','all',...
        'FollowLinks','on','BlockType','Constant');
    blk_with_value=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]');
    
    ft = ModelAdvisor.FormatTemplate('ListTemplate');
    ft.setInformation(['This check looks for constant blocks that'...
        ' use numeric values']);
    if ~isempty(blk_with_value)
        ft.setSubResultStatusText(['Check has failed. The following '...
            'Constant blocks have numeric values:']);
        ft.setListObj(blk_with_value);
        ft.setSubResultStatus('warn');
        ft.setRecAction('Parameterize the constant block');
        mdladvObj.setCheckResultStatus(false);
        mdladvObj.setActionEnable(true);
    else
        ft.setSubResultStatusText(['Check has passed. No constant blocks'...
            'with numeric values were found.']);
        ft.setSubResultStatus('pass');
        mdladvObj.setCheckResultStatus(true);
    end
    ft.setSubBar(0);
    result{end+1} = ft;
    
    % --- creates SimpleActionCallback function that fixes failed check
    function result = simpleActionCallback(taskobj)
    mdladvObj = taskobj.MAObj;
    result    = {};
    
    system = getfullname(mdladvObj.System);
    
    % Get the string from the input parameter box.
    inputParams = mdladvObj.getInputParameters;
    textEntryEx = inputParams{1}.Value;
    
    all_constant_blk=find_system(system,'LookUnderMasks','all',...
        'FollowLinks','on','BlockType','Constant');
    blk_with_value=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]');
    ft = ModelAdvisor.FormatTemplate('TableTemplate');
    % Define table col titles
    ft.setColTitles({'Block','Old Value','New Value'})
    for inx=1:size(blk_with_value)
       oldVal = get_param(blk_with_value{inx},'Value');
       ft.addRow({blk_with_value{inx},oldVal,textEntryEx});
       set_param(blk_with_value{inx},'Value',textEntryEx);    
    end
    
    ft.setSubBar(0);
    result = ft;
    mdladvObj.setActionEnable(false);

  2. モデル アドバイザーとモデルが開いている場合は、閉じます。

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

    sl_refresh_customizations
  4. コマンド ウィンドウで [新規作成][Simulink モデル] を選択して、新しいモデルを開きます。

  5. Simulink モデル ウィンドウで、Const_one と Const_1 という 2 つの Constant ブロックを作成します。

    • Const_one ブロックを右クリックして、[ブロック パラメーター (Constant)] を選択し、[定数値] を one に設定します。

    • Const_1 ブロックを右クリックして、[ブロック パラメーター (Constant)] を選択し、[定数値] を 1 に設定します。

    • モデルを example3_qs という名前で保存します。

  6. モデル ウィンドウで [解析][モデル アドバイザー][モデル アドバイザー] を選択して、モデル アドバイザーを開きます。

  7. [システム セレクター — モデル アドバイザー] ダイアログ ボックスが開きます。[OK] をクリックします。[モデル アドバイザー] ウィンドウが開きます。この処理には数分かかることがあります。

  8. モデル アドバイザー ウィンドウに [製品別] フォルダーが表示されない場合、[設定][設定] ダイアログ ボックスで [製品別フォルダーを表示] を選択します。

  9. 左側のペインで [製品別]、[デモ]、[Check Constant block usage] を選択します。

  10. [このチェックを実行] を選択します。Const_1 ブロックに対するモデル アドバイザー チェックは失敗します。

    sl_customization.m ファイルの次のコマンドにより、モデル アドバイザーの右側のペインが作成されます。

    • Check Constant block usage

      rec.Title = 'Check Constant block usage';
      rec.TitleTips = ['Fail if Constant block value is a number; Pass if '...
          'Constant block value is a letter'];
      rec.setInputParametersLayoutGrid([1 1]);
      inputParam1 = ModelAdvisor.InputParameter;
      inputParam1.Name = 'Text entry example';
      inputParam1.Value='VarNm';
      inputParam1.Type='String';
      inputParam1.Description='sample tooltip';
      inputParam1.setRowSpan([1 1]);
      inputParam1.setColSpan([1 1]);
      rec.setInputParameters({inputParam1});
      

    • アクション

      myAction.Name='Fix Constant blocks';
      myAction.Description=['Click the button to update all blocks with'...
          'Text entry example'];
      

    [モデル アドバイザー] ダイアログ ボックスの [アクション] セクションには [Fix Constant blocks] ボタンがあります。

  11. [モデル アドバイザー] ダイアログ ボックスで、[解析] セクションの [Text entry example] パラメーターに非数値の値を入力します。この例では、値は VarNm です。

  12. [Fix Constant blocks] をクリックします。Const_1 の [Constant block value] の値は 1 から手順 10 で入力した非数値の値に変わります。ダイアログ ボックスの [結果] セクションには、Const_1 ブロックの古い値と新しい値が表示されます。

    sl_customization.m ファイルの次のコマンドにより、モデル アドバイザーの右側のペインが作成されます。

    • アクション

      ft = ModelAdvisor.FormatTemplate('TableTemplate');
      
      ft.setColTitles({'Block','Old Value','New Value'})
      for inx=1:size(blk_with_value)
         oldVal = get_param(blk_with_value{inx},'Value');
         ft.addRow({blk_with_value{inx},oldVal,textEntryEx});
         set_param(blk_with_value{inx},'Value',textEntryEx);    
      end
      

  13. [モデル アドバイザー] ダイアログ ボックスで [このチェックを実行] をクリックします。どちらの Constant ブロックもチェックにパスします。

参考

|

詳細

この情報は役に立ちましたか?