技术文章和新闻稿

基于敏捷模型的设计:在持续集成工作流中加速Simulink仿真万博1manbetx

作者:Puneet Khetarpal和Marco Dragic, MathWorks


在敏捷开发工作流中,设计复杂系统是一项协作工作,大型团队开发组件、组装子系统,并将它们集成到系统设计中。理想情况下,系统仿真是组件设计工作流中一个完整的验证步骤,使工程师能够验证组件满足系统需求。然而,多次模拟一个具有复杂模型层次结构的系统可能非常耗时。

一种方式模拟链接万博1manbetx®加速大型模型参考层次结构的模拟是通过第一次运行模拟时创建一组中间派生伪像。对于大型团队,共享和重用这些派生文件,包括MEX文件和其他二进制文件,可能是具有挑战性的。因此,团队成员经常花费时间重建和重新创建由团队中其他人创建的文件。这种冗余努力消耗了可能在更加生产方面的设计活动上花费的时间。团队越大,模型的复杂性越大,问题越大。

为了解决这个问题,Simulink将这些派生构万博1manbetx件打包并存储在Simulink缓存文件中。在本文中,我们描述了一个在典型的敏捷开发工作流中管理和共享Simulink缓存文件的方法,该工作流使用Git™进行源代码控制,万博1manbetx使用Jenkins™进行持续集成(CI)。这种方法大大提高了系统模拟的速度。

simu万博1manbetxlink缓存

当您模拟加速器中的模型,快速加速器或型号参考加速模式时,Simulink将层次结构中的每个模型的派生文件包装到其对应的Simulink缓存文件(SLXC)中。万博1manbetx团队成员可以共享这些SLXC文件和相应的Simulink模型文件。万博1manbetx当团队成员在其计算机上重复仿真时,Simulink将从SLXC文件中提取每个模型的必要的派生文件。万博1manbetx因此,Simulink不需万博1manbetx要执行不必要的重建,并且模拟明显更快。

确切的性能改善取决于几个因素,例如层次结构中的模型数,模型引用重建设置,引用模型中的块数,以及为每个模型创建的派生文件的大小和数量。在我们的测试中,使用0-500个引用模型和1-10级层次结构的各种系统模型,我们看到从2x到超过34倍的改进(图1)。

图1.使用Simulink高速缓存文件进行各种系统模型实现的性能改进。万博1manbetx

在包含Jenkins CI系统的敏捷工作万博1manbetx流中共享和重用Simulink缓存文件是三阶段过程(图2):

  1. 将设计更改提交到Git。
  2. 集成设计更改和归档SLXC文件。
    • Jenkins从Git拉动设计变更并运行模拟以测试它们。
    • Jenkins在Jenkins Bu万博1manbetxild Archive中保存Simulink缓存文件。
  3. 同步设计更改和SLXC文件。
    • 团队成员同步来自Git的最新设计更改和来自Jenkins构建归档的相关缓存文件。
    • 团队成员使用缓存文件运行系统模拟。

图2.使用源控制和连续集成系统重用Simulink高速缓存文件的典型工作流程。万博1manbetx阴影区域描述了工作流的三个阶段。

在更详细地查看这些阶段之前,让我们考虑使用Simulink缓存的要求和最佳实践。万博1manbetx

共享和重用Simulink缓存文件的要求和最佳实践万博1manbetx

Simu万博1manbetxlink缓存包含派生文件,依赖于模拟期间使用的MATLAB发布,平台和编译器。要共享和重用这些文件,所有团队成员都必须使用相同的MATLAB®发布,平台和编译器。在本文中,我们正在使用Matlab R2019A,Microsoft®视窗®,和Microsoft Visual C ++®2017分别。

以下最佳实践使其通过重用共享缓存文件,更容易加速大型分层模型的模拟:

  • 遵循基于组件的建模指南适合您的模型。例如,层次结构中的引用模型通常应包含超过500个块以获得最佳仿真性能。
  • 让每个团队成员负责层次结构的子集——通常,由几个Simulink模型组成的组件,例如具有定义良好的接口的控制器或植物。万博1manbetx这将在合并设计更改时最小化问题。
  • 项目使用启动和关机脚本,以确保所有团队成员的一致工作环境。启动脚本打开项目时初始化环境,并且关闭脚本在项目关闭时清除环境。
  • 参考加速器模式。用于在本地计算机上调试引用的模型,使用正常的模式。但是,此模式不提供与加速器模式相同的模拟性能优势。
  • 设置每个型号重建参数如果检测到已知依赖项中的任何更改(图3)并使用模型依赖性参数指定用户创建的依赖项。这提高了重建检测的速度和准确性。
  • 如果您使用的是并行计算工具箱™,请选择启用并行模型引用构建(图3)模型引用层次结构将自动并行构建。
  • 确定Jenkins Builds是否会在一天的特定时间或按需运行。您的具体要求将确定最佳的时机工作以及以下哪种类型的构建方式:
    • 无菌:jenkins工作空间被清除了jenkins构建的文物或文件的构建。如果您的团队经常更改Simulink模型配置,请使用无菌构建。万博1manbetx例如,更改Simulink模型层次结构上的硬件设置需要一个干净的工作区。万博1manbetx
    • 增量:其中保留了以前Jenkins构建中的工件的构建。如果您的团队对单个组件进行了小的增量更改,则使用增量构建。

    无菌构建通常比增量构建更长,具体取决于模型层次结构的大小。

