0

我有两个程序,一个使用OpenSplice 6.7.1,另一个使用OpenDDS 3.10。

他们都使用RTPS作为协议,相同的域 id目标端口(我使用wireshark 验证)。

问题是他们没有交流。

我不知道我的配置是否有问题...我正在使用带有RTPS的 OpenDDS 的基本配置,而对于 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>

我究竟做错了什么 ?

4

1 回答 1

0

多供应商互操作性已在 OMG 活动中反复展示,但不是最近,因此可能在任何一种产品中都发生了回归。

您的 OpenSplice 配置是(除了 domainId 应该与您的应用程序中使用的配置相匹配,通常用户使用 DDS::DOMAIN_ID_DEFAULT 表示他们想要使用配置中指定的 ID,如 OSPL_URI 环境变量所指向的)一个适当的默认值配置。我确定您知道,如果您使用多宿主计算机,则待使用的接口/IP 地址的 AUTO 设置是一个潜在的混淆源。

因此,接下来将查看 (DDSI) 跟踪和/或 wireshark 捕获,看看您是否发现了两个供应商的 DDSI 线框(PrismTech 为 1.2,OCI 为 1.3)。

例如,当 OpenSplice DDSI 跟踪中没有发现 vendor-1.3 的迹象时,这表明仍然存在一些“基本”通信问题。

请注意,在这些 OMG 事件中,我们通常使用域“0”上的(对我们“捆绑”)iShapes 示例和无模块 IDL 主题类型规范来验证互操作性,因此它不适用于您的应用程序也值得尝试(并结合该示例检查/使用wireshark)

我还将继续关注社区论坛以获取有关此的新信息..

于 2017-03-22T13:02:25.653 回答