Main Content

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

避免无效循环

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

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

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

  • 包含执行子系统的循环

有关触发子系统和函数调用子系统的示例,请参阅 Simulink 子系统语义

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

检测无效循环

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

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

隐藏文件

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

提示

为避免出现隐藏文件问题,请启用 Simulink 预设项不要加载在 MATLAB 路径中被遮蔽的模型。请参阅Do not load models that are shadowed on the MATLAB path

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

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

确保加载了正确的模块图

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

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

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

  • 仿真错误

  • 模块上出现“未解析的链接”图标(作为库链接)

  • 错误的结果

检测和修复问题

为避免出现隐藏文件问题,可以启用 Simulink 预设项不要加载在 MATLAB 路径中被遮蔽的模型。请参阅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')

模型编译提示

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

  • 内存问题

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

  • 使用层次结构

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

  • 清理模型

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

  • 建模策略

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

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

相关示例

详细信息