PLC版本控制

24

我需要为PLC代码制定一种配置管理流程。

目前,该系统使用RSLogix 5000进行开发。构建产品是一个单体文件,可加载到PLC进行执行并在开发环境中直接进行编辑。对于多个开发人员来说,这已经成为了一个问题。他们互相干扰彼此的更改。

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

我如何协调多个开发人员在PLC上工作所做的更改?


2
你想出了什么解决方案?我们也遇到了同样的问题,如何保持所有程序员的文件都是最新的。 - juicebyjustin
1
@JMooney:我只是一直在摸索。 - Dave
9个回答

7

针对类似PLC的专业版本控制系统,您需要像VersionDog这样的系统。

生产厂家表示:

"特别支持SIMATIC S5、SIMATIC S7、SIMATIC PCS 7、WinCC、WinCC flexible、InTouch、CoDeSys、TwinCAT、Phoenix PC WORX、RSLogix、Schneider Modsoft、Schneider Concept、Schneider Unity、SINUMERIK 840D、Bosch IndraWorks等的智能比较功能。ABB和Kuka的机器人程序以及Microsoft Word、Microsoft Excel和Adobe PDF等办公数据格式也能得到完美支持。

更新: 这里有一张屏幕截图显示了梯形图版本比较。我想这是大多数PLC从业者感兴趣的。我们还用它来安排电子邮件报告,如果PLC脱机和在线应用程序版本匹配,则作为警报发出,提示PLC中有什么被更改但未纳入版本控制服务器的情况."


还有一些YouTube视频展示了versiondog的操作:https://www.youtube.com/watch?v=bfaBcd6y2vQ&list=PLf5juRU8pcLKZgGhl0T-S1Im-OurpZ-A-&index=4 - mihca

7
如果我们谈论的是一个大型二进制文件,那么版本控制系统(集中式或分布式)不是完成该工作的最佳工具。
一个外部参考(例如共享磁盘),其中一个批处理将复制并标记当前 PCL 状态,会更好。
请参阅"跟踪软件历史"

为了避免修订历史记录中的不连续性,必须存储旧版本的程序。
“然而,我们更进一步。使用我们的MDT AutoSave,我们实际上会去调查设备。根据指定的过夜或频率,软件会读取 PLC 中的程序,然后将该信息与上次已知的程序进行比较。版本控制软件将复制新程序并存储,然后将其与上一个程序进行比较。

发布版本控制相当简单。需要的是软件安装,然后进行硬件配置。Perysyn表示:“你需要一个服务器和几周的工程时间,就可以开始了。”然而,他的公司采用了一种“装盒子”的方法,即先安装软件,然后由用户填充内容进行自定义。
话虽如此,当您有多个开发者的多个更改时,您需要一个“集成环境”,在将其推送到实际服务器之前可以进行第一次交付和验证。
另请参见this post

3
谢谢。你确认了我的担忧 :) - Dave

7
我使用Unity Pro,所以可能不适用于其他品牌。
Unity可以导出一个“归档”文件,其中包含完整的PLC程序和IO设置的XML描述。在委托更改后,我创建一个导出文件并将其检入到我的本地Git存储库中。这给我带来了变化的注释历史记录,但没有可视化比较。我总是可以使用UnityDiff进行比较。
此外,请查看链接http://www.mdtsoft.com/

