このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ModelAdvisor.ResultDetail.setData
クラス: ModelAdvisor.ResultDetail
名前空間: ModelAdvisor
モデル アドバイザー チェックの結果をブロックまたは信号に関連付ける
構文
説明
ModelAdvisor.ResultDetail.setData( は、モデル アドバイザー チェックの結果 resultObj,'Signal',signalHandle)resultObj を Simulink 信号 signalHandle に関連付けます。
入力引数
モデル アドバイザー チェックの結果。ModelAdvisor.ResultDetail オブジェクトとして指定します。
Simulink ブロック。ブロックの Simulink 識別子 (SID) を含む string または文字ベクトルとして指定します。
例: 'myModel/myBlock'
データ型: char | string
Simulink 信号。信号ハンドルを表す double として指定します。
例: 280.0009
データ型: double
例
ブロック名がブロックの下に表示されているかどうかをチェックするカスタム モデル アドバイザー チェックを作成します。
モデルを開きます。
openExample('AdvisorCustomizationExample')
モデルを作業フォルダーに保存します。モデルを閉じます。
編集時チェックを登録するには、関数 sl_customization を作成します。関数 sl_customization では、1 つの引数 (カスタマイズ マネージャー オブジェクト) を受け入れます。カスタム チェックを登録するには、addModelAdvisorCheckFcn メソッドを使用します。このメソッドへの入力は、チェック定義関数へのハンドルです。この例では、defineDetailStyleCheck がチェック定義関数です。関数 sl_customization を作成し、作業フォルダーに保存します。
function sl_customization(cm)
cm.addModelAdvisorCheckFcn(@defineDetailStyleCheck);チェック定義関数を作成します。この例では、defineDetailStyleCheck.m という名前の関数ファイルを作成します。以下のコードを defineDetailStyleCheck.m にコピーし、関数を作業フォルダーに保存します。
function defineDetailStyleCheck % Create a ModelAdvisor.Check object and set the 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'); % Create a ModelAdvisor.Action object for setting a fix operation. myAction = ModelAdvisor.Action; myAction.setCallbackFcn(@ActionCB); myAction.Name='Make block names appear below blocks'; myAction.Description='Click the button to place block names below blocks'; rec.setAction(myAction); % Publish the check to the Demo group. mdladvRoot = ModelAdvisor.Root; mdladvRoot.publish(rec, 'Demo'); end % ----------------------------- % This callback function uses the DetailStyle CallbackStyle type. % ----------------------------- function DetailStyleCallback(system, CheckObj) % Get the Model Advisor object. mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(system); % Find the blocks whose names do not appear below the block. violationBlks = find_system(system, 'Type','block',... 'NamePlacement','alternate',... 'ShowName', 'on'); if isempty(violationBlks) ElementResults = ModelAdvisor.ResultDetail; ElementResults.Description = 'Identify blocks where the name is not displayed below the block.'; ElementResults.ViolationType = 'Passed'; ElementResults.Status = 'All blocks have names displayed below the block.'; 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 blocks where the name is not displayed below the block.'; ElementResults(i).Status = 'The following blocks have names that do not display below the block:'; ElementResults(i).RecAction = 'Change the location such that the block name is below the block.'; end mdladvObj.setActionEnable(true); end CheckObj.setResultDetails(ElementResults); end % ----------------------------- % This action callback function changes the location of the block names. % ----------------------------- function result = ActionCB(taskObj) mdladvObj = taskObj.MAObj; checkObj = taskObj.Check; resultDetailObjs = checkObj.ResultDetails; for i=1:numel(resultDetailObjs) block=Simulink.ID.getHandle(resultDetailObjs(i).Data); set_param(block,'NamePlacement','normal'); end result = ModelAdvisor.Text('Changed the location such that the block name is below the block.'); mdladvObj.setActionEnable(false); end
チェック定義関数には、チェック アクションおよび修正を定義する ModelAdvisor.Check オブジェクトおよび ModelAdvisor.Action オブジェクトが含まれています。コードのこれらの側面の詳細については、モデルを修正し、モデル アドバイザーで指定した条件に準拠させるを参照してください。
関数 defineDetailStyleCheck には、コールバック関数 DetailStyleCallback が含まれています。名前が下に表示されていないブロックを返すために、関数 DetailStyleCallback は関数 find_system を使用します。
violationBlks が空の場合、コードは 1 つの ModelAdvisor.ResultDetail オブジェクトの ElementResults を作成します。ElementResults は、モデル アドバイザーで表示されるパス チェックに関する情報を指定します。
関数 find_system がチェックに違反したブロックのリストを返した場合、 ElementResults は ModelAdvisor.ResultDetail オブジェクトの配列です。この配列には、チェックに違反したブロックごとに 1 つのオブジェクトが含まれます。各オブジェクトには、モデル アドバイザーに表示されるブロックに関する情報が含まれます。
モデル アドバイザーをリフレッシュして、パス上の新しいチェックでキャッシュを更新します。
Advisor.Manager.refresh_customizations
AdvisorCustomizationExample モデルを開きます。
Simulink で [モデル化] タブをクリックし、[モデル アドバイザー] を選択して、モデル アドバイザーを開きます。
左側のペインで、[製品別] 、 [デモ] 、 [ブロック名がブロックの下になっているかどうかをチェック] を選択し、[チェックの実行] をクリックします。
警告に対処するには、[修正] をクリックします。
Outport ブロックに接続する信号にラベルがあるかどうかをチェックするカスタム編集時チェックを作成します。
モデルを開きます。
openExample('AdvisorCustomizationExample')
モデルを作業フォルダーに保存します。モデルを閉じます。
カスタム編集時チェックを登録するには、関数 sl_customization を作成し、作業フォルダーに保存します。
function sl_customization(cm)
cm.addModelAdvisorCheckFcn(@defineCheck);
チェック定義関数を作成します。関数内で、ModelAdvisor.Check オブジェクトを作成し、入力引数としてチェック ID を指定します。次に、ModelAdvisor.Check Title プロパティおよび CallbackHandle プロパティを指定します。CallbackHandle プロパティは編集時チェックを定義するために作成するクラスの名前です。この例では、MyEditTimeChecks がパッケージ名で SignalLabel がクラス名です。次に、モデル アドバイザーの新しいフォルダーにチェックをパブリッシュします。この例では、フォルダー名は Demo: Edit-Time Checks です。関数 defineCheck を作成し、以下のコードを含めます。関数 defineCheck を作業フォルダーに保存します。
function defineCheck rec = ModelAdvisor.Check("advisor.edittimecheck.SignalLabel"); rec.Title = 'Check that signals have labels if they are to propagate those labels'; rec.CallbackHandle = 'MyEditTimeChecks.SignalLabels'; mdladvRoot = ModelAdvisor.Root; mdladvRoot.publish(rec,'DEMO: Edit-Time Checks');
ModelAdvisor.EdittimeCheck 抽象基底クラスから派生するクラスを作成します。この例では、SignalLabel.m という名前のクラス ファイルを作成します。以下のコードを SignalLabel.m ファイルにコピーし、+MyEditTimeChecks フォルダーに保存します。
classdef SignalLabels < ModelAdvisor.EdittimeCheck methods function obj=SignalLabels(checkId) obj=obj@ModelAdvisor.EdittimeCheck(checkId); obj.traversalType = edittimecheck.TraversalTypes.BLKITER; end function violation = blockDiscovered(obj, blk) violation = []; ports = get_param(blk,'Ports'); lh = get_param(blk, 'LineHandles'); if strcmp(get_param(blk,'BlockType'),'Outport') for j = 1 : ports(1) if lh.Inport(j) ~= -1 % failure case: no connection allsources = get_param(lh.Inport(j),'SrcPortHandle'); hiliteHandle = get_param(lh.Inport(j), 'DstPortHandle'); if (isempty(allsources) ~= 0) || (isempty(find(allsources==-1,1)) ~= 0) lh_obj = get_param(lh.Inport(j),'Object'); if isempty(lh_obj.Name) if strcmp(lh_obj.signalPropagation,'off') == 1 allsources_parent = get_param(allsources,'Parent'); if strcmp(get_param(allsources_parent,'BlockType'),'Inport') buscreator_outputs = get_param(allsources_parent,'IsBusElementPort'); else buscreator_outputs = 'off'; end if ~strcmp(buscreator_outputs,'on') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation, 'Signal',hiliteHandle); violation.Description ='The model does not adhere to the signal label modeling guideline.'; violation.CheckID = obj.checkId; violation.Title = 'Signal Label Missing'; violation.Information = 'This check verifies the presence of signal label.'; violation.Status = 'The following signals do not have a label:'; end end end end end end end end end end
ModelAdvisor.EdittimeCheck クラス内のコードの詳細については、編集時チェックを定義し、モデル アドバイザーで指定した条件に準拠させるを参照してください。
blockDiscovered メソッドには、チェック違反を定義したアルゴリズムが含まれます。モデル アドバイザーでのみ表示されるカスタム チェックとは異なり、このアルゴリズムには関数 find_system は含まれていません。blockDiscovered メソッドは入力としてブロック ハンドルを受け取り、モデルを移動するため、カスタム編集時チェック用に関数 find_system は不要です。
チェックに違反したモデル要素ごとに、コードで ModelAdvisor.ResultDetail オブジェクトが作成されます。この例では、違反は信号にあるため、チェックではブロックのライン ハンドルでパラメーターを使用する必要があります。違反のある信号を検出するために、LineHandles オプションを指定しなければなりません。特に、Outport ブロックに接続する信号に対して、このアルゴリズムは Name 信号パラメーターに値があるかどうかを確認します。信号に違反があるため、次にアルゴリズムは、Type プロパティ値を Signal に設定して違反オブジェクトを作成し、その信号を強調表示します。
モデル アドバイザーをリフレッシュして、パス上の新しいチェックでキャッシュを更新します。
Advisor.Manager.refresh_customizations
AdvisorCustomizationExample モデルを開きます。
Simulink で [モデル化] タブをクリックし、[モデル アドバイザー] 、 [構成エディター] を選択して、モデル アドバイザー構成エディターを開きます。
カスタム編集時チェックで構成されるカスタム構成を作成します。これを行うには、次のフォルダーを除くすべてのフォルダーを削除します。"DEMO:Edit Time Checks" フォルダー。
構成を my_config.json として保存します。この構成を既定として設定するように求めるプロンプトが表示されたら、[いいえ] をクリックします。
モデル アドバイザー構成エディターを閉じます。
[モデル化] タブをクリックし、[モデル アドバイザー] 、 [編集時チェック] を選択して、カスタム構成を my_config.json ファイルに設定します。[コンフィギュレーション パラメーター] ダイアログ ボックスで、[モデル アドバイザー構成ファイル] パラメーターを構成ファイルのパスに設定します。
[編集時チェック] パラメーターを選択して、編集時チェックをオンにします。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスを閉じます。
編集時の警告を表示するには、黄色で強調表示された信号をクリックします。Outport ブロックに接続している信号にはラベルがないため、警告が生成されます。
次のイメージはモデル アドバイザー レポートを示したもので、各セクションに ModelAdvisor.ResultDetail のどのプロパティが取り込まれるかを示しています。

バージョン履歴
R2018b で導入ModelAdvisor.ResultDetail クラスの setData メソッドは静的メソッドです。このメソッドは、クラスの名前の後にドット (.) とメソッドの名前が続く名前を使用して呼び出します。
ModelAdvisor.ResultDetail.setData(ElementResults,args,...)MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)