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

通过Puneet Khetarpal和Marco Dragic,Mathworks


在敏捷开发工作流程中,设计复杂系统是一种协作努力,其中大型团队开发组件,组装子系统,并将它们集成到系统设计中。理想情况下,系统仿真是组件设计工作流程中的一个积分验证步骤,使工程师能够验证组件是否满足系统要求。但是,使用复杂的模型层次结构模拟系统多次可以耗时耗时。

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

要解决此问题,Simulink软件包并在Sim万博1manbetxulink缓存文件中存储这些派生工件。在本文中,我们描述了一种在典型的敏捷开发工作流中管理和共享Simulink缓存文件的方法,该工作流使用Git™用于源控制和Je万博1manbetxnkins™以进行连续集成(CI)。这种方法大大加快了系统模拟。

模型缓存万博1manbetx

当您在加速器、快速加速器或模型引用加速模式中模拟模型时,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将Simulink缓存万博1manbetx文件保存在Jenkins构建归档文件中。
  3. 同步设计更改和SLXC文件。
    • 团队成员同步Git和Jenkins Build Archive的最新设计更改。
    • 团队成员使用缓存文件运行系统模拟。

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

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

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

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

以下最佳实践可以通过重用共享缓存文件来简化大型分层模型的模拟:

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

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

图3.模型配置参数。

提交设计更改到Git

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

集成设计变更和SLXC文件存档

有关使用Jenkins与Simulink的指导和配置提示,请参阅博客帖子万博1manbetx与Simulink项目和Simulink测试持续集成。万博1manbetx

在以下示例中,Jenkins管理员指定构建詹金斯的命令。此命令启动MATLAB,构建快速加速器目标,以获得最大仿真加速度,并运行测试。图4显示了打开Simulink项目的命令,万博1manbetxMyJenkinsProject并执行mybuildandtest.脚本。

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

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

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

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

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

此外,管理员也设置了一个Post-build行动构建完成后,Jenkins将SLXC文件从Jenkins工作区复制到构建归档位置。要指定Jenkins构建存档位置,管理员可以编辑config.xml.文件在Jenkins主目录中。

图6。一个Jenkins postbuild操作,配置为在构建完成后将所有Simulink缓存文件从Jenkin万博1manbetxs工作区存档到构建存档区域。

同步设计更改和SLXC文件

通常,Jenkins Builds夜间进行。然后,每个团队成员都准备好根据最后的成功构建同步沙箱。团队成员从GIT中查看设计更改,从Build Archive区域检索关联的Simulink缓存文件,并在模拟之前将Simulink缓存文件放在模拟缓存文万博1manbetx件夹中。团队可以设置一个脚本来自动执行此过程。例如,以下脚本概述了同步Simulink缓存文件的主要步骤:万博1manbetx

函数CopyJenkinsSLXCFILES(BuildLocation)% COPYJENKINSSLXCFILES从Jenkins lastSuccessfulBuild复制slxc文件%存档位置到用户的缓存文件夹。%buildlocation:jenkins构建位置%构建归档路径archivepath = fullfile(buildlocation,'lastsuccessfulbuild''档案''工作''缓存');%获取缓存文件夹位置cachefolder = 万博1manbetxsimulink.filegencontrol('得到'“CacheFolder”);%将slxc文件从build存档复制到缓存文件夹COPYFILE(ARCHIVEPATH,CACHEFOLDER);结尾

增强工作流程

有几种方法可以更快地使此工作流程更快,更少容易出错。要从多个Jenkins构建中轻松管理SLXC文件,可以使用数据库或存储库管理工具。要在项目中自动运行MATLAB和SIMULINK测试作为作业的一万博1manbetx部分,您可以使用JENKINS的MATLAB插件。最后,为了进一步缩放仿真性能,您可以使用多个系统模拟Parsim获取输入参数值的范围。

发布2019年

查看相关功能的文章