【问题标题】:PLC Version ControlPLC版本控制
【发布时间】:2011-05-12 02:59:25
【问题描述】:

我需要为 PLC 代码提出一个 CM 流程。

目前,该系统是使用 RSLogix 5000 开发的。构建产品是一个整体文件,可以加载到 PLC 上执行并直接在开发环境中编辑。对于多个开发人员,这已成为一个问题。他们正在踩着彼此的变化。

打个比方,就好像在进行 Java 开发时,编辑和保存源代码的唯一方法是将 *.jar 文件加载到您的 IDE 中,进行更改,然后将其保存回jar 文件。这不太理想。

如何协调使用 PLC 的多个开发人员之间的更改?

【问题讨论】:

  • 你想出了什么样的解决方案?我们在更新所有程序员文件时遇到了同样的问题。
  • @JMooney:我一直在蒙混过关。

标签: version-control plc


【解决方案1】:

我使用 Unity Pro,所以这可能不适用于其他品牌。

Unity 可以导出一个“归档”文件,它是一个 XML 文件,它完整地描述了 PLC 程序和 IO 设置。调试更改后,我创建了一个导出并将其签入到我的本地 Git 存储库中。这让我得到了一个带注释的变化历史,但没有视觉比较。我总是可以使用 UnityDiff 进行比较。

也请查看http://www.mdtsoft.com/

