Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

使用 MSLException 处理 Simulink 中的错误

Simulink 应用程序中的错误报告

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

MSLException 类

MSLException 类有五个属性:identifiermessagestackcausehandles。其中前四个属性与 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。也就是说,MSLExceptionMException 的一种类型。

以下代码示例演示如何获取与错误关联的句柄。

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

相关主题