我想知道 OPC(开放平台通信)和 DDS(数据分发服务)之间的区别。
我对这两个框架的理解是: 机器上的通信中间件,用于简化复杂的网络编程。它们两者都用于通过消息传递在物理上分开的机器上进行程序通信。它们采用客户端-服务器模型作为 TCP/IP 套接字进行通信,但它们可以以多 2 多的方式交换数据。此外,DDS 经常用于飞机和军舰等关键系统。
如果有任何误解,或者您知道它们之间的一些差异,请告诉我。
我想知道 OPC(开放平台通信)和 DDS(数据分发服务)之间的区别。
我对这两个框架的理解是: 机器上的通信中间件,用于简化复杂的网络编程。它们两者都用于通过消息传递在物理上分开的机器上进行程序通信。它们采用客户端-服务器模型作为 TCP/IP 套接字进行通信,但它们可以以多 2 多的方式交换数据。此外,DDS 经常用于飞机和军舰等关键系统。
如果有任何误解,或者您知道它们之间的一些差异,请告诉我。
(在 Basil 的评论之后编辑,在最初的帖子之前 :))
我希望您的意思是 OPC-UA,因为 OPC 已被统一架构实现所取代。有点过头了,OPC 只不过是 Windows COM/DCOM,UA 是作为 SOA 的完全重做。
DDS 互操作性规范需要 UDP/IP 和用于匿名发现的多播,而不是 TCP/IP。可以使用 TCP,但还没有规范,允许不同的供应商按照他们想要的方式实现它。假设一个供应商的 TCP/IP 传输不能与另一个供应商的 TCP/IP 传输一起工作(也适用于共享内存传输等。它们不可互操作)。
OPC-UA 通过类似 HTTP 的协议使用 restful 通信。TCP 不是确定性的,因此您无法保证实时了解正在发生的事情。UDP 是尽力而为(RTPS2,DDS 使用的协议包括通过 UDP 提供可靠流量的方法,即在更高的协议级别提供可靠性),但至少您的应用程序知道数据已经/没有及时到达,并且可以做出相应的反应。
OPC-UA 默认是客户端/服务器(但如果您希望在嵌入式系统上实现服务器的开销,可以将其设置为点对点)。DDS 是匿名的点对点(但将其设置为客户端-服务器就像只为给定主题实现一个订阅者一样简单)。
OPC-UA 针对工业控制 (SCADA)。DDS 适用于几乎任何机器对机器的连接,其中“机器”被定义为某种硬件,运行某种代码,可以访问 UDP/IP 堆栈和足够的 RAM 来支持数据量/品种/速度/可变性/供应商/v...设备的要求。
两者完全相互断开,并且独立于平台(硬件、操作系统、语言等),但实现方式不同。DDS 将数据提升到系统的完全合格的对等点:发布者发布“数据”。订阅者订阅“数据”。它不是“发布者与订阅者对话”。
OPC-UA 使用内部协议(opc-tpc:// 或 https://)和 RESTful。很难搞砸。
OPC(基础)和 OMG(开放标准机构)都测试实现之间的互操作性。
QoS:DDS 中的 QoS 本身就是一个字段。你会印象深刻的。你会感到惊讶。当两个对等点,在同一个主题上,使用完全相同的类型定义,在同一个子网上,仍然不会互相交谈时,你会感到震惊、困惑和沮丧地哭泣。然后你会说,‘哦。呃,'更改 QoS 文件中的一项设置,一切都会再次变得甜蜜和轻松。
因为 OPC-UA 是针对特定用例的,所以除了特定用例需要之外,不需要任何 QoS。DDS 功能更强大/QoS 意识更强,因为它不限于单个用例。
DDS 通常使用但不限于 UDP 多播进行发布/订阅,OPC UA 可以使用 TCP 进行点对点交互或使用 UDP 多播进行发布/订阅。是的,DDS 开始用于军事应用,而 OPC UA 起源于过程控制和制造。
OPC 基金会的 DDS OPC UA 第 14 部分描述了如何在 DDS 上运行 OPC UA 服务。OMG 的 DDS/OPC UA 规范描述了如何通过 DDS 公开 OPC UA 服务器。
两者的区别在于 OPC UA 在地址空间中公开数据,而 DDS 使用主题公开数据。地址空间描述了类型和实例及其关系。主题更面向文档,但也包括 QoS。考虑这一点的一种方法是,DDS 有效地提供了一个 select 和 from 子句来访问数据,而 OPC UA 提供了一个 select、from 和 where 子句。准确地说,DDS 也有 where 子句,但它不能扩展到大型系统。