要想学好PLC,首先要搞清楚PLC编程语言和平台的演变发展!
▎本文章由彭瑜撰文,如需转载,请在公众号后台留言
上世纪90年代美国密歇根大学机械学院有位博士写了一篇评述自PLC问世以来出现的四五十种用于PLC编程语言的文章,时至,除了IEC61131-3所规范的5种语言应用广泛,以及GRAFCET作为IEC60848和在美国还有一种流程图(flowchart)语言还有应用之外,其余的几乎荡然无存。为了较好地了解这一发展过程,我们不妨回顾一下图1所描述的进程。J. H. Christensen是 IEC61131-3标准工作组的主要技术负责人,也是IEC61499标准工作组的任主席,他见证了PLC编程语言及其的开发过程。他在很多年前给出的这张图一目了然地表达了PLC标准和编程语言标准的关键发展历程:1970年美国的电器制造商协会NEMA成立了可编程控制器委员会,开始制定PLC的标准。1977年法国和德国分别推出PLC编程语言的标准GRAFCET和Din 40719功能图。1978年NEMA ICS-3-304可编程控制器标准问世,是PLC电磁兼容性标准早的来源。1980年德国的可编程控制器标准Din 19 239公布。1992年IEC1131-3可编程控制器编程语言标准终文本完成,1994年更名为IEC61131-3。
图1PLC编程语言标准的发展历程(1970-1996)
(图源:James H. Christensen)
在20世纪70年代早期,美国率先用可编程逻辑控制器(PLC)替代硬接线继电器逻辑电路。梯形图(LD)编程的发展提高了行业的接受度,因为图形化程序图允许受过很少培训或没有受过LD编程培训的电工只要遵循每个梯级的逻辑流程,就可以像电气控制原理图那样易于理解,还可以借此用于故障排除。在倡导和推广梯形图编程语言上,被誉为PLC之父的Dick Morley同样也是功不可没。那时,程序设计人员通常会手工绘制梯形逻辑图,然后将梯形图转换成一个包含指令和变量的列表。将命令输入到PLC内存中的实际编程语言称为指令表(IL)或语句表(ST L),IL语言与PC编程中使用的汇编语言非常相似。接着控制程序将通过数字键盘输入控制器的内存。由此可见,PLC的硬件一诞生,其编程语言和编程方法也随之款款而行。
20世纪70年代后期,市场上出现了价格低廉的微处理器,个人电脑(PC)应运而生。PLC制造商也利用这些微处理器来开发图形编程设备。这些设备使用常开和常闭触点、输出线圈、计时器、计数器和其他数据操作和移动指令的图形表示,把梯形逻辑程序输入PLC。那时的编程终端的用途单一,只能与同一制造商的PLC控制器配套使用,而且大中小型的PLC都有其对应的手持式编程器。随后也出现了一种专用的图形式编程终端,配有键盘和软盘驱动器,可通过不同的编程口适配器对大中小型的PLC进行编程。与现代在的笔记本电脑相比,那时的编程终端体积大,也很昂贵,其价格甚至是当时PC机的好几倍。
在20世纪80年代,出现了在PC机上运行的PLC的编程软件。有趣的是,这些软件大部分是由美国的Taylor software、ICOM等第三方公司推出的,而不是PLC制造商自己研发的。之后那些开发PLC编程软件的公司有的被PLC制造商收购,改变了重点,不再是为市场中的各色PLC提供编程软件,而是只为一家有实力的PLC厂商服务;有的倒闭了,不再以原来的形式存在。但是许多来自旧软件的原始概念和方法仍然存在于当前的产品中。
一些原始的PLC软件编程包可以与多个硬件平台一起工作,从而在不同的制造商之间形成一致的外观和感觉。这个早期基于DOS操作系统的软件的文档和报告功能远远优于昂贵的OEM编程终端所提供的功能。PLC制造商认识到第三方软件产品的成功,并开始开发和销售具有竞争力的产品。结果,这些第三方软件供应商多次易手。Taylor Software被Total Control Products收购,后者后来被GE Fanuc收购。施耐德电气还收购了包括由Taylor Software 开发的编程软件包在内的Modicon PLC全部硬件和软件资产。ICOM编程软件成为罗克韦尔软件的一部分。
除了相对廉价的个人电脑和为个人电脑编写的PLC编程软件的出现外,20世纪80年代出现了另一个重大发展,也是PLC历史上重要的里程碑之一,即1982年国际电工委员启动了IEC61131-3规范的开发。由于在美国、欧洲和日本等PLC编程语言呈现多样化,如美国流行梯形逻辑图语言、德国偏爱功能图语言、法国的PLC编程语言标准推荐GRAFCET(SFC顺序功能图的前身),以及日本常用指令表语言等,在制定标准的过程中需要获得众多PLC生产商的支持,就必须采取求同存异、相互补充,而不是相互排斥的原则。显然折衷和平衡是一个比较漫长的协商过程,但终还是得到令人满意、各方都能接受的结果。为了弥补传统PLC在复杂数据和复杂控制算法编程处理结构化缺失的短板,还专门开发了一种类似PASCAL语言的结构化文本的语言。在制定编程语言的过程中,大量的吸取现代软件概念(例如结构化、模块化、程序的可复用性等)和软件工程技术的方法(例如软件统一开发过程、面向对象的方法等),也有力的推动了标准编程语言的发展。从标准制定的启动到1993年作为IEC1131国际可编程控制器标准正式推出,历时11年。,大多数主要PLC制造商都在提供符合IEC61131-3规范的软件开发平台。而且IEC61131-3是迄今为止工业界唯一的工业控制编程语言标准,还被DCS、SCADA、PC控制(软PLC)等系统广泛采纳,成为事实上的工业控制编程语言的通用标准。随着分布式控制系统的强烈需求,在2005年IEC又开发了IEC61499,作为IEC61131-3的补充和扩展,于今也活跃在开放自动化的前沿,这是后话了。
正如IEC61131-3标准所指出的,它的部分内容是“为每一种常用的编程语言定义主要的应用领域、语法和语义规则,简单但完整的编程元素的基本集合,适用的测试和方法,制造商可以扩展或调整这些基本集,以实现他们自己的可编程控制器。”同时为了兼容,一个PLC编程包必须至少支持LD(梯形图语言)、ST(结构文本语言)、FBD(功能块图语言)、IL(指令表语言)和SFC(顺序功能图语言)这五种语言中的一种。
IEC61131-3标准非常重要,因为它为符合该标准的所有软件产品带来了一致性。例如,一个标准IEC定义的函数在一个品牌为x的PLC运行的结果与在另一个品牌y的PLC是相同的。这种标准化一个有价值的结果是,无论什么集成开发环境(IDE),只要有相同的定义输入和输出,函数和功能块看起来都是一样的。因此,工程师或维护人员可以快速理解任何制造商软件的逻辑和程序流程。
IEC61131-3定义了标准数据类型、命名约定、程序流程和其他各种编程元素。当PLC的OEM声明其编程软件符合IEC61131-3时,这通常意味着该软件符合该标准的部分内容。
PLC制造商和用户也可以添加自定义扩展,功能块和数据类型的标准。这实际上造成即使这些平台符合IEC61131-3标准,项目在平台之间的无缝移植也不太现实。2019年在PLCopen开发的XML的IEC61131-3方案(schemes)的基础上推出了IEC61131-10,定义了XML文件交换格式,为跨平台转移项目提供了可能。
目前支持IEC61131-3的编程平台有:德国的CoDeSys和Multiprog;美国的ISaGRAF和COPA-DATA公司的Zenon Logic;意大利Axel公司的LogicLab等。国内近些年也有代码完全自主化的北京奥特思技术有限公司的商品化软件AnyControl问世。
自1993年颁布版,IEC61131-3标准于2003年颁布第二版,2013年颁布第三版。基本上是每十年发布一个新的修订版本。
编程语言不可能是一成不变的,随着科技和工业的发展它会不断改善和进步。不过作为国际工业标准,需要有一定年限的稳定期。这两者之间必须有一个平衡。为适应数字控制技术的发展,使编程语言能够适用于PLC、DCS、FCS、运动控制、机器安全及SCADA等工业控制领域的应用,特别是智能制造、工业4.0的大力推进,需要不断努力和完善有关编程语言标准。
第三版是第二版的改进和扩展。考虑到现代编程环境在很多情况下都涉及到面向对象编程,包括Python、c++、Delphi、Java等,第三版的重要改进是面向对象特性的集成,包括类以及方法和接口、功能块的面向对象编程(OOP)特性和命名空间等。这些使编程语言进一步完善了功能和结构等概念,能够让PLC代充分吸取多年来在采用别面向对象语言的软件开发中经过验证的概念和佳实践。正是这些概念产生了更易读、更模块化、终更可维护的代码。此外,通过让PLC软件的开发变得更加现代和类似于上述高度分布式语言,可能会吸引一大批软件工程师进入PLC开发领域,终使PLC代码可以在企业软件组合中占有重要地位。
与第2版相比,这些OOP扩展有一些更改或新的定义。例如,一个原来定义为函数、功能块或程序的程序组织单元,被扩展为包括一个新的类别“类”。功能块和类可以包含方法。此外,它们是可继承的,从而分别引出基型、导出功能块和导出类的概念。
下面列出了重要的新定义:
目前IEC61131-3第四版的修订工作正在进行中。一个可能较大的变化是如何规范与IEC61499的互补和结合,以适应工业技术发展对编程语言的要求。
为了更好的满足工业市场的要求,继PLC编程软件广泛应用以后,推出了自动化套件或统一的综合开发平台,为套件/平台所支持的软件产品提供一个共享的开发接口。这样工业自动化的用户可以在一个集成开发环境下对多个产品系列(如PLC、HMI和运动控制器等)的应用软件进行开发,而无需像以前那样,对同一个控制对象的不同控制功能要启动不同的软件包才能完成应用软件的编制或组态。
不过有些自动化套件包很少或没有程序之间的集成,只不过是启动独立软件的包装器wrapper)或适配器(adapter),提供对异构对象或服务对象的透明访问,将请求或所要求的响应从一个交互接口转换成另一个接口,但在一个软件包中输入的每个数据点都需要从个程序复制或导出/导入到另一个程序中。真正集成的自动化套件软件作为一个单独的包开发,可以显著减少程序编制人员的工作量。这种集成开发环境从定义PLC项目开始,程序员可以添加其他要支持的设备(如伺服控制器或安全控制器),软件自动创建所添加设备采用的PLC生成的标签,以及所添加设备自行生成的标签。在创建新标签时,软件会自动创建通信路径和数据类型定义。
应该注意的是,如果使用随PLC硬件产品配套的软件包是不支持其他制造商的产品。当制造商停止支持某些设备的单个软件时,需要购买高价的软件包来支持廉价的控制产品。
也有一类相对通用的自动化套件,支持工业PC实现软PLC和嵌入式系统构建客制化的PLC。譬如意大利的Axel套件(Axel Automation Suite)包括一个完整的软件产品系列:LogicLab(PLC的开发环境,支持IEC61131-3标准的5种语言和C语言),LogicView(用于工业PC的HMI开发环境),PageLab(用于嵌入式系统的HMI开发环境),SoftTune全客制化的多设备组态工具,RunTimes Components(各种开发好供用户选用的实时操作系统、现场总线、OPC UA等组件,可加载到客户的设备程序中),SoftScope(全客制化的供调试用的软件示波器)等。新的Axel自动化套件3.2.8已投放市场,而且增添了一些新的性能,如开源的工业OSCAT算法库,PLCopen Motion库,以及MQTT引擎的实现等。
自动化软件在不断发展。它当然比早期的在DOS操作系统环境下的软件产品做得更好更多。现在,当自动化工程师熟悉了一个品牌自动化套件或开发平台,即使转换到另一个品牌也可以很快适应,而不用经历一个较长的学习过程。这也可看成是标准化的一个直接作用。
IEC61131-3推动PLC在软件方面的进步,体现在:
编程的标准化,促进了工控编程从语言到工具性平台的开放;同时为工控程序在不同硬件平台间的移植创造了前提条件。
为控制系统创立统一的工程应用软环境,打下坚实基础。从应用工程程序设计的管理,到提供逻辑和顺序控制、过程控制、批量控制、运动控制、传动、人机界面等统一的设计平台,以至于将调试、投运和投产后的维护等,统统纳入统一的工程平台。
应用程序的自动生成工具和仿真工具。
为适应工业4.0和智能制造的软件需求,IEC61131-3的第3版将面向对象的编程OOP纳入标准。
之前已开发了许多为PLC控制系统工程设计、编程和运行,以至于管理的工具性软件。其中包括PLC编程软件包、人机界面和SCADA软件包、程序调试仿真软件,以及自动化维护软件等等。尽管这些软件都是为具体的工程服务的,但是,即使在对同一对象进行控制设计和监控,它们却都互不关联。不同的控制需求(如逻辑和顺序控制、运动控制、过程控制等)要用不同的开发软件;在不同的工作阶段(如编程组态、仿真调试、维护管理等)又要用不同的软件。而且往往在使用不同的软件时必需自行定义标签变量(tags),而定义变量的规则又往往存在较大的随意性,导致对同一物理对象的相同控制变量不能做到统一的、一致的命名。缺乏公用的数据库和统一的变量命名规则,造成在使用不同软件时不得不进行繁琐的变量转换,重复劳动导致人力资源成本高、效率低下。
编程语言标准的推广工作也是一项十分重要的工作,必须在一个非赢利的国际组织的全面规划和安排下,积极推广,才能使标准深入到各种应用中,充分发挥其开功能。PLCopen就是这样一个矢志不移的国际组织。
其主要的成果之一就是构筑工控编程软件包的开发环境;同时,还在这些编程系统的基础上进一步发展为统一工程平台,作了许多基础性的开创工作;开展了编程系统符合IEC标准的认证工作;制定了运动控制功能库,在IEC的开发环境里加入了运动控制技术,将PLC和运动控制的功能组合在控制软件的编制中;为实现IEC61131-3编程与其它环节间的数据交换,规范了XML格式作为数据交换的接口,2019年这个规范被IEC进一步开发为IEC61131-10,对PLC程序的交互采用形式化描述的方法,使符合标准的平台不但在编程语言保持一致,而且在标准语言基础上编制的程序也可能跨平台实现共享,这样便完成了对PLC编程语言层面的关注上升为对描述层面的关注;定义了在IEC61131-3的开发环境下涉及安全的规范;公布了《PLC性能的基准测试方法》,通过所定义的测试概要,以一种客观的方式,为寻求评估不同PLC平台真实性能提供了规范化的方法。
近些年来PLCopen又陆续推出若干技术文档,如《代码编制指南》(coding Guideline),《创建符合PLCopen标准的程序库》(Creating PLCopen Compliant Libraries),《用SFC进行结构化》(Structuring with SFC -does & donts),《面向对象编程指南》(Guidelines for Object Oriented Programming)等。
在《面相对象编程指南》中展示了如何将“经典”程序转换为面向对象程序的方法,指出:当以面向对象的方式设计应用程序和库时,要区分模块和命令。模块代表自动化应用程序的一部分,包括它们的软件功能,也可以根据需要分层嵌套。例如机器的角色、传感器或组件组合可以用“模块”在代码中表示。每个模块都实现一个通用的IModule接口。一些模块还实现了一个更专门的接口。例如,提供轴功能的模块正在实现一个IAxis接口。命令表示模块的具体操作。它被分配给一个模块或一组实现相同接口的模块。每个命令将实现一个通用的iccommand接口,并将遵循符合PLCopen功能块的设计准则。与轴相关的命令提供一个IAxis类型的输入,以获取它们将操作的相关轴实例的引用。有了这种结构,就有可能将模块和命令在面向对象编程时和谐地结合在一起。
长期以来PLCopen国际组织还注重于许多化组织和基金会(譬如ISA、OPC基金会等)合作,开发了基础性的规范,以建立一种开放标准的生态系统(见图2)。这些工作都为为智能制造和工业4.0的应用和发展,做了好些先导性的探索和准备,从而打下了坚实的基础。譬如与OPC基金会合作开发的:IEC61131-3的信息模型(2010.5发布),IEC61131-3 的OPC UA Client FB客户端功能块(2015.3发布),IEC61131-3的OPC UA Server FB服务端功能块(2015.3发布)。这些规范经美国ISA属下的OMAC的二次开发,已经成功的应用于专为包装行业系列标准PackML中,大大简化了包装机械与上位生产管理系统的通信。此外,PLCopen还积极与参与美国开放集团(The Open Group)经管的开放流程自动化论坛OPAF,为新一代的开放自动化系统制定系 列标准O-PAS做出了应有的努力(图3)。新一代开放自动化系统的显著特征是彻底摆脱了原有DCS和PLC硬件和软件捆绑的枷锁,采用行之有效的工业自动化领域的和IT领域的实际上的标准和规范,构建具有互操作性、内生信息安全、软硬解耦的分布式控制系统。
图2 PLCopen与ISA、OPC基金会合作开发智能制造基础标准
工业互联网、工业物联网、工业4.0和智慧工厂的应用,如今正在快速推进和实现。
开放的PLCopen规范和标准改善了自动化控制系统的设备可互操作性;运用基于IEC61131-3的OPC UA Server FB服务端功能块,将简化了由传智能感器、控制器与企业管理系统和生产调度执行系统通信,与云端通信以及与互联网通信。
图3开放自动化趋势正在重塑DCS和PLC
在配合工业4.0的参考架构模型(RAMI4.0)方面,PLCopen认为它此前开发的各种规范都很适配RAMI4.0的要求,需要做的是开发PLCopen相关技术功能如何在资产管理壳AAS实现。例如在图4中表述的机械装置AAS,其中运用PLC控制的子模型固件,就是在应用PLCopen制定的各种规范的基础上由系统集成商按照机械装置的技术要求和工艺要求编制的应用程序。目前在欧洲工业界普遍接受AAS是工业资产的一种标准化的数字孪生的理念。为了能够存取AAS中的这些功能,并能提供给在控制器中运行的应用程序使用,PLCopen定义了一组功能块。这样,程序编制人员便可以用一种协调的方式存取相关的信息。此外,PLCopen正在编写一份文件,通过PLCopen OPC UA组态文件展示PLCopen和PackML的集成。遵循应用程序开发的基本规则,以一种协调的方式与机器进行接口,并基于OMAC PackML状态机、模式和Packtags(PackML定义的交换数据的标签)集成生产线中的机器,由于采用标准化的方式集成,操作将变得很容易,有手到擒来的功效。通过结合OPC UA浏览功能,用户甚至可以搜索新的功能,并更容易地将它们添加为新的应用程序的基础(图5)。
图4 PLCopen正在开发PLCoen相关技术功能的AAS实现