OPC-UA的替代方案

20
有没有像OPC-UA一样的体面替代方案,用于访问由各种PLC组成的系统的过程数据?有没有一些平台无关且能够与不同品牌的产品进行“交流”的东西?
我听说过MQTT,但它似乎更像是一个传输协议,仅此而已。它没有像信息建模等高级功能。

如果您不关心暴露信息模式,只需要与机器在少量数据点上进行通信,我绝不建议使用OPC UA,而是选择AMQP、MQTT或任何其他消息传递协议,因为OPC UA标准的唯一目的并不适用于这种情况。 - Naushad Warsi
6个回答

21

OPC是与PLC通信的唯一标准方式。 OPC DA是旧的替代方案。 OPC UA是新的并且现在被推荐使用。 在OPC之前只有专有协议和共享协议,如Modbus,但它们只是像您提到的更低级别的传输协议。

特别是在信息建模方面,OPC UA非常独特。通过该功能,它为更高级别的系统和应用程序提供了新的通信可能性,除了普通的PLC通信外。

请注意,一些PLC也可以本地讲话OPC UA,这使其成为标准。

而且,OPC UA确实作为IEC 62541进行了标准化,确保它是独立的。

更新于17/07/19: 正如我在最近的文章中所写的那样,OPC UA现在也被定义为Industry 4.0 Communication

更新20/05/05: OPC UA版本1.04定义了Pub/Sub替代方案,在本地网络中使用UDP进行安全数据多播,使用AMQP/MQTT进行安全的基于经纪人的数据和事件传递到云系统。版本1.04还定义了WebSocket/JSON协议替代方案,可在Web应用程序中更轻松地使用。目前还未广泛使用,但希望将在2020-21时间范围内变得流行。


10
在实际工业应用中,MQTT并非OPC-UA的替代品。OPC在90年代的最初目标是提供一种标准通信机制和数据模型,使得实现该规范的客户端和服务器之间可以互操作。OPC-UA扩展并推广了数据模型和通信,同时也没有放弃核心目标。为了做到这一点,该标准必须指定时间戳格式、数据类型编码、历史值、告警等内容。
MQTT是一种消息传输层,其设计不提供互操作性。它不规定有效载荷的格式,也不指定如何传输特定的数据类型、时间戳、数值、层次结构或任何其他允许应用程序理解正在传输的数据的内容。你可以创建一个有效的MQTT服务器,发出XML、JSON或自定义格式的纯文本、加密、base-64编码等任何数据。客户端应用程序唯一与服务器交互的方式就是预先知道服务器将产生和接受哪种数据格式。
OPC-UA最近引入了发布/订阅机制以提高带宽利用率,缩小了MQTT目前所提供的通信带宽优势。同时,MQTT规范需要增长以指定数据格式以促进互操作性。预计会看到MQTT和OPC-UA之间的功能收敛,主要是MQTT增长以满足OPC-UA的需求。
目前,MQTT的实现方法要简单得多,这对于嵌入式和资源受限系统具有优势。但添加数据建模规范将有助于减少这种优势。
最重要的是,OPC-UA用于互操作性,而MQTT用于简单的自定义通信。在成为OPC-UA替代品之前,MQTT需要增长。

9
OPC-UA有一些非常有趣的部分,特别是涉及信息建模、互操作性和发布/订阅模式的部分。然而,尽管它是最严格意义上的标准,但我发现在web应用程序中使用它需要编写一个网关服务器,因为它使用原始套接字和二进制(虽然快速)序列化协议。这就是为什么我们在我的大学创建了一种名为Woopsa的替代协议。我们决定基于HTTP + JSON来构建它。我们试图制定一种类似于OPC-UA的协议:它具有信息建模、发布/订阅甚至多请求功能。它完全开源。我们刚刚发布了1.0版,网址在这里:http://www.woopsa.org/ 。您可以直接在我们的Github上获得源代码:https://github.com/woopsa-protocol/Woopsa。基本上,我们的协议只是使用HTTP + JSON的标准化RESTful API。例如,通过进行GET /woopsa/read/Temperature,您可以读取一个值,并以JSON格式回复您:
{"Value":24.2,"Type":"Real"}

您也可以使用 meta 关键字获取对象树,例如:GET /woopsa/meta/,将得到类似以下内容:

{
  "Name":"WeatherStation", 
  "Properties": [
    {"Name":"Temperature","Type":"Real"},
    ...
  ],
  "Methods": { ... }
  "Items": [ 
    "Thermostat",
    ...
  ]
}

