2016-01-20 281 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已經實現得非常一致。

希望有幫助!