编译 Simulink 模型的一般注意事项
避免无效循环
您可以将模块的输出直接或间接(即通过其他模块)连接到其输入,从而创建一个循环。循环可能非常有用。例如,您可以使用循环构建模块图来求解微分方程(请参阅连续系统建模),或对反馈控制系统建模。但是,创建的循环也可能无法仿真。常见的无效循环的类型包括:
有关触发子系统和函数调用子系统的示例,请参阅 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
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。
建模策略
如果您的几个模型使用相同的模块,您可以保存这些模块以便于重用。例如,您可以将模块集合保存在自定义库中。然后,当您构建新模型时,您可以从该库中复制这些模块。
通常,在构建模型时,可首先在纸张上进行设计,然后再使用计算机进行构建。当您开始使用模块搭建模型时,请先将模块添加到模型窗口,再添加连接它们的线。这样,您可以减少需要打开模块库的频率。