我想要捕捉在Matlab / Simulink模型模拟过程中发出的所有警告。模拟的结果应该是一系列警告,因为可能存在多个警告。
理想的代码看起来像这样(除了catch不能用于警告):
try
sim('myModel');
catch warnings
for i=1:length(warnings)
<process each warning>
end
end
我已经尝试过的事情没有成功:
lastwarn
只会给我最后一条警告信息,而不是全部警告信息。P.S。:我在Windows上使用Matlab 2010b。
答案 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
。