-1

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

感谢您的协助!

-杰希尔

4

2 回答 2

1

在多台机器上传播 REDHAWK 组件和设备的基本要素是确保您的 CORBA 通信在机器之间正常工作。这通常相当于正确配置 /etc/omniORB.cfg。首先,在一台机器上,您应该运行 omniNames 和 omniEvents,并按照文档的第 2.6 节设置您的配置。以供参考:

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 输入 catio:

$ catior IOR:012345...

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

于 2013-05-04T00:12:17.663 回答
0

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

确保 B 上的设备管理器满足以下条件:

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

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

于 2013-05-06T17:15:30.847 回答