Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MSLException を使用した Simulink のエラー処理

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

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

MSLException クラス

MSLException クラスには、identifiermessagestackcausehandles の 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) であるかどうかをテストします。つまり、MSLExceptionMException の一種です。

次のサンプル コードは、エラーに関連付けられたハンドルを取得する方法を示しています。

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

関連するトピック