基于CORBA命名服务的海上拖缆综合导航系统命名设计
2020-03-16阮福明张昊楠胡广浩赵希昉崔焘
阮福明 张昊楠 胡广浩 赵希昉 崔焘
(中海油田服务股份有限公司物探事业部 天津市 300451)
海洋油气勘探中,拖缆地震作业是主要勘探方式之一,在整个作业过程中,主要由拖缆综合导航系统对作业进行规划及控制,该系统功能复杂,软硬件交互数据量大,种类多,需配置作业参数及作业设备,规划作业路径,进行高精度导航定位,监控作业状态,控制采集、震源、鸟控等多套系统协调作业,系统开发难度较大。中海油田服务股份有限公司近年来对拖缆综合导航系统进行持续研究,形成了二维和三维拖缆导航系统产品,已投入多个工区生产应用[1][2]。本文提出了一种基于CORBA 命名服务来构建综合导航系统数据命名及交互的方法,实际验证表明,该方法可较好地满足拖缆综合导航系统内部以及同其他作业系统之间数据交互及进程间通信的要求。
1 拖缆综合导航系统数据及命令控制简介
拖缆综合导航系统由系统软件及导航采集与控制箱体两部分构成。拖缆勘探作业时,综合导航系统需要通过导航控采集与控制箱体的串口及网络通信等方式接入多类设备,包括2-3 套的差分全球定位系统、1 套相对全球定位系统、2 组船舶测深仪、1 套水速仪、2-3套电罗经、雷达AIS、气枪激发数据、及水下拖缆控制与定位系统数据(每条拖缆上挂载多个水平鸟、声学鸟、罗经鸟、声速鸟、水速鸟等)等总计超过10 多种共计数百个传感器设备数据,系统对接入的传感器数据进行实时解算,进行导航定位,并通过特定的时序,输出枪控头端到震源控制系统,并控制激发震源,收到震源返回的TimeBreak 脉冲信号及传回的气枪激发数据后,合并产生采集头段,输出到拖缆采集系统,同时也可触发控制拖缆采集系统采集地震数据,触发控制控制拖缆控制与定位系统采集水鸟数据。各数据通过网络或RS232、RS422 串口,遵循相应的通信协议同导航系统进行交互。系统数据及控制结构如图1 所示。
勘探作业中导航系统的定位信号及各系统关系如图2 所示。
2 CORBA命名服务在综合导航系统中的应用
2.1 CORBA简介
CORBA(Common ObjectRequest Broker Architecture 公共对象请求代理体系结构),是一个为简化跨平台应用而提出的规范,其独立于软硬件平台、网络协议和编程语言,支持异构的分布式计算环境和不同编程语言间的对象重用。Corba 可以作为不同平台应用间信息传递的中间件,通过引入经过充分验证的有效的框架结构和通信手段,使应用者聚焦业务逻辑方面的实现,而无需关注通信的细节。CORBA 在银行、航空、制造、军事和电信等领域应用广泛[3]。
图1:综合导航系统数据与控制结构图
图2:地震勘探船定位信号及各系统关系图
图3:命名服务实现进程间通信结构图
2.2 基于CORBA命名服务的导航系统命名设计
命名服务是CORBA 较为常用的服务,其本质是将名字与CORBA 对象引用绑定,通过名字与CORBA 对象引用之间建立映射关系。一个名字对应一个对象引用,一个对象引用可以对应多个名字。命名服务可以不需要知道对象的物理位置,通过名字即可获取该对象的引用,实现了网络透明[4]。
综合导航系统数据类型有原始数据、处理过的数据、控制类型数据等,由任何一节点(进程)产生,保存到数据服务器,各节点与数据服务器交互。通过命名服务可方便的实现这一过程。以系统配置模块为例,配置信息主要有:自动命名、设备参数配置、电缆配置等三个主要子模块,以自动命名说明,自动命名定义了各设备的前缀以及命名宽度等命名规则,通过一次配置实现整个系统所有设备的的自动命名。进程间数据操作如下图,界面管理进程、数据服务进程、接口进程、自动命名等进程存在数据交互。CORBA 命名服务实现了该过程。命名服务实现进程间通信结构如图3 所示。
自动命名伺服接口ScnAutoNameServant.idl,定义了获取、更新命名规则的方法:
综合导航系统数据服务端,实现了IScnAutoNameServant 接口,编译后的文件自动添加_i 后缀,IScnAutoNameServant _i.h 文件:
Corba 命名服务建立及调用过程:
(1)初始化orb。
(2)将名字帮定到命名环境。
(3)绑定对象引用。
(4)获得对象引用。
就综合导航系统而言,服务端CORBA 初始化及建立命名服务方法:
pIScnAutoNameRule->init( ptrORB, ptrPOA, ptrSubPOA, "DSN", "ScnAutoNameCfgServant" ) ),pIScnAutoNameRule 为idl 编译后的类的指针,DSN/ ScnAutoNameCfgServant 为定义的名字,同样,客户端首先引用idl 接口的声明文件,获取服务端的对象引用,
IScnAutoNameCfgMgrServant_var _varScnAutoNameRule;
然后实现了获取远程对象的方法,getRemoteObj(),CORBA 初始化过程不详述,声明名字:
至此,客户端即可直接使用服务器端的对象,并操作服务器端定义的方法,如:m_varScnAutoNameRule->queryAutoNameRule( varsAutoNameRule, errorCode )。在客户端本地“透明”地操作服务器端对象。
这样,只需按照CORBA 基本编程过程按照步骤建立命名服务,使得不同进程间通信变得很容易,通过名字获取对象引用,不同进程,只要获取了客户端定义的名字,通过名字建立CORBA 对象的一一映射关系,即可操作客户端对象,获取客户端对象定义的方法和数据,整个网络“透明”,且避免了常规socket 等通信方式定义数据传输协议的复杂性,大大减少了编程工作量。
3 结束语
本文利用CORBA 技术设计构建了综合导航系统的基本通讯架构,利用CORBA 命名服务满足了整个系统所有设备的的自动命名要求,且避免了常规Socket 等通信方式定义数据传输协议的复杂度,减少了编程工作量,将命名服务与CORBA 通知服务相结合,可完成整个拖缆综合导航系统的通信架构基础设计。