1 以互联网为师
成功解决互操作性已经有了先例,大家所熟悉的网页浏览,调制解调器是互联网的网关。购买PC后,将其带回家,标准化的好处立竿见影。首先,开箱即用的个人电脑通常都有一个以太网端口。PC连接到网络调制解调器后,通过DHCP(Dynamic Host Configuration Protocol)获得IP地址,并发现自己的网络网关。然后,它会发现自己的域名系统(DNS)服务器是什么,并开始访问来自全球各地的广泛信息。所有这些机制都通过一个网关自动激活;对于大多数用户来说,它是一种相当于魔法的技术。历史的经验证明,这种全球网络只有在市场围绕特定标准进行整合时才有可能实现。那么,人们渴望着在运用工业物联网(IIoT)也可以使用类似的魔法技术的时候,是不是也应该思考选择什么样的标准化方案和路径才有可能跨出成功的一步呢?我们可以预言,像IIoT这种需要在全球形成的网络,只有在市场围绕特定标准进行整合时才有可能实现,否则就是一个实现不了的“承诺”。图1 工业物联网的各种功能 (图源:IEB网站)
2 MQTT和OPC UA没有明确定义数据存取的互操作性
智能制造利用工业物联网众多目标之一是在企业中纳入新的信息产生方和/或信息使用方时不需花费集成成本。简化集成主要是通过在通信层和信息层实现一些知名标准的产品来实现,譬如OPC UA和MQTT。但是,这两个标准是否足以实现数据存取的互操作性呢?
目前MQTT已成为实现“一次提供数据;可以到处分发”(provide data once; distribute everywhere)的架构。OPC基金会于2006年发布了第一个OPC UA规范,其中包括许多其他连接功能中的数据存取功能。其优点包括启用非windows设备、具有标准数据类型定义的可浏览地址空间,以及具有死带过滤条件的长轮询机制。OPC UA在制造商中变得流行,因为除了现有客户端-服务器范式,在2018年还增加发布-订阅协议,将Pub/Sub连接添加到规范中,包括无代理(broker-less)协议的以太网和UDP和有代理(brokered)协议的AMQP和MQTT。OPC基金会继续实现互操作性的目标,通过配套规范定义了标准对象类型,每个规范都利用核心数据定义来构造标准对象定义。图2 MQTT和OPC UA的协议栈 (图源:IEB网站)
3 OPC UA over MQTT开辟了新路径
或许OPC基金会已开始认识到,虽然在每一个层面有多种技术规范提供选择可以增加灵活性,但其带来的负面影响却是增加了集成的成本和推广的困难。于是,在2022年2月宣布,包括亚马逊AWS、谷歌Cloud、IBM、微软、SAP和西门子六家云服务提供商有些在目前的产品中支持基于OPC UA over MQTT,有些会在他们的开发路线图中支持OPC UA over MQTT。这一声明标志着这六家重要企业将与OPC UA over MQTT组合兼容。更令人印象深刻的是,这一声明标志着企业内部多云架构的可能性,允许用户无缝地将数据从一个云供应商转移到另一个云供应商,实现云到云的互操作性。OPC基金会在2022年4月的OPC国际日上指出,OPC UA over MQTT已有数千种实现。还有一个可扩展性与互操作性相结合的问题。物联网领域中的许多应用都利用MQTT作为一种轻量级方法向任意数量的信息使用方发布数据。然而,尽管MQTT支持可扩展性,但它本身并不能促进互操作性。另一方面,OPC基金会更理解集成的挑战不仅仅是对通信层加以规范,因此他们规范了从通信层到信息层的完整技术栈。而且OPC基金会更重视信息层,其主要价值主张都是通过信息层来展开的,OPC UA专门用了4000多页来进行信息定义,而通信定义只有不到300页,就可见一斑。
4 MQTT/Sparkplug也是一种解决方案
为了解决MQTT上缺乏信息互操作性的问题,Arcom/Eurotech于2015年创建了Sparkplug标准,以明确定义协议映射、编码方案、公共数据类型,以及自定义对象结构的方法。它最初是的一个不知名的专有定义,用于帮助通过MQTT进行内部集成。很快在一年之内,Cirrus Link使用该技术为美国Inductive Automation公司的Ignition(一个流行的SCADA/MES平台)开发了各种第三方模块。Ignition的MQTT引擎模块为数据存取互操作性建立了一个简单而明显的用例。来自任意数量供应商的Sparkplug信息产生方将信息发布到标准MQTT代理。然后,这些信息立即可用,并在Ignition的内部标签结构中枚举为标签和用户定义类型(User Defined Types,UDT)。该功能最令人印象深刻的是,新连接的Sparkplug设备自动出现,无需终端用户或集成商输入。2019年,开源组织Eclipse基金会获得了Sparkplug规范的所有权。由于Ignition允许任何人通过免费和功能齐全的试用下载来评估其平台,包括任何业余爱好者都可以使用的免费Maker Edition,因此它的受欢迎程度持续增加。
Sparkplug从下往上构建堆栈,通过MQTT定义信息以实现互操作性,而OPC基金会则从上向下指定发布-订阅功能以实现可扩展性。OPC UA工作组开始开发标准,通过其他用例扩展其现有的信息定义,如防火墙遍历、控制器到控制器通信、控制器到云通信,或通过消息代理大规模连接信息产生方和信息使用方。之后,在2018年,OPC基金会发布了第14部分:Pub/Sub规范,MQTT已成为其四个通信协议中最受欢迎的,这主要是因为市场之前对树莓派应用、家庭自动化项目或其他物联网应用都用到MQTT,因而熟悉。此外,2021年5月发布的UA- IIoT - Starterkit仅支持MQTT,以至最近的OPC网络研讨会在提到Pub/Sub架构时主要讨论OPC UA over MQTT。图3给出Sparkplug与OPC UA over MQTT,看来OPC基金会正在工业物联网的范畴内仅支持MQTT,不支持其它的协议。图3 Sparkplug和OPC UA over MQTT协议栈 (图源:IEB网站)
5 W3C正在开发物联网标准WoT
最近微软的工业物联网的总架构师向媒体透露,他们利用WoT的TD(Thing Description, ·物描述)作为架构模式,OPC UA作为接口,创建了一个参考实现,并以UA Edge Translator应用程序的形式演示这个概念。该应用程序运行在Docker容器中,便于部署在支持Docker或kubernetes的工业边缘网关上。通过扩展UA Cloud Publisher的UI,仅一次单击完成对UA Edge Translator的组态。目前,UA Edge Translator只处理Modbus设备,但添加其它设备也很方便。演示提供了SIEMENS SENTRON PAC电能表的WoT组态文件样本,其中已经包含了将电能表映射到标准化OPC UA PROFI能源配套规范所需的信息。OPC UA PROFI能源配套规范直接从UA云库加载。这一演示表明WoT开始步入工业物联网数据存取互操作性的战场。
万维网联盟(W3C)在交付全球公认的标准方面有着良好的记录,包括构建Web的HTML和CSS。在其麾下2020年成立了W3C物联网(WoT)工作组,其任务是通过构建模块的规范来对抗物联网的碎片化,从而实现跨物联网平台和应用领域的物联网设备和服务的轻松集成。作为现有标准的补充和增强,W3C WoT提供了标准化的元数据和其他可重用的技术构建块,目标是使跨物联网平台和应用领域的集成变得容易。其方法是通过遵循著名且成功的Web范式,通过提供一套标准化的技术构建模块,帮助简化物联网应用开发,增加灵活性和互操作性,特别是对于跨域的应用;同时支持已建立的标准和工具的重用。图4 不同物联网系统和服务组成的异构技术环境 (图源:WoT网站)
WoT规范提供了一套标准化的技术构建模块,引入了一个基于属性、事件和动作的简单交互抽象。属性包括传感器的测量值(只读)、组态参数(读/写)、状态(只读或只写)、或计算结果(只读)、等等;动作包括机器启动/停止、淡入/淡出、长期持续的过程(打印文件、随时间改变属性等)、等等;事件包括现场报警、门已开、数据已在流动、等等。任何物联网网络接口都可以用这种抽象来描述(参见图5)。通过使用这种抽象,应用程序可以有一个通用的支撑(a common anchor)来检索物联网服务的元数据,了解可以访问哪些数据和物联网服务的功能,以及如何访问这些数据和服务的功能。物联网设备的元数据,包括实现这种通用抽象所需的所有信息,都被记录在所谓的WoT的 TD(物描述)中。TD是W3C物联网中的一个核心构建块,可以被视为物联网实例的入口端(很像网站的index.html)。它提供以下信息:相关的数据和功能,使用哪种协议,数据如何编码和结构化,使用安全机制控制存取,以及进一步的机器可读和人可读的元数据。TD用JSON-LD表示,可以由物联网设备本身提供,也可以托管在外部的存储库中,如TD目录。图5 TD的概念图(图源:WoT网站)
总的来说,WoT是一个协议无关的方法,并提供了一个公共机制来定义如何将特定的协议(如MQTT、HTTP、CoAP或Modbus)映射到WoT的交互属性-动作-事件抽象中(参见图6)。这个映射和协议特定的元数据是由WoT绑定模板提供的。特定协议的绑定模板为客户端如何通过相应的面向网络的协议接口来激活每个WoT交互抽象提供了指导。图6 由WoT物描述TD可推断出WoT脚本API (图源:WoT网站)
可选的WoT脚本API构建块定义了一个ECMAScript(JavaScript)API,它可由WoT物描述规范推断出来,并支持WoT交互抽象。它定义了行为实现和基于脚本的WoT运行时之间的接口。但是请注意,WoT的实现并不局限于脚本环境。Java或C/ c++中的编程语言API也可以从WoT的脚本API中派生出来。
6 适应工业物联网应用的数据存取模型
其实从应用的角度看,工业系统需要实时、同步、协同的业务处理和制造过程,其重要基础就是全局的数据共享,而不是数据交换。这就要求有一个从数据存取架构的视角建立的数据存取模型,能够实现数据/信息的使用方与数据/信息的产生方解耦,就如在互联网中通过TCP/IP模型实现了数据/信息的存取与具体设备的地址脱钩那样。有人设想了这样的数据存取模型(见图7)。图7 设想的数据存取模型 (图源:IEB网站)
要使数据/信息的使用方与数据/信息的产生方解耦,一个重要前提是实现点对基础架构的通信连接,而不是点对点的连接。在“点对点”体系结构中,信息使用方必须发起的连接数量与系统中信息产生方的数量直接相关。信息产生方的数量还规定了必须在信息使用方一侧设计的不同协议和客户自定义语法解析功能的数量。因此,随着信息产生方数量的增加和实现的协议数量的增加,点到点模型变得不可持续。