李高鵬,樓海龍,楊 靜
(1. 中海油伊拉克有限公司 天津300450;2. 中海油采油技術服務有限公司 天津300450)
生產時率是油田開發(fā)生產過程中的重要基礎數(shù)據(jù),通過生產時率可以反應油田的油井利用率以及整體開發(fā)生產效率。生產過程中由于各種原因導致的油井關停事件是造成生產時率損失和產量損失的主要因素。本文以伊拉克某中資油田為背景,該油田投產于20世紀70年代,生產管理手段仍在沿用手工報表,效率低且不便于跟蹤統(tǒng)計。該油田主要包括近200口油井,隨著地層壓力的衰減,生產模式逐漸由自噴生產轉向電潛泵開發(fā),生產時率對地面設備和供電的穩(wěn)定性要求越來越高。
生產時率的影響因素多種多樣,如電網(wǎng)波動和停電、管線泄漏、井下電潛泵故障、驅動電潛泵發(fā)電機的保養(yǎng)和故障停機、設施流程維修改造、地層原因、偷盜等都會造成生產關停。
常規(guī)Excel表格統(tǒng)計生產時率有以下不足:①不能同時多人對表格進行編輯;②在Excel中輸入關停事件時,不僅要計算每個關停事件的時長,還要查詢單井產量,計算產量損失,工作量大且容易出錯; ③Excel安全性差,容易被篡改或刪除;④隨著數(shù)據(jù)的增多,Excel運行速度越來越慢。
本文介紹了一種通過網(wǎng)站+數(shù)據(jù)庫的方式實現(xiàn)對關停信息的收集,同時在后臺計算出相應的產量損失和生產時率等信息。網(wǎng)站具有共享性好,數(shù)據(jù)庫具有存儲量大的優(yōu)點,對數(shù)據(jù)的處理和計算上也更加靈活。通過盡量少的輸入信息減少人員工作強度,盡可能多地通過后臺運算處理來展示更多分析結果。
①通過網(wǎng)站頁面實現(xiàn)對關停事件的信息采集,包括井名、站名、關停復產時間、關停原因等。
②通過頁面實現(xiàn)對最新油井測井信息的采集,包括單井總產液量、含水率、自噴產量等,并在后臺自動計算出純油產量、產水量、ESP泵的增加產量等信息,補充到該關停事件信息中。
③在信息輸入過程中對輸入的信息進行必要的數(shù)據(jù)有效性驗證,增強數(shù)據(jù)可靠性。
④通過頁面端查詢、更新和刪除某一時間段內的油井的所有關停事件信息。
⑤當頁面輸入關停事件時,根據(jù)最新的油井測井信息,自動在后臺計算出產量損失和該關停事件對應的當天的生產時率損失,將生產時率的計算精確到每一次關停事件。
⑥查詢和顯示某一時間段內的按關停原因分組的總的時率損失。
⑦通過頁面端輸入、查詢、更新和刪除某一時間段內的所有油井或某一口井的計量和狀態(tài)信息。
⑧查詢和顯示截至輸入的查詢日期,總的油井數(shù)量以及總的開井數(shù)量,以便快速得出開井率。
⑨通過Excel批量上傳油井的測井信息,并在上傳數(shù)據(jù)前進行數(shù)據(jù)有效性驗證,并核對數(shù)據(jù)庫,進行查重。
⑩將查詢到符合條件的關停事件信息或者油井信息導出到Excel中。
通過ASP.net編程搭建動態(tài)網(wǎng)站作為前臺頁面,以及MSSQL數(shù)據(jù)庫作為后臺數(shù)據(jù)存儲,主要開發(fā)平臺及軟件:Visual Studio 2015;MSSQL 2012數(shù)據(jù)庫;開發(fā)語言C#;Bootstrap 4.0 HTML網(wǎng)頁頁面架構;Microsoft.Net Framework 4.5.2 平臺;Windows7+IIS服務。
如圖1所示,前臺網(wǎng)頁頁面通過Visual Studio和Bootstrap進行快速開發(fā),作為信息的收集和展示,后臺通過Action類作為頁面行為的引導,最終通過Sqlhelper類建立和數(shù)據(jù)庫之間的數(shù)據(jù)交換,實現(xiàn)信息的動態(tài)存取。
在進行前端開發(fā)前,首先需要對數(shù)據(jù)庫進行配置,規(guī)劃好所有存儲的數(shù)據(jù)類型和表格。在數(shù)據(jù)庫中建立1個名稱為SDcollection的數(shù)據(jù)庫,同時建立 2個表格dbo.SDstatistic和dbo.Wellinfor,分別用來存儲關停事件信息和油井測井信息。
圖1 數(shù)據(jù)交換流程 Fig.1 Data exchange process
3.2.1 油井測井信息數(shù)據(jù)表
油井測井信息數(shù)據(jù)表總共包含14列,分別用來存儲油井的類型、各種產量、含水、測井時間等信息,具體如圖2所示,其中產油量Oil、產水量Water、電潛泵增產量ESPproduction,這3項不需要在頁面端輸入,將根據(jù)其他輸入的油井測試信息在后臺進行計算得出,然后合并填入數(shù)據(jù)庫。
圖2 數(shù)據(jù)庫油井信息表結構設計 Fig.2 Structure design of oil well information table in database
3.2.2 關停信息數(shù)據(jù)表
關停信息數(shù)據(jù)表包含14列,分別用來存儲關停信息的井名、關停時間、關停原因、產量損失及該關停事件所對應的當天的時率損失等信息,具體如圖3所示。其中只有SDtime、Starttime、CloseWellYN、SDreason為必填項,Detailreason為選填項,其他項在輸入關停信息時,將自動查詢測井信息數(shù)據(jù)表,并計算出對應的信息,一并填入關停事件信息表。
3.2.3 時率計算原則
時率計算根據(jù)統(tǒng)計規(guī)則的不同,結果也會有差別,本文所列時率計算原則具體如下:
①當輸入某油井關停事件時,將首先查詢測井信息表中有關該井的最近一條信息,并由此計算出“產 量損失”和“關停時長”,讀取該井的“Active”狀態(tài)、該井的“自噴產量”,關停時“X-tree閥門是否關閉”,“關停和時間”等,并查詢截至當天Active=Y的總井數(shù),然后計算出該關停事件的“當天損失時率”,合并以上信息后,作為一條關停記錄寫入數(shù)據(jù)庫。
圖3 數(shù)據(jù)庫關停信息表結構設計 Fig.3 Structure design of shutdown information table in database
②當查詢某個時段的時率時,記入時率損失的 2種情況為:如果該井狀態(tài)Active=Y,并且自噴產量NFproduction>0,并且關閉了采油樹閥門CloseValveYN=Y;如果該井狀態(tài)Active=Y,并且自噴產量NFproduction=0,并且沒有關閉采油樹閥門CloseValveYN=N。
③當查詢某個時段的時率時,不計入時率損失的2種情況:該井狀態(tài)Active=Y,并且自噴產量NFproduction>0,且沒有關閉采油樹閥門CloseValveYN=N;該井Active=N,則該關停事件不計入時率損失。
④當輸入的關停事件跨越多天時,輸入時會自動分解到每一天,并計算每一天的時率損失。
⑤關停事件當天的單井損失時率如式(1)所示:
式中:ts為關停事件當天損失時率;h為該油井關停時長;n為當前狀態(tài)Active=Y的所有油井數(shù)。
⑥當查詢某個時間段的總時率時,在檢索時間段內,根據(jù)條件②、③計算關停損失時率如式(2):
式中:χ為檢索時間段內的總生產時率;Tstart為檢索起始日期;Tend為檢索結束日期。
3.2.4 數(shù)據(jù)庫觸發(fā)器的設計
在關停信息數(shù)據(jù)表中,定義了觸發(fā)器SDstatistic_ AutoEx_trigger,觸發(fā)器的使用主要滿足當輸入關停事件時,自動計算相關項目,并更新到數(shù)據(jù)庫中。具體實現(xiàn)以下功能:
①自動計算關停時長、液量損失、油量損失;
②查詢測井信息表獲得該井的自噴產量,用于后面時率計算的判斷依據(jù);
③當關停事件跨越多天時,自動將其拆分到每 一天;
④自動計算每一個關停事件所對應的當天的時率損失。
具體代碼邏輯如下,由于篇幅限制,本文以下程序只說明邏輯結構,并非可執(zhí)行源碼。
insert into SDstatistic(*)values(*)
3.2.5 數(shù)據(jù)庫時率計算函數(shù)的使用
數(shù)據(jù)庫中定義了1個表值函數(shù)FN_TimeRate ByReason,當頁面請求計算某個時間段的時率時,數(shù)據(jù)庫將查詢該時間段內的每一條關停事件,根據(jù)時率計算原則的第②、③、④條判斷是否計入時率損失,最后按關停原因分組,返回一個List給頁面后臺代碼,然后綁定到頁面GridView中。數(shù)據(jù)庫時率計算函數(shù)代碼如下:
根據(jù)前端頁面信息輸入和展示的需要,總共規(guī)劃7個頁面:
①Shutdown Event Input輸入關停事件信息;
②Shutdown Event State查詢關停事件和生產時率;
③Well-Info Import油井測井信息錄入;
④Well-Info State查詢油井測井信息;
⑤Backup Database備份MSSQL數(shù)據(jù)庫;
讓法比感到安全的是,叫趙玉墨的女人,永遠不會愛上他。她那含意萬千的凝視是她的技巧,是她用來為自己換便利的,由此他更加恨她。他糊涂了,若是她死心塌地真心誠意地愛他,他不就完結了嗎?難道他不該感激她只和他玩技巧?
⑥Detail Shutdown Infor展示某一關停事件的詳細信息(間接打開);
⑦Detail Well-Info 展示某油井的某條詳細測井信息(間接打開)。
前端頁面的樣式設計使用Bootstrap框架,能夠滿足快速開發(fā)的需求,同時使用母版頁,在母版頁中對主導航欄進行設計后,可以直接在其他子頁面中進行調用,而避免重復開發(fā)。
本文著重講述前2個頁面,其他頁面具體功能代碼、Excel上傳下載、Bootstrap頁面架構以及Web發(fā)布等不再詳述。
3.3.1 頁面ShutdownEventInput的設計
由于各個脫氣站的油井數(shù)量是動態(tài)變化的,為避免每次有新的油井投產,就要從后臺修改網(wǎng)頁的頁面設計,那么油井輸入頁面也需要根據(jù)各個站的油井數(shù)量動態(tài)顯示所有井。如圖4所示。
3.3.2 ShutdownEventInput前臺頁面
在前臺頁面中使用DropDownList控件,羅列 9個站的站名,當需要輸入某個站的關停事件時,選擇該站的站名,在后臺程序中將查詢油井測井信息表中所有隸屬該站的井,并將該站的井名和有油井類型綁定到頁面的GridView中,各列功能為:
圖4 關停事件輸入頁面 Fig.4 Input page of shutdown events
②WellName,DGS和Type是從數(shù)據(jù)庫查詢出來后直接綁定無需填寫;
③SDtime和Starttime為文本框,用于輸入時間,通過彈窗方便選取時間;
④XtreeValveClose和SDreason則為下拉菜單,便于填寫;
⑤Detailreason為多行文本框。
3.3.3 ShutdownEventInput前臺頁面代碼
3.3.4 ShutdownEventInput后臺處理
在后臺代碼中,當點擊提交submit按鈕后,將首先對各個checkbox打勾的行所填內容進行有效性驗證,如果不滿足下面條件,則會在頁面彈出報警提示用戶:
①輸入的 SDtime和 Startime必須符合InputTimeValidation()函數(shù)所規(guī)定的日期格式;
②XtreeValveClose和SDreason不能為空;
③點擊提交后,通過action.TotalCount()類獲得該站總的井數(shù);
④通過action類的GetWellName()方法,來獲得該站所有井的井名并綁定到GridView。
3.3.5 ShutdownEventInput頁面后臺代碼
3.3.6 Active類的邏輯處理
后臺代碼響應前臺頁面請求時,通過傳遞過來的參數(shù)“DGS”名字,查詢數(shù)據(jù)庫中對應站所有的井,并生成列表返回到頁面后臺代碼中,最后綁定到頁面的GridView。在Action類中,首先定義好查詢SQL數(shù)據(jù)庫的字符串sql語句,以及內部形參,然后通過內部方法給形參賦值;最終調用Sqlhelper類中的ExecuteReader()方法獲取油井列表返回給頁面后臺。Active類代碼如下:
3.3.7 Sqlhelper類邏輯功能
Sqlhelper類專門用來處理與數(shù)據(jù)庫之間的數(shù)據(jù)交換,包含5個方法,分別用來實現(xiàn)對數(shù)據(jù)庫的讀寫等各種操作:
①ExecuteNonQuery()方法,執(zhí)行SQL語句并返回受影響的行數(shù);
②ExecuteScalar()方法,執(zhí)行SQL語句并返回查詢結果集的第一行第一列的內容;
③ExecuteReader()方法,執(zhí)行SQL語句并返回查詢結果集;
④ExecuteDataTable()方法,執(zhí)行SQL語句并以表的形式返回查詢結果集;
⑤ExecuteProc()方法,執(zhí)行數(shù)據(jù)庫中預定義的存儲過程,并返回第一行第一列的值,以判斷是否執(zhí)行成功,該方法用作備份數(shù)據(jù)庫使用。
如圖5所示,在關停事件展示頁中,定義了檢索條件行,可以分別查詢某個時間段的所有關停事件,或者某個井的關停事件,以及對應的時間段內按關停原因分組的生產時率損失和總時率。
圖5 關停事件展示頁面 Fig.5 Shutdown event state
同時在查詢結果表中,通過按鈕實現(xiàn)查詢結果導出到Excel中。由于在Shutdown Event Input頁面中已詳細介紹了Action和Sqlhelper類的功能,下面的內容中將不再贅述。
如圖6所示,同時展示了符合查詢時間的關停事件的列表,在列表的首列定義了超鏈接,可以打開關于該事件的詳細信息。
圖6 關停事件列表展示頁 Fig.6 Shutdown event list
本文提出了一種時率統(tǒng)計方法,通過網(wǎng)站開發(fā)部署和完善,能夠滿足生產需求,從而減輕了數(shù)據(jù)統(tǒng)計工作量,有效保障數(shù)據(jù)的準確性,同時提高了統(tǒng)計的數(shù)字化水平,便于后期維護。