引言

工业零碎须要确保数据的无缝替换,因而对于高效、平安的通信协议具备极高的依赖性。MQTT Sparkplug 和 OPC UA 是两个常常被提到的工业协定。本文将全面比拟 MQTT Sparkplug 和 OPC UA 以及它们的衍生版本,帮忙您更分明地理解哪种协定更适宜您的需要。

OPC Classic 和 OPC UA

OPC UA 的前身是 OPC Classic(也称为 OPC DA 或 OPC Data Access),是由 OPC 基金会开发的一套工业自动化规范。OPC Classic 标准于 1996 年首次公布,它定义了一种标准化的办法,用于在软件应用和工业硬件设施(如传感器、控制器和可编程逻辑控制器)之间替换数据。

然而,OPC Classic 有个显著毛病:它与微软 Windows 操作系统及其专有的 DCOM 技术严密耦合。这种依赖性重大影响了协定的可用性、扩展性、互操作性、安全性和平台独立性,这对一个凋谢规范来说是微小的制约。

为了克服这些限度,OPC 基金会于 2006 年开始开发了 OPC UA (OPC Unified Architecture) 作为 OPC Classic 标准的后继者。这两种标准在性能上是等效的,但应用不同的底层通信技术。此外,OPC Classic DA 3.0 也于同年公布,并且至今仍在应用中。

为物联网而生的协定:MQTT 的演进

在 20 世纪 90 年代末,Andy Stanford-Clark 和 Arlen Nipper 参加了一个对于管道监测的我的项目,该我的项目须要一种轻量级协定,用于与近程传感器和设施进行通信。该我的项目要求在低功耗、低带宽的环境下实现监测性能。然而,过后的音讯传输协定,如 HTTP 和 SMTP,被认为过于臃肿和低效,不适宜这种非凡的场景。

为了应答这些挑战,一种公布/订阅模式的音讯传输协定 MQTT 应运而生。MQTT 以其精简的代码和极低的带宽耗费而著称,因而在低功耗、低带宽的场景下具备显著的劣势。它的次要指标是实现设施和零碎之间的大规模实时数据交换,即便面对不同的数据格式和构造,也能保障数据通信的标准化。这一特点使得 MQTT 成为物联网和机器对机器(M2M)利用的现实抉择。

MQTT 于 2010 年被结构化信息规范促成组织(OASIS)公布为凋谢规范,从而使其成为各个组织和行业可应用的通信协议。随后,在 2014 年公布了 MQTT 3.1.1,引入了一些新的个性,例如改良的错误处理和对服务质量(QoS)级别的反对。再起初,在 2019 年公布了 MQTT 5.0,进行了重大的改良,包含对自定义属性的反对、长久会话的实现以及错误报告的优化。

优势互补:OPC UA over MQTT

MQTT 公布/订阅模型相比经典 OPC UA 客户端-服务器模型有以下几个劣势:

  • 可扩展性:公布/订阅模型能够无效地解决大量的设施和零碎,非常适合工业自动化和物联网利用。
  • 实时数据交换:公布/订阅模型是为实现实时数据交换而专门设计的,它能让设施和零碎及时感知和适应环境变动。
  • 缩小网络流量:公布/订阅模型通过只传递设施和零碎须要的数据,而非所有数据,能够无效地升高网络流量。

2018 年,OPC 基金会公布了 OPC UA 公布/订阅标准,它为 OPC UA 制订了一种公布/订阅的通信模型,该模型能够采纳 MQTT 协定作为传输方式。OPC UA 公布/订阅模型十分弱小,为工业自动化和物联网利用带来了微小的益处。

晋升工业连接性:MQTT Sparkplug 标准

MQTT 协定在物联网场景中获得了微小的胜利,但因为互操作性有余,它在工业自动化零碎中的利用受到了限度。为了解决这个问题,Cirrus Link Solutions 在 2016 年推出了 Sparkplug 标准,旨在简化 MQTT 在工业自动化零碎中的部署和应用。该标准为 MQTT 音讯定义了一个标准化的格局,使得不同设施和利用之间可能不便地进行数据交换。

Sparkplug 的一个显著特点是它反对设施之间的双向通信。这种能力使得设施不仅能够发送命令,还能够接管来自网络中其余设施的反馈。

这篇博客通过介绍 5 个要害概念,论述了为何 MQTT Broker 是实现 Sparkplug 设计准则的现实抉择:Sparkplug 标准中对于 MQTT Broker 的 5 个要害概念。

OSI 模型概述

MQTT 和 OPC UA 是工业自动化和物联网利用中罕用的两种协定,它们领有不同的架构和设计,体现了各自的用处。以下是 MQTT、OPC UA 及其变体在开放系统互联(OSI)模型方面的比拟:

