Main Content

MSLException オブジェクトを使用した Simulink のエラー処理

Simulink アプリケーションのエラー レポート

Simulink® では、MSLException オブジェクトを使用して例外をスローすることでエラーを報告できます。このオブジェクトは MATLAB® MException オブジェクトに基づきます。MATLAB MException オブジェクトと同様に、try-catch ブロックで MSLException オブジェクトを使用してエラーに関する情報を取得できます。MSLException オブジェクトと MException オブジェクトの主な違いは、MSLException オブジェクトにはハンドルという追加のプロパティがある点です。これらのハンドルによって、エラーに関連するオブジェクトを識別できます。

MSLException オブジェクト

MSLException クラスには、identifiermessagestackcausehandles の 5 つのプロパティがあります。これらのプロパティの最初の 4 つは、MException のプロパティと同じです。詳細については、MException を参照してください。5 番目のプロパティ handles は、double 配列の要素がある cell 配列です。これらの要素には、エラーに関連する Simulink オブジェクト (ブロックまたはブロック線図) へのハンドルが含まれています。

MSLException オブジェクトの関数

MSLException オブジェクトの関数は、MSLException オブジェクトの関数と同じです。これらの関数の詳細については、MException を参照してください。

エラーに関する情報の取得

次のコードは、MSLException を取得するための try-catch ブロックの構造を示しています。try ステートメント内の操作がエラーを引き起こした場合、catch ステートメントが例外 E を取得します。次に、if isa 条件付きステートメントのテストで、例外が MSLException オブジェクトであるかどうかを判定します。このオブジェクトは Simulink に特有の例外であることを示します。つまり、MSLExceptionMException の一種です。

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 というモデルからエラーをスローした場合、関数 getfullnameMu というブロックのパスを返します。

ans =
vdp/Mu

関連するトピック