このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MSLException を使用した Simulink のエラー処理
Simulink アプリケーションのエラー レポート
Simulink® では、MATLAB® MException
クラスのサブクラスである MSLException
オブジェクトを使用して例外をスローすると、エラーを報告できます。MATLAB MException
オブジェクトと同様に、MSLException
オブジェクト構成のある try-catch
ブロックを使用して、エラーに関する情報を取り込むことができます。MSLException
オブジェクトと MException
オブジェクトの違いは、MSLException
オブジェクトにはハンドルという追加のプロパティがある点です。これらのハンドルによって、エラーに関連するオブジェクトを識別できます。
MSLException クラス
MSLException
クラスには、identifier
、message
、stack
、cause
、handles
の 5 つのプロパティがあります。これらのプロパティの最初の 4 つは、MException
のプロパティと同じです。詳細については、MException
を参照してください。5 番目のプロパティ handles
は、double 配列の要素がある cell 配列です。これらの要素には、エラーに関連する Simulink オブジェクト (ブロックまたはブロック線図) へのハンドルが含まれています。
MSLException クラスのメソッド
MSLException
クラスのメソッドは、MException
クラスのメソッドと同じです。これらのメソッドの詳細については、MException
を参照してください。
エラーに関する情報の取得
Simulink try-catch
が例外を取得する仕組みは、次のとおりです。
try Perform one or more operations catch E if isa(E, 'MSLException') ... end
try
文内の操作がエラーを引き起こした場合、catch
文は例外 (E) を取得します。次に、if isa
条件文が例外が Simulink に特有 (すなわち MSLException
) であるかどうかをテストします。つまり、MSLException
は MException
の一種です。
次のサンプル コードは、エラーに関連付けられたハンドルを取得する方法を示しています。
errHndls = []; try sim('ModelName', ParamStruct); catch e if isa(e,'MSLException') errHndls = e.handles{1} end end
e を調べて結果を表示できます。これらは次のような出力になります。
e = MSLException Properties: handles: {[7.0010]} identifier: 'Simulink:Parameters:BlkParamUndefined' message: [1x87 char] cause: {0x1 cell} stack: [0x1 struct] Methods, Superclasses
エラーをスローしたブロックの名前を特定するには、getfullname
コマンドを使用します。この例では、MATLAB コマンド ラインで次のコマンドを入力します。
getfullname(errHndls)
Mu というブロックが vdp というモデルからエラーをスローした場合、MATLAB は次のように getfullname
コマンドに応答します。
ans = vdp/Mu