工业自动化编程语言演变的方向

工业自动控制系统所采用的编程语言不可能一成不变,总是环绕着服务对象的需求和应用场景的变化在演进。从上世纪的90年代至今,IEC 61131-3作为PLC、DCS和软PLC事实上的国际工控编程语言标准,已是不争的现实;IEC 61499作为IEC 61131-3的重要补充,尤其是作为分布式控制系统的建模语言标准,正在紧锣密鼓地进入工控领域。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
 - 文章信息 - 

本文作者彭瑜,毕业于清华大学热能工程系,教授级高级工程师,PLCopen中国组织名誉主席,中国自动化学会仪表和装置专委会名誉常务委员,国务院特殊津贴获得者;长期从事工业生产过程自控系统的设计、现场总线和工业通信在控制系统的应用研究工作。本文由「工控百家谈」原创首发。(本文在完成初稿之后征求了一些同行和朋友的意见,其中穆海华博士、丁研架构师、陈冰老师为完善和提高本文的质量给予了有益的帮助。作者诚挚地表示感谢。)
 

 

不过面对智能制造、工业互联网和工业物联网的迫切需求,以及IT/OT融合、工业大数据分析、人工智能等技术方法的深入落地,采用什么编程语言这一话题的讨论,近两年来在海外尤其北美自动化专业网站和杂志中屡见不鲜。归结起来核心的两个问题是:(1)IT领域的编程语言和OT领域的编程语言在工业自动化领域中如何体现融合;(2)IT领域的编程语言是否可能替代OT领域的编程语言。

 

问题从何而来?

 我们先看问题是怎么提出的:

(1)最近在美国的一次技术会议上,ISA下属automation.com网站的资深编辑与Arlen Nipper(Cirrus Link Solutions的首席技术官和MQTT的共同发明者)交谈时,问及自动控制中编程语言的演变,请他对自动化和控制工程师目前使用的编程语言进行排序。他指出Python、Java和C系列语言(C、C++和C#)是前三名。但他又澄清说,它们的流行并不以任何方式排斥其他编程语言。由于语法相似,Python和Java被认为是C语言家族的一部分, C语言家族还包括Julia、Perl和许多其他语言。

(2)艾默生的Darrell Halterman在去年6月的《InTech》杂志上发表了一篇题为《面向边缘的未来控制编程》的文章,指出:尽管可编程自动化控制器(PAC)的专用实时操作系统RTOS存在一些限制,不过也开始承担了与边缘相关的任务。在许多情况下,用户有必要创建复杂的算法,诸如机器学习策略等,使用现代IT类型的语言如C++和Python在PC机或工业 PC机上运行,与PAC一起工作。Halterman表示,用户应该尽可能寻找包含开放编程、软件和通信标准的产品组合。对于边缘控制器需要它们可以使用C/ C++、Python和其他适用于机器学习和人工智能等应用的现代语言。

(3)在2022年10月美国《机器人和自动化新闻》网站刊出一篇题为《最流行的自动化编程语言》的文章。作者Mark Allinson指出,根据去年进行的调查,Python是开发自动化系统最受欢迎的语言。它的主要优点是开源和自由,其高可读性使得它相对容易上手。作者强烈鼓励任何新企业使用Python作为其主要编程语言。文章中还提到了JavaScript、Java和C#在自动化和企业环境中也是很流行的编程语言。       

                    

(4)Python的领先地位在IEEE Spectrum最近发布的第十届年度顶级编程语言排名中进一步得到印证。今年Python不仅在其排名中保持第一,而且还扩大了领先优势。Python日益增长的主导地位似乎主要是以牺牲更小、更专业的语言为代价的。它已经成为一门万能的语言,甚至是某些领域(比如人工智能)中的语言大师,强大而广泛的AI库使它无处不在。

 

IEC 61131-3/IEC 61499处于何种境地?
2019年PLCopen国际组织和美国automation.com网站联合进行了PLC用户编程偏好的调查。总数为200个响应者绝大部分来自北美和欧洲。调查的结果反映了PLC编程的趋势,以及用户对PLC编程软件供应商的一些想法和意见。用户喜欢用哪些编程语言的调查结果是:用得最多的是结构化文本语言,其次是梯形图,再次是功能块图,第四是顺序功能图,其它编程语言位居最后,在其它编程语言中用的最多的是C/C++语言。从用户这些语言偏好可以得出以下结论:
 
(1)各种编程语言运用的差距并不大,没有特别多的,即使居第一的结构化文本也不过比居于第五的其它语言多的有限。
 
(2)明显可见,用户对于面向对象的语言如结构化文本语言和C/C++语言更为青睐。这反映了在智能制造和工业互联网的应用中面向对象的编程语言更能满足用户编程的需求。
 
(3)许多PLC的编程环境支持用C/C++语言编写功能块。
从2019年到2023年,在这不算太长的四年中,自动化和控制的编程语言却有了明显的变化,这反映出开放的、可互操作的编程标准正在OT中兴起,这些标准试图取代与特定工业硬件绑定的专有编程语言。在automation.com网站中曾经刊登过一篇文章《缺失的工业4.0/数字化链接——开放编程标准一致性与认证》中,作者Bill Lydon写道:“IEC 61131-3的基本原理已被世界各地的自动化供应商广泛采用。IEC 61131-3由PLCopen组织支持,通过特殊兴趣小组、标准和认证扩展了标准。这些标准和认证包括运动控制、机械安全、OPC UA、XML数据交换和可重用性。由于IEC 61131可实现完整的任务结构,事件驱动和循环编程都可以完成。” 
 
文章还指出,无论采用何种编程方法,“制造商和过程生产公司必须数字化,否则他们将与竞争对手形成战略差距,使他们陷于巨大的竞争劣势中。” 实现数字化首先需要一个标准化的公益组织以开放标准的形式来利用工业4.0和物联网(IoT)的概念、技术和架构,供应商对开放互操作编程标准的遵从和认证将加速制造行业的数字化。可是由于缺乏对IEC 61131-3这样的工业自动化编程标准的强一致性认证,从而导致工业自动化行业留下市场空白,“这块空白很有可能会被外部抢占先机“。这是否意味着以IT为中心的语言(如Python)就是来自工业自动化领域的外部?
在这个领域内的人们也担心这些IT式的解决方案永远无法在工业自动化中发挥提纲挈领的作用,因为在这一重要关头,需要的不仅仅是某种能够表达人工智能和深度学习的简明扼要的编程语言,而是一种沿袭工业自动化领域数十年积累的底层逻辑和行业共同遵循的规约习惯,并能够进行系统建模和按需自动构造应用的编程语言体系。在这个意义上,IT和OT系统的融合意味着不再有所谓的派别。从梯形逻辑到Python,以及IEC 61131-3以及IEC 61499等其他版本的演变,只是说明了行业的发展需求和发展方向。只有将面向PLC、DCS、SCADA的工控编程语言和基于 PC的IT类型语言相互补充和融合,才能够共同促进工业数字化转型。

开放自动化系统对编程语言的要求
上海交大的戴文斌教授在介绍新一代工业开放自动化系统的定义时是这样展开的:系统由开放的硬件、开放的软件和开放的网络三部分构成。开放的硬件就是可采用任意设备,并任意部署。我理解任意设备就是在软件与硬件彻底解耦的前提下,任意满足应用要求、具备一定算力的硬件都在选用之列。开放的网络就是点对点的确定性通信,设备可灵活介入,可用零配置方式进行异构,确保最长延迟满足系统要求。开放的软件就是要实现按需自动构建应用的目标,具体地说就是面向工艺的设计,自动生成代码,动态应用迁移升级等。这里只讨论开放的软件及其可采用的编程语言的问题。
开放的软件是在能应对工艺变化而自动生成代码的软件开发环境中开发的应用软件。其软件形态表现为面向工艺变化进行生成式构造,这有别于基于已知工艺的动态构造。开放自动化系统在其软件的设计阶段从可复用的模块库中选用模块或自行开发可复用的模块,将这些模块连接成适用于一类工艺的工艺包,设置模块参数后进行实例化。软件自动构造的本质是将模块化代码按照架构组织成应用逻辑来提升软件的复用性。为此需要使用一种建模语言来描述IT与OT融合的工艺流程,按照目前可以使用且已经成熟的工业标准来看,采用IEC 61499是一种合适的选择,堪当按需自动构造应用的重任。开放自动控制系统的应用软件呈现出高度的模块化,其中包括数据采集处理、实时控制、运动控制、人机界面、机器视觉以及生产调度管理等功能块(见图1),不同功能块的代码可以采用最适合的常用于OT领域和IT领域的任意编程语言来编写(见图2)。IEC 61499由于具有抽象化的功能块设计、软件硬件解耦的结构、事件触发的机制等特点,作为一种统管系统的建模语言足可以协调各种系统功能的执行。

图1  IEC 61499堪当自动构造应用的重责 图源:戴文斌《新一代工业开放自动化系统》

图2 在IEC 61499统管下运用OT/IT领域中最合适的编程语言编写功能块 图源:戴文斌《新一代工业开放自动化系统》

还有一种可选的技术路线是运用OPC UA和IEC 61131-3实现一套分布式的编程体系。用OPC UA的伙伴配套信息模型来描述工艺对象构造工艺模型,用IEC 61131-3的4种编程语言和C/C++来构造实现工艺控制的应用逻辑和设备间的通信。已经获得成功应用的例子就是PackML,一种为包装工艺而开发的集成开发环境。它完全可以无障碍地推广到以顺序控制为基础的各种机械加工工艺的控制系统中,也在一定程度上符合开放自动化系统的开放硬件、开放软件和开放网络的要求。相对于IEC 61499来说,这条技术路线更符合工业自动化领域已经建立而且多年来行之有效的方法论。

关于工业边缘计算的编程语言讨论

工业边缘计算设备的终极功能是感知和控制物理过程,运行本地程序,并与工业控制器、工厂运营系统、企业业务管理系统和云应用程序通信。其主要价值是就近在实际生产的地点捕获实时数据,执行包括数据分析等在内的应用程序,以极低的延迟实现快速响应,和以低成本通信的方式传递大量制造基础信息。显然,这个角色在分布式制造架构中起着IT/OT融合的作用。为此加强和推进工业边缘计算的设施和能力首先要从工业边缘计算的编程语言来考虑。总的来讲,其编程语言和工具需要:         

                                                             
(1)确定性控制引擎必须支持IEC 61131-3标准和C语言,这是系统稳定运行的基本保证。
(2)编程语言和工具灵活多样,可以根据要求不同而变化,也就是不恪守单一的编程语言,而采用多样化的编程标准,以及用户定义的数据类型。包括使用C/ C++、Python和其他适用于机器学习和人工智能等应用程序的现代语言编程。
(3)同样,功能块也可以采用多样化的编程语言标准,并可由用户定义。
(4)能够运行开源应用程序,如图形化编程工具Node-RED和数据可视化工具Grafana,以及商业和定制应用程序。

工业边缘控制系统应该支持面向对象的通信协议(如OPC UA),以实现在确定性控制程序和分析/决策应用程序之间无缝传输数据;支持以OT为中心的通信协议,即IEC 1158所规范的通信协议,诸如Modbus、Profibus和Profinet等;还需要支持以IT为中心的通信协议,如MQTT和HTTPS。

此外,边缘控制器的通用计算部分采用基于Linux操作系统,便于边缘控制器可以运行各种各样的非实时计算和分析应用程序,还可以独立于确定性控制部分启动和升级。Linux是轻量级的高性能OS,与其它操作系统平台相比需要更少的CPU和RAM的资源。用户还可以利用预装的工业边缘平台软件加载数字化转型项目所需的应用。

总之,具有这些特性的边缘控制器是实现传统确定性控制的同时充分利用现在和未来边缘计算发展成果的最佳选择。图3是艾默生边缘控制器ControlLogic的软件框图。

图3 艾默生边缘控制器ControlLogic的软件框图

进一步探讨OT/IT的编程及其关系
面向OT的编程是面向业务的编程,需要深入、系统地理解业务及其需求、特征、要求和约束。工业自动化编程的核心和立足点是工业自动化,其编程语言需要符合工业行业领域的理解和习惯。
 
IT编程语言发展很快,语言繁多,且各有特点和优缺点。由于工业自动化仍然需在计算机底层硬件上运行并实现业务控制与目标,所以除了需要首先考虑工业自动化行业及具体场景的要求与特点而外,仍然需要面向计算机及IT的编程语言为工业自动化的业务目标实现提供支撑与发展。
 
OT/工业自动化行业、领域及场景,有自动化人的一整套的行业体系、架构、要求(比如确定性、对延时的要求与约束等等都是由业务的性能所决定)、习惯以及行业语言,构成了一种体系化的行业生态与配套工具及其实现机制,在这里IT中的编程语言、实现机制、协议等用来支撑对OT/工业自动化行业/领域的目标与要求,方便其开发和实现。对OT/工业自动控制这样的行业、领域,由其自身的行业语言、习惯,需有行业自身的语义、信息模型,这样的语义模型及语义定义、数据字典、状态机、信息模型结构及其含义,是以OT/工业自动化行业视角下的抽象、设计并定义的,它不同于IT视角下的情况。虽然OT/工业自动化视角下的这些语义、信息模型,最终的实现仍然需要借助IT的编程语言与机制、工具来作为基础支撑与实现,但它的主要特点和属性归属于OT/工业自动化的行业范畴,基于但又区别于IT行业的情况。
OT/工业自动化行业/领域有自身的特定标准、规范,这些标准、规范的设计、系统及配套工具,都是围绕OT/工业自动化的行业要求来展开,这一整套的OT/工业自动化的林林总总,同样需要一个“工业自动化操作系统OS”,这个OS不同于IT视角下的面向计算机底层硬件资源管理与调度的OS,而是针对并满足服务于OT/工业自动化领域的行业操作系统,它以满足OT/工业自动化自身的行业要求和服务为着眼点和立足点,也是成体系化的。IT视角下的面向计算机硬件资源管理与调度控制的OS,是为OT/工业自动化行业行业OS提供管理与调度计算机硬件资源的底层运行环境。
工业自动化的发展历程告诉我们,IT领域的编程语言难以全面替代OT领域的编程语言。IT/OT融合的趋势应该表现为由OT领域中的一种建模语言来构筑框架,以便于主持其它编程语言在最合适的场合发挥其所长,而不是用某一种编程语言来排斥其它的编程语言。具体地说,在编程语言这一基础领域,要体现IT/OT融合的趋势,还是应该由OT领域的机构来主导。

结语和感谢

基于上述讨论可以得到两个结论:
(1)新一代的控制系统需要一种集成的综合开发环境,让实时的和确定性的控制程序可以与非实时的数据分析、AI应用程序按需交换数据,并协调运行于同一系统。因此OT领域的编程语言和IT领域的编程语言应该在编程运用中各司其职,各尽所长。但真正能进入确定性控制核心的编程语言仍然必须是OT领域的编程语言。
(2)尽管可以选用OT/IT领域中各种不同的编程语言为开放自动化系统编写功能块代码,仍然需要一种系统建模语言或综合开发环境将这些功能块按工艺应用要求连接起来并能自动执行,这不是任意一种编程语言能够单独承担的任务。

阅读剩余
THE END