メインコンテンツ

getCheckResultData

モデル アドバイザー チェック結果データを取得する

説明

モデル アドバイザー オブジェクトに対して、関数 results = getCheckResultData(ma,checkID) を使用して指定したチェック セットのチェック結果のデータを取得します。チェック コールバック関数で関数 setCheckResultData を使用して、チェックに対するチェック結果データを設定します。

この関数により、モデル アドバイザーのカスタマイズ API (Simulink® Check™ で利用可能なオプション機能) を使用して作成するカスタム チェックにより生成された結果にアクセスできるようになります。詳細については、カスタム モデル アドバイザー チェックの定義 (Simulink Check)を参照してください。

すべて折りたたむ

カスタム モデル アドバイザー チェックを定義し、関数 getCheckResultData を使用してデータをチェック コールバック関数からチェック アクション コールバック関数に渡します。

この例では、Simulink Check を使用します。

モデル例 sldemo_bounce を開きます。

openExample('sldemo_bounce')

現在の作業フォルダーに sl_customization.m ファイルを作成します。MATLAB®[ホーム] タブの [新規スクリプト] をクリックします。次のコードをコピーして貼り付け、ファイルを sl_customization.m という名前で保存します。

function sl_customization(cm)
    % register custom check with the customization manager object (cm)
    addModelAdvisorCheckFcn(cm,@defineModelAdvisorCheck);
end

% -----------------------------
% define Model Advisor Check
% -----------------------------
function defineModelAdvisorCheck
    mdladvRoot = ModelAdvisor.Root;
               
    % Definition for my custom check
    rec = ModelAdvisor.Check('myCustomCheckID');
    rec.Title = 'My Custom Check Title';
    rec.setCallbackFcn(@myCustomCheckCallbackFunc,'None','StyleThree');
    
    % Specify a "Fix" action
    myAction = ModelAdvisor.Action;
    myAction.Name = 'My Custom Check Action';
    myAction.setCallbackFcn(@myCustomCheckAction);
    rec.setAction(myAction);
    
    mdladvRoot.publish(rec,'CUSTOM CHECK FOLDER');
    
end

function [ResultDescription, ResultDetails] = myCustomCheckCallbackFunc(system)
    % Initialize empty arrays
    ResultDescription = {};
    ResultDetails     = {};
    affectedBlockIDs = [];

    % Get the Model Advisor handle for the current model or subsystem
    mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system);

    % Find the "Terminator" blocks
    blockIDs = Simulink.findBlocksOfType(system,'Terminator');

    % Check if the "Terminator" block hides the automatic block name
    % If the name is hidden, fail the check and enable the Action
    for i = 1:numel(blockIDs)
        if (get_param(blockIDs(i),'HideAutomaticName') == "on")
            setCheckResultStatus(mdladvObj,'fail');                 
            setActionEnable(mdladvObj, 1);
            affectedBlockIDs = [affectedBlockIDs blockIDs(i)];
        else
            setCheckResultStatus(mdladvObj, 'pass');
        end
    end

    % Add the affected "Terminator" block IDs to the check result data
    setCheckResultData(mdladvObj, affectedBlockIDs);
    
end

function result = myCustomCheckAction(taskobj)
    mdladvObj = taskobj.MAObj;
    % Get the affected "Terminator" block IDs from the check results
    affectedBlocksIDs = getCheckResultData(mdladvObj, 'myCustomCheckID');
    % Make the automatic name visible for the "Terminator" blocks
    for i=1:length(affectedBlocksIDs)
        set_param(affectedBlocksIDs(i),'HideAutomaticName','off');
    end
    % create the return text
    result = ModelAdvisor.Paragraph;
    addItem(result, 'Updated "Terminator" blocks to show the automatic name.');                
    % disable the action button
    setActionEnable(mdladvObj, false);

end

このコードは、モデル内の Terminator ブロックを検索し、該当するブロックが自動ブロック名を非表示にしているかどうかをチェックするカスタム チェックを定義します。自動ブロック名が非表示の場合、チェックは失敗し、自動ブロック名を表示するようにモデル内の Terminator ブロックを更新できるアクションが有効になります。このコードは、アクション コールバック関数で関数 getCheckResultData を使用して、チェックに失敗したブロックの ID を取得します。カスタム チェック コールバック関数とアクション コールバック関数の詳細については、カスタム モデル アドバイザー チェックの定義 (Simulink Check)を参照してください。

環境を更新して、sl_customization.m ファイルで定義されているカスタム モデル アドバイザー チェックを含めます。MATLAB コマンド ウィンドウで次のように入力します。

Advisor.Manager.refresh_customizations

モデルでモデル アドバイザーを開きます。

modeladvisor('sldemo_bounce')

カスタム モデル アドバイザー チェックを選択して実行します。左側のペインで [製品別][CUSTOM CHECK FOLDER][My Custom Check Title] を選択し、[チェックの実行] をクリックします。

sldemo_bounce モデル内の Terminator ブロックが自動ブロック名を非表示にしているため、チェックは失敗します。

チェックを右クリックし、[このチェックを修正] をクリックします。

このチェックでは、自動ブロック名を表示するように Terminator ブロックを更新するアクション コールバックを実行します。チェックを再実行すると、今度はチェックは成功します。

入力引数

すべて折りたたむ

チェック結果データを取得するモデル アドバイザー オブジェクト。Simulink.ModelAdvisor オブジェクトとして指定します。

結果を取得するモデル アドバイザー チェックに関連付けられたチェック ID。文字ベクトルまたは文字ベクトルの cell 配列として指定します。

例: 'mathworks.design.UnconnectedLinesPorts'

出力引数

すべて折りたたむ

チェック結果。cell 配列として返されます。データの形式は、データを生成するチェックに依存します。

バージョン履歴

R2006a で導入