【讨论】:

    【解决方案2】:

    您需要专门的 PLC 版本控制系统,例如 VersionDog

    来自制造商:

    “对 SIMATIC S5、SIMATIC S7 的 Smart Compares 的特殊支持, SIMATIC PCS 7、WinCC、WinCC flexible、InTouch、CoDeSys、TwinCAT、 Phoenix PC WORX、RSLogix、施耐德 Modsoft、施耐德概念、 施耐德 Unity、SINUMERIK 840D、博世 IndraWorks 等。还有机器人 来自 ABB 和 Kuka 的程序以及与办公室相关的数据格式,例如 完美支持 Microsoft Word、Microsoft Excel 和 Adob​​e PDF 通过版本狗。

    更新:这是显示 ladder version compare 的屏幕截图。我想这是大多数 PLC 人员感兴趣的内容。如果 PLC 离线和在线应用程序版本匹配,我们还使用它来安排电子邮件报告,作为 PLC 中的某些内容已更改但未放入版本控制服务器的警报。

    【讨论】:

    • YouTube 上也有一些视频展示了 versiondog 的作用:youtube.com/…
    【解决方案3】:

    如果我们谈论的是一个大的二进制文件,那么 VCS(集中式或分散式)并不是完成这项工作的最佳工具。
    批处理将复制和标记当前 PCL 状态的外部参考(例如共享磁盘)更好。
    见“Tracking Software History

    为了避免修订历史记录的不连续性,必须存储旧版本的程序。
    “不过,我们更进一步。使用我们的MDT AutoSave,我们实际上出去询问设备。在一夜之间或以任何指定的频率,软件读取 PLC 中的程序,然后将该信息与最后一个已知程序进行比较。版本控制软件将复制新程序并存储它,然后[然后]将其与上一个程序进行比较。

    启动版本控制相当简单。需要先安装软件,然后再进行硬件配置。 “你需要一台服务器和几周的工程设计,一切顺利,”Perysyn 说。然而,他的公司使用“收缩包装方法”,包括安装软件,然后由用户填写空白进行定制。

    话虽如此,当您有来自多个开发人员的多项更改时,您需要一个集成环境,以便在将其推送到实际服务器之前完成并验证第一次交付。

    另见this post

    【讨论】:

    • 谢谢。你已经证实了我的恐惧:)
    【解决方案4】:

    特别是关于 RSLogix5000,我看到开发人员使用仿真 PLC 并在线进行更改。开发完成后的最终产品将与所有 cmets 放在一起(因为它们不包含在 PLC 中),然后进行调试。存在无法在线完成的更改的问题,例如 AOI。有一些工具可以阻止两个人同时在线编辑相同的逻辑并获得部分的所有权。可以以上传的形式进行备份,但无法跟踪更改。

    这是一个混乱的问题,当您需要一个可以在线使用的 .ACD 来维护系统时,它仍然更加混乱,因为除非您以某种方式使用 RSLogix 比较工具进行比较,否则您只会看到不可读的机器代码比如 "+|Éû³´¬ÙÆW׿™µ‚>Ù,"

    我见过的最常见的修订控制(遗憾的是)只是保存最新文件,然后复制一份并将当前日期添加到文件名中,就像推荐的 control.com 帖子所述。

    【讨论】:

    • 感谢您的回复。这不再是我的问题,但我仍然对可能的解决方案非常感兴趣。我以前用 PowerBuilder 也遇到过这个问题,而且很丑。
    【解决方案5】:

    这是一个非常好的问题,它真的取决于你想要它做什么。 如果您只使用 Rockwell 设备,查看他们的解决方案可能会有所帮助,我认为它称为 FactoryTalk AssetCentre。 目前我正在考虑使用 Canonical 的 Bazaar。 VonC 指出的一件事是,一个可以询问 PLC 的软件是一个明确的优势,在我看来不是必须的,但它确实有帮助。

    我是否正确阅读了您的问题,并且您有多个开发人员同时处理相同的 PLC 代码?这是一个可怕的想法,但我知道它有时需要发生,西门子 PLC 与多个开发人员一起编程会更容易一些,但我会指派一个人在提交到 PLC 之前整合和测试所有更改。任何 CVS 系统都可以让您为每个开发人员创建分支,但如何让他们整合他们的更改是百万美元的问题。

    巴特。

    【讨论】:

    • 我不是 PLC 编码员,所以我不能肯定地说他们正在处理 same 代码,即两者同时在 Foo.java 中工作时间,但他们肯定会尝试从 Baz.jar 中独立地提取 Foo.java 和 Bar.java,进行各自的更改,然后独立地签入 Baz.jar。这个类比有意义吗?
    • 这与您在 PowerBuilder 和 *.pbl 文件中看到的问题完全相同。
    • 对不起,我应该澄清一下,我的意思是在同一个文件中工作,但在代码的不同部分工作。如果您使用 RSLogix 对 PLC 进行编程,则它有一个文件 (.ACD),但该文件包含 PLC 配置、不同例程的代码等。如果一个程序员更改例程 #1 而另一个程序员更改例程 #2,他们都将返回 file.ACD然后有人需要合并这些。
    • 对。这是典型的软件开发:如果两个人更改同一个文件,就会有人进行合并。正在讨论的问题的唯一特别之处是合并经常发生。好的,找一个好的合并工具。还有其他问题吗?
    • Ira,我完全同意你的观点,但 PLC/SCADA 程序员可用的工具与我在其他开发系统中看到的水平不同。据我所知,您拥有的唯一合并工具就是您自己,Rockwell 确实有一个下降比较工具。
    【解决方案6】:

    一个简单的做法是对 .l5k 文件进行文本比较,这样您就可以轻松查看开发人员是否在处理超出其范围的文件部分。

    【讨论】:

    • 是的,这就是我们所坚持的。
    • @Dave:这与一般软件开发有何不同?您可能有许多由不同开发人员进行的修改;您需要的是典型的配置管理工具合并过程,在该过程中,要检查的最新人必须仔细合并他的更改。 ...您可能想查看高级“差异”工具,例如我们的 semanticdesigns.com/Products/SmartDifferencer 工具,它对布局不敏感。我们有可以与此类工具一起使用的 L5K 前端。
    • @Ira:在一般开发中,源代码被分成许多小文件,而不是一个单一的文件。
    • @Dave: ...你为什么要这样做?如果每次都以相同的方式拆分,则将每个片段视为一个开发文件。我们的 SmartDiff 工具将无法为您提供帮助,因为您只有代码片段,因此您将被常规差异所困。
    • @Dave:对不起,我一开始没理解你的意思:“在正常的开发中,通常有很多文件(小?也许)并且编码人员倾向于在单独的文件中工作。”是的,但有时它们在同一个文件中工作,然后出现合并问题;这个是正常的。这和你的情况没有什么不同。你需要一个合并工具,你只会比典型的开发过程更频繁地使用它。
    【解决方案7】:

    RSLogix5000 一直禁止多个用户同时在同一个 .ACD 上打开和编辑。但是,如果多个用户拥有相同的 .ACD 文件,打开它们,并且都连接到同一个目标控制器,他们每个人都可以同时在控制器上进行编辑,但前提是他们正在处理不同的例程。如果他们要查看其他程序员的例程,其他人的编辑会自动出现。

    请注意,像这样的在线工作通常是在 PLC 运行的情况下完成的,即使有时目标系统(某种机器)也在运行。这种安排的目的是为了更快地完成工作,或者在某些情况下是因为系统庞大。没有人像这样开发,因为它实际上是一种调试工具,对于重大更改是不切实际的。

    如果一个程序员完成,而另一个没有完成,另一个程序员未完成的工作将在他们保存时保存到第一个程序员的 .ACD 中。最后保存的人将拥有每个人的工作。

    就像其他人在这个帖子中提到的那样,使用文件日期是相当合理的。一些公司使用通常显示在连接的 HMI 上的版本控制变量。其他公司使用单独的文档来记录更改的人员和内容。有时版本注释会放在主程序的冗长梯级注释中。

    我的公司使用单独的更改日志,并保留有日期的存档副本。多个程序员只在最极端的情况下使用。始终指定某人来维护脱机文件的完整性,通常是工作时间最长的人或项目经理。

    需要注意的是,在 RSLogix5000 v21 之前,梯级 cmets 不会从一个用户传送到另一个用户,因为以前的版本没有在控制器上存储 cmets。

    综上所述,您可能正在尝试管理离线开发。我还没有看到任何复杂的方法。通常程序员单独编写所需的例程,项目经理会将它们组装成一个项目。我见过的最简洁的方法是项目经理将创建一个具有全局功能的架构,并将日常工作分配给其他人,给他们一份 .ACD 的副本以供使用。他们返回带有更改的 .ACD,项目经理将他们的例程复制并粘贴到“主”项目中。

    【讨论】:

    • 你的最后一段是我们正在做的。来自传统的软件背景,我希望能得到更多,但正如这里所示(并由该程序的 PLC 开发人员确认),这已经是最好的了。另外,欢迎使用 *。
    【解决方案8】:

    我刚刚从堆栈交换的链接中看到了这个问题:Are There Realistic/Useful Solutions for Source Control for Ladder Logic Programs。而不是只有一个链接的答案,我会在这里欺骗我的答案:

    实际上有一个固定的解决方案 - 来自所有地方的 GE-IP。查看 Proficy 变更管理。该产品从 PLC 控制系统的角度进行版本控制,而不是从文件的角度进行纯粹的版本控制 - 它作为位于 VCS 之上的层工作(可怕的部分是这个 VCS 最初是 Visual SourceSafe)并处理权限管理、报告和签出/签入。

    虽然该产品来自 GE-IP,但它旨在支持开箱即用的各种 PLC 和 HMI 系统。

    完全披露,我曾在一家销售和安装 PCM 的公司工作(但那是 7 年前)。因此,如果您问我当时的情况如何,那么我很可能会告诉您哪里出了问题!

    【讨论】: