工业物联网协议对比:MQTT Sparkplug vs OPC-UA

2023-11-05

引言

工业系统需要确保数据的无缝交换,因此对于高效、安全的通信协议具有极高的依赖性。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 模型 MQTT OPC UA MQTT Sparkplug OPC UA over MQTT
应用层 发布/订阅机制 OPC UA 通信(60 种数据类型) Sparkplug 通信(18 种数据类型) OPC UA
发布/订阅通信
表示层 未定义 UA-JSON
UA-XML
UA-Binary
Protobuf UA-JSON
UA-XML
UA-Binary
会话层 无会话 客户端-服务器会话管理 Sparkplug 会话感知 无会话
传输层 TCP/IP TCP/IP MQTT MQTT

传输层: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 各有优劣,因此在不同的使用场景中,可能会出现某个协议比另一个更加适用的情况。这两种协议及其衍生协议之间的一些主要区别如下:

指标 MQTT MQTT Sparkplug OPC UA OPC 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

工业物联网协议对比:MQTT Sparkplug vs OPC-UA 的相关文章

  • 在Linux环境搭建Java版Minecraft(我的世界)服务器

    文章目录 前言 一 帮助轻松开服的工具 1 Xshell 2 XFTP 二 开服步骤 1 准备一个可以满足你需要的Linux服务器 2 安装工具 3 连接服务器 4 配置服务器 确保你已经完成第三步 成功连接上了服务器 1 安装Java 如
  • HDFS入门和应用开发场景案例:如何模拟实现分布式存储?

    如何解决海量数据存的下问题 1 传统式存储方式 应对文件存储服务 传统做法是在服务器上部署文件服务比如FTP 但是随着数据变多 会遇到存储瓶颈 此时 本能的操作反应是 内存不够加内存 磁盘不够加磁盘 单机纵向扩展 但是单机能够扩展的内存磁盘

