中國電子科技集團公司第二十二研究所 李 盛 孫 輝 何成會 馬繼兵
井涌井漏在鉆井中是常見而又復雜的,實時監控采取有效的井控措施意義重大,可以避免重大財產損失和不必要的人員傷亡。基于Android系統的井涌井漏監測系統,數據結構參照石油行業標準WITSML標準接口設計,基于TCP/IP網絡傳輸協議,采用C/S體系架構,將基地計算機設計為服務器,用戶手機設計為Android客戶端,通過采集井場多種相關數據,專家通過手機客戶端進行遠程監測訪問現場井涌井漏實時監控數據和曲線,指導現場作業,提高了解決問題的效率和質量。
錄井現場作業事故具有突發性、不可預測性、非線性、不確定性、混沌性等特征,是一種復雜作業過程,對井涌井漏實時監控目前基本還停留在現場,一旦事故等緊急情況發生,一般流程是現場工程師口頭匯報并發送相關數據,實時性差、效率低,并且存在對事實描述不清的狀況,而處理方式一般都是專家趕往現場決策,但也只限于單口井的數據,非現場處理方式主要以人工經驗為主,缺少現場實時數據支持。隨著4G移動網絡的普及和5g時代的到來,網絡速度的瓶頸已經不復存在,同時移動手機的廣泛應用也為遠程應用服務提供了便利,而Android做為手機和平板等移動設備主流操作系統也備受關注,一種基于Android系統的井涌井漏監測系統的開發有著極其現實的迫切需求。本系統基于現場錄井通用傳感器采集系統實時數據,通過對鉆井工況和重要參數的實時監控,綜合利用離差積分和、模糊推理和起下鉆監測等手段,數據格式和傳輸基于油田通用WITSML標準接口,實現通過Android手機客戶端對井涌井漏鉆井事故的實時判斷與提示,并且實現同時對多口井數據進行檢測,可以更好的指導現場鉆井工作。
系統主要由三大部分組成:井場傳感器等數據采集及傳輸、油田公司基地服務器數據接收及存儲、Android手機客戶端數據應用。
(1)井場主要負責井場數據監測和采集服務,現場傳感器數據采集和管理,傳感器數據管理架構基于WITSML標準,數據格式使用XML標準定義的,完成數據存儲和應用程序接口功能。使用標準WITSML API實現添加數據、刪除數據、獲取服務器數據、更新數據等功能,并通過基于WITSML的TCP/IP協議實時將數據傳輸到基地服務器。
(2)油田公司基地服務器接收多口井場現場實時數據并存儲到數據庫,通過WITSML可以實現井場數據和石油公司基地服務器之間無縫數據交換。手機客戶端用戶的注冊和登錄權限信息也存儲在基地服務器,服務器根據不同用戶分配不同權限,實時全程偵聽等待客戶端數據請求,并響應手機客戶端請求。
(3)Android手機客戶端,用戶通過向油田基地服務器發送請求,完成注冊/登錄,接收來自現場的實時數據,根據用戶不同需求訪問數據并實時繪圖,實現通過Android手機客戶端對現場作業的遠程井涌井漏監測。
基于Android的井涌井漏遠程監控客戶端開發和調試使用谷歌推出的Android studio集成開發工具,Android studio提供了多語言開發支持,Android手持設備框架基于框架的相關開發,側重數據編輯,安卓手持設備業務相關開發,側重曲線、儀表、表格。
手機客戶端和油田基地服務器之間的通信,我們把它設計成通用的網絡操作提取到公共類HttpUtil里,并提供一個靜態方法,當想要發起網絡請求的時候,只需調用這個方法即可。通訊前先獲取網絡狀態,如果連接的是5G、wifi、4G等網絡狀態則繼續,否則顯示提示信息進入網絡設置界面。手機客戶端通過URL向油田基地服務器發送請求,通過HttpURLConnection建立連接;服務器接收客戶端請求,并將響應信息返回手機客戶端,通過GET/PUT/POST等方式上傳手機客戶端數據,下載來自服務器端的Json數據,實現數據的交互。
手機客戶通過POST請求油田基地服務器進行注冊/登錄,POST請求攜帶參數,服務器響應客戶端請求后做出反饋操作。請求服務器成功執行請求成功的回調RegisteronSuccess() ,保存客戶注冊信息跳轉到主頁面,請求服務器失敗則執行請求失敗的回調RegisteronFailure()顯示錯誤返回到注冊起始頁面。主要有請求服務器的回調接口(HttpResponeRegister),網絡接口類(RequestApiData),網絡請求處理的類(RequestManager)來實現。
登錄實現的原理和注冊使用同樣的方法,執行通過攜帶參數的POST請求,檢查當前網絡是否可用,請求服務器響應,請求方式為POST,請求的鏈接和監聽,回調請求失敗顯示解析異常的錯誤提示。
由于各應用系統可根據用戶定制選用,需要考慮如下幾級權限,用戶定制系統的系統管理員權限,給不同人員看不同的信息,比如領導使用遠程監控,儀器維修人員使用遠程診斷,遠程作業人員使用遠程錄井的井涌井漏實時監控等。
Android手機客戶端從油田基地服務器收到的數據是Json數據格式的,之所以選擇Json來傳輸數據主要考慮到Json與XML的比較,數據可讀性差不多,數據的描述性要差,但數據體積更小,交互更加方便,速度要快很多,所以選擇Json是不錯的選擇。Json數據解析也是一個通用功能,所以我們也將它提取到公共類JsonUtil里,方便使用。
油田基地服務器將收到的witsml數據經過轉換,定義的是JSON數據,因此在這里首先是將服務器返回的數據傳到一個JSONArray對象中,然后循環遍歷這個JSONArray,從中去除每一個元素都是JSONbject對象,JSONbject對象中又會包含FlowIn、FlowOut、和TotalPit等數據,最后調用getString方法將這些數據取出。
實時曲線繪制主要劃分為三個顯示區域,最左邊顯示事故發生的時間信息,具體時間精確到秒;中間區域則顯示事故井實時重要數據繪制曲線,以曲線的形式直觀的將事故井實時狀態數據顯示出來,上面時曲線顯示圖頭信息,顯示不同曲線所使用不同的顏色和顯示邊界信息,下方則是需要顯示的曲線信息,可以通過模板定制功能對顯示曲線參數進行定制操作,主要的曲線信息包括曲線顯示的顏色,曲線顯示的線的粗細級別、曲線顯示的邊界信息。曲線顯示的數據信息根據不同井不同事故狀況況顯示不同。
繪圖時,獲取數據需要單獨開線程來處理,實現多線程,我們也是將具體的處理單獨寫成類DrawCurveUtil實現方便使用。Android UI設計是Android編程很重要的一部分,特別是圖形繪制時我們首先需要獲取設備的分辨率,再根據手機的分辨率從dp的單位轉成為px(像素),對Android而言,DPI等價于PPI(Pixels-Per-Inch),其計算方式為dpi,DPI=寬/((尺寸2×寬2)/(寬2+高2))1/2 =長/((尺寸2×高2)/(寬2+高2))1/2。主要考慮到以下幾個因素,設計的時候減少對元素尺寸的絕對定位和絕對大小的要求,盡量用相對定位和比例大小來定義元素的位置和尺寸;對于文本框這種難搞定的東西盡量不要完全占滿,一定要考慮到適配可能出現的問題;對于某些無法精簡和相對定位的元素,在設計的時候考慮好適配。一旦出現顯示比例變化,元素可以根據周圍元素變化進行尺寸微調已滿足適配。具體的繪制在onDraw()里實現,并創建出一個Canvas對象,然后調用View的draw()方法來執行具體的繪制工作。同時也需要處理給Canvas加上抗鋸齒標志,可以解決Android圖形繪制時產生的鋸齒,具體是使用下面這個函數canvas.setDrawFilter(new PaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG))。
手機客戶端操作記錄信息和異常處置信息均以日志形式記錄,通過Environment.getExternalStorageDirectory().getPath();獲取用戶sd卡路徑信息,實現記錄存儲功能。

