Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

モデル アドバイザーを使用して指定した条件に対してモデルを確認

この例では、修正アクションなしのパス/失敗チェックと情報チェックという 2 つのシンプルなチェック タイプについて説明します。基本的なパス/失敗チェックは、チェックによる確認対象とチェックがパスしたか失敗したかを検出し報告します。情報チェックは、チェックによる確認対象と該当する規格への参照を検出し表示します。

関数 sl_customization の作成

作業フォルダーで、sl_customization.m ファイルを作成します。カスタム チェックを登録するには、sl_customization.m ファイル内で、関数 sl_customization(cm) を以下のように作成します。この関数は、1 つの引数 (カスタマイズ オブジェクト) を受け入れます。このカスタマイズ マネージャー オブジェクトには、カスタム チェックを登録するために addModelAdvisorCheckFcn メソッドが含まれます。このメソッドへの入力は、2 つのチェック定義関数への呼び出しを含む、関数 (defineModelAdvisorChecks) へのハンドルです。これらの関数には、シンプルなパス/失敗チェックと情報チェックの定義が含まれます。

function sl_customization(cm)
% SL_CUSTOMIZATION - Model Advisor customization demonstration.

% Copyright 2019 The MathWorks, Inc.

% register custom checks 
cm.addModelAdvisorCheckFcn(@defineModelAdvisorCheck);

% -----------------------------
% defines Model Advisor Checks
% -----------------------------
function defineModelAdvisorCheck
definePassFailCheck
defineInformationCheck

修正アクションなしのパス/失敗チェックのチェック定義関数の作成

このセクションでは、Constant ブロックの値が数字か文字かをチェックするチェック定義関数を作成します。値が数字の場合、チェックは警告を生成します。値が文字の場合、チェックはパスします。

このチェックは、DetailStyle タイプのコールバック関数を使用します。このスタイルにより、ブロックごと、サブシステムごと、または推奨アクションごとに結果を表示できます。このスタイルを適用すると、既定の書式が生成されるため、ModelAdvisor.FormatTemplate クラスまたはその他のモデル アドバイザーの書式設定 API を使用して、モデル アドバイザーに表示される結果の書式設定を行わなくてすむようになります。このスタイルは、setCallbackFcn メソッドへの入力として指定します。

新しいファイル definePassFailCheck.m を作成し、以下に示す関数を入力します。

function definePassFailCheck
mdladvRoot = ModelAdvisor.Root;
rec = ModelAdvisor.Check('simplePassFailCheck');
rec.Title = 'Check Constant block usage';
rec.TitleTips = ['Warn if Constant block value is a number; Pass if' ...
    ' Constant block value is a letter'];
rec.setCallbackFcn(@simplePassFailCheck,'None','DetailStyle') 

mdladvRoot.publish(rec, 'Demo');

% --- Callback function that checks Constant blocks
function simplePassFailCheck(system,CheckObj)
mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);
all_constant_blk=find_system(system,'LookUnderMasks','all',...
    'FollowLinks','on','BlockType','Constant');
violationBlks=find_system(all_constant_blk,'RegExp','On','Value','^[0-9]');
if isempty(violationBlks)
    ElementResults = ModelAdvisor.ResultDetail;
    ElementResults.Description = 'Identify Constant blocks with a value that is a number.';
    ElementResults.Status = 'All Constant blocks have a value that is a letter.';
    mdladvObj.setCheckResultStatus(true);
else
    for i=1:numel(violationBlks)
	 ElementResults(1,i) = ModelAdvisor.ResultDetail;
    end
    for i=1:numel(ElementResults)
        ModelAdvisor.ResultDetail.setData(ElementResults(i),'SID',violationBlks{i});
        ElementResults(i).Description = 'Identify Constant blocks with a value that is a number.';
        ElementResults(i).Status = 'The following Constant blocks have values that are numbers:';
        ElementResults(i).RecAction =  'Change the Constant block value to a letter.';
    end
    mdladvObj.setCheckResultStatus(false);
    mdladvObj.setActionEnable(true);
