如何在Simulink仿真期间捕获所有警告?

时间:2011-10-17 08:06:03

标签: matlab warnings try-catch simulink

我想要捕捉在Matlab / Simulink模型模拟过程中发出的所有警告。模拟的结果应该是一系列警告,因为可能存在多个警告。

理想的代码看起来像这样(除了catch不能用于警告):

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

我已经尝试过的事情没有成功:

  • 将警告变为异常将无济于事,因为我只会收到第一个警告,而不是所有警告。
  • 使用我自己的“@char \ warnings.m”覆盖内置警告功能只会捕获我自己脚本中的警告,但不能捕获sim-function中的警告。
  • lastwarn只会给我最后一条警告信息,而不是全部警告信息。

P.S。:我在Windows上使用Matlab 2010b。

4 个答案:

答案 0 :(得分:5)

解决方法可以是使用sim记录diary的输出,并在模拟后分析文件(警告的格式非常规则)。

答案 1 :(得分:1)

我不认为这是可能的。它还提出了“你想用警告做什么?”的问题。和“为什么?”。

我会用Mathworks技术支持提高它。 try ... catch ...严格来说是错误的,所以我建议使用类似于以下内容的语法:

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

答案 2 :(得分:0)

如前所述,不可能直接捕获警告,只能捕获模拟命令的输出。但是当使用diary时,输出将被写入文件,然后必须再次打开,解析和删除。

或者,您可以使用evalc命令,该命令直接将输出作为字符数组返回。这应该更容易在脚本中使用。

答案 3 :(得分:-1)

此解决方案不会向您发出所有警告(我建议使用diary),但您可以通过以下方式查看代码的哪些部分生成警告。

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

我不确定警告的样子,但如果需要,您还可以存储有关警告发生的时间/地点的信息。 这样可以让您更有效地进行调试,而无需解析diary