比较MQTT与OPC-UA

在今天的博客中,我们将比较工业物联网(IIoT)环境中最流行的两种协议:MQTTOPC-UA,以试图阐明它们的区别和用途。让我们从这两个众所周知的消息交换协议的主要特征的简短摘要开始,其中MQTT是IoT世界中最受欢迎的协议之一,并且在几年前,还是工业环境中的OPC UA。

MQTT

MQTT(消息队列遥测传输)是一种轻量级的消息协议,该协议基于订阅发布模型,其中发布者将消息发送到服务器,并且该发布者将消息转发给订阅者,从而避免了订阅者和发布者之间的点对点连接,这使订阅者不需要知道谁提供了所订阅的信息。MQTT旨在在低资源设备,低带宽网络和高延迟中实现。

遵循订阅发布模型的MQTT协议在网络中定义了两个实体:代理(也称为服务器)和客户端。客户端是将与代理进行交互的任何设备,可以发布消息或订阅主题。主题是在代理中发布消息的路由。这有助于我们对信息进行分类并更好地管理消息。

消息遵循以下格式:

Company/oven1/temperature

通过使用此结构定义自己,主题使我们可以使用通配符来增加其灵活性,从而使我们可以预订多个主题。
#-通配符多级

±通配符单级

让我们假设我们现在有以下主题:

company/oven2/temperature

company/oven/humidity

比较MQTT与OPC-UA_第1张图片
使用通配符,我们可以订阅 "company/oven1/ 中的所有消息,选择主题 company/oven1/#,如果现在我们只想接收烤箱的所有温度,则只需订阅该主题 company/*/temperature。在代理发布了它们各自主题内的所有消息之后,代理负责接收消息并将它们转发给订阅了这些主题的客户。

如果需要发送安全消息,则通过TCP连接或加密的TLS连接建立用于发送消息的客户端-服务器连接。

该消息可以是有效负载的任何数据格式,例如JSONXML加密的二进制Base64。这为协议提供了很大的灵活性,但是目标客户端必须能够分析负载的类型。

该协议支持发送具有服务质量的消息,剩下三个不同的级别可供选择:

  • 0,无服务质量。该消息仅发送一次,以防客户端不可用,该消息将丢失。
  • 1,消息将被重新发送,直到至少到达一次,这可能导致消息接收中的某些重复。
  • 2,该消息将仅到达客户端一次。

对于所有这些功能(例如低带宽消耗),其在设计消息内容时的灵活性使其成为低功耗设备的理想选择,可以将信息发送到服务器,例如ArduinoRaspberry Pi商用家庭自动化解决方案,其中平台开发人员本身知道其消息内容应如何。

OPC-UA

OPC UA(开放平台通信统一体系结构)是一种独立于平台的标准,通过该标准,各种类型的系统和设备可以通过在客户端和服务器之间发送请求和响应消息进行通信,或者通过订阅发布模型与MQTT类似地进行通信。

OPC UA服务器定义了可以提供给客户端的服务,可以由客户端动态发现的对象模型以及遵循协议本身定义的数据类型的数据模型。

一个客户端可以与一个或多个服务器通信,一个服务器可以相同的方式与多个客户端通信。服务器可以充当与其他服务器通信的客户端。

比较MQTT与OPC-UA_第2张图片
OPC UA提供了一致且集成的地址空间(AddressSpace)和服务模型。这使单个服务器可以将数据,警报和事件集成到该地址空间中,并使用其集成服务提供对它们的访问,该集成服务包含用于客户检测和恢复通信故障的机制。

比较MQTT与OPC-UA_第3张图片

OPC UA提供了用于对用户,客户端和服务器进行身份验证,检查通信的完整性并通过加密和签名消息在传输级别提供安全性的安全性机制。

OPC UA寻求通过建立通用的通信形式来促进不同制造商的设备之间的操作方式,这使其在不同制造商的设备可以共存的工业环境中特别有用,允许所有这些设备与单个客户端进行通信。 ,甚至设备之间也是如此。

比较

当前,在看到它们的主要特征之后,我们可以肯定地说,对这两个协议进行比较并不完全公平。

MQTT是一种协议,其中数据字段编码及其内容特定于每个应用程序,因此,当消息的通信用于针对那些数据字段开发的特定应用程序时,它将很有用。

OPC UA(统一体系结构)是一个完整的体系结构,其中通信协议只是一部分。OPC UA应用程序允许查看所有网络节点,方法,数据结构。通信既可以基于已发布的订阅模型,也可以基于客户端服务器模型,在该模型中,服务器显示一组服务来访问网络的节点,从而使服务器的读取,写入,调用方法等成为可能。

现在让我们举一个例子,例如编写PLC中托管的变量。

正如我们前面所看到的,MQTT被设计为轻量级且节能的。因此,它没有实现对主题的搜索,也没有实现对消息发布位置的代理的搜索,这样做的前提是客户必须事先知道它。同样,它没有为在机器中写入变量实现任何机制。

因此,对于此实现,我们将需要一个客户端程序,该客户端程序已预订代理中的主题,该程序必须处理发布的消息,访问PLC并写入变量。

这有几个问题:

在处理消息时,发布的消息没有特定的格式,因此,订户必须知道他将接收消息的格式。
根据制造商的不同,在PLC中写入数据的方式也有所不同。
解决了这些问题后,我们的客户端程序将仅对特定的计算机和发布者有效。

所有这些问题都可以通过OPC UA解决。为了在OPC UA服务器中写入变量,只需来自OPC客户端本身的一系列请求即可。协议将遵循的步骤是:打开安全通道,查看可用端点的列表,创建会话,写入变量的值,关闭会话并关闭通道。

另一方面,不发送写请求的发送而进行写操作的带宽消耗在使用MQTT协议发送要写的变量时消耗了约600字节,大约消耗了17个字节。

我们得出的结论是,每种协议都必须按其设计目的使用。MQTT适用于资源少,带宽低,网络延迟高的设备,或者适用于需要该协议和OPC UA适用于工业环境的灵活性的应用程序,因为它寻求统一与不同工业设备制造商的操作方式,这是一个完整的解决方案,从设备的通信到它们的互操作性,这些方面的带宽消耗的增长并不是至关重要的,以至于不能弥补OPC UA带给我们的所有优势。

Muutech基于Zabbix和Grafana的Minerva平台可同时使用这两种协议,因此,如果您需要一个将IoT世界与工业和IT系统世界结合在一起的监控平台,请随时与我们联系。

你可能感兴趣的:(比较MQTT与OPC-UA)