圖1 井場信息客戶端

圖2 井場信息系統服務器
手機本機數據信息主要存儲本地用戶登錄信息和下載的井況信息,方便用戶在非連接狀態下使用,訪問均通過封裝一個繼承自SQLiteOpenHelper類的數據庫操作類,然后以這個類為基礎,再封裝邏輯方法,來實現對SQLite數據庫的操作,可以實現對本地數據庫的創建、打開、關閉、更新和刪除,以及數據的增、刪、改、查操作。
使用registerActivityLifecycl eCallbacks,可以傳入一個回調接口,里面有所有當前Activity的生命周期方法回調,可以獲取到所有的Activity實例,在onActivityResumed方法中調用屏幕常亮的keepScreenLongLight方法可以實現所有APP頁面屏幕常亮,當然可以隨時關閉。
完整的Android客戶端程序測試需要連接服務器,部分則可以通過Apache在本機搭建服務器,訪問本機JSON文件來實現部分程序功能的調試,postman也是不錯的工具,另外在測試過程中使用模擬器和真機同樣方便調試。
系統軟件已經完成開發和測試,已經在油田應用。
遠程作業信息服務器,主要具備客戶端連接和數據接收功能,實時監視遠程作業計算機狀態,記錄和顯示井場作業計算機實時操作狀況和數據返回狀況,見圖1所示。
遠程作業系統服務器,主要具備客戶端連接和數據接收功能,實時監視遠程作業計算機狀態,記錄和顯示井場作業計算機實時操作狀況和數據返回狀況,井場信息系統服務器在作業過程中全天候進行聽偵監聽狀態,響應Android客戶端的服務請求,對已經連接的井場計算機狀態信息進行顯示,主要信息包括在線井的編號、井名、時間庫更新信息、客戶端地址、連接時間等,并實時刷新顯示信息,同時實時更新并顯示各個連接井操作請求信息并進行存儲操作,信息包括時間、登錄、信息返回等,見圖2所示。
井涌井漏監測顯示問題井井名信息,選擇問題可以查看詳細問題描述,顯示所有事故井的信息,包括井名信息、事故時間信息和事故描述信息,根據不同井事故的報警級別和事故描述顯示不同的報警圖標,選擇不同的井可以查看該井的詳細數據信息,也可以對該井事故通過曲線繪制來實現,問題井問題詳細描述包括井名信息、事故名稱、事故時間、事故測深、鉆井狀態、問題描述等見圖3所示。

圖3 井涌井漏監測問題描述

圖4 井涌井漏監測曲線繪制
井涌井漏監測曲線繪制以曲線的形式更加直觀的反映問題,見圖4所示。
遠程井涌井漏監測系統Android版本的開發成功,不僅可以及時應對各種可能發生的復雜的鉆井狀況,并提前分析決策,特別是井涌井漏監測曲線的繪制實時顯示現場狀況,后方專家只要登錄該系統就可以隨時隨地通過Android客戶端遠程訪問多井數據,及時進行實時決策和現場技術支持。極大的方便了專家遠程指導現場作業,節約了寶貴的決策時間,提高了解決問題的效率和質量,最大限度地減少損失。對防止井涌井漏井噴等工程事故的發生和對事故的及時處理有積極的意義,現場使用反饋良好,值得推廣應用。應該繼續加強井涌井漏事故預警建模算法研究,才能更加有效的應對各種突發狀況并及時做出決策應對各種復雜狀況。