Redhawksdr 如何在不同的机器上连接REDHAWK设备?

Redhawksdr 如何在不同的机器上连接REDHAWK设备?,redhawksdr,Redhawksdr,我正在尝试运行一个波形,其中的组件在不同的机器上运行。也就是说,我想要A->B,其中组件A在机器1的GPP上运行,组件B在机器2的GPP上运行。系统A上的CORBA名称服务器在系统B上的REDHAWK中可见,但在运行波形时,我无法访问远程设备或组件。 如何使一台机器上的设备可供另一台机器上运行的REDHAWK使用 谢谢你的帮助 -jerhill将REDHAWK组件和设备分散到多台机器上的关键是确保CORBA通信在机器之间正常工作。这通常相当于正确配置/etc/omniORB.cfg。首先,在一台

我正在尝试运行一个波形,其中的组件在不同的机器上运行。也就是说,我想要A->B,其中组件A在机器1的GPP上运行,组件B在机器2的GPP上运行。系统A上的CORBA名称服务器在系统B上的REDHAWK中可见,但在运行波形时,我无法访问远程设备或组件。 如何使一台机器上的设备可供另一台机器上运行的REDHAWK使用

谢谢你的帮助


-jerhill

将REDHAWK组件和设备分散到多台机器上的关键是确保CORBA通信在机器之间正常工作。这通常相当于正确配置/etc/omniORB.cfg。首先,在一台机器上,您应该运行omniNames和omniEvents,并根据设置配置。供参考:

InitRef = NameService=corbaname::127.0.0.1
InitRef = EventService=corbaloc::127.0.0.1:11169/omniEvents
在第二台机器上,InitRef必须指向第一台机器。如果第一台机器是192.168.1.100,则第二台机器的配置可能包含:

InitRef = NameService=corbaname::192.168.1.100
InitRef = EventService=corbaloc::192.168.1.100:11169/omniEvents
您应该能够通过以下方式验证这在第二台机器上是否正常工作:

$ nameclt list
您需要解决的下一个问题是确保CORBA对象正在侦听适当的网络接口,并在其IOR中发布允许访问它们的信息。在每个配置文件中,我建议您添加一行代码,告诉omniORB在该机器上创建的端点CORBA对象应该监听什么。例如,在第一台计算机上:

endPoint = giop:tcp:192.168.1.100:
endPoint = giop:unix:
这告诉omniORB,CORBA对象应该监听192.168.1.100上他们选择的TCP端口。它还添加了一个Unix管道,以便同一台机器上的对象快速访问。omniORB将在该对象的IOR中发布此信息。这里的选择很重要——如果您使用的IP是其他机器无法访问的,或者使用的主机名是其他机器无法解析的,那么CORBA连接将失败

在两台计算机上配置端点设置后,您可能会发现检查IOR中包含的信息很有用。如果可以访问命名服务,则可以检索对象的IOR。例如,如果有一个名为“REDHAWK_DEV”的域正在运行,则可以通过以下方式获取域管理器的IOR:

$ nameclt resolve REDHAWK_DEV/REDHAWK_DEV
然后,将IOR馈送至catior:

$ catior IOR:012345...

catior将为您解析IOR,并向您显示客户端将连接到的地址和端口。

基于B上的程序可以看到a上的名称服务这一事实,那么我假设问题与设备/设备管理器配置有关

确保B上的设备管理器符合以下标准:

  • dcd.xml文件的deviceconfiguration元素的id属性是唯一的
  • dcd.xml文件上GPP的ComponentInstance元素的id属性是唯一的
  • dcd.xml文件上namingservice元素的name属性是您尝试连接到的域(形式为DomainName/DomainName)
  • 您没有在B上运行的域管理器与a上的域管理器名称冲突(如果这样做,则会发生错误)

如果满足这些条件,并且您的系统仍然无法工作,请从命令行为未注册的设备管理器和您尝试注册的域管理器发布运行nodeBooter的标准输出。

Bingo!这就是诀窍。尽管.catior包含在omniORB utils包中,但我找不到catior命令。对于REDHAWK 1.8系列,omniORB与REDHAWK一起发布,可执行文件名为catior.omni。