使用 MSLException
对象处理 Simulink 中的错误
Simulink 应用程序中的错误报告
Simulink® 允许您通过使用 MSLException
对象(该对象基于 MATLAB® MException
对象)抛出异常来报告错误。与 MATLAB MException
对象一样,您可以使用 try-catch
模块和 MSLException
对象来捕获有关错误的信息。MSLException
与 MException
对象之间的主要区别在于 MSLException
对象具有额外的 handles 属性。您可以通过这些句柄识别出与错误关联的对象。
MSLException
对象
MSLException
类有五个属性:identifier
、message
、stack
、cause
和 handles
。其中前四个属性与 MException
的属性完全相同。有关这些属性的详细信息,请参阅 MException
。第五个属性 handles
是包含双精度数组元素的元胞数组。这些元素包含与错误关联的 Simulink 对象(模块或模块图)的句柄。
MSLException
对象函数
MSLException
对象的函数与 MSLException
对象的函数相同。有关这些函数的详细信息,请参阅 MException
。
捕获有关错误的信息
以下代码显示用来捕获 MSLException
的 try-catch 代码块的结构。如果 try
语句内的操作导致错误,catch
语句将捕获异常 E
。接下来,if isa
条件语句会执行测试以确定异常是否为 MSLException
对象,该对象表示异常是 Simulink 特定的。也就是说,MSLException
是 MException
的一种类型。
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
的模型中引发错误,getfullname
函数将返回名为 Mu
的模块的路径。
ans = vdp/Mu