“软件正在吞噬世界,所有过去特定硬件实现的功能,现在都会通过软件实现”,传统封闭的工业控制系统,其通过特定硬件实现的功能在工业互联网或工业4.0时代都将被软件所取代。--再为题
我一直在关注当前和未来PLC虚拟化发展状态的演进,虚拟化技术的伟大之处在于,在过去六十年的IT中,没有任何其他进步能提供比虚拟化更多的可量化优势。从历史来看,PLC和PC的祖宗是一家人,他们都是经历继电器时代发展演变而来。既然IT在虚拟化中取得巨大成功,同是一家人的PLC为什么不能享受虚拟化的巨大优势?
值得再次强调的是,本文所指PLC虚拟化绝非软件版本PLC或安装运行在虚拟机里面的PLC软件。软件PLC或者“SoftPLC”其实是一种失败品,这些仅仅是控制系统厂家在控制系统和信息系统之间进行整合尝试的失败品,他们看到了信息系统通用平台巨大的好处和成功,但是很可惜推出的系列“SoftPLC”尝试并未能进入市场。
本文所指PLC虚拟化,我认为可以这样定义:PLC虚拟化,是将传统专用的PLC硬件功能解耦,利用软件化的方法和通用的标准模块化硬件仿真或模拟看起来和行为类似于特定PLC硬件的系统。本质上来说,基于PLC的特殊专用硬件环境,PLC虚拟化最好的途径是PLC供应商主动提供PLC的虚拟化版本,即拥抱现有的虚拟化技术。实质上,有些PLC供应商也会在一些大型的项目中,为了降低客户的控制器成本或维持控制器的高性能要求而给客户部署虚拟化版本的控制器,这些控制器可以运行在商用IT硬件环境上。这是PLC供应商针对自身的控制器进行虚拟化以适配IT虚拟化技术的结果。通常来说,这些能够虚拟化版本的控制器不会出现在市面上,也不会出现在供应商的产品目录中,甚至都不会有任何产品编号。
回到我们的第一个疑问,PLC能享受虚拟化的巨大优势吗?答案当然是肯定的,之所以我们看不到,是因为任何事物的诞生和发展一定有其前提条件和土壤,PLC虚拟化亦是如此。
科学技术的革新始终在推动时代巨轮轰鸣向前。PLC虚拟化的发展也终将会随着相关软硬件技术、社会价值和商业模式的发展成熟而瓜熟蒂落。
随着虚拟化PLC的软硬件技术的成熟,比如在技术和工程层面,通过软件能够实现针对PLC系统的处理器、ISA总线、各种专用硬件卡、网络IO等的仿真和模拟实现,这些基础能力构成了PLC虚拟化实现和发展的技术前提。
那么,现目前我们如何针对PLC进行虚拟化运作,业界在通过什么技术在进行PLC虚拟化的技术尝试呢?在旧文《工业控制系统的发展趋势-PLC虚拟化和软件定义》中,我们描述了目前包括西门子等在内的控制系统供应商在进行的研究项目,他们将PLC执行环境与I/O模块解耦,并将PLC执行环境标准化、模块化、虚拟化的实现。并通过软件定义将PLC的逻辑抽象出来,利用软件定义网络的实现思路,通过一个应用程序实现针对PLC执行逻辑的程序开发和管理,让应用程序定义硬件PLC的功能。也就是将PLC的逻辑控制、程序存储和IO模块分离,利用应用程序实现逻辑控制部分。从技术角度来讲,这是针对PLC系统的“硬件重构和软件定义”。硬件重构和软件定义是基于虚拟化技术之上更高级、更抽象的资源和数据自动化。控制系统厂商试图弯道超车,直接进行PLC设备的硬件重构和软件定义,推出具备适应工业互联网或工业4.0时代的新型PLC设备以替代传统PLC设备在新时代浪潮下的适应性问题。在旧文《ALC--软件定义架构的PLC》一文中,我简单介绍了目前业界基于上述研究推出的一系列过渡成品。
那么为什么控制系统厂商会直接忽略虚拟化现有PLC设备,而推出新的架构形态的PLC设备呢?虚拟化现有PLC设备很难吗?
从技术实现的可行性角度分析,我们如果需要实现PLC的虚拟化,需要做到以下几点:
1、能够在通用架构上运行虚拟化的PLC CPU;
2、能够解决交换以太网的时效性问题;
3、能够针对PLC的专用硬件虚拟化成标准化的IO卡运行在通用架构上;
4、能够支持现在的商用电源,比如220V;
5、能够支持冗余的商用IO卡/控制器。
也就是我们需要将PLC架构中专用的部分通过仿真或模拟,将其运行于标准架构之上。首先我们需要创建虚拟机一样的一个虚拟PLC软件容器,将PLC装进去。这个虚拟PLC软件容器和虚拟机一样,具备特定控制系统供应商的CPU、ISA总线、IO卡等PLC特殊的虚拟硬件设备。
从PLC处理器架构层次的虚拟化上来看,PLC虚拟化首要要解决的就是在通过架构上运行PLC CPU的仿真和模拟。由于西门子S7-400已经被社区广泛研究和逆向,因此本文采用西门子S7-400 PLC进行举例说明。西门子S7-400采用两个英飞凌TriCore处理器用于运行PLC的处理逻辑。而现有的仿真模拟器QEMU就支持对TriCore处理器的仿真和模拟,那么是不是意味着利用QEMU可以运行仿真西门子S7-400呢?如果是西门子官方来做这件事情,我相信只需要西门子研发部门对西门子S7-400的固件进行重新编译,或者对QEMU添加特定的西门子S7-400配置文件支持,即可在QEMU中运行西门子S7-400,我也相信西门子内部会存在这样类似的模拟器。从外部厂商的实现角度上来说,由于不知道这种架构是否经过西门子的特别修改,因此实现起来会特别困难,但是在技术角度上是可以实现的。如果西门子对西门子S7-400的英飞凌TriCore处理器进行过特别的处理和修改,那么外部厂商在QEMU实现仿真和模拟西门子S7-400的时候,需要在QEMU中构建一个扩展现有QEMU TriCore配置的新配置文件来适配西门子S7-400的特殊修改项。
从PLC ISA架构层次的虚拟化上来看,S7-400在TriCore架构之上运行一种虚拟机。这个虚拟机实现了针对西门子机器代码与处理器机器代码的翻译和转换。在TriCore ISA中,无条件跳转以机器代码字节0x1d开始,而PLC虚拟机内部的类似无条件跳转以机器代码字节0x70 0x0b开始。虚拟机内的机器代码称为MC7,目前MC7还没有在公网上出现或泄露过固件版本,尚未被外部各方完全进行逆向掌握。因此实现ISA的虚拟化是无比困难的。除非找到一种很好的设计能够解决他们之间的翻译和转换,并通过软件对其进行翻译和转换进行虚拟化或反转。或者通过设计硬件级别的ISA来解决。这个就有点类似于IT虚拟化技术中的二进制翻译技术、半虚拟化技术和硬件辅助虚拟化技术。但是由于PLC设备各个厂家的ISA的标准设计不一,世界上现目前都还不可能出现一种标准化的ISA虚拟化技术能够完全的虚拟化大部分控制系统厂家的设备。在IT环境中,这些虚拟化技术之所以成功,是因为IT硬件的标准已经趋于统一,具备足够的技术条件来实现虚拟化的翻译和转换。
从PLC 运行程序架构层次的虚拟化上来看,我们需要将S7-400固件完全克隆成为QEMU映像,并通过QEMU TriCore处理器和专门的S7-400 QEMU虚拟机配置文件进行虚拟PLC机器的创建和运行。这些虚拟机配置文件的包括S7-400的辅助硬件设备(如以太网和I/O等)。但是由于缺乏相应的资料,获得包含完整固件的克隆(包括引导加载程序和完整的RTOS)也很困难。因此,除了CPU和ISA之外,构建西门子-S7-400 PLC虚拟化的还需构建西门子S7-400的辅助硬件设备(如以太网和I/O)的配置文件。
综合来说,如果我们需要在现有的虚拟化架构之上构建PLC的虚拟化技术,我们需要解决的问题有很多,并且针对每一款PLC型号的PLC系统我们都会构建相对应的虚拟PLC虚拟机和虚拟硬件。整体的仿真或模拟流程如下图所示:
但是在PLC型号众多的现状下,试图采用这种方式貌似是一种吃力不讨好的解决方案。
那么还没有其他的PLC虚拟化解决方案?除了上述技术路线比较陡峭之外,目前业界的另外一种方式是通过纯软件的方式实现PLC的软件化模拟,开源OpenPLC就是其中的一个典型代表。OpenPLC的概念也是在实际的产业应用中产生的。1995年,在中国的马鞍山钢铁公司的动力调度中心,面临一个题目,动力调度中心要监控马钢来自发电厂、水厂、煤气厂和动力厂(负责电力输送)的各类能源和动力信号,但这四个数据来源,包括这些能源与动力的输送的管网所涉及的上百个变电所、增压站和泵站的自身的控制系统是不兼容的,有的还是专用系统,不仅没有协议,连开发人都已经无法找到。除了通讯不兼容外,连这几个系统的控制结构也大相径庭,电厂是类似于DCS的结构,水厂和气厂是PLC结构,动力厂是SCADA结构,对集成职员理解系统也形成了较大的困难。该项目最后固然没有用OpenPLC解决(当时还没有),但该项目的需求导致了OpenPLC的诞生。
从OpenPLC的论文中,OpenPLC针对过程控制和离散制造业普遍存在的,各类控制要求不同的系统的互连的题目,作者提出了设计一个新型的开放式控制系统的构想。由于该系统的目的是要尽可能地适用各类不同的应用场合,因此,定名为开放式可编程控制系统,而英文则是Open Programmable Logic Controller,缩写为OpenPLC。该系统从1995年开始构思,到1997年基本明确设计思想,几条主要的设计原则如下:
1、OpenPLC应该是一种以PC技术为基础的系统,尤其是在能够发挥出PC特色的场合(如网络,与外界的连接,优化,专家系统,操纵界面,数据监测,文件记录和打印等),工作由以PC为基础的系统来承担;
2、在底层,需要高可靠和实时控制时,由分散控制系统承担,但它不同于现场总线,它不是基于仪表的系统,而是基于系统的系统,仪表还是普通仪表,只是将I/O和控制单元放在了现场,传回中心控制室的是数字信号,而不是模拟的4—20mA信号,要求原来的仪表仍然可用;
3、在I/O点较集中的场合,可以采用类似于DCS或PLC的机柜或机架,内部模块用总线或网络连接,整个系统应该具有较高的可靠性,同时有较好的兼容性和开放性;
4、系统应该具有真正的分布性,前端可集中,也可以延续几百米、几公里甚至几千公里(在地球的另一端),为此,系统必须具备与TCP/IP兼容的协议和WEB服务器;
5、规模也可以从小至几十点,大至几千点甚至几十万点。系统I/O规模的增加不应该导致系统的大的改变。
OpenPLC是一个开源实现,可以在Linux上模拟PLC,可以在通用的架构上使用。在现有的虚拟化技术中实现OpenPLC非常简单,因为它可以轻松地在Linux和x86架构上进行编译和安装。目前的OpenPLC经过多年的发展日益成熟,已经逐渐的应用在一些领域中。
综上所述,不管基于新型“硬件重构和软件定义”的新型PLC虚拟化还是基于传统的PLC设备进行虚拟化,亦或者纯软件实现的OpenPLC等虚拟化技术,无不昭示PLC的发展趋势需要在新的架构下面临的蜕变与重生。随着技术的发展,PLC虚拟化的软硬件技术成熟度趋近于产品或技术解决方案的工程化应用,构建PLC虚拟化的条件开始陆续具备,PLC的虚拟化就一定会到来,只不过不一定叫PLC虚拟化,或者那个时候回是一个崭新的概念。
PLC虚拟化技术的实现,能够带来的优势和好处显而易见,在此我无需赘述。而基于PLC虚拟化技术所产生的巨大的社会价值和商业模式,才是工业互联网或工业4.0时代,工业行业取之不竭的源动力。
所谓的巨大社会价值,指的是从用户角度出发,PLC虚拟化的采用使任意组织和个人得以站在巨人的肩膀上开展业务,避免重复造轮,极大提高了软件与服务构建各环节效率,加速了各类应用的架构和落地,而云端按需启用和随意扩展的资源弹性,也能够为企业节省巨大成本。
所谓伟大的商业模式,指的是PLC虚拟化技术出现后,基于PLC虚拟化的产品和服务形态非常适合新时代的工业互联网或工业4.0需要,标准化、模块化、人工智能和软件定义的控制系统核心大脑大幅降低了客户的进入门槛,而技术基础设施架构方面的稳定性、灵活性和便捷性又带来了较高的客户粘性,再加上云计算、大数据中心所能带来的规模效应,这些因素使得基于PLC虚拟化的物联网、工业互联网能够成为一门好的生意,对应着一个极佳的 B 端商业模式。
PLC虚拟化不仅仅在业务层面取得成功,也会在根本上改变现有工业控制系统的安全架构和安全治理模式。就像传统信息系统的虚拟化取得的优势一样,PLC虚拟化堆栈在网络安全的优势无与伦比,我们可以基于SDN网络构建PLC的网络IO,通过对东西网络流量进行精细控制,构建精细化的全流量检测、全功能转发以及“零信任网络”环境的安全网络链路,甚至可构建基于区块链的工业安全区块体系。此外,在PLC的内部和前端,我们可以从容的放置和定义工控软件防火墙对进出PLC的流量进行安全防护。因此,PLC虚拟化的架构应用在网络安全角度看来,会比现在的工业控制系统健壮。