【问题标题】:OpenDDS and OpenSplice interoperabilityOpenDDS 和 OpenSplice 互操作性
【发布时间】:2017-08-12 20:17:46
【问题描述】:

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

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

问题是他们没有交流。

我不知道我的配置是否有问题...我正在使用带有 RTPS 的 OpenDDS 的基本配置,而对于 OpenSplice,我在更改后使用了提供的 ospl.xml域 ID。

这是我的配置文件。 对于 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>

我做错了什么?

【问题讨论】:

    标签: configuration interop data-distribution-service opensplice opendds


    【解决方案1】:

    在 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”和无模块 IDL 主题类型规范上的(对我们来说是“捆绑的”)iShapes 示例来验证互操作性,因此它不适用于您的也值得尝试的应用程序(并结合该示例检查/使用wireshark)

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

    【讨论】:

    • 我在论坛上更新了关于这个问题的帖子。我修改了我的 IDL 并使它们成为无模块但仍然没有互操作性。我修改了 OpenDDS 提供的 iShapes 的 IDL,使其无模块,并对源文件进行了必要的修改,但两个 iShape 之间仍然没有互操作性。我按照您的建议添加了 IP 地址:10.0.2.15
    • 我使用 wireshark 跟踪数据包,我注意到一些有趣的事情:OpenSplice 使用正确的接口进行通信,它定期发送 3 个长度相同的数据包,但是当我发布我的数据时,发布者收到但我在wireshark上什么也没看到!发送的数据没有任何痕迹!当我将 openDDS 与 openSplice 一起使用时,当参与者连接时,openDDS 开始发送 HEARTBEAT 数据包,这是检测到另一个参与者时的正常行为!但是,发送的数据和断开连接仍未检测到!
    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 2014-01-03
    • 2010-09-21
    • 2020-07-27
    • 2018-10-08
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多