end
CheckObj.setResultDetails(ElementResults);
このチェックは、数字である Constant ブロックの値を特定して警告を生成しますが、修正アクションは提供しません。修正ありのチェック定義関数を作成する方法の詳細については、モデルを修正し、モデル アドバイザーで指定した条件に準拠させるを参照してください。

情報チェックのチェック定義関数の作成

このセクションでは、モデル コンフィギュレーションとチェックサム情報を検出して表示する、情報チェックのチェック定義関数を作成します。

情報チェックの場合、モデル アドバイザーには全体でのチェック ステータスが表示されますが、結果にはステータスは表示されません。また、情報チェックの結果には次の項目は含まれません。

  • ステータスの説明。

  • チェックがパスしない場合に推奨されるアクション。

  • サブチェックの結果。

新しいファイル defineInformationCheck.m を作成し、以下に示す関数を入力します。

function defineInformationCheck

% Create ModelAdvisor.Check object and set properties.
rec = ModelAdvisor.Check('com.mathworks.sample.infocheck');
rec.Title = 'Identify model configuration and checksum information';
rec.TitleTips = 'Display model configuration and checksum information';
rec.setCallbackFcn(@modelVersionChecksumCallbackUsingFT_Detail,'None','DetailStyle');

% Publish check into Demo group.
mdladvRoot = ModelAdvisor.Root;
mdladvRoot.publish(rec, 'Demo');

end

% -----------------------------
% This callback function uses the DetailStyle CallbackStyle type. 
% -----------------------------

function modelVersionChecksumCallbackUsingFT_Detail(system,CheckObj)

model = bdroot(system);
mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);
ElementResults = ModelAdvisor.ResultDetail;
ElementResults.Description = 'Display model configuration and checksum information';   

% If running the Model Advisor on a subsystem, add note to description.
if strcmp(system, model) == false          
    ElementResults.Status = 'NOTE: The Model Advisor is reviewing a subsystem, but these results are based on root-level settings.';    
    ElementResults(end + 1) = ModelAdvisor.ResultDetail;
end

% If error is encountered, use these values.
mdlver = 'Error - could not retrieve Version';
mdlauthor = 'Error - could not retrieve Author';
mdldate = 'Error - could not retrieve Date';
mdlsum = 'Error - could not retrieve CheckSum';

% Get model configuration and checksum information.
try
    mdlver = get_param(model,'ModelVersion');
    mdlauthor = get_param(model,'LastModifiedBy');
    mdldate = get_param(model,'LastModifiedDate');
    mdlsum = Simulink.BlockDiagram.getChecksum(model);
    mdlsum = [num2str(mdlsum(1)) ' ' num2str(mdlsum(2)) ' ' ...
                     num2str(mdlsum(3)) ' ' num2str(mdlsum(4))];    
    mdladvObj.setCheckResultStatus(true);    
catch 
    mdladvObj.setCheckResultStatus(false);    
end

lbStr ='<br/>';
resultStr = ['Model Version: ' mdlver lbStr 'Author: ' mdlauthor lbStr ...
        'Date: ' mdldate lbStr 'Model Checksum: ' mdlsum];
ElementResults(end).Status = resultStr;
CheckObj.setResultDetails(ElementResults);

end

モデル アドバイザーでのカスタム チェックの実行

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

    Advisor.Manager.refresh_customizations
  2. MATLAB コマンド プロンプトで以下のコマンドを入力し、モデル sldemo_fuelsys を開きます。

    sldemo_fuelsys

  3. [モデル化] タブで、[モデル アドバイザー] を選択します。[システム セレクター] ダイアログが開きます。[OK] をクリックします。

  4. 左側のペインで、[製品別][デモ][Identify model configuration and checksum information] を選択します。

  5. [チェックの実行] をクリックします。

    このチェックはパスし、情報が表示されます。

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

  7. [チェックの実行] をクリックします。

    このチェックでは、いくつかのブロックに数値が含まれるため、警告が表示されます。この結果には、これらのブロックへのリンクが含まれます。結果には [推奨アクション] が表示されます。

  8. [推奨アクション] に従って、Constant ブロックを修正します。

参考

| |

関連するトピック