5
RSLogix5000一直禁止多个用户同时打开和编辑同一个.ACD文件。但是,如果多个用户具有相同的.ACD文件,打开它们并都连接到同一个目标控制器,则他们每个人都可以同时在控制器上进行编辑,但前提是他们正在处理不同的例程。如果他们查看其他程序员的例程,则其他人的编辑将自动显示。
请注意,像这样在线工作通常是在PLC运行时完成的,有时还会在目标系统(某种机器)运行时进行。出于加快工作进度的目的,或者在某些情况下因为系统非常复杂,才会采用这种安排。没有人会像这样开发,因为这只是一个调试工具,对于重大更改来说不切实际。
如果一个程序员完成了工作,而另一个程序员尚未完成,则另一个程序员的未完成工作将在第一个程序员保存时保存到其.ACD中。最后保存的人将拥有所有人的工作。
正如本主题中其他人所提到的,使用文件日期是相当合理的。一些公司使用版本控制变量,通常在连接的HMI上显示。其他公司使用单独的文档记录谁做了什么更改。有时版本注释会放置在主要例程的长串注释中。
我们公司使用单独的更改日志,并保留日期存档副本。只有在最极端的情况下才使用多个程序员。通常,总是有人被指定为维护离线文件完整性,通常是工作时间最长或项目经理。
需要注意的是,在RSLogix5000 v21之前,例程注释不会从一个用户传递到另一个用户,因为以前的版本不会将注释存储在控制器上。
所有这些都说了,你可能正在尝试管理离线开发。我没有看到任何复杂的方法来做到这一点。通常,程序员单独编写所需的例程,而项目经理将它们组装成一个单一的项目。我见过的最干净的方法是,项目经理将创建具有全局功能的体系结构,并将例程工作分配给其他人,给他们一个.ACD副本进行操作。他们返回带有更改的.ACD,然后项目经理将其例程复制并粘贴到“主”项目中。

你最后一段所说的正是我们正在做的事情。作为一个传统软件背景下的人,我希望能够得到更多,但正如在这里展示的(并由那个程序中的PLC开发人员确认),这已经是最好的了。同时,欢迎来到StackOverflow。 - Dave

5
关于RSLogix5000,我见过开发人员使用仿真PLC进行在线更改,并将最终产品与所有注释(因为它们不包含在PLC中)一起编写,然后进行启用。存在无法在线完成的更改问题,例如AOIs。有工具可防止两个人同时在线编辑相同的逻辑,并占据部分拥有权。备份可以以上传形式完成,但没有任何追踪更改的方法。
这是一个混乱的问题,如果你在维护系统,则会更加混乱,因为你需要一个.ACD文件可以在线使用,除非你以某种方式使用RSLogix比较工具进行diff,否则你只会看到难以理解的机器代码,如“+|Éû³´¬ÙÆW×晵‚>Ù”。
我见过最常见的修订控制方式(遗憾的是)只是保存最新文件,然后复制并将当前日期添加到文件名中,就像推荐的control.com帖子所描述的那样。

谢谢回复。这不再是我的问题了,但我仍然对可能的解决方案非常感兴趣。我之前在PowerBuilder中也遇到过这个问题,而且它同样让人头痛。 - Dave

4

一个简单的方法是对.l5k文件进行文本差异比较,这样你就可以轻松地看到开发人员是否在他们的范围之外搞乱了文件的某个部分。


是的,那基本上就是我们所困扰的。 - Dave
@Dave:这与一般的软件开发有何不同?您可能会有许多不同开发人员进行的修改;您需要的是典型的配置管理工具合并过程,最新检查的人必须仔细地合并他的更改。... 您可能需要查看高级的“diff”工具,例如我们的http://www.semanticdesigns.com/Products/SmartDifferencer工具,它是布局不敏感的。我们有可以与此类工具一起使用的L5K前端。 - Ira Baxter
@Ira:在一般的开发中,源代码被分成许多小文件,而不是一个庞大的文件。 - Dave
@Dave: ... 你为什么要这样做?如果每次都是以相同的方式拆分,那么将每个片段视为开发文件。由于您只有代码片段,因此我们的SmartDiff工具无法帮助您,因此您将被困在常规diff中。 - Ira Baxter
@Dave:抱歉,我最初没有理解你的意思:“在正常开发中,通常会有很多文件(小文件?也许),而且程序员倾向于在不同的文件中工作。”是的,但有时他们会在同一个文件中工作,这就会出现合并问题;这是正常现象。这与你的情况并没有什么不同。你需要一个合并工具,只不过你会比典型的开发流程更频繁地使用它。 - Ira Baxter

