このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
プログラムによる診断メッセージの非表示
以下の例では、診断の非表示をプログラムによって管理する方法を示します。
プログラムによる診断メッセージの非表示
この例では、診断の非表示を管理したり、診断メッセージをプログラムによって復元するために、シミュレーション メタデータにアクセスする方法を示します。
モデルを開いてシミュレート
ローカルのサンプル フォルダーには、getDiagnosticObjects.m
モデル、suppressor_script.m
モデル、および Suppressor_CLI_Demo.slx
モデルが含まれています。関数 getDiagnosticObjects.m
は、シミュレーション メタデータを照会して、シミュレーション中にスローされた診断にアクセスします。suppressor_script.m
スクリプトには、Suppressor_CLI_Demo
モデルに対する診断を非表示または元に戻すためのコマンドが含まれます。
モデルを開きます。Simulink.SimulationMetadata
クラスにアクセスするには、ReturnWorkspaceOutputs
パラメーター値を '|on|' に設定します。モデルをシミュレートします。
model = 'Suppressor_CLI_Demo'; open_system(model) set_param(model,'ReturnWorkspaceOutputs','on'); out = sim(model);
シミュレーション メタデータからのメッセージ識別子の取得
MSLDiagnostic
オブジェクトに格納されているシミュレーション メタデータを使用して、診断メッセージ識別子の名前を検索します。
if (exist('out', 'var')) diag_objects = getDiagnosticObjects(out); end
シミュレーション中は、Data Type Conversion ブロックの飽和を含む複数の警告が生成されます。変数 diag_objects
を照会して、識別子に関する情報をさらに取得します。
diag_objects(5)
ブロックでの飽和に関する診断を非表示
関数 Simulink.suppressDiagnostic
を使用して、Data Type Conversion ブロックでの飽和診断のみを非表示にします。モデルをシミュレートします。
Simulink.suppressDiagnostic('Suppressor_CLI_Demo/Convert/FixPt To FixPt3', ... 'SimulinkFixedPoint:util:Saturationoccurred'); set_param(model,'SimulationCommand','start');
飽和診断の復元
関数 Simulink.restoreDiagnostic
を使用して、同じブロックの飽和診断を復元します。
Simulink.restoreDiagnostic('Suppressor_CLI_Demo/Convert/FixPt To FixPt3',... 'SimulinkFixedPoint:util:Saturationoccurred'); set_param(model,'SimulationCommand','start');
1 つのソースでの複数の診断を非表示
メッセージ識別子の cell 配列を作成して、1 つのソースの複数の警告を非表示にできます。モデル内の Constant ブロック one の桁落ちおよびパラメーターのアンダーフローの警告を非表示にします。
diags = {'SimulinkFixedPoint:util:fxpParameterPrecisionLoss',... 'SimulinkFixedPoint:util:fxpParameterUnderflow'}; Simulink.suppressDiagnostic('Suppressor_CLI_Demo/one',diags); set_param(model,'SimulationCommand','start');
ブロックのすべての診断の復元
関数 Simulink.restoreDiagnostic
を使用して、特定のブロックでのすべての診断を復元します。
Simulink.restoreDiagnostic('Suppressor_CLI_Demo/one'); set_param(model,'SimulationCommand','start');
複数ブロックの診断の非表示
複数のブロック上の 1 つ以上の診断を非表示にできます。たとえば、関数 find_system
を使用して、システム内のすべての Data Type Conversion ブロックの cell 配列を作成して、指定されたブロックのすべての飽和に関する警告を非表示にします。
dtc_blocks = find_system('Suppressor_CLI_Demo/Convert',... 'BlockType', 'DataTypeConversion'); Simulink.suppressDiagnostic(dtc_blocks, 'SimulinkFixedPoint:util:Saturationoccurred'); set_param(model,'SimulationCommand','start');
サブシステム内部のすべての診断の復元
関数 Simulink.restoreDiagnostic
を使用して、指定されたサブシステム内部のすべての診断を復元します。
Simulink.restoreDiagnostic('Suppressor_CLI_Demo/Convert',... 'FindAll', 'On'); set_param(model,'SimulationCommand','start');
非表示へのコメントおよびユーザー情報の追加
SuppressedDiagnostic
オブジェクトには、非表示のソースに関する情報および非表示にされた診断メッセージ識別子が含まれています。コメントおよび最後に非表示を修正したユーザーの名前を含めることもできます。
Object = Simulink.SuppressedDiagnostic('Suppressor_CLI_Demo/Convert/FixPt To FixPt1',... 'SimulinkFixedPoint:util:Saturationoccurred'); Object.Comments = 'Reviewed: John Doe'; Object.LastModifiedBy = 'Joe Schmoe' set_param(model,'SimulationCommand','start');
非表示データの取得
特定のサブシステムまたはブロックの非表示データを取得するには、関数 Simulink.getSuppressedDiagnostics
を使用します。
Object = Simulink.getSuppressedDiagnostics('Suppressor_CLI_Demo/Convert/FixPt To FixPt1'); set_param(model,'SimulationCommand','start');
モデルでのすべての診断の復元
モデルで複数の診断が非表示にされている場合、そしてすべての診断をモデルに復元する場合、関数 Simulink.getSuppressedDiagnostics
を使用して Simulink.SuppressedDiagnostic
オブジェクトの配列を返します。次に、restore メソッドを使用して配列を反復します。
Objects = Simulink.getSuppressedDiagnostics('Suppressor_CLI_Demo'); for iter = 1:numel(Objects) restore(Objects(iter)); end set_param(model,'SimulationCommand','start');
参照モデルの診断メッセージの非表示
この例では、診断が参照モデルから生じたものである場合にその診断を非表示にする方法を示します。警告の特定インスタンスの MSLDiagnostic
オブジェクトにアクセスすると、参照モデルが指定した最上位モデルからシミュレートされた場合のインスタンスの警告のみを非表示にできます。
このモデル例には、同じ参照モデル RefModel
の 2 つのインスタンスが含まれています。モデル RefModel
はさらに別のモデル RefModel_Low
を参照しています。RefModel_Low
には 2 つの Gain ブロックが含まれており、それぞれがシミュレーション中のオーバーフロー時のラップに関する警告を生成します。モデル内にあるこの警告の 4 つのインスタンスのいずれかを非表示にするには、Ref_block1
で参照されている場合にのみ、RefModel_Low
モデル内のいずれかの Gain ブロックによって生成されるオーバーフロー警告時のラップに関連付けられている MSLDiagnostic
オブジェクトにアクセスします。
最上位モデルを開きます。モデルのシミュレーションを実行し、出力を変数 out
に格納します。
out = sim('TopModel');
MSLDiagnostic
オブジェクトに格納されているシミュレーション メタデータにアクセスします。
diag = getDiagnosticObjects(out)
diag = 1×4 MSLDiagnostic array with properties: identifier message paths cause stack
診断ビューアーまたはコマンド ラインで診断とその原因を確認できます。
for i = 1 : numel(diag) disp(diag(i)); disp(diag(i).cause{1}); end
特定の診断にアクセスすることで、TopModel/Ref_block1
からシミュレートされた場合にのみ、RefModel_Low
からのオーバーフロー時のラップに関する警告のいずれかを非表示にします。モデルのシミュレーションを実行します。
Simulink.suppressDiagnostic(diag(1));
out = sim('TopModel')
シミュレーション メタデータにアクセスします。このシミュレーションでは 3 つの警告のみが生成されています。
diag = getDiagnosticObjects(out)
diag = 1×3 MSLDiagnostic array with properties: identifier message paths cause stack
モデルに対する診断を元に戻します。
Simulink.restoreDiagnostic(diag(1));
参考
Simulink.getSuppressedDiagnostics
| Simulink.suppressDiagnostic
| Simulink.restoreDiagnostic
| restore
| Simulink.SuppressedDiagnostic
| Simulink.SimulationMetadata