技术文章和通讯

基于敏捷模型的设计:在连续集成工作流程中加速Simulink模拟金宝app

通过Puneet Khetarpal和Marco Dragic,Mathworks


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

其中一种是Simulink金宝app®通过在第一次运行模拟时创建一组中间派生工件,可以加速大型模型引用层次结构的模拟。对于大型团队来说,共享和重用这些派生文件(包括MEX文件和其他二进制文件)是很有挑战性的。因此,团队成员经常花费时间重建和重新创建团队中其他人已经创建的文件。这种冗余的工作消耗了原本可以用于更有生产力的设计活动的时间。团队规模越大,模型越复杂,问题就越大。

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

simu金宝applink缓存

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

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

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

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

  1. 向Git提交设计更改。
  2. 集成设计更改和归档SLXC文件。
    • Jenkins从Git中提取设计更改,并运行模拟来测试它们。
    • Jenkins在Jenkins Bu金宝appild Archive中保存Simulink缓存文件。
  3. 同步设计更改和SLXC文件。
    • 团队成员同步Git和Jenkins Build Archive的最新设计更改。
    • 团队成员使用缓存文件运行系统模拟。

图2。利用源代码控制和持续集成系统重用Simulink缓存文件的典型金宝app工作流。阴影区域描述了工作流的三个阶段。

在详细研究这些阶段之前,让我们考虑一下使用Simulink缓存的需求和最佳实践。金宝app

共享和重用Simulink缓存文件的要求和最佳实践金宝app

Simu金宝applink缓存包含派生文件,这些文件依赖于MATLAB版本、平台和仿真过程中使用的编译器。为了共享和重用这些文件,所有团队成员必须使用相同的MATLAB®发布,平台和编译器。在本文中,我们正在使用Matlab R2019A,Microsoft®视窗®,和Microsoft Visual C ++®2017年,分别。

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

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

    根据模型层次结构的大小,无菌构建通常比增量构建花费更长的时间。

图3。模型配置参数。

提交设计变更到git

在此步骤中,团队成员修改模型,模拟模型层次结构,运行模型顾问检查以及进行单元测试。他们承诺了只有他们的设计文件到源代码控制系统,如Git。金宝appSimulink缓存文件不应该提交给源代码控制系统;它们是派生的二进制文件,可能占用大量的磁盘空间,并且不能进行比较或合并。在Git存储库中,您可以配置.gitignore文件使Git忽略了所有派生工件,包括SLXC文件。

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

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

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

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

使用这个脚本,Jenkins为模型层次结构构建了快速加速器目标:

金宝appSimulink.BlockDiagram.buildRapidAcceleratorTarget(模型);

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

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

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

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

同步设计更改和SLXC文件

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

功能copyJenkinsSLXCFiles (buildLocation)%copyjenkinsslxcfiles从jenkins plastsuccessfulbuild复制slxc文件%存档位置到用户的缓存文件夹。%buildlocation:jenkins构建位置% build存档路径archivepath = fullfile(buildlocation,“lastSuccessfulBuild”“档案”'工作''缓存');获取缓存文件夹位置cachefolder = 金宝appsimulink.filegencontrol('得到''cachefolder');%将SLXC文件从生成归档文件复制到缓存文件夹拷贝文件(archivePath cacheFolder);结束

提高工作流程

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

发布2019年

查看相关功能的文章