图3.模型配置参数。

提交设计变更到git

在此步骤中,团队成员修改模型,模拟模型层次结构,运行模型顾问检查以及进行单元测试。他们承诺了只有他们的设计文件到源控制系统,如Git。万博1manbetxSimulink缓存文件不应致力于源控制系统;它们是派生的二进制文件,可以采用显着的磁盘空间,无法比较或合并。在git存储库中,您可以配置a.gitignore.文件使Git忽略了所有派生工件,包括SLXC文件。

集成设计更改和归档SLXC文件

有关在Simulink中使用Jenkins的指导和配置技巧,请参阅博客文章万博1manbetx与Simulink项目和Simulink测试持续集成。万博1manbetx

在下面的示例中,Jenkins管理员指定建造詹金斯的命令。该命令启动MATLAB,构建快速加速器目标以实现最大模拟加速,并运行测试。图4显示了打开Simulink项目的命令,万博1manbetxmyjenkinsproject.并执行mybuildandtest.脚本。

图4。演示Jenkins Build命令,该命令打开Simulink项目并执行万博1manbetxmybuildandtest.脚本。该脚本构建系统的快速加速器目标,并运行多个模拟以测试更改。

使用此脚本,Jenkins构建模型层次结构的快速加速器目标:

万博1manbetxsimulink.blockdiagram.buildRapidaccelEratortarget('型号');

此命令创建包含SLXC文件,该文件包含SLXC文件,该文件包含层次结构中所有模型的所有模型的快速加速器和模型参考仿真目标。万博1manbetxSimulink将这些SLXC文件存储在模拟缓存文件夹中。此文件夹的位置是指定的项目详细信息(图5)然后脚本运行多个模拟来测试设计更改。

图5.“项目详细信息”对话框,指定存储SLXC文件的缓存文件夹的位置。默认设置为[项目根]。

此外,管理员也设置了一个后建行动在Jenkins归档SLXC文件(图6)。构建后,Jenkins将SLXC文件从Jenkins Workspace复制到Build Archive位置。要指定Jenkins构建存档位置,管理员可以编辑config . xml文件在Jenkins主目录中。

图6. jenkins postbuild操作,配置为在构建完成后将所有Simulink高速缓存文件从Jenkins工作区存档万博1manbetx到构建存档区域。

同步设计更改和SLXC文件

通常,Jenkins构建是在夜间执行的。然后,每个团队成员都准备好基于上一次成功构建同步一个沙箱。团队成员从Git中检出设计更改,从构建归档区域检索相关的Simulink缓存文件,并在模拟之前将Simulink缓存文件放置在模拟缓存文件夹中。万博1manbetx团队可以设置一个脚本来自动化这个过程。例如,下面的脚本概述了同步Simulink缓存文件的主要步骤:万博1manbetx

功能CopyJenkinsSLXCFILES(BuildLocation)%copyjenkinsslxcfiles从jenkins plastsuccessfulbuild复制slxc文件%存档位置到用户的缓存文件夹。% buildLocation: Jenkins的构建位置%构建归档路径archivePath = fullfile (buildLocation,'lastsuccessfulbuild''档案'‘工作’“缓存”);%获取缓存文件夹位置cacheFolder = 万博1manbetxSimulink.fileGenControl (“得到”'cachefolder');%将slxc文件从build存档复制到缓存文件夹COPYFILE(ARCHIVEPATH,CACHEFOLDER);结尾

增强工作流程

有几种方法可以使这个工作流程更快、更不容易出错。要方便地管理来自多个Jenkins构建的SLXC文件,可以使用数据库或存储库管理工具。要在项目中作为工作的一部分自动运行MATLAB和Simulink万博1manbetx测试,可以使用MATLAB Plugin for Jenkins。最后,为了进一步扩展模拟性能,您可以使用parsim对于一系列输入参数值。

2019年出版的

查看相关功能的文章