MSLException
オブジェクトを使用した Simulink のエラー処理
Simulink アプリケーションのエラー レポート
Simulink® では、MSLException
オブジェクトを使用して例外をスローすることでエラーを報告できます。このオブジェクトは MATLAB® MException
オブジェクトに基づきます。MATLAB MException
オブジェクトと同様に、try-catch
ブロックで MSLException
オブジェクトを使用してエラーに関する情報を取得できます。MSLException
オブジェクトと MException
オブジェクトの主な違いは、MSLException
オブジェクトにはハンドルという追加のプロパティがある点です。これらのハンドルによって、エラーに関連するオブジェクトを識別できます。
MSLException
オブジェクト
MSLException
クラスには、identifier
、message
、stack
、cause
、handles
の 5 つのプロパティがあります。これらのプロパティの最初の 4 つは、MException
のプロパティと同じです。詳細については、MException
を参照してください。5 番目のプロパティ handles
は、double 配列の要素がある cell 配列です。これらの要素には、エラーに関連する Simulink オブジェクト (ブロックまたはブロック線図) へのハンドルが含まれています。
MSLException
オブジェクトの関数
MSLException
オブジェクトの関数は、MSLException
オブジェクトの関数と同じです。これらの関数の詳細については、MException
を参照してください。
エラーに関する情報の取得
次のコードは、MSLException
を取得するための try-catch ブロックの構造を示しています。try
ステートメント内の操作がエラーを引き起こした場合、catch
ステートメントが例外 E
を取得します。次に、if isa
条件付きステートメントのテストで、例外が MSLException
オブジェクトであるかどうかを判定します。このオブジェクトは Simulink に特有の例外であることを示します。つまり、MSLException
は MException
の一種です。
try Perform one or more operations catch E if isa(E, 'MSLException') ... end
次のサンプル コードは、エラーに関連付けられたハンドルを取得する方法を示しています。
errHndls = []; try sim('ModelName'); 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
というモデルからエラーをスローした場合、関数 getfullname
は Mu
というブロックのパスを返します。
ans = vdp/Mu