主要内容

使用 MSLException 对象处理 Simulink 中的错误

Simulink 应用程序中的错误报告

Simulink® 允许您通过使用 MSLException 对象(该对象基于 MATLAB® MException 对象)抛出异常来报告错误。与 MATLAB MException 对象一样,您可以使用 try-catch 模块和 MSLException 对象来捕获有关错误的信息。MSLExceptionMException 对象之间的主要区别在于 MSLException 对象具有额外的 handles 属性。您可以通过这些句柄识别出与错误关联的对象。

MSLException 对象

MSLException 类有五个属性:identifiermessagestackcausehandles。其中前四个属性与 MException 的属性完全相同。有关这些属性的详细信息,请参阅 MException。第五个属性 handles 是包含双精度数组元素的元胞数组。这些元素包含与错误关联的 Simulink 对象(模块或模块图)的句柄。

MSLException 对象函数

MSLException 对象的函数与 MSLException 对象的函数相同。有关这些函数的详细信息,请参阅 MException

捕获有关错误的信息

以下代码显示用来捕获 MSLException 的 try-catch 代码块的结构。如果 try 语句内的操作导致错误,catch 语句将捕获异常 E。接下来,if isa 条件语句会执行测试以确定异常是否为 MSLException 对象,该对象表示异常是 Simulink 特定的。也就是说,MSLExceptionMException 的一种类型。

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

另请参阅

主题