2017-03-21 110 views
0

我有兩個程序,一個使用OpenSplice 6.7.1和另一個使用OpenDDS 3.10。OpenDDS和OpenSplice的互用性

它們都使用RTPS作爲協議中,相同的域ID目的地端口(I驗證使用的Wireshark)。

問題是他們沒有溝通。

我不知道我是否在做任何錯誤的配置...我使用OpenDDS的基本配置RTPS和OpenSplice我更改域ID後使用提供的ospl.xml。

這是我的配置文件。 對於OpenDDS:

[common] 
DCPSGlobalTransportConfig=$file 
DCPSDefaultDiscovery=DEFAULT_RTPS 
[transport/the_rtps_transport] 
transport_type=rtps_udp 

對於OpenSplice:

<OpenSplice> 
    <Domain> 
     <Name>ospl_sp_ddsi</Name> 
     <Id>223</Id> 
     <SingleProcess>true</SingleProcess> 
     <Description>Stand-alone 'single-process' deployment and standard DDSI networking.</Description> 
     <Service name="ddsi2"> 
      <Command>ddsi2</Command> 
     </Service> 
     <Service name="durability"> 
      <Command>durability</Command> 
     </Service> 
     <Service name="cmsoap"> 
      <Command>cmsoap</Command> 
     </Service> 
    </Domain> 
    <DDSI2Service name="ddsi2"> 
     <General> 
      <NetworkInterfaceAddress>AUTO</NetworkInterfaceAddress> 
      <AllowMulticast>true</AllowMulticast> 
      <EnableMulticastLoopback>true</EnableMulticastLoopback> 
      <CoexistWithNativeNetworking>false</CoexistWithNativeNetworking> 
     </General> 
     <Compatibility> 
      <!-- see the release notes and/or the OpenSplice configurator on DDSI interoperability --> 
      <StandardsConformance>lax</StandardsConformance> 
      <!-- the following one is necessary only for TwinOaks CoreDX DDS compatibility --> 
      <!-- <ExplicitlyPublishQosSetToDefault>true</ExplicitlyPublishQosSetToDefault> --> 
     </Compatibility> 
    </DDSI2Service> 
    <DurabilityService name="durability"> 
     <Network> 
      <Alignment> 
       <TimeAlignment>false</TimeAlignment> 
       <RequestCombinePeriod> 
        <Initial>2.5</Initial> 
        <Operational>0.1</Operational> 
       </RequestCombinePeriod> 
      </Alignment> 
      <WaitForAttachment maxWaitCount="100"> 
       <ServiceName>ddsi2</ServiceName> 
      </WaitForAttachment> 
     </Network> 
     <NameSpaces> 
      <NameSpace name="defaultNamespace"> 
       <Partition>*</Partition> 
      </NameSpace> 
      <Policy alignee="Initial" aligner="true" durability="Durable" nameSpace="defaultNamespace"/> 
     </NameSpaces> 
    </DurabilityService> 
    <TunerService name="cmsoap"> 
     <Server> 
      <PortNr>Auto</PortNr> 
     </Server> 
    </TunerService> 
</OpenSplice> 

我在做什麼錯?

回答

0

多供應商的互操作性已經在OMG的活動中反覆展示,但最近並未出現,所以可能兩種產品都會發生迴歸。

您的OpenSplice配置(除了domainId應與您的應用程序中使用的domainId相匹配,其中的用戶通常使用DDS :: DOMAIN_ID_DEFAULT來表示他們想要使用配置中指定的ID,如OSPL_URI環境變量指出的那樣)一個正確的默認配置。我確定您知道,如果您使用多宿主機器,則將要使用的接口/ IP地址的AUTO設置是潛在的混淆源。所以接下來要看看這兩個(DDSI)跡線和/或wireshark捕獲,看看你是否發現兩個廠商的DDSI線框(1.2爲PrismTech,1.3爲OCI)。

例如,在OpenSplice DDSI-traces中沒有發現供應商1.3的跡象,這表明仍然存在一些「基本」的通信問題。

請注意,在這些OMG事件中,我們通常在域「0」上使用(對於我們'捆綁的')iShapes示例和無模塊IDL主題類型規範來驗證互操作性,因此它不適用於您的應用程序的東西值得嘗試過(檢查/使用Wireshark結合那個例子太)

我還會繼續關注的社區論壇上的這個新的信息..

+0

我更新我的崗位上有關這個問題的論壇。 我修改了我的IDL,使它們無模塊化,但仍然沒有互操作性。我修改了OpenDDS提供的iShapes的IDL並使其無模塊化,並對源文件進行了必要的修改,但兩個iShapes之間仍然沒有互操作性。我按照你的建議添加了IP地址: 10.0.2.15

+0

我使用wireshark來跟蹤數據包,並且我注意到一些有趣的事情:OpenSplice使用正確的接口進行通信,它週期性地發送3個數據包長度相同,但是當我發佈我的數據時,發佈者會收到,但我在wireshark上看不到任何內容!沒有發送數據的痕跡! 當我在openSplice中使用openDDS時,當參與者連接時,openDDS開始發送HEARTBEAT數據包,這是檢測到另一個參與者時的正常行爲!但是,發送的數據和斷開連接仍未檢測到! –