4
这是一个非常好的问题,它真的取决于你想要做什么。 如果你只使用Rockwell设备,可能有必要看一下他们的解决方案,我认为它被称为FactoryTalk AssetCentre。 目前,我正在考虑使用Canonical的Bazaar。 VonC指出的一件事是,能够查询PLC的软件肯定是一个加分项,但在我看来不是必需的,但它确实有很大帮助。
我是否正确地理解了你的问题,并且你有多个开发人员同时处理同一PLC代码?这是一个可怕的想法,但我知道有时需要这样做,Siemens PLC更容易与多个开发人员编程,但我会指派一个人来整合和测试所有更改,然后再提交给PLC。任何CVS系统都可以让您为每个开发人员创建分支,但如何让他们整合他们的更改是百万美元的问题。
巴特。

我不是PLC编码者,所以无法确定他们是否正在处理相同的代码,即同时在Foo.java上操作,但他们确实试图独立提取Baz.jar中的Foo.java和Bar.java,进行各自的更改,然后独立地检查Baz.jar。这个比喻有意义吗? - Dave
1
这是与PowerBuilder和*.pbl文件看到的完全相同的问题。 - Dave
抱歉,我应该澄清一下我的意思,我是指在同一个文件中但不同的代码部分中工作。如果您正在使用RSLogix编程PLC,则只有一个文件(.ACD),但此文件包含PLC配置、不同例程的代码等。如果一个程序员更改了例程#1,另一个程序员更改了例程#2,他们都会返回file.ACD,然后需要有人合并这些更改。 - Bart
好的。这是典型的软件开发:如果两个人更改同一个文件,就需要进行合并。讨论的问题唯一特殊的地方在于合并经常发生。好的,找一个好的合并工具。还有其他问题吗? - Ira Baxter
1
Ira,我完全同意你的观点,但PLC/SCADA程序员可用的工具与我所见过的其他开发系统的水平不相上下。据我所知,您唯一拥有的合并工具就是您自己,Rockwell确实拥有一个不错的比较工具。 - Bart
有不错的合并工具可以处理任意文本,包括ACD文件。请参见https://dev59.com/rXRB5IYBdhLWcg3wn4UL。我同意它们在IDE中的集成不太好,这确实很麻烦。但这只是程序性的疼痛。这些工具是存在的。顺便说一下,我的公司构建了智能差异工具,并且过去已经处理过Rockwell文件。请参见http://www.semanticdesigns.com/Products/SmartDifferencer。 - Ira Baxter

3

我刚刚在Stack Exchange上看到了这个问题:有没有关于梯形图程序的源代码控制的现实/有用解决方案。与其只提供一个链接,我会在这里复制我的答案:

实际上有一个通用的解决方案——来自GE-IP(通用电气工业产品)。请查看Proficy Change Management。该产品从PLC控制系统的角度进行版本控制,而不是从纯文件版本控制的角度进行控制,它作为一个放置在VCS之上的层工作(最初的VCS是Visual SourceSafe),并处理权限管理、报告和检入检出。

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

完整披露,我曾经为一家销售和安装PCM的公司工作过(但那是7年前的事情)。所以如果你问我当时情况如何,我很可能会告诉你它们哪里做得不对!


-1
在我的公司,我们刚刚开始使用Copia.io进行试用。你可以去看看。我们的第一次测试看起来非常有前途!它为多个PLC平台(Rockwell、Siemens、Codesys)提供了分支、合并、阶梯差异等功能。
顺便说一下,我在一家制造机器的公司工作,我们正在寻找类似于version-dog的解决方案,但具有更强大的协作和差异能力。我曾经在以前的公司使用过Mercurial、Git、Tortoise(虽然不是针对PLC)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接