使用 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
类的方法与 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
。也就是说,MSLException
是 MException
的一种类型。
以下代码示例演示如何获取与错误关联的句柄。
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