DDS调试步骤

HOWTO对系统级DDS进行基本调试

当您的应用程序之间没有通信或次优时,您可以执行一系列步骤来执行DDS系统的基本调试。

1.他们实际上是在同一个网络/子网上吗?

网络上的两台计算机可能具有不同的子网(例如,一台可能使用WiFi连接,另一台可能是有线的,这些可能位于不同的子网上,尽管本地交换机路由单播而不路由多播等,警惕网络和网络工程师,因为他们很狡猾,而且容易受到恶作剧的影响。

Linux的

  $ ifconfig |  grep inet 

视窗

  C:\> IPCONFIG 

查找inet地址并确定它们是否在同一子网上有任何内容。

 警告! 具有四个以上IP地址的机器(由于VM,VPN等)可能会导致痛苦和痛苦! RTI Connext DDS仅选择它看到的前四个网络接口。 这在Windows上尤其糟糕,因为Windows会随意重新排序接口列表! 这意味着它有时会起作用,有时却不起作用。 

你已经确定他们有一个共同的网络子网。 现在,DDS会起作用了吗?

使用rtiddsping。 rtiddsping命令行工具是一个原始的,已知的工作DDS应用程序。 在一台计算机上,运行rtiddsping[.exe] -publisher 。 在另一台机器上,运行rtiddsping[.exe] -subscriber 。 如果他们没有看到对方(在发布者端寻找“找到1个额外的ping用户”,或者在用户端找到“发布者”),那么问题是网络基础设施,它不是RTI Connext DDS。

如果rtiddsping实例没有看到对方,可能的原因是:

  • 在任一台或两台计算机上,或在中间路由器或交换机中未启用多播。
  • 防火墙规则配置为停止多播数据包,不路由UDP,或(更可能)默认为停止意外端口访问(在这种情况下,您需要为正在使用的域手动启用DDS发现端口)。 rtiddsping的默认域是0,对应于端口7400,7401,7410和7411.请记住,防火墙可以在任何地方,您可能需要在发布者端,订户端启用端口/禁用防火墙,以及任何干预路由器或交换机。

要调试网络基础结构,您可以按照以下步骤操作:

  • 检查基本网络(IP)可达性。 运行“ping”命令行工具以确保您在计算机之间进行基本的网络通信。 此工具随大多数操作系统一起提供,包括Windows和Unix Variants。 无法通过ping访问IP地址可能表示网络连接不良或存在阻止传入网络通信的防火墙(通常是基于主机的防火墙)。
  • 验证基本多播可达性。 运行ping 224.0.0.1 。 224.0.0.1是“所有主机”组。 如果您对该组执行ping操作,则LAN上的所有支持多播的主机都应该应答(每个支持多播的主机必须在启动时加入该组的所有组播功能的接口)。 如果您计划运行Connext DSD的LAN上的某个主机没有响应,则可能表示网络连接故障,防火墙(可能在该主机本身上)或不支持多播的操作系统配置。 开箱即用的发现设置需要多播,因此这些主机不会通过开箱即用的配置通过DDS进行通信。

Ping至224.0.0.1永远不会被多播路由器转发,因此您只能从同一LAN上的计算机获得回复。 如果您尝试让DDS在不同LAN上的计算机之间执行发现(即由路由器分隔),则需要将中间路由器配置为中继多播数据包。 您可以通过运行ping 224.0.0.2来检查这一点。 224.0.0.2是“所有路由器”组,所有启用多播的路由器都应该响应。 由于ping到“224.0.0.2”的ping不会被路由器转发,因此您希望只能从连接到同一LAN的路由器回复到您ping的机器。

请注意,运行rtiddsping允许在两台计算机由路由器分隔的情况下测试多播通信。 如果路由器启用了多播(并配置为转发多播数据包),那么它将中继DDS多播发现流量,并且两个rtiddsping应用程序应该相互发现。 这是因为DDS发现使用的多播地址是239.255.0.1 ,应由所有启用多播的路由器转发,从而允许DDS发现成功进行。

如果基本网络IP连接成功但运行rtiddsping不成功并且两台计算机位于不同的LAN上,则最可能的情况是中间的路由器未配置为路由和转发多播数据包。 如果两台计算机位于同一LAN上,则不应存在nasic IP连接(包含多播)工作且示例/ CPP / Hello_simple不工作的情况。

3. rtiddsping工作,我的应用程序是否有效?

-example <arch>与您的IDL for MyFooType一起使用后,您将获得默认发布者和默认订阅者。 编译这些,不做任何改变。 运行它们。

如果他们看到对方,太好了! 这意味着它们位于同一个域中(因为您没有更改任何内容),Type是可分配的(显然,因为它们使用相同的IDL),Topic是相同的(因为您没有更改它生成的“示例MyFooType”主题)和QoS设置兼容(同样,因为您没有从默认设置更改它们)。 DDS正在工作,所以现在出去,并建立伟大的事物!

如果他们没有看到对方......嗯。 在这种情况下,运行rtiddsspy。 示例代码中的默认域为0,因此只需运行rtiddsspy而不使用-domainId <int>标志。 我建议在发布者和订阅者计算机上运行它(一次一个)。 在一个正在运行的分布式系统中,您应该在任一台计算机上看到“W + N”行(这是发布者)和“R + N”(订阅者)行:

  1408440707.896907 W + N C0A80064示例MyFooType MyFooType
 1408440706.509978 R + N C0A8006F示例MyFooType MyFooType 

如果你没有得到这两行(在这种情况下,你可能得到的是一行,取决于Spy是在发布者端运行(“W + N”)还是用户端(“R + N”)如果看到这个......发布在这里,因为那很有意思。

你很好地开发了你的系统,但是现在有一个发布者没有看到订阅者(在一个孤立的情况下)

使用所述工具检查以下内容:

  • 间谍可以看到发布者(来自发布者没有运行的机器)吗?
  • 间谍可以看到订户(来自订户未运行的计算机)吗?

如果是这种情况,我的猜测是主题不同(一个可能是“示例MyFooType”,因为工程师忘了将其更改为正在使用的那个),或者类型不同且不可分配(因为工程师更新了IDL但未能告诉您这一点,而他的新发布者正在使用新类型,而您的旧订阅者正在使用旧类型。 如果发布者和订阅者都给出了相同的主题,但主题QoS或类型有足够的不同,Spy将自我配置以同意它看到的第一个(在正在运行的系统中是任意的)。 这可能导致不兼容的数据头QoS。

  • 管理工具是否显示主题,类型,QoS或任何其他内容的红色标记? 如果现在问题不明显,请在此处发布。

5.管理控制台(或分析器)显示DomainParticipants,但不显示任何子实体

发现是一个握手过程,从多播开始,但在单播中完成。 当Discovery可以显示启动(DomainParticipants彼此可见)但未完成(没有Publishers,Subscribers,DataReaders,DataWriters)时,问题可能又是防火墙。

6.您的系统正常工作,但似乎工作不正常,或者QoS行为似乎不正确

您确定您认为正在使用的QoS是应用程序正在使用的QoS配置文件吗? 要快速确定应用程序是否正在拾取不正确的USER_QOS_PROFILES.xml文件,请cd到包含您要使用的文件的目录,然后插入一些错误(格式错误的)XML。 您可以简单地将一些文本作为文件的第一行,而不是XML标记。 保存文件并启动您的应用程序。 如果DomainParticipants确实已创建且应用程序开始运行,则应用程序不会获取您损坏的USER_QOS_PROFILES.xml文件。

  1. DomainParticipants使用工作目录中的USER_QOS_PROFILES.xml文件。 从USER_QOS_PROFILES.xml文件所在的目录(./objs/<arch> / <application>)启动应用程序, 不要更改到应用程序目录(cd objs / <arch>; ./<application)。
  2. 如果您的应用程序是从脚本启动的,请验证脚本是否未更改为新的工作目录(没有'cd'命令)。
  3. 验证NDDS_QOS_PROFILES环境变量未设置,或者是否已设置,它确实包含相关文件。

如果您的步骤在任何时候被迫偏离上述步骤,请发布到论坛,我将修复上述内容以同意您所看到的内容。

RTI社区门户使用条款

注意:您提交给RTI Research Community Portal的任何内容,包括个人信息,均不受RTI网站其他部分收集的信息的保护。 您对通过RTI社区门户上传,发布,发送电子邮件,传输或以其他方式提供的所有内容负全部责任。 RTI不控制访问者发布到RTI社区门户网站的内容,也不保证此类内容的准确性,完整性或质量。 在任何情况下,RTI均不对任何未由RTI撰写的内容承担任何责任,或由于使用通过RTI社区发布,通过电子邮件发送,传输或以其他方式提供的任何内容而导致的任何损失或损害门户。

主要包含DDS调试心得、AD9850线路图、DDA常见问题解答等等的资料 目 录 1 DDS 简介 1.1 产品简介 1.2 参考资料 2 DDS 的基本概念 2.1 DDS 概述 2.2 DDS 工作原理 2.3 DDS 有关名词解释 3 具体应用问题 3.1 DDS 没有输出,怎么办 3.2 哪些DDS 能直接用晶体提供时钟,哪些不能 3.3 Update 更新信号如何控制? 3.4 DDS 的扫频功能如何实现 3.5 DDS 输出级滤波器如何设计 3.8 AD9910 的时钟输入需要注意什么? 3.9 DDS 时钟输入,DAC 输出能否使用单端模式?电路该如何接? 3.10 DDS 评估板上分别有2 个变压器或2 个巴伦(Balun)有什么用处 3.11 DDS 评估板上端接电阻为50 欧,为何变压器的参数是在75 欧标定的? 3.12 ADT1-1WT 的原副边是否可以互换使用 3.13 如何同步多片DDS 芯片的输出 3.14 DDS 输出端DAC 为电流输出,怎么转换为电压,有什么限制 3.15 DDS 的AGND,DGND 应该怎样连接,接模拟地还是数字地 3.16 有些DDS 评估板上的MC100LVEL16 的用途是什么? 3.17 AD7008 已经停产,有什么可以替代 3.18 如何确定DDS 寄存器的值 3.19 DDS 的评估板软件对操作系统有什么要求。 3.20 DDS 除了正弦波,还能产生别的波形么 3.21 用DDS 有什么好处 3.22 ADI 的DDS 捷变频能力为多少 3.23 有无DDS 的参考程序代码 3.24 如何使用DDS 进行幅度调制 3.25 如何用AD5930 来产生一个单频信号 3.26 为什么DDS 输出的幅度会随频率的增加而减小 3.27 DDS 输出电压的幅度如何计算 3.28 应该用什么样的仪器来调试DDS 3.29 输出杂散较大,怎么办
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值