容器化!工业自动化软件的新方向
【编者按】在工业自动化领域的软件开发推广和采用云计算容器化技术,将是一个不可逆转的趋向,它必将在推动下一代的开放式DCS/PLC系统的软件实现中起着难以替代的作用;在制造系统向分布式、扁平化发展的过程中,容器化及其编排技术,对工业自动化领域的软件开发、管理和维护具有重要的应用价值;在智能制造和工业互联网、工业物联网的发展中,广泛使用Docker和K8s将是自动化软件的全新利器。
自从工业4.0将信息物理融合系统(CPS)的概念引入工业生产系统,我们就经常看到图1所示这张图。
图1:工业生产多层递阶系统的扁平化趋势
图示左面揭示了生产系统的多层递阶逻辑结构,右面则反映了随着工业4.0和 智能制造 的发展,这些不同功能的软件之间的通信关系以及数据流动的关系,不再遵循多级递阶的方式而扁平化,可快速协同直接交换数据。于是构成基于CPS的工业生产 自动化 系统。
信息物理融合系统(CPS)在第四次 工业革命 中起着巨大的作用,而包含在CPS中的物理部件毫无例外地内嵌着控制、监控和协调的软件。
与传统自动化系统相比,运行于实际的物理部件中的软件更为复杂,而这些部件之间的相互连接也随之大大增加。
当控制软件的重要性和复杂性增加的时候,其升级的频率也必然增加。大规模客制化要求制造厂商在生产过程中按照客户的专门要求进行改变(例如在数控机床中加入更新更好的路径规划算法)。现在已经有可能运用监控和机器学习工具来预测软件升级变化带来的加工过程的改善。但是如果每一次软件升级都要完全停机,无疑在软件升级的同时造成了相当大的损失。这就提出了一个无法绕开的问题:在软件升级时应尽可能地局部停机,甚至完全不停机。
生产系统通常服从如图1所示的多级递阶结构。系统的底层直接与硬件通信,并将相关的数据向上层发送报告。传统的递阶系统不仅用作各层部件的逻辑结构,实际上也同样表现为多层递阶的部署。所有层级的部件通常都按制造厂预置的IT结构部署,网络的基础架构里实施的数据流动也按金字塔的定义进行。
随着出现大量的云计算和信息物理融合系统,这种严格的多层递阶系统已经软化。各个组成部分可以仍然按金字塔的层级分类,但他们的部署变得更灵活,例如部署在云上。这些组成部分之间的互动和相互作用也变得不那么紧密了,以至于数据可以根据要求来进行流动和传送。
实时应用正在登场
然而,实时的组成部件,通常并没有被纳入这类方式,它们依然由专用的平台来开发。一方面希望将这些部件转移至云基架构的同时,依旧保持传统控制系统因安全需求所必须具备的可靠性;另一方面既要创建为高级应用场合增加灵活性和易于部署的环境,又要填平与传统的大量实时控制软件之间的鸿沟。这就提出了在实时控制中如何满足上述要求的需求。
对于运行在云上的各类应用软件,只要将庞大的应用软件拆分为更小的服务,且各自独立运行,就可以获得灵活性。在这种情况下,容器技术登场。
在没有显著过载的前提下,运用容器化的操作系统可以将这些服务相互隔离开来。对于非实时的应用软件,容器化已经成熟地进入广泛运用的状态。那么对于实时的应用软件如何运用基于容器化的结构呢?
其实在云端运行 工业应用软件 已经有几种架构存在。早在2013年Gievhchi 等人提出了一种PLC软件的云基架构的多租赁支持(multi- tenancy support)方案,其在水平方向是可扩可缩的。他们将实时软件分为软实时、严格实时和硬实时,所谓的实时是指不使整个系统失效的最大时限。
显然云基系统是绝不能满足硬实时要求的。在一个有30个用户租赁的系统中,这一架构产生的往返时间低于1000ms的占99.72%。该架构以及其他的几种架构还是侧重于仿真运行传统的软件,结论是目前在云端运行工业软件的工作具有几百毫秒的时延。上述的工作只不过表明这一方法的可行性,但远没有解决实际的问题。
容器化简史
在1990年,当像Sun Microsystems这样的公司在建立超大规模的UNIX服务器时,人们就开始开发容器技术了。从运行和管理的角度看,容器技术易于在大型计算机内将应用软件划分成若干个小的模块,而不是让一个大的应用软件全部捆绑在一起运行。原始的容器概念就是在许多应用软件之间运用划分的方法,使管理大型的服务器更简单方便。容器技术的缺点是实现起来必须具有UNIX系统管理的
高度技巧,这对当时的大公司Sun Microsystems、Oracle、SAP等来说并不是问题,但却限制了将容器技术应用于相对小的公司。当容器技术逐渐变成可在Linux中应用以后,情况就大相径庭了,其应用变得非常普及。
这归功于一个风险投资推动的软件工具,大大简化了容器技术在Linux中创建、部署和运行的过程,这个软件就是Docker。2013年Docker正式宣布为开源软件社群,此后的5年时间内容器软件受到云计算和企业计算两方面的青睐。更令人高兴的是,前两年许多 工业自动化 产品已经将Docker配备到系统集成的软件工具中,使得最终用户能够方便地将自己的应用程序集成到他们的产品中。
电信行业正在进行全数字化,其中一个重要的工作就是把所有的模拟信号处理转移到网络前沿的边缘设备,所有从无线基站通过中心局交换机来完成的其它服务将完全由软件来完成。这一结果将带来高度灵活的基础设施,在增加新的服务时不必改动硬件。多年来电信网络的运营商一直在设想开发具有实时要求的大规模的软件定义的基础设施,其关键技术支撑就是容器化。
非常值得强调的一点是,可以缩小容器的规模使其运用到很小的系统中。Docker运行时软件已经可装到像树莓派这样的具有ARM核的单板计算机终端中,用来支持工业IoT的应用和服务,这给工业自动化带来许多新的可能性。
容器化技术的时代
自Docker在2013年成为普遍采用的容器化技术以来,这一云计算技术成了数字化业务转型的一种关键手段。诸如优良的移植性、系统资源的高效共享、以及具有广泛的支持等特性,使它受欢迎的程度不断在增长。在2017年3月发表的Forrester研究公司的报告中就指出,66%的机构都有采用容器技术加速了开发效率的经验和体会,75%的公司在应用部署的速度上取得了中等程度乃至显著的提高。
这些正面的影响在SolarWinds新近发布的“2018 IT趋势报告”中也给出了如下积极的印证:有44%的被调查者将容器技术列为最重要的首选技术,38%认为容器技术将是今后5年内最重要的优先技术。这些统计数字证实,对容器技术的兴趣和采用必将与日俱增。
容器化双剑客
要成功地部署容器,必须了解影响这一技术的方方面面,特别是编排对管理容器技术的生命周期有很大帮助,容器化技术采用的越多,容器的编排将变得越来越重要。这是由于IT管理人员广泛采用流水线的管理方式,并要求对节点集群运行容器软件来实施调度、服务发现和监控检查,容器编排正是针对这些日常必须关注的焦点问题的解决方案。
开源软件领域正在大量汇集到一个单一的容器管理和部署的工具上,即所谓的容器编排工具Kubernetes(简称K8s)。K8s原来是Google内部的用于开源容器管理部署的工具软件,在Google的SaaS产品用容器化技术实现时获得成功,而且可靠性很高。Docker和K8s作为管理和构建容器的技术,目前在企业软件领域是最热门的开源产品,这一强有力的工具组合对于在异构的环境中(如工业自动化)部署分布式的各种应用也极有价值。相信在工厂运营或工程经验的基础上也可以讨论该技术在工业界的潜在适用性,以支持未来的自动化专家与IT专家合作开发种种应用。如图2所示,在开发一个应用软件的过程中,先进行APP的代码开发,然后运用容器化技术将APP置于Docker的环境中,并由K8s编排进行部署和运行管理。
图2:工业APP运用Docker和K8s进行容器化
“容器图像”作为创建一个容器的基础,是Docker或其他容器开发工具所使用的一种分发文件的软件手段。在使用容器图像时,软件的分发和部署是用户驱动的和应用驱动的,而不是软件提供者驱动的,这样可在很大程度上减少最终用户的集成负担,使他们把更多的注意力集中在软件的应用上。与采用容器技术相反,如果采用软件打包管理程序,由软件的提供者(而不是由使用者)驱动进行软件分发,则最终用户或系统集成商需要承担责任,确保相关的正确版本汇编,并要正确设置所有运行时的组态参数。通过打包管理程序交付软件实际是为将要集成的软件提供模块化的单元;而容器图像则是从最终用户的角度提供单一的、但全集成的应用软件。正如前面说过的,联网的设备都是由嵌入式系统构成的,特别是对于那些高价值的设备和服务,将来都要进行远程监控、管理、升级和提供服务;而它们的软件栈将需要以高度自动化的水平来提供服务。因而,未来的嵌入式系统包括工业自动化中的嵌入式系统,肯定需要Docker和容器化的编排工具K8s来支持。
图3表示了Docker运行管理平台需要用像K8s或Sworm这样的APP调度和部署工具来运行管理众多的节点集群。
图3:Docker企业版管理平台及其运行节点集群
软件容器化对工业自动化的价值
容器技术为工业自动化的最终用户和它们的供应商在设计、配置自动化系统时提供了几个重要的价值 :
1) 将注意力集中于应用,而不是集中于系统 。这有效地将应用开发与执行计算、存贮和联网控制的系统脱钩,使得应用开发者和系统支持专家能够将他们的工作解耦,而且受到的干扰很小,其价值超越了系统的寿命。2) 为分布式系统创建和管理容器图像的存贮库提供了一个很好的解决方案 ,可以不必顾及不同的硬件、处理器架构、操作系统和支持软件的相关依存性所带来的复杂性。3) 容器图像文件的分层特性使得供应商和最终用户能够有效地进行容器创建,并且可以通过迭代来加强存贮库 。处于容器特性底层的往往在许多应用中会长期用到,而处于容器特性上层的往往是某些特殊的应用,需要经常变更或再开发。4) 在一个应用可部署到生产环境之前,开发者可以自行创建容器的开发和部署环境,大大方便开发工作的开展并加强其测试工作的效率。
容器的编排同样也很重要 :1)编排提供了对系统管理的能力,如大大简化了对系统伸缩的控制。2)编排提供一种陈述式的分布式系统的组态,这种组态就是分布式系统所预设的状态。运行编排程序是为了实现和维护这一预设状态,使分布式系统达到很高的应用可用性;当分布式系统受到部分干扰和破坏时,编排程序可使系统自动恢复到预设状态,即具有“自恢复”的特性。3)较之命令性组态工具,陈述式系统组态不容易出错,因为命令式组态工具执行纠正动作时,必须要求先查找执行表在哪里出错。4)陈述式系统组态如与控制系统的组合,使得系统只需细微的改变即能能实现回滚(roll-back)功能,但软件打包管理程序、嵌入式系统技术和现有的DCS产品不可能用简易的方法实现这一功能。5)围绕容器构建编排程序,将主要的操精力集中到到最终用户所关注的应用的性能。因为每个容器就是一个应用程序,因此没有必要从许多不同的应用程序中专门安排信号或运行记录去侧重于一个特定应用的诊断。6)着重于应用而不是着重于控制系统本身,也在许多其它方面带来一些边际的利益,例如容易正确地创建、部署和维护应用,同时使得应用运行时的问题与控制系统自身的问题相互分离。
容器化正在向工业自动化渗透
容器化技术已经对工业自动化产生了一定的影响 。据不完全统计,在2019年的汉诺威工业博览会上有750家厂商、超过2000种产品用到了容器化计算技术。
下面给出3个有关工业自动化运用容器化的案例。
(1) 埃克森美孚倡导的开放式流程自动化OPA
由埃克森美孚倡导的开放式流程自动化OPA,是针对现有的DCS和PLC系统不能适应未来的OT/IT深度融合的要求而提出的标准化活动。活动聚焦于如何运用最新的分布式云计算技术和虚拟化技术,重新定义已经日趋陈旧、20多年没有变动的架构,重新定义DCS和PLC,以及与优化运营密切相关的先进控制和MES。图4表示如何将容器技术运用于OPAF的架构,构成一个分布式控制节点(DCN)。根据实际的需要,可以在一个DCN容器中容纳所需要的各种APP,如监控和管理DCN的APP、现场总线和工业以太网的APP、现有的过程控制算法APP、新开发的过程控制算法APP等等。
图4:运用容器技术构成分布式控制节点(DCN)
(2) 容器化技术用于实时控制
目前尚未见到有产品问世,但是有些大学和研究机构已经做了不少有关架构的研发实验工作。例如德国斯图加特大学的软件技术研究所就“实时控制应用的基于容器的架构设计和实现”做了有益的探索。他们将实时任务模块化,设计了实现容器化的架构。在分析基于容器化的实时控制应用软件的机会和挑战之后,提出了一个具有可重用、可移植特性的参考架构。该架构组合了容器与容器之间以及容器与硬件之间的通信解决方案。
(3) 德国SICK公司以生产传感器闻名
德国SICK公司以生产传感器闻名它们新近推出的TDC(Telematic Data Collection)网关就是运用Docker容器技术的典范(见图5)。可以运用在智能制造、工业物联网作为边缘网关采集来自各种传感器、PLC的数据,支持I/O Link和其他现场总线(见图6)。
图5:SICK的TDC边缘网关
图6: SICK的TDC边缘网关的应用
谨慎而严谨的态度
国内也有从事工业自动化的单位对此进行了探索和研究。
例如和利时的丁研先生认为,容器技术在自动化行业中仅能作为远程部署和升级来用,不能代替功能模块。容器编排技术本来就是为互联网无状态服务运用的,但由于工业自动化程序通常是用状态机进行描述的,用无状态服务来编排显然并不合适。用无状态的微服务编排方式代替有状态的功能块方式,会误导许多人,所以在工业自动化中不要对微服务抱有过高期望。 工业物联网 的实时计算部分都是有状态的,例如炒作的热火朝天的“边缘计算”其实是有状态的。同样,工业仿真软件也是有状态的。在“状态机”的场景下,微服务和容器的作用都不大。因为微服务的很多配套技术(如集群,负载均衡等)通常是针对无状态服务的场景,因此无法在很多工业自动化及仿真这类有状态计算中发挥充分的作用。
当然,一个组态编译好的PLC工程可以作为微服务大包,远程更新工程以及固件升级等也都可以用得上。但也不过仅此而已。互联网公司过度炒作微服务,很容易把一些搞自动化开发的带到沟里了。
也有些 从事实时操作系统开发的人认为阿里云的ECS可以被看作是工业Docker,占用资源少,可支持大多数Docker的概念,而且实时性也是微秒级的 。例如ARM9这样的处理器,16MB内存可以支持多个容器。远程控制程序库可直接打包成ECS包,跟Docker一样,可以把环境打进去,实现远程管理、安装、升级等。但是不同的意见也存在,一些搞自动化的人用过ECS后认为,ECS是为IT设计的,实时性虽然不错,但是不能保证工业控制中要求的时间的确定性,即保证最差的执行时间满足控制任务的要求,而且也不能兼容现场设备。
上面所谈到的一些问题说明,将云计算技术用于工业自动化还是处于起步探索阶段,从实时任务及其调度,到容器及其编排,虚拟化的方向应该是正确的 。OPC UA是一种比较典型的有状态的服务方式。目前在欧洲,对于分布式控制采用IEC 61131-3+OPC UA受到较普遍的支持,可能会占据主流。
不过,一则这些技术虽然可以借鉴,但在工业中是否能够站得住脚,还有待于实际应用的检验;二则,工业自动化的要求与互联网的要求存在一定差异,要将云计算技术的精髓运用到工业中来,特别是实时控制中来,照搬肯定是不行的,还需要做进一步的开发研究,还需要重视实际应用的测试工作,以检验其功能性、可靠性和可信性。
在工业自动化领域的软件开发推广和采用云计算容器化技术,将是一个不可逆转的趋向,它必将在推动下一代的开放式DCS/PLC系统的软件实现中起着难以替代的作用;在制造系统向分布式、扁平化发展的过程中,容器化及其编排技术,对工业自动化领域的软件开发、管理和维护具有重要的应用价值;在智能制造和工业互联网、工业物联网的发展中,广泛使用Docker和K8s将是自动化软件的全新利器。
相关阅读推荐:
工业软件的十大趋势:不再是工具,而是未来工业的主宰
工业软件,姓软还是姓工?
本文已标注来源和出处,版权归原作者所有,如有侵权,请联系我们。