劉波濤,王新海 ( 油氣資源與勘探技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室 (長江大學(xué)))長江大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,湖北 荊州 434023
王青海 (中石化勝利油田分公司鉆井工藝研究院信息中心,山東東營 257000)
王釗 (中國石油伊拉克公司,北京 100724)
夏進(jìn)軍 (中石油遼河油田分公司金馬油田開發(fā)公司地質(zhì)研究所,遼寧 盤錦 124010)
泥頁巖儲(chǔ)層試井解釋軟件中有限狀態(tài)機(jī)的設(shè)計(jì)與實(shí)現(xiàn)
劉波濤,王新海 ( 油氣資源與勘探技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室 (長江大學(xué)))長江大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,湖北 荊州 434023
王青海 (中石化勝利油田分公司鉆井工藝研究院信息中心,山東東營 257000)
王釗 (中國石油伊拉克公司,北京 100724)
夏進(jìn)軍 (中石油遼河油田分公司金馬油田開發(fā)公司地質(zhì)研究所,遼寧 盤錦 124010)
泥頁巖儲(chǔ)層是一種非常規(guī)油氣資源,對(duì)該類儲(chǔ)層的研究是當(dāng)前研究的一個(gè)熱點(diǎn)方向。而泥頁巖儲(chǔ)層試井解釋軟件是專門針對(duì)該儲(chǔ)層進(jìn)行試井解釋的一套軟件,討論其有限狀態(tài)機(jī)的設(shè)計(jì)與實(shí)現(xiàn)對(duì)最終實(shí)現(xiàn)該軟件起著至關(guān)重要的作用。以VS2010為開發(fā)平臺(tái),詳細(xì)闡述了泥頁巖儲(chǔ)層試井解釋軟件有限狀態(tài)機(jī)的設(shè)計(jì)思路與實(shí)現(xiàn)技巧。結(jié)果顯示,應(yīng)用有限狀態(tài)機(jī)設(shè)計(jì)的泥頁巖儲(chǔ)層試井解釋軟件邏輯結(jié)構(gòu)清晰、運(yùn)行穩(wěn)定可靠、具有較好的應(yīng)用價(jià)值。
試井解釋軟件;泥頁巖儲(chǔ)層;有限狀態(tài)機(jī);VS2010
泥頁巖儲(chǔ)層作為一種非常規(guī)油氣資源[1],正發(fā)揮著越來越重要的作用[2],國內(nèi)外大量泥頁巖油氣藏不斷發(fā)現(xiàn)和近年來北美地區(qū)頁巖氣勘探獲得的巨大成功表明,對(duì)泥頁巖儲(chǔ)層的研究尤為重要[3]。作為一套專門針對(duì)泥頁巖儲(chǔ)層進(jìn)行試井資料解釋的軟件,泥頁巖儲(chǔ)層試井解釋軟件 (mudstone reservoir welltesting interpretation software,簡稱MRWIS)有其實(shí)際的應(yīng)用意義和復(fù)雜性。而有限狀態(tài)機(jī)[4](finite state machine,F(xiàn)SM)是一種劃分復(fù)雜系統(tǒng)的數(shù)學(xué)模型,因此,討論如何設(shè)計(jì)及實(shí)現(xiàn)其有限狀態(tài)機(jī)對(duì)最終實(shí)現(xiàn)該軟件起著至關(guān)重要的作用。
有限狀態(tài)機(jī)一般被用來描述具有有限個(gè)狀態(tài)的系統(tǒng),該系統(tǒng)在輸入的驅(qū)動(dòng)下從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài),并產(chǎn)生必要的輸出[4]。作為一種基本的形式化方法,它可以精確地刻畫軟件系統(tǒng)或其子系統(tǒng)的行為,在計(jì)算機(jī)相關(guān)領(lǐng)域得到了廣泛的應(yīng)用,如應(yīng)用系統(tǒng)的建模、形式語言的定義、網(wǎng)絡(luò)協(xié)議的描述、實(shí)時(shí)系統(tǒng)、嵌入式軟件設(shè)計(jì)、面向?qū)ο筌浖蓄惖男袨榧捌浣换サ鹊龋?~9]。
有限狀態(tài)機(jī)又稱有窮狀態(tài)自動(dòng)機(jī) (finite automation,F(xiàn)A),對(duì)于一個(gè)給定的屬于該自動(dòng)機(jī)的狀態(tài)和一個(gè)給定的屬于該自動(dòng)機(jī)的觸發(fā)事件,它都能根據(jù)事先給定的轉(zhuǎn)移函數(shù)轉(zhuǎn)移到下一個(gè)狀態(tài)[10]。用于描述狀態(tài)轉(zhuǎn)換的有限狀態(tài)機(jī)可以定義為一個(gè)六元組M=(S,S0,Z,I,O,f)。其中S為有限集合,集合中每個(gè)元素對(duì)應(yīng)于有限狀態(tài)機(jī)的一個(gè)狀態(tài);S0是一個(gè)特殊狀態(tài),它是有限狀態(tài)機(jī)的初始態(tài),S0∈S;Z是有限狀態(tài)機(jī)的非空終止?fàn)顟B(tài)集合,ZS;I為輸入符號(hào)的集合;O為輸出符號(hào)的集合;f為狀態(tài)轉(zhuǎn)換函數(shù),它是一個(gè)Q×I→Q的映射函數(shù),f(S1,I1,O1)=S2就意味著在狀態(tài)S1下發(fā)生觸發(fā)事件I1時(shí),有限狀態(tài)機(jī)從當(dāng)前狀態(tài)S1變遷到次態(tài)S2,并輸出字符O1。
FSM包含了以下5個(gè)要素[8]:狀態(tài) (State)、條件 (Guard)、事件 (Event)、動(dòng)作 (Action)、遷移 (Transition),這些要素的關(guān)系可用圖1表示。
泥頁巖儲(chǔ)層試井解釋軟件 (MRWIS)的設(shè)計(jì)思路是:首先要根據(jù)滲流力學(xué)理論建立泥頁巖試井的數(shù)學(xué)模型,再利用數(shù)值模擬方法求解數(shù)學(xué)模型的數(shù)值解,在此基礎(chǔ)上,利用軟件工程技術(shù)在Windows環(huán)境下用VS2010開發(fā)工具進(jìn)行開發(fā)。
MRWIS軟件的界面如圖2所示,左邊的操作控制臺(tái)將用戶的界面操作命令以按鈕形式呈現(xiàn)并以分組方式顯示。
圖1 FSM狀態(tài)遷移圖
軟件流程圖如圖3所示。
總結(jié)軟件中的觸發(fā)事件、狀態(tài)及輸出如圖4所示。
1)當(dāng)用戶點(diǎn)擊 【讀入產(chǎn)量數(shù)據(jù)】命令按鈕并成功讀入產(chǎn)量數(shù)據(jù)后,定義此時(shí)發(fā)生的事件為 【E-vent_ReadQ】,此時(shí)軟件會(huì)輸出產(chǎn)量數(shù)據(jù)曲線(如圖2中下面畫布所示階梯狀曲線),狀態(tài)機(jī)會(huì)從當(dāng)前狀態(tài)遷移到 【State_ReadedQ】。
2)當(dāng)用戶點(diǎn)擊 【讀入壓力數(shù)據(jù)】命令按鈕并成功讀入壓力數(shù)據(jù)后,定義此時(shí)發(fā)生的事件為 【E-vent_ReadPwf】,此時(shí)軟件會(huì)輸出壓力數(shù)據(jù)曲線(如圖2中上面畫布所示鋸齒狀分段曲線),狀態(tài)機(jī)會(huì)從當(dāng)前狀態(tài)遷移到 【State_ReadedPwf】。
圖2 MRWIS軟件界面圖
3)當(dāng)用戶點(diǎn)擊 【輸入?yún)?shù)】命令按鈕并成功讀入所有輸入?yún)?shù)后,定義此時(shí)發(fā)生的事件為 【Event_GetPara】,此時(shí)軟件不需輸出,狀態(tài)機(jī)會(huì)從當(dāng)前狀態(tài)遷移到 【State_GetedPara】。
4)當(dāng)用戶點(diǎn)擊 【選擇解釋區(qū)間】命令按鈕并成功選擇一個(gè)壓力恢復(fù)解釋段[11](即圖2中被選中的解釋段)后,定義此時(shí)發(fā)生的事件為 【Event_SelectRange】,此時(shí)軟件會(huì)推導(dǎo)并輸出壓力恢復(fù)段對(duì)應(yīng)的3條曲線:實(shí)測壓力及壓力導(dǎo)數(shù)雙對(duì)數(shù)曲線[11]、實(shí)測壓力半對(duì)數(shù)曲線[11]及實(shí)測壓力曲線恢復(fù)段,狀態(tài)機(jī)會(huì)從當(dāng)前狀態(tài)遷移到 【State_SelectedRange】。
5)當(dāng)用戶點(diǎn)擊 【繪制圖版】命令按鈕并成功選擇一個(gè)解釋模型后,定義此時(shí)發(fā)生的事件為 【Event_DrawChart】,此時(shí)軟件會(huì)根據(jù)用戶選擇的模型生成一套理論圖版曲線 (即格林加登圖版曲線[11]和布德圖版曲線[11])。狀態(tài)機(jī)會(huì)從當(dāng)前狀態(tài)遷移到 【State_DrawedChart】。
6)此時(shí)需要移動(dòng)實(shí)測壓力及壓力導(dǎo)數(shù)雙對(duì)數(shù)曲線來擬合計(jì)算地層參數(shù),用戶點(diǎn)擊界面中的 【圖版擬合】按鈕,定義此時(shí)發(fā)生的事件為 【Event_StartChartFit】,此時(shí)軟件會(huì)將實(shí)測壓力及壓力導(dǎo)數(shù)雙對(duì)數(shù)曲線所在頁面設(shè)置為能移動(dòng)曲線的模式,以方便用戶進(jìn)行圖版擬合操作。此時(shí)狀態(tài)機(jī)會(huì)從當(dāng)前狀態(tài)遷移到 【State_ChartFitting】。
7)當(dāng)用戶在圖版頁面中移動(dòng)了圖版曲線后,定義此時(shí)發(fā)生的事件為 【Event_M(jìn)oveChart】,此時(shí)軟件會(huì)根據(jù)用戶的移動(dòng)更新實(shí)測壓力及壓力導(dǎo)數(shù)雙對(duì)數(shù)曲線,并自動(dòng)計(jì)算地層參數(shù) (pi和滲透率)。狀態(tài)機(jī)會(huì)從當(dāng)前狀態(tài)遷移到 【State_M(jìn)ovedChart】。這一過程可能會(huì)反復(fù)出現(xiàn)多次,直到用戶對(duì)當(dāng)前的圖版擬合結(jié)果滿意為止。
8)一旦用戶對(duì)當(dāng)前圖版擬合結(jié)果滿意后,可點(diǎn)擊界面 【驗(yàn)證圖版擬合結(jié)果】按鈕,定義此時(shí)發(fā)生的事件為 【Event_EndChartFit】,軟件就會(huì)利用當(dāng)前理論圖版曲線的擬合段部分推導(dǎo)繪制 (或更新)計(jì)算的Horner曲線及計(jì)算的壓力曲線。狀態(tài)機(jī)會(huì)從當(dāng)前狀態(tài)遷移到 【State_EndChartFit】。
9)此后,用戶可根據(jù)當(dāng)前3個(gè)頁面中的4套曲線 (即實(shí)測壓力雙對(duì)數(shù)曲線與格林加登圖版曲線、實(shí)測壓力導(dǎo)數(shù)雙對(duì)數(shù)曲線與布德圖版曲線,實(shí)測Horner曲線及計(jì)算的Horner曲線,實(shí)測壓力曲線恢復(fù)段及計(jì)算的壓力曲線)的擬合程度來判斷是否需要繼續(xù)上述第7)~8)步驟以期獲得更好的擬合結(jié)果。如果用戶對(duì)當(dāng)前擬合結(jié)果滿意,則可點(diǎn)擊界面的 【輸出解釋報(bào)告】按鈕,定義此時(shí)發(fā)生的事件為【Event_OutputToWord】,軟件就會(huì)輸出Word報(bào)告。狀態(tài)機(jī)會(huì)從當(dāng)前狀態(tài)遷移到 【State_Output-ToWord】。
2.4.1 狀態(tài)機(jī)定義
狀態(tài)機(jī)及觸發(fā)事件個(gè)數(shù)都有限,故可用C++語言中的枚舉型變量定義。狀態(tài)機(jī)定義如下:
觸發(fā)事件的定義當(dāng)然也可以采用上述方法直接定義,但這樣一來就無法記錄狀態(tài)機(jī)到底經(jīng)歷了哪些事件,因此為了保存最近發(fā)生事件的歷史記錄,觸發(fā)事件定義如下:
此后,即可用置位方式操作int型變量m_iEvent來記錄狀態(tài)機(jī)所有已發(fā)生的觸發(fā)事件。例如,如果讀入了參數(shù)可以調(diào)用m_iEvent|=Event_GetPara來實(shí)現(xiàn)。同理,還需要定義一個(gè)EnumType_StateMachineState型的全局變量m_enumState來記錄狀態(tài)機(jī)的當(dāng)前狀態(tài)。
2.4.2 程序?qū)崿F(xiàn)
FSM模型實(shí)現(xiàn)方法很多,這里采用結(jié)構(gòu)化方法[12]的思路來實(shí)現(xiàn),具體實(shí)現(xiàn)如下:
1)給每個(gè)界面操作按鈕添加相應(yīng)的界面命令更新函數(shù)及界面命令響應(yīng)函數(shù)。以 【選擇解釋區(qū)間】命令按鈕為例,其界面命令更新函數(shù)void OnUpdate_SelectTestRange(CCmdUI*pCmdUI)和界面命令響應(yīng)函數(shù)afx_msg void OnCmd_SelectTestRange()實(shí)現(xiàn)流程分別如圖5(a)和圖5(b)所示。由圖5(a)可知,只有在讀入了參數(shù)、壓力數(shù)據(jù)及產(chǎn)量數(shù)據(jù)后,【選擇解釋區(qū)間】命令菜單才會(huì)響應(yīng)用戶的操作。由圖5(b)可知,在響應(yīng)用戶操作后,首先會(huì)調(diào)用事件檢查函數(shù)bool FSM_EventCheck()來檢查事件Event_SelectRange是否能夠執(zhí)行,若能執(zhí)行,軟件會(huì)在繪制三條曲線后利用狀態(tài)機(jī)變遷函數(shù)void FSM_SetState()將狀態(tài)機(jī)置成State_SelectedRange狀態(tài);若不能執(zhí)行,則該操作將不被執(zhí)行。
2)bool FSM_EventCheck()函數(shù)的實(shí)現(xiàn)原理是以入口參數(shù) (即當(dāng)前即將要發(fā)生事件)劃分Case分支語句,在語句里面根據(jù)當(dāng)前已經(jīng)經(jīng)歷的歷史事件m_iEvent來綜合判斷,當(dāng)前即將要發(fā)生的事件是否允許發(fā)生。例如,如果沒有經(jīng)歷事件Event_ReadPwf,則Event_SelectRange事件是不能發(fā)生的。
3)void FSM_SetState(EnumType_StateMachineState iState)函數(shù)主要完成2個(gè)工作:首先將狀態(tài)機(jī)的當(dāng)前狀態(tài)置為入口參數(shù)所指狀態(tài),接著記錄本次狀態(tài)變遷所發(fā)生的觸發(fā)事件。
圖5 界面命令菜單更新及響應(yīng)函數(shù)流程圖
經(jīng)筆者測試驗(yàn)證,依據(jù)所述方法設(shè)計(jì)與實(shí)現(xiàn)的MRWIS軟件在實(shí)際解釋應(yīng)用中運(yùn)行穩(wěn)定,狀態(tài)機(jī)變遷正常。
有限狀態(tài)機(jī)不僅僅是一種設(shè)計(jì)工具,而且還是一種思想方法。筆者以實(shí)現(xiàn)MRWIS軟件為最終目的,詳細(xì)討論了其狀態(tài)機(jī)的設(shè)計(jì)與實(shí)現(xiàn)思路,實(shí)際應(yīng)用結(jié)果表明:利用有限狀態(tài)機(jī)來分解復(fù)雜的試井解釋軟件,能使軟件邏輯結(jié)構(gòu)更加清晰、編碼更加簡單、健壯性更強(qiáng),最終可使軟件具備更好的實(shí)際應(yīng)用效果。當(dāng)然,筆者的設(shè)計(jì)思路和實(shí)現(xiàn)技巧對(duì)其他軟件系統(tǒng) (特別是石油軟件)如何應(yīng)用有限狀態(tài)機(jī),有很好的借鑒價(jià)值。
[1]郝運(yùn)輕,謝忠懷,周自立,等 .非常規(guī)油氣勘探領(lǐng)域泥頁巖綜合分類命名方案探討 [J].油氣地質(zhì)與采收率,2012,19(6):16~24.
[2]何金鋼,康毅力,游利軍,等 .流體損害對(duì)頁巖儲(chǔ)層應(yīng)力敏感性的影響 [J].天然氣地球科學(xué),2011,22(5):915~919.
[3]丁文龍,許長春,久凱,等 .泥頁巖裂縫研究進(jìn)展 [J].地球科學(xué)進(jìn)展,2011,26(2):135~143.
[4]劉軼,劉濤,張興軍,等 .基于有限狀態(tài)機(jī)的呼叫中心軟件設(shè)計(jì) [J].微電子學(xué)與計(jì)算機(jī),2006,23(2):83~88.
[5]張涌,錢樂秋,王淵峰 .基于確定有限狀態(tài)機(jī)的測試輸入序列選取 [J].計(jì)算機(jī)研究與發(fā)展,2002,39(9):1144~1150.
[6]劉寶旨 .基于事件驅(qū)動(dòng)狀態(tài)機(jī)的多線語音應(yīng)用程序設(shè)計(jì) [J].計(jì)算機(jī)應(yīng)用,1999,19(7):14~18.
[7]徐健,周杏鵬 .基于有限狀態(tài)機(jī)的SMS液晶顯示終端的研究與實(shí)現(xiàn) [J].計(jì)算機(jī)應(yīng)用,2006,25(11):24~26.
[8]張菁 .基于有限狀態(tài)機(jī)的UDP傳輸設(shè)計(jì) [J].計(jì)算機(jī)工程,2011,37(17):52~54.
[9]吳春波,蘇厚勤 .基于有限狀態(tài)機(jī)模型的GUI設(shè)計(jì)及其應(yīng)用 [J].計(jì)算機(jī)應(yīng)用與軟件,2010,27(11):141~144.
[10]王飛,裴海龍,王清陽 .有限狀態(tài)機(jī)在數(shù)控系統(tǒng)任務(wù)管理中的應(yīng)用 [J].機(jī)械設(shè)計(jì)與制造,2011,32(5):245~247.
[11]劉能強(qiáng) .實(shí)用現(xiàn)代試井解釋方法 [M].北京:石油工業(yè)出版社,1992.
[12]徐小良,汪樂宇,周泓 .有限狀態(tài)機(jī)的一種實(shí)現(xiàn)框架 [J].工程設(shè)計(jì)學(xué)報(bào),2003,10(5):251~255.
[編輯] 黃鸝
Design and Im p lem entation of Finite State M achine in M udstone Reservoir W ell-testing Interp retation Software
LIU Botao,WANG Xinhai,WANG Qinghai,WANG Zhao,XIA Jin jun (First Author's Address:Key Laboratory of Exploration Technologies for Oil and Gas Resources(Yangtze University),Ministry of Education;School of Computer Science,Yangtze University,Jingzhou 434023,Hubei,China;)
Mudstone reservoir was one of the unconventional oil and gas resources,study of the reservoir was currently a highlight of research.TheMudstone ReservoirWell-testing Interpretation Softwarewas awell test interpretation software designed for themudstone reservoir,and the discussion of design and implementation of finite statemachine played a vital role in the final implementation of the software.By taking VS2010 as the development platform,design ideas and implementation skill of its finite statemachine were elaborated in detail.Application results show that the logical structure of the software designed with the finite statemachine is clear,its operation is stable and reliable,and it has a good application value.
well-testing interpretation software;mudstone reservoir;finite statemachine;VS2010
TE319
A
1000-9752(2014)05-0105-05
2014-04-25
國家科技重大專項(xiàng) (2011ZX0515-002);中國石油天然氣集團(tuán)公司重大科技項(xiàng)目 (2012E-3414);油氣資源與勘探技術(shù)教
育部重點(diǎn)實(shí)驗(yàn)室 (長江大學(xué))開放基金資助項(xiàng)目 (K2013-27)。
劉波濤 (1980-),男,2003年大學(xué)畢業(yè),講師,博士生,現(xiàn)主要從事油藏工程方面的研究工作。