[OPC UA]使用原始套接字和二进制(虽然快速)序列化协议。但自1.02版本以来,它还提供了一个XML + Soap + HTTPS协议绑定,并且正如@Jouni所提到的,从1.04开始还提供了WebSocket / JSON协议替代方案。这是否使它与Woopsa的重叠程度比Woopsa最初开始时更大? - RyanCu
2
我想它确实如此。然而,OPC-UA的规范仍然有数千页,而Woopsa只需要一个简短的HTML页面。我认为Woopsa仍然是一种轻量级、通用和可行的替代方案,可以取代OPC-UA。 - Florian Segginger
规范中似乎没有关于安全/加密的提及:http://www.woopsa.org/specifications/ - iGian
Woopsa使用HTTP协议。因此,它可以通过HTTPS进行传输,并且可以使用任何受其支持的身份验证方案! - Florian Segginger

1
MQTT作为I.o.T的首选协议正变得越来越流行。尽管它有其缺点,但其简单性通常被视为一种优势,而OPCUA则带有委员会设计的负担。
如果您需要将两者结合起来,您可以考虑尝试我们的简单网关mqtt2opcua

@NZFarmer 对我来说,MQTT似乎是替代OPC / OPC-UA的一个非常有前途的选择。但是,MQTT是否处理信息建模?如果是,如何处理? - cid
@cid MQTT 的核心是一个非常 pub/sub 框架。建议您查阅规范。 - NZ Farmer
@NZFarmer 是的,它可以在发布/订阅架构中正常工作。这回答了“如何”的问题。那么“什么”呢?我的意思是,OPC/OPC-UA最大的优势之一是它为数据定义了演示/建模。也就是说,这种数据将具有字段值、字段时间戳、字段单位等。MQTT怎么样?它是否定义了这个? - cid
@cid。 "一种对有效载荷内容不可知的消息传输方式" 参见:http://www.ibm.com/developerworks/library/ws-mqtt/ - NZ Farmer

1
我刚刚发布了另一种解决方案,名为ELTRA IoT。这个项目作为云服务作为中介和终端用户组件,充当设备表示或操作界面(https://www.eltra.ch/)。主要是为了简化CANopen设备与智能手机应用程序的集成,但我很快意识到它可以用于任何物联网项目。该项目的灵感主要来自CANopen和FDT架构。最初的想法是提供解决方案,以便在短时间内使用Web标准(如REST / JSON)将设备带入互联网(避免二进制协议、网关、防火墙、代理问题以及所有使整个过程更加复杂的人员问题)。Web标准(如HTTP / REST / JSON / WebSocket)与所有操作系统和架构都很兼容,并且也允许在任何现代语言中轻松进行最终用户应用程序集成。主要特点:
  • 设备和运营商均使用同一API
  • CANopen CiA-311数据模型表示
  • 节点、对象字典、索引、子索引、强类型数据、范围等。如果您了解CANopen,则可以熟练掌握。
  • 历史数据
  • 支持RPC - 执行自定义命令
  • 简单的云服务APIhttps://eltra.ch/docs
  • 标准身份验证方案
  • SSL加密
  • 跨平台解决方案,适用于Windows、Linux、Android、iPhone、Raspberry PI

SDK在Github上作为开源代码提供:

https://github.com/eltra-ch/eltra-sdk

目前,该库采用.NET Standard实现,并在Windows、Linux(x64和ARM32)、Android和iPhone上进行了测试。

Nuget包可在以下位置获取:

https://www.nuget.org/packages/Eltra.Connector/

如果OPC UA的复杂性过高,而Woopsa不适合您的设计,则ELTRA可能是一种替代方案。
免责声明:此项目是我的硕士论文的一部分,eltra.ch服务是我私人拥有的网站。

1

Unserver 是一个旨在解决此问题描述的产品。

它能够与不同的现场设备通信,并在其之上提供统一的HTTP API。 它通过Modbus RTU与设备集成,但将来还会添加其他常见协议。

简而言之,首先您需要像这样配置数据“标签”:

{
  "name": "tank1", 
  "device": "plc1", 
  "properties": [
    { 
      "name": "level", 
      "address": "HR0", 
      "type": "numeric", 
      "raw": "int16"
    }
  ]
}

然后,您可以使用自动创建的 API 端点与标签进行交互:

GET http://localhost:9000/tags/tank1

{
  data:{
    level: 1
  }
}

查看文档以获取更多信息。 该产品可供评估和非商业使用。

免责声明:我是团队的一员。希望这对您有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接