2017-03-21 149 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数据包,这是检测到另一个参与者时的正常行为!但是,发送的数据和断开连接仍未检测到! –