阮福明 張昊楠 胡廣浩 趙希昉 崔燾
(中海油田服務股份有限公司物探事業部 天津市 300451)
海洋油氣勘探中,拖纜地震作業是主要勘探方式之一,在整個作業過程中,主要由拖纜綜合導航系統對作業進行規劃及控制,該系統功能復雜,軟硬件交互數據量大,種類多,需配置作業參數及作業設備,規劃作業路徑,進行高精度導航定位,監控作業狀態,控制采集、震源、鳥控等多套系統協調作業,系統開發難度較大。中海油田服務股份有限公司近年來對拖纜綜合導航系統進行持續研究,形成了二維和三維拖纜導航系統產品,已投入多個工區生產應用[1][2]。本文提出了一種基于CORBA 命名服務來構建綜合導航系統數據命名及交互的方法,實際驗證表明,該方法可較好地滿足拖纜綜合導航系統內部以及同其他作業系統之間數據交互及進程間通信的要求。
拖纜綜合導航系統由系統軟件及導航采集與控制箱體兩部分構成。拖纜勘探作業時,綜合導航系統需要通過導航控采集與控制箱體的串口及網絡通信等方式接入多類設備,包括2-3 套的差分全球定位系統、1 套相對全球定位系統、2 組船舶測深儀、1 套水速儀、2-3套電羅經、雷達AIS、氣槍激發數據、及水下拖纜控制與定位系統數據(每條拖纜上掛載多個水平鳥、聲學鳥、羅經鳥、聲速鳥、水速鳥等)等總計超過10 多種共計數百個傳感器設備數據,系統對接入的傳感器數據進行實時解算,進行導航定位,并通過特定的時序,輸出槍控頭端到震源控制系統,并控制激發震源,收到震源返回的TimeBreak 脈沖信號及傳回的氣槍激發數據后,合并產生采集頭段,輸出到拖纜采集系統,同時也可觸發控制拖纜采集系統采集地震數據,觸發控制控制拖纜控制與定位系統采集水鳥數據。各數據通過網絡或RS232、RS422 串口,遵循相應的通信協議同導航系統進行交互。系統數據及控制結構如圖1 所示。
勘探作業中導航系統的定位信號及各系統關系如圖2 所示。
CORBA(Common ObjectRequest Broker Architecture 公共對象請求代理體系結構),是一個為簡化跨平臺應用而提出的規范,其獨立于軟硬件平臺、網絡協議和編程語言,支持異構的分布式計算環境和不同編程語言間的對象重用。Corba 可以作為不同平臺應用間信息傳遞的中間件,通過引入經過充分驗證的有效的框架結構和通信手段,使應用者聚焦業務邏輯方面的實現,而無需關注通信的細節。CORBA 在銀行、航空、制造、軍事和電信等領域應用廣泛[3]。

圖1:綜合導航系統數據與控制結構圖

圖2:地震勘探船定位信號及各系統關系圖

圖3:命名服務實現進程間通信結構圖
命名服務是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 等通信方式定義數據傳輸協議的復雜性,大大減少了編程工作量。
本文利用CORBA 技術設計構建了綜合導航系統的基本通訊架構,利用CORBA 命名服務滿足了整個系統所有設備的的自動命名要求,且避免了常規Socket 等通信方式定義數據傳輸協議的復雜度,減少了編程工作量,將命名服務與CORBA 通知服務相結合,可完成整個拖纜綜合導航系統的通信架構基礎設計。