2016-01-20 282 views
1

我是DDS领域的新手,需要对此有所了解。DDS中的互操作性

如何发布两个供应商之间的共同主题以实现DDS的互操作性?

方案是: 假设有两个供应商产品V1和V2。 V1有一个发布者在主题T1上发布。 V2希望订阅此主题。订户(V2)如何知道存在主题T1?

我对域级有类似的疑问,订户是否知道它必须参与哪个域?

我正在使用OpenDDS。供应商之间

由于

回答

1

互操作性是可能的,并且定期测试/由主供应商证明。

您将需要配置您的DDS实现以使用RTPS(我认为RTPS2当前),而不是供应商可能使用的任何专有传输。这可能是默认启用的。

在参与哪个域方面,您可以编程方式在特定域(与哪个域连接的域可能由配置文件控制)中创建域参与者,以及您的所有其他实体(发布者,订阅者等)创建然后属于该域参与者,因此在该域中运作

0

要在@ rcs的答案上建立一点...您必须做的实际工作量取决于DDS实现(OpenDDS,RTI,Prismtech .. ),因为他们会有不同的默认值。如果你在两端使用相同的配置,那么你的配置变得简单很多,因为默认值应该与域和RTPS一致。

您需要确保下列搭配:

  • 域ID
  • 域Partion
  • 交通运输(我建议RTPS,2.1和2.2的版本FWIW差异在我的经验还没有要紧)
  • TCP或UDP
  • 发现端口和数据端口 - 这或多或少取决于您使用的实现方式以及是否在第二个端点使用相同的实现e连接,如果使用相同的话,它们将具有相同的默认值。
  • 确保一个话题发表主题的其他订阅了,这将适用于主题和类型相匹配(see more here
  • 序列化数据的
  • 发现(单播与组播,确保 什么你选择的设置是有效的,例如:两个设备是相同的 组播组)
  • QoS设置将需要排队,但我认为违约将可能工作(read more here
  • 获取形状试玩机之间的工作你首先在努力,这有一些基本的理智检查是否可以使用给定的配置和网络设置。我看到的每个供应商/实施都有一个可以运行的形状演示,例如here is RTI's

这就是我现在能想到的,希望有所帮助。我发现DDS文档是非常好的,特别是如果你知道什么时候可以(以及什么时候不能)使用任何供应商的文档的答案来实现你的实现(例如:在RTI的文档或论坛上找到答案,以及它是否适用于你的OpenDDS应用程序)。通常解决方案是相似的,但你会发现RTI支持最多,RTI + Prismtech拥有最好的文档。

0

DDS RTPS协议交换发现信息,以便参与同一个域(!)的不同应用程序知道谁在那里以及他们提供/请求什么。您需要确保这两个应用程序使用相同的域ID(在域参与者上指定)。另外,由于某些实现允许使用不同的传输选项,因此请务必使用RTPS(有时称为DDSI)网络。

RTPS规范包含从域ID到端口号的映射,所以如果来自不同供应商的应用程序使用相同的ID,它应该可以正常工作。然而,实现可能会用配置覆盖端口号。

为了尽量提高应用程序正常通信的机会,请确保它们使用相同的IDL数据模型。供应商有不同的方法来键入不完全匹配的进化/映射类型,并不是所有的人都实现XTypes规范(还)。

此外,由于某些实现比其他实现更严格,请确保您保持在规范的范围内。这意味着主题名称只应包含字母数字字符(我有时会看到':'来表示范围,这是不允许的)。

供应商之间肯定无法正常工作的是瞬态/持久性或TCP上的通信,因为两者尚未标准化。 TRANSIENT_LOCAL应该可以工作。 TRANSIENT_LOCAL和TRANSIENT之间的区别在于,在TRANSIENT_LOCAL中,发布者(作者)离开系统后数据不再对齐,而使用TRANSIENT时,数据仍然可用。

另请注意,对于供应商之间的API级别互操作性,最好的机会是使用新的isocpp API,因为在我看过的供应商实现中,该API已经实现得非常一致。

希望有帮助!