OSI 模型MQTTOPC UAMQTT SparkplugOPC UA over MQTT
应用层公布/订阅机制OPC UA 通信(60 种数据类型)Sparkplug 通信(18 种数据类型)OPC UA
公布/订阅通信
表示层未定义UA-JSON
UA-XML
UA-Binary
ProtobufUA-JSON<br/>UA-XML<br/>UA-Binary
会话层无会话客户端-服务器会话治理Sparkplug 会话感知无会话
传输层TCP/IPTCP/IPMQTTMQTT

传输层:MQTT 和 OPC UA 都应用 TCP/IP 作为底层通信协议。MQTT Sparkplug 和 OPC UA over MQTT 则应用 MQTT 作为传输协定,它们都采纳了 MQTT 的公布/订阅模型。

会话层:OPC UA 蕴含负责管理客户端和服务器之间连贯的会话层,解决诸如会话建设、身份验证和加密等工作。相比之下,MQTT 不具备会话层治理性能。然而,MQTT Sparkplug 通过在会话层引入 Sparkplug 会话感知来补救这个有余。

表示层:OPC UA 领有定义良好的信息模型,该模型定义了客户端和服务器进行数据交换时数据的构造和语义,例如 UA-JSON 和 UA-binary。相比之下,MQTT 不足正式的信息模型,而是依赖于基于主题的音讯来实现客户端和服务器之间的数据通信。MQTT Sparkplug 则是通过指定 Google Protobuf 作为音讯格局来补救这一差距,以加强 MQTT 的能力。

应用层:MQTT 和 OPC UA 在应用层协定上有显著的区别。MQTT 应用公布/订阅模型,通过主题来组织音讯,而 OPC UA 应用客户端/服务器模型,通过分层对象模型来组织数据。OPC UA 公布/订阅标准是对 OPC UA 客户端/服务器模型的一种扩大。

MQTT Sparkplug 和 OPC UA 比照

MQTT Sparkplug 和 OPC UA 各有优劣,因而在不同的应用场景中,可能会呈现某个协定比另一个更加实用的状况。这两种协定及其衍生协定之间的一些次要区别如下:

指标MQTTMQTT SparkplugOPC UAOPC UA over MQTT
音讯传输模型公布/订阅公布/订阅客户端/服务器公布/订阅
带宽应用开销最低,低带宽和低功耗开销最低,低带宽和低功耗高代码占用,高带宽高代码占用,高带宽
音讯载荷未定义轻量级音讯,通常小于 OPC UA简单的数据类型,其音讯大小能够远大于 MQTT Sparkplug简单的数据类型,其音讯大小能够远大于 MQTT Sparkplug
互操作性不具备互操作性具备互操作性(18 种数据类型)高度互操作性(60 种数据类型)高度互操作性(60 种数据类型)
扩展性高度可扩大高度可扩大,每秒能解决百万级音讯可扩展性较好,但须要更简单的架构来解决大量数据比 OPC UA 客户端/服务器模型具备更好的可扩展性
集成便利性应用简略,配置要求起码应用简略,配置要求起码须要较多的装置和配置须要较多的装置和配置
服务质量QoS 0(至少一次)、QoS 1(至多一次)和 QoS 2(仅一次)QoS 0(至少一次)、QoS 1(至多一次)和 QoS 2(仅一次)提供牢靠的传输层,确保消息传递有序且不失落提供牢靠的传输层,确保消息传递有序且不失落
状态感知
主动发现
应用领域物联网、家庭自动化和 M2M 利用工业物联网和 M2M 利用工业自动化工业自动化
实时性
安全性安全性不如 OPC-UA安全性不如 OPC-UA数字证书、数字签名、数据加密和平安认证数字证书、数字签名、数据加密和平安认证
信息模型不具备内置的信息建模反对反对简单的信息建模,但不迭 OPC UA 多反对简单的信息建模零碎,容许创立简单的数据结构和模型反对简单的信息建模零碎,容许创立简单的数据结构和模型

简而言之,OPC UA 是一个凋谢规范,它蕴含了一套定义明确的数据类型标准。而 MQTT Sparkplug 也是一个凋谢规范,但它在数据类型的标准化方面做得不够。因而,在数据传输过程中,MQTT Sparkplug 产生的协定开销更小。

结语

MQTT Sparkplug 应用了轻量级的音讯传输协定,非常适合低带宽或不稳固的网络环境。而 OPC UA 应用了更弱小的音讯传输协定,可能解决更多的数据量,更适宜高速和平安的网络环境。

OPC UA 和 MQTT 之间的竞争始终继续至今。目前,EMQ 正在推出针对汽车行业的 MQTT over QUIC 协定,而 OPC 基金会也公布了 OPC UA over TSN。OPC UA over TSN 提供了一种在以太网上传输实时数据的标准化办法,旨在简化简单的工业自动化和控制系统。

版权申明: 本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/a-comparison-of-iiot-protocols-mqtt-sparkplug-vs-opc-ua