2017-03-21 4 views
0

J'ai deux programmes, l'un utilisant OpenSplice 6.7.1 et l'autre utilisant OpenDDS 3.10.Interopérabilité OpenDDS et OpenSplice

Ils sont tous deux utilisent RTPS comme protocole, le même id de domaine et le port de destination (I vérifié en utilisant wireshark).

Le problème est qu'ils ne communiquent pas.

Je ne sais pas si je fais quelque chose de mal avec la config ... J'utilise la configuration de base pour OpenDDS avec SPTR et OpenSplice J'ai utilisé le fourni ospl.xml après avoir modifié l'ID de domaine.

Voici mes fichiers de configuration. Pour OpenDDS:

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

Pour 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> 

Qu'est-ce que je fais mal?

Répondre

0

L'interopérabilité multifournisseur a été démontrée à plusieurs reprises lors d'événements OMG, mais pas récemment, alors peut-être qu'une régression s'est produite avec/dans l'un ou l'autre des produits. Votre configuration OpenSplice est (en dehors de domainId qui doit correspondre à celle utilisée dans votre application où les utilisateurs utilisent généralement DDS :: DOMAIN_ID_DEFAULT pour indiquer qu'ils veulent utiliser l'ID spécifié dans la configuration comme indiqué par la variable d'environnement OSPL_URI) une configuration par défaut appropriée. Je suis sûr que vous êtes conscient que le réglage AUTO de l'interface/adresse IP à utiliser est une source potentielle de confusion si vous utilisez des machines multi-hébergées. Donc, la prochaine étape consisterait à regarder les traces (DDSI) et/ou les captures wireshark et voir si vous voyez des trames-fil DDSI pour les deux fournisseurs (1.2 pour PrismTech, 1.3 pour OCI). Lorsque, par exemple, il n'y a aucun signe d'identification du fournisseur 1.3 dans les traces DDSI OpenSplice, cela suggère qu'il existe encore des problèmes de communication «fondamentaux». Notez que lors de ces événements OMG, nous avons typiquement utilisé l'exemple iShapes (for us 'bundled') sur le domaine '0' et la spécification de type de sujet IDL sans module pour vérifier l'interopérabilité, donc cela ne fonctionne pas pour votre application qui est quelque chose de la peine d'essayer trop (et vérifier/Wireshark en combinaison avec cet exemple aussi)

Je vais aussi continuer à regarder le forum communautaire pour de nouvelles informations sur ce ..

+0

je mis à jour mon post sur la forum sur ce problème. J'ai modifié mes IDL et les ai rendus sans module mais toujours pas d'interopérabilité. J'ai modifié l'IDL de iShapes fourni par OpenDDS et l'ai rendu sans module et ai fait les modifications nécessaires sur les fichiers source mais toujours pas d'interopérabilité entre les deux iShapes. J'ai ajouté l'adresse IP comme indiqué: 10.0.2.15

+0

J'ai utilisé wireshark pour tracer les paquets et j'ai remarqué quelque chose d'intéressant: OpenSplice utilise la bonne interface pour communiquer, il envoie périodiquement 3 paquets qui ont la même longueur mais quand je publie mes données, l'éditeur reçoit mais je ne vois rien sur wireshark!Il n'y a aucune trace des données qui sont envoyées! Lorsque j'utilise openDDS avec openSplice, lorsqu'un participant est connecté, openDDS commence à envoyer des paquets HEARTBEAT, ce qui est un comportement normal lorsqu'un autre participant est détecté! Cependant les données envoyées et la déconnexion restent non détectées! –