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

时间:2013-05-03 19:30:11

标签: redhawksdr

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

Thanx的帮助!

-jerhill

2 个答案:

答案 0 :(得分:1)

在多台计算机上传播REDHAWK组件和设备的关键是确保您的CORBA通信在计算机之间正常工作。这通常相当于正确配置/etc/omniORB.cfg。首先,在一台计算机上,您应该运行omniNames和omniEvents,并按section 2.6 of the documentation设置配置。供参考:

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管道,以便在同一台机器上快速访问对象。 omn​​iORB将在该对象的IOR中发布此信息。您在此处选择的内容非常重要 - 如果您使用其他计算机无法访问的IP,或使用其他计算机无法解析的主机名,则CORBA连接将失败。

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

$ nameclt resolve REDHAWK_DEV/REDHAWK_DEV

然后,将IOR提供给catior:

$ catior IOR:012345...

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

答案 1 :(得分:0)

基于B上的程序可以在A上看到名称服务这一事实,我认为该问题与设备/设备管理器配置有关。

确保B上的设备管理器符合以下条件:

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

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