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