14

我们在一个由多个开发人员组成的团队中使用 Matlab Simulink 进行模型开发(和 Real-Time Workshop 自动编码)。

我们目前使用 Visual Source Safe(是的,我知道它很糟糕)进行版本控制,使用锁来防止发生冲突的更改。

我们想将我们的程序迁移到不同的版本控制系统(svn、hg 或 git),但我们担心对 Simulink .mdl 文件执行合并和差异。

有人在对 Simulink 文件执行合并方面有有用的经验吗?

4

8 回答 8

6

Simulink 模型文件的文本合并会很困难。这是一篇文章,其中提供了有关使用 Simulink 时的配置管理的一些信息。

至于差异,Simulink 报告生成器中有一个差异工具,我相信 R2008b+ 开始。这是该功能的文档链接

麦克风

于 2009-11-24T15:14:50.487 回答
6

SimDiff将满足您的需求。您可以将它与您喜欢的任何软件配置管理/版本控制系统配对。

Mike 引用的 2007 SAE 论文是在 SimMerge(后来更名为 SimDiff 4)可用之前编写的。现在,您可以将 AccuRev 或 IBM Unified Change Management 等现代软件配置管理系统用于您的 Simulink 项目。

至少有两篇较新的论文取代了 2007 年的论文。Xilinx 的那篇文章准确地展示了如何将 SimDiff 与 SVN/Subversion 集成。

披露:我在 2005-2015 年间参与了 SimDiff 的开发。

于 2010-03-13T00:23:48.947 回答
3

如前所述,Mathworks 正在为 Simulink 开发差分工具,基本上将它们导出为 XML 文件,然后进行比较。尽管我认为这不会比任何现有的版本控制系统都有助于合并文件。

我已经开始将Mercurial用于我们的 MATLAB 代码和 Simulink 模型。它在一些相当大的 simulink 模型上运行良好且快速,但作为一个开发人员,我还没有处理任何复杂的合并。一个简单的差异和合并通常会引发几个冲突,这些冲突只不过是语法更改,通常是日期戳和版本号。

如果可能的话,我的建议是使用模型参考。我有一个大型模型,它基本上使用模型引用链接了六个子模型。每个子模型都处于版本控制之下,只有一个开发人员负责一个子模型,然后它在合并不同的 simulink 模型时解决了很多问题。

于 2009-11-25T12:24:56.383 回答
3

Mathworks 推荐使用Simulink Projects,这是 R2011b 中的新功能。有关详细信息,请参阅Simulink 博客上的 Seth

Simulink Projects 将 MATLAB/Simulink 与您的版本控制系统集成,并提供附加功能。

就合并 Simulink 而言,我认为当前的最佳做法是尽可能避免它。这可以在适当的情况下使用模型引用和库链接来完成,以确保每个配置项都足够小。

于 2011-11-02T11:33:01.507 回答
3

DiffPlug 可以图形方式比较 Simulink 文件,它集成到 SVN 和 Git 中。它有一个命令行界面,所以你也可以将它与 SourceSafe 集成......

http://www.diffplug.com/products/dp.simulink.differ

于 2012-11-13T00:23:55.967 回答
2

Xilinx 最近发布了一份应用说明,详细介绍了如何使用 SimDiff 和 SimMerge 配置 Subversion,以进行基于团队的 Simulink 模型开发。

从应用说明:

“本应用笔记概述了如何使用 System Generator 工具执行源代码版本控制和基于团队的设计。这些任务可以使用 MATLAB®Simulink® 软件环境的原生版本控制功能或使用外部源代码来完成虽然本应用笔记重点介绍了 Subversion,这是一个众所周知的免费开源控制系统,但也可以使用其他版本控制软件,例如 CVS、MS Source Safe 和 Clear Case,具体取决于设计环境。本应用笔记还演示了如何使用 Ensoft 的 SimDiff 和 SimMerge 外部软件包以图形方式比较和合并基于模型的设计。”

于 2010-03-17T10:16:30.960 回答
1

虽然我没有具体的经验,但 svn 可以很好地处理非文本文件。你有两个选择:

  1. 如果 mdl 文件还不是二进制文件(自从我使用 Simulink 以来已经有很多年了)使用auto-props 功能或通过使用 svn propset 手动设置属性。它不会尝试合并,并且在发生冲突的签入时将需要操作员采取行动来解决差异。
  2. 将您的存储库设置为锁定存储库,例如 VSS(请不要着火)。这是一个很好的分步指南
于 2009-11-24T19:15:41.920 回答
1

请查看http://www.ikv.de/mediniunite/也许这有助于解决您的问题。通过 medini unite,我们为 Matlab/Simulink/Stateflow 提供了一个有用的 Diff/Merge 工具,它非常易于使用,当然也可以集成到不同的版本控制系统中。

于 2010-01-20T11:15:55.083 回答