2011-10-17 49 views
3

Matlab/Simulinkモデルのシミュレーション中に発行されたすべての警告をキャッチしたいと思います。シミュレーションの結果は、複数の警告が存在する可能性があるため、一連の警告である必要があります。例外に警告を回すSimulinkシミュレーション中にすべての警告をキャッチするにはどうすればよいですか?

  • :私は成功せず、既に試した

    try 
        sim('myModel'); 
    catch warnings 
        for i=1:length(warnings) 
         <process each warning> 
        end 
    end 
    

    もの:

    理想的なコードは、この(そのキャッチ以外の警告では動作しません)のようになります。私が最初の警告だけを得て、すべてではないので、助けにならないでしょう。

  • 私自身の "@char \ warnings.m"でビルトイン警告関数を無効にするのは、自分自身のスクリプトで警告を捕捉するだけですが、sim-functionでは捕捉できません。
  • lastwarnは、最後の警告メッセージのみを表示し、すべてではありません。

P .:私はWindowsでMatlab 2010bを使用しています。

答えて

5

simの出力をdiaryと記録し、シミュレーション後にファイルを分析することができます(警告の形式はかなり規則的です)。

+0

本当にかわいいですが、機能します。 – ChrisK

+0

確かにそれほどきれいではありませんが、それを行う唯一の方法だと思われます。 –

1

残念ながらこれは可能ではないと思います。それはまた、 "あなたが警告で何をしたいのですか?"なぜ?"。

私はMathworksのテクニカルサポートでそれを上げます。 try ... catch ...は、エラーの厳密なので、私はより多くの次のような構文を示唆している:

recordWarnings on 
sim('myModel'); 
warnings = recordWarnings('history'); 
+1

私はすべてのテストケースを使って固定点モデルをシミュレートし、シミュレーション中に発生したすべてのオーバーフローを収集したいと考えています。この情報を使用して、オーバーフローが報告されなくなるまでモデルを改善したいと考えています。 – ChrisK

+1

警告を介してプログラムでこれを行う必要がありますか?診断を設定してエラーをトリガーし、エラーがスローされなくなるまで繰り返してください。 – Nzbuu

+0

または、信号の実際の範囲を分析し、それに応じてモデルを設定します。 – Nzbuu

0

は、すでに述べたように、直接シミュレーションコマンドの出力のみを警告をキャッチすることはできません、と述べました。しかし、そのためにdiaryを使用すると、出力はファイルに書き込まれ、ファイルを開いて解析し、再度削除する必要があります。

また、evalcコマンドを使用すると、出力を文字配列として直接返します。これは、スクリプトで使いやすくする必要があります。

+0

'evalc'を使用してすべての警告を取得するにはどうすればよいですか?または、すべての出力をキャプチャして、後で警告をフィルタリングするだけですか? –

+0

'sim'コマンドは、一度に複数の警告をスローします。 'lastwarn'をそこに使用することはできません(質問も参照してください)。これは組み込みのMatlab関数であるため、コマンドを分割することができないためです。 – wls

-1

この解決策では、すべての警告(diaryを使用することをお勧めします)は表示されませんが、コードのどの部分が警告を生成するかを確認する方法は次のとおりです。

myWarnLog = {} 
part1 
myWarnLog(end+1) = lastwarning 
part2 
myWarnLog(end+1) = lastwarning 
... 

警告はどのようなものかわかりませんが、必要な場合は、警告が発生した日時の情報を保存することもできます。 diaryを解析することなく、より効率的なデバッグが可能になります。

関連する問題