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