随机推荐

  • 使用Python进行名片OCR(识别姓名,职务,电话,Email邮箱)

    上一篇博客介绍了如何通过以下方式自动OCR和扫描收据 检测输入图像中的接收 应用透视变换以获得收据的自顶向下视图 利用Tesseract对收据上的文本进行OCR 使用正则表达式提取价格数据 这篇博客将介绍如何使用Python对名片进行OCR
  • JAVA面试题 整合版

    1 List Set和Map 的区别 List 以索引来存取元素 有序的 元素是允许重复的 可以插入多个null Set 不能存放重复元素 无序的 只允许一个null Map 保存键值对映射 List 底层实现有数组 链表两种方式 Set
  • 无需MS Office!使用Aspose在C ++中以编程方式将 DOCX 转换为 DOC

    Microsoft Word 文档有两种格式 DOC 和 DOCX DOC 是一种较旧的格式 而 DOCX 是它的继任者 可以将 DOCX 文件转换为 DOC 格式 反之亦然 在本文中 将学习如何将 DOCX 文件转换为 DOC 格式以及如
  • Guava学习之Multisets

    今天谈谈Guava类库中的Multisets数据结构 虽然它不怎么经常用 但是还是有必要对它进行探讨 我们知道Java类库中的Set不能存放相同的元素 且里面的元素是无顺序的 而List是能存放相同的元素 而且是有顺序的 而今天要谈的Mul
  • 【软考初级指南】软考网络管理员如何备考通过,一个月足矣。

    文章目录 写在前面 涉及知识 1 前期准备 A 教材重难点 小于一个星期 B 远古真题测试 一周时间 2 温习阶段 一周时间 A 常错知识点文章整理 B 错题集的整理 3 冲刺刷题 一周时间 A 近几年真题 B 近几年调整 4 考场复习 写
  • Qt制作一个简单的电子时钟

    电子时钟 新建桌面应用程序 项目名LCDClock 类名Clock 基类QDialog 取消产生界面文件 当前项目添加C 类DigitalClock 基类QLCDNumber 编辑digitalclock h文件 clock h ifnde
  • 动手学深度学习_个人笔记01_李沐(更新中......)

    序言 神经网络 本书中关注的DL模型的前身 被认为是过时的工具 深度学习在近几年推动了CV NLP和ASR等领域的快速发展 关于本书 让DL平易近人 教会概念 背景和代码 一种结合了代码 数学和HTML的媒介 测试深度学习 DL 的潜力带来
  • 桌面点击:右键点击-显示设置,提示“该文件没有与之关联的程序来执行该操作“解决方法总结

    解决方法1 解决了我的问题的方案 1 WIN R组合键 运行 输入regedit 2 打开注册表 regedit 3 定位到 HKEY CURRENT USER software classes 4 找到ms settings 5 删除或重
  • Java 接口

    目录 1 接口的概念 2 接口的格式 3 接口的使用 4 接口的特性 4 1接口是一种引用类型 但是不能通过直接new接口的对象 4 2接口中的方法只能public修饰 4 3接口中的方法不能在接口实现 4 4重写接口方法时 不能使用默认的
  • pytorch 将模型作为特征提取器(提取中间层特征)

    目的 需要加载自己训练好的最好模型作为一个特征提取器 也就是说需要提取最后一层全连接层输出的内容 解决方法 参考了两个方法 详见文末 设参数直接提取 准备一个toy model来说明 class MyModel nn Module def
  • RabbitMQ系列-简介

    RabbitMQ 简介 文章目录 RabbitMQ 简介 RabbitMQ 介绍 RabbitMQ 工作原理 典型应用场景 异步处理 流量削峰 应用解耦 RabbitMQ 组件介绍 Queue Exchange 1 Direct 2 Fan
  • Java多线程 - 线程通信(线程协作)

    生产者消费者模式 举个例子 我作为消费者去肯德基买鸡块吃 正常情况下 如果还有鸡块的话就直接卖给我了 如果没有的话 前台就会通知后面的大厨进行制作 那么大厨就相当于是生产者 大厨做好之后会给到前台 然后前台通知我 消费者 来取餐 在线程中
  • VSphere系列教程(一):ESXI 6.5 的安装和使用

    一 目的 本文是对 VMWare ESXI 6 5 的部署及简单使用的说明 仅作为备忘 这里直接基于内嵌的 Web Client 对 ESXI 主机进行管理 不涉及 VCenter 的内容 二 安装部署步骤 2 1 制备启动 U 盘 下载镜
  • 键盘输入平方(m²)或立方(m³)等特殊字符

    第一种方法 直接通过拼音打出 第二种方法 Alt键配合小键盘数字组合 Alt 178 平方 m Alt 179 立方 m Alt 41420 对号 Alt 41409 错号 其它特殊字符表 按键组合 字符 Alt 41689 Alt 416
  • 46. C# -- 部分方法和部分类(partial)

    C 2 0 可以将类 结构或接口的定义拆分到两个或多个源文件中 在类声明前添加partial关键字即可 代码 CharTypesPrivate cs using System using System Collections Generic
  • TypeScript基本操作,配置文件tsconfig.json详解,vscode和HBuilderX基本配置

    Node 基本命令 npm安装依赖 npm install xxx 利用 npm 安装xxx依赖到当前命令行所在目录 npm install xxx g 利用npm安装全局依赖xxx npm install xxx save 安装并写入pa
  • iphone下拉菜单卡住了_苹果手机怎么下拉菜单 苹果x右上角下拉失灵怎么办

    苹果手机下拉菜单怎么设置 苹果手机下拉菜单的设置步骤如下 1 打开主屏上的设置应用 2 在设置列表中找到控制中心一栏 点击进入 3 接下来请关闭在控制中心列表下的二个选项 4 随后我们再重新打开这二个选项 然后再尝试下拉调出通知中心菜单就好
  • Qt中的信号和槽

    信号和槽的定义和使用 信号和槽的相关概念 用信号和槽 实现一个功能 1 定义teacher和student两个类 继承Qobject 2 teacher类发送信号hungry student类接受信号 用槽函数treat 响应 studen
  • warning: LF will be replaced by CRLF in

    解决LF 和 CRLF的问题 情景 今天在拉取代码的时候发现代码全都报红了 原因就是这个warning LF will be replaced by CRLF in 我用的是windows 同事用的是mac系统 其实是在换行的时候不同的系统
  • 工业物联网协议对比:MQTT Sparkplug vs OPC-UA

    引言 工业系统需要确保数据的无缝交换 因此对于高效 安全的通信协议具有极高的依赖性 MQTT Sparkplug 和 OPC UA 是两个经常被提到的工业协议 本文将全面比较 MQTT Sparkplug 和 OPC UA 以及它们的衍生版