Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

编译 Simulink 模型的一般注意事项

避免无效循环

您可以将模块的输出直接或间接(即通过其他模块)连接到其输入,从而创建一个循环。循环可能非常有用。例如,您可以使用循环构建模块图来求解微分方程(请参阅连续系统建模),或对反馈控制系统建模。但是,创建的循环也可能无法仿真。常见的无效循环的类型包括:

  • 创建无效函数调用连接或尝试修改函数调用的输入/输出参数的循环(有关函数调用子系统的说明,请参阅使用函数调用子系统

  • 自触发子系统和包含非锁存触发子系统的循环(请参阅“使用 Simulink®”文档中的 使用触发子系统以了解触发子系统的说明,参阅 Simulink 参考文档中的 Inport 了解锁存输入的说明)

  • 包含执行子系统的循环

Ports & Subsystems 库中的 Subsystem Examples 模块库包含的一些模型演示了使用触发和函数调用子系统的有效和无效循环。无效循环的示例包括以下模型:

  • simulink/Ports&Subsystems/sl_subsys_semantics/Triggered subsystem/sl_subsys_trigerr1 (sl_subsys_trigerr1)

  • simulink/Ports&Subsystems/sl_subsys_semantics/Triggered subsystem/sl_subsys_trigerr2 (sl_subsys_trigerr2)

  • simulink/Ports&Subsystems/sl_subsys_semantics/Function-call systems/sl_subsys_fcncallerr3 (sl_subsys_fcncallerr3)

您可能会发现研究这些示例很有用,可以避免在您自己的模型中创建无效循环。

检测无效循环

要检测模型是否包含无效循环,请从工具条的 Modeling 选项卡中选择 Update Model。如果模型包含无效循环,则会突出显示无效循环。以下模型 (open) 中显示了此功能,

并在诊断查看器中显示错误消息。

隐藏文件

如果 MATLAB® 路径上有两个具有相同名称的模型文件(例如 mylibrary.slx),则会加载处于路径上较高位置的文件,而处于路径上较低位置的文件被“隐藏”。

提示

为避免出现隐藏文件问题,请启用 Simulink 预设项 Do not load models that are shadowed on the MATLAB path。请参阅Do not load models that are shadowed on the MATLAB path

Simulink 用于查找模型文件的规则与 MATLAB 软件使用的规则类似。请参阅什么是 MATLAB 搜索路径?。但是,在如何处理 Simulink 模块图和如何处理 MATLAB 函数之间存在重大差异:已加载的模块图优先于任何未加载的模块图,无论其在 MATLAB 路径上的位置如何。这样处理是出于性能原因,是 Simulink 软件的增量加载方法的一环。

加载的模块图优先于任何其他模块图具有重要意义,特别是这样便可以直接加载模块图而不用显示相应的 Simulink 窗口。

确保加载了正确的模块图

使用库和引用模型时,可以加载模块图而不显示其窗口。如果 MATLAB 路径或当前 MATLAB 文件夹在模块图已加载到内存中时发生更改,则这些模块图可能会干扰其他同名文件的使用。

例如,打开一个具有名为 mylib 的库的模型,更改到另一个文件夹,然后打开另一个模型,而该模型具有同样名为 mylib 的库。运行第一个模型时,它会使用与第二个模型关联的库。

这可能会导致一些问题,包括:

  • 仿真错误

  • 模块上出现“Unresolved Link”图标(作为库链接)

  • 错误的结果

检测和修复问题

为避免出现隐藏文件问题,可以启用 Simulink 预设项 Do not load models that are shadowed on the MATLAB path。请参阅Do not load models that are shadowed on the MATLAB path

更新模块图时,Simulink 软件会检查其文件在 MATLAB 路径上的位置,如果检测到存在另一个同名文件且在 MATLAB 路径上的位置更高,则会发出警告。警告如下:

The file containing block diagram 'mylibrary' is shadowed 
by a file of the same name higher on the MATLAB path.
这可能表示误用了另一个名为 mylibrary.slx 的文件。要查看哪个名为 mylibrary.slx 的文件已加载到内存中,请输入:

 which mylibrary

C:\work\Model1\mylibrary.slx
要查看 MATLAB 路径上名为 mylibrary 的所有文件,包括 MATLAB 脚本,请输入:

which -all mylibrary

C:\work\Model1\mylibrary.slx
C:\work\Model2\mylibrary.slx  % Shadowed

要关闭名为 mylibrary 的模块图并让 Simulink 软件加载 MATLAB 路径上位置最高的文件,请输入:
close_system('mylibrary')

模型编译提示

以下是对您可能有用的一些模型编译提示:

  • 内存问题

    通常,增加内存将提高性能。

  • 使用层次结构

    如果模型较为复杂,在模型中增加子系统层次通常会有好处。对模块分组可以简化模型的顶层,从而更易于阅读和理解模型。有关详细信息,请参阅创建子系统。Model Browser 提供了有关复杂模型的有用信息(请参阅 Simulink Editor)。

  • 清理模型

    组织良好且提供文档说明的模型更易于阅读和理解。信号标签和模型注释可以帮助说明模型中发生的情况。有关详细信息,请参阅信号名称和标签使用说明和注释描述模型

  • 建模策略

    如果您的几个模型使用相同的模块,您可以保存这些模块以便于重用。例如,您可以将模块集合保存在自定义库中。然后,当您构建新模型时,您可以从该库中复制这些模块。

    通常,在构建模型时,可首先在纸张上进行设计,然后再使用计算机进行构建。当您开始使用模块搭建模型时,请先将模块添加到模型窗口,再添加连接它们的线。这样,您可以减少需要打开模块库的频率。

相关示例

详细信息