阮福明 張昊楠 胡廣浩 趙希昉 崔燾
(中海油田服務(wù)股份有限公司物探事業(yè)部 天津市 300451)
海洋油氣勘探中,拖纜地震作業(yè)是主要勘探方式之一,在整個作業(yè)過程中,主要由拖纜綜合導(dǎo)航系統(tǒng)對作業(yè)進(jìn)行規(guī)劃及控制,該系統(tǒng)功能復(fù)雜,軟硬件交互數(shù)據(jù)量大,種類多,需配置作業(yè)參數(shù)及作業(yè)設(shè)備,規(guī)劃作業(yè)路徑,進(jìn)行高精度導(dǎo)航定位,監(jiān)控作業(yè)狀態(tài),控制采集、震源、鳥控等多套系統(tǒng)協(xié)調(diào)作業(yè),系統(tǒng)開發(fā)難度較大。中海油田服務(wù)股份有限公司近年來對拖纜綜合導(dǎo)航系統(tǒng)進(jìn)行持續(xù)研究,形成了二維和三維拖纜導(dǎo)航系統(tǒng)產(chǎn)品,已投入多個工區(qū)生產(chǎn)應(yīng)用[1][2]。本文提出了一種基于CORBA 命名服務(wù)來構(gòu)建綜合導(dǎo)航系統(tǒng)數(shù)據(jù)命名及交互的方法,實(shí)際驗(yàn)證表明,該方法可較好地滿足拖纜綜合導(dǎo)航系統(tǒng)內(nèi)部以及同其他作業(yè)系統(tǒng)之間數(shù)據(jù)交互及進(jìn)程間通信的要求。
拖纜綜合導(dǎo)航系統(tǒng)由系統(tǒng)軟件及導(dǎo)航采集與控制箱體兩部分構(gòu)成。拖纜勘探作業(yè)時,綜合導(dǎo)航系統(tǒng)需要通過導(dǎo)航控采集與控制箱體的串口及網(wǎng)絡(luò)通信等方式接入多類設(shè)備,包括2-3 套的差分全球定位系統(tǒng)、1 套相對全球定位系統(tǒng)、2 組船舶測深儀、1 套水速儀、2-3套電羅經(jīng)、雷達(dá)AIS、氣槍激發(fā)數(shù)據(jù)、及水下拖纜控制與定位系統(tǒng)數(shù)據(jù)(每條拖纜上掛載多個水平鳥、聲學(xué)鳥、羅經(jīng)鳥、聲速鳥、水速鳥等)等總計(jì)超過10 多種共計(jì)數(shù)百個傳感器設(shè)備數(shù)據(jù),系統(tǒng)對接入的傳感器數(shù)據(jù)進(jìn)行實(shí)時解算,進(jìn)行導(dǎo)航定位,并通過特定的時序,輸出槍控頭端到震源控制系統(tǒng),并控制激發(fā)震源,收到震源返回的TimeBreak 脈沖信號及傳回的氣槍激發(fā)數(shù)據(jù)后,合并產(chǎn)生采集頭段,輸出到拖纜采集系統(tǒng),同時也可觸發(fā)控制拖纜采集系統(tǒng)采集地震數(shù)據(jù),觸發(fā)控制控制拖纜控制與定位系統(tǒng)采集水鳥數(shù)據(jù)。各數(shù)據(jù)通過網(wǎng)絡(luò)或RS232、RS422 串口,遵循相應(yīng)的通信協(xié)議同導(dǎo)航系統(tǒng)進(jìn)行交互。系統(tǒng)數(shù)據(jù)及控制結(jié)構(gòu)如圖1 所示。
勘探作業(yè)中導(dǎo)航系統(tǒng)的定位信號及各系統(tǒng)關(guān)系如圖2 所示。
CORBA(Common ObjectRequest Broker Architecture 公共對象請求代理體系結(jié)構(gòu)),是一個為簡化跨平臺應(yīng)用而提出的規(guī)范,其獨(dú)立于軟硬件平臺、網(wǎng)絡(luò)協(xié)議和編程語言,支持異構(gòu)的分布式計(jì)算環(huán)境和不同編程語言間的對象重用。Corba 可以作為不同平臺應(yīng)用間信息傳遞的中間件,通過引入經(jīng)過充分驗(yàn)證的有效的框架結(jié)構(gòu)和通信手段,使應(yīng)用者聚焦業(yè)務(wù)邏輯方面的實(shí)現(xiàn),而無需關(guān)注通信的細(xì)節(jié)。CORBA 在銀行、航空、制造、軍事和電信等領(lǐng)域應(yīng)用廣泛[3]。
圖1:綜合導(dǎo)航系統(tǒng)數(shù)據(jù)與控制結(jié)構(gòu)圖
圖2:地震勘探船定位信號及各系統(tǒng)關(guān)系圖
圖3:命名服務(wù)實(shí)現(xiàn)進(jìn)程間通信結(jié)構(gòu)圖
命名服務(wù)是CORBA 較為常用的服務(wù),其本質(zhì)是將名字與CORBA 對象引用綁定,通過名字與CORBA 對象引用之間建立映射關(guān)系。一個名字對應(yīng)一個對象引用,一個對象引用可以對應(yīng)多個名字。命名服務(wù)可以不需要知道對象的物理位置,通過名字即可獲取該對象的引用,實(shí)現(xiàn)了網(wǎng)絡(luò)透明[4]。
綜合導(dǎo)航系統(tǒng)數(shù)據(jù)類型有原始數(shù)據(jù)、處理過的數(shù)據(jù)、控制類型數(shù)據(jù)等,由任何一節(jié)點(diǎn)(進(jìn)程)產(chǎn)生,保存到數(shù)據(jù)服務(wù)器,各節(jié)點(diǎn)與數(shù)據(jù)服務(wù)器交互。通過命名服務(wù)可方便的實(shí)現(xiàn)這一過程。以系統(tǒng)配置模塊為例,配置信息主要有:自動命名、設(shè)備參數(shù)配置、電纜配置等三個主要子模塊,以自動命名說明,自動命名定義了各設(shè)備的前綴以及命名寬度等命名規(guī)則,通過一次配置實(shí)現(xiàn)整個系統(tǒng)所有設(shè)備的的自動命名。進(jìn)程間數(shù)據(jù)操作如下圖,界面管理進(jìn)程、數(shù)據(jù)服務(wù)進(jìn)程、接口進(jìn)程、自動命名等進(jìn)程存在數(shù)據(jù)交互。CORBA 命名服務(wù)實(shí)現(xiàn)了該過程。命名服務(wù)實(shí)現(xiàn)進(jìn)程間通信結(jié)構(gòu)如圖3 所示。
自動命名伺服接口ScnAutoNameServant.idl,定義了獲取、更新命名規(guī)則的方法:
綜合導(dǎo)航系統(tǒng)數(shù)據(jù)服務(wù)端,實(shí)現(xiàn)了IScnAutoNameServant 接口,編譯后的文件自動添加_i 后綴,IScnAutoNameServant _i.h 文件:
Corba 命名服務(wù)建立及調(diào)用過程:
(1)初始化orb。
(2)將名字幫定到命名環(huán)境。
(3)綁定對象引用。
(4)獲得對象引用。
就綜合導(dǎo)航系統(tǒng)而言,服務(wù)端CORBA 初始化及建立命名服務(wù)方法:
pIScnAutoNameRule->init( ptrORB, ptrPOA, ptrSubPOA, "DSN", "ScnAutoNameCfgServant" ) ),pIScnAutoNameRule 為idl 編譯后的類的指針,DSN/ ScnAutoNameCfgServant 為定義的名字,同樣,客戶端首先引用idl 接口的聲明文件,獲取服務(wù)端的對象引用,
IScnAutoNameCfgMgrServant_var _varScnAutoNameRule;
然后實(shí)現(xiàn)了獲取遠(yuǎn)程對象的方法,getRemoteObj(),CORBA 初始化過程不詳述,聲明名字:
至此,客戶端即可直接使用服務(wù)器端的對象,并操作服務(wù)器端定義的方法,如:m_varScnAutoNameRule->queryAutoNameRule( varsAutoNameRule, errorCode )。在客戶端本地“透明”地操作服務(wù)器端對象。
這樣,只需按照CORBA 基本編程過程按照步驟建立命名服務(wù),使得不同進(jìn)程間通信變得很容易,通過名字獲取對象引用,不同進(jìn)程,只要獲取了客戶端定義的名字,通過名字建立CORBA 對象的一一映射關(guān)系,即可操作客戶端對象,獲取客戶端對象定義的方法和數(shù)據(jù),整個網(wǎng)絡(luò)“透明”,且避免了常規(guī)socket 等通信方式定義數(shù)據(jù)傳輸協(xié)議的復(fù)雜性,大大減少了編程工作量。
本文利用CORBA 技術(shù)設(shè)計(jì)構(gòu)建了綜合導(dǎo)航系統(tǒng)的基本通訊架構(gòu),利用CORBA 命名服務(wù)滿足了整個系統(tǒng)所有設(shè)備的的自動命名要求,且避免了常規(guī)Socket 等通信方式定義數(shù)據(jù)傳輸協(xié)議的復(fù)雜度,減少了編程工作量,將命名服務(wù)與CORBA 通知服務(wù)相結(jié)合,可完成整個拖纜綜合導(dǎo)航系統(tǒng)的通信架構(gòu)基礎(chǔ)設(shè)計(jì)。