在使用Simulink进行仿真的过程中,经常会发现目录下存在一些后缀为.slxc
的文件,这些其实就是Simulink模型的缓存文件(.slx + cache)。
Simulink缓存文件的主要作用是提高仿真和代码生成的效率。
借助缓存文件,可以避免每次仿真或代码生成时都重新编译模型,从而显著减少时间和计算资源的消耗。
Simulink 缓存文件可用于创建该文件所用的MATLAB版本和更高版本。
以下是一些具体用途和优点:
- 加速初始仿真和代码生成:
第一次仿真模型或生成代码时,Simulink会生成缓存文件(.slxc
文件)。这些文件包含仿真和代码生成所需的构建工件。以后如果模型没有结构性变化,Simulink可以直接使用这些缓存文件,从而加速仿真和代码生成过程。 - 团队协作和连续集成:
在团队开发环境中,使用缓存文件可以简化并同步团队成员之间的模型更新和构建过程。缓存文件可以在团队成员之间共享,从而避免每个成员都进行重复的编译和构建操作。这在模型层次结构复杂且引用模型较多的情况下尤为有用。 - 增量代码生成:
当模型发生部分更改时,Simulink只会重新生成受影响的部分代码,而不是重新生成整个模型的代码。这样可以显著减少代码生成时间,并提高开发效率。 - 加速模式仿真:
在使用加速模式(如加速器模式和快速加速器模式)进行仿真时,缓存文件存储了仿真目标,避免每次仿真时重新生成执行引擎。这对于大型模型尤为重要,可以节省大量时间。 - 减少重复构建的开销:
如果使用持续集成系统(如Jenkins),这些系统可以定期构建模型并更新缓存文件,团队成员只需获取最新的缓存文件即可开始工作,避免了不必要的重新构建。
通过利用这些缓存文件,您可以大幅提高Simulink模型的仿真和代码生成效率,特别是在团队开发和复杂模型管理中。
缓存文件的内容
Simulink 缓存文件包含以下几类内容:
-
加速目标(Accelerator Target)
这些是用于加速模式下仿真的预编译代码和模型目标。它们允许在不重新编译整个模型的情况下快速进行仿真。
-
快速加速目标(Rapid Accelerator Target)
类似于加速器目标,但用于快速加速器模式,它生成独立的可执行文件来运行仿真
-
模型引用的仿真目标
包含引用模型的仿真目标,便于在模型层次结构中复用和加速仿真
-
变量使用信息
记录模型中变量的使用情况,帮助优化仿真和代码生成.
-
代码生成目标
包括用于Simulink Coder和Embedded Coder生成的代码目标文件。这些文件用于生成嵌入式系统的代码
-
模型表示 (Simulink Design Verifier)
由Simulink Design Verifier生成的模型表示,用于模型验证和分析
-
Web 视图
由Simulink Report Generator 生成的模型Web视图,便于在网络上查看和共享模型
Simulink缓存对加速模式的影响
在之前的文章中讨论过Simulink的三种加速模式,无论哪一种加速模式,其原理都是基于对模型的部分内容进行提前编译。
而其编译的部分数据和文件就通过Simulink缓存来保存。
这里依旧使用发动机的燃料控制系统模型进行演示,在MATLAB命令行中输入下述代码即可打开该模型。
openExample('simulink_automotive/ModelingAFaultTolerantFuelControlSystemExample')
加速模式
通过下面的命令以加速模式运行模型
mdl = 'sldemo_fuelsys';
in = Simulink.SimulationInput(mdl);
in = setModelParameter(in,'SimulationMode','Accelerator');
% AccelVerboseBuild参数指定在为加速器模式仿真、快速加速器仿真和在加速器模式下仿真的参考模型构建仿真目标期间显示的信息量。
in = setModelParameter(in,'AccelVerboseBuild','on');
out = sim(in);
运行上述命令后会出现三种情况
- 无缓存时
当模型没有可用的缓存,或者自上次生成缓存文件以来对模型的结构进行了更改,Simulink 将执行校验和分析并生成加速器目标。
工件(artifact)将存储在缓存文件中,以便在后续模拟中重复使用。
“工件”(artifact)指的是在模型仿真或代码生成过程中创建的文件和数据
- 有缓存时
如果有缓存可用,并且自缓存构建以来模型在结构上没有发生变化,Simulink 将提取信息,使执行引擎的生成速度更快。详细日志将会显示以下内容
- 无任何信息
模型仿真一次后,加速器模式执行引擎将保留在内存中。如果未对模型结构进行更改,则详细日志中不会显示任何内容。
快速加速模式
通过下面的命令以快速加速模式运行模型。
mdl = 'sldemo_fuelsys';
in = Simulink.SimulationInput(mdl);
in = setModelParameter(in,'SimulationMode','Rapid');
out = sim(in);
-
无缓存时
此时会对模型进行编译,用时取决于模型的复杂程度。
-
模型结构修改导致缓存过期
此时会提示生成的代码已过期,需要对模型进行重新编译。
-
有可用缓存
此时仅执行模型与缓存的检查与验证,无需重新编译。
一些缓存文件的操作
可以使用slxcinfo
函数来查询缓存文件的具体内容,该函数会返回一个包含缓存文件详细信息的MATLAB表格,通过这些信息,可以避免不必要的重建,从而加快仿真和代码生成过程。
这里依旧以上文的燃料控制系统模型为例,分别使用普通模式、加速模式、快速加速模式仿真模型后,通过slxcinfo
函数可以查询模型缓存信息
slxcinfo("sldemo_fuelsys.slxc")
可以看到返回值是通过Matlab表记录了相应的 Simulink 模型名称、MATLAB 版本、平台和目标类型。
使用slxcunpack
函数可以从 Simulink 缓存文件中解包仿真和代码生成目标
slxcunpack("sldemo_fuelsys.slxc")
同样以MATLAB表格形式提供的返回值可用于 Simulink 检查的 CI/CD 自动化工作流程,设置为基于模型的设计量身定制的pipeline、减少构建时间、减少构建失败、调试构建失败以及将基于模型的设计工作流程部署到团队和 CI 系统。
例如作为padv.util.unpackExternalCodeCache(cacheFiles)
的输入值。
缓存文件路径设置
一般情况下,缓存文件存储在仿真缓存文件夹中,也就是对应模型的根目录下。
如需修改,可参考下图的步骤。