刘波涛,王新海 ( 油气资源与勘探技术教育部重点实验室 (长江大学))长江大学计算机科学学院,湖北 荆州 434023
王青海 (中石化胜利油田分公司钻井工艺研究院信息中心,山东东营 257000)
王钊 (中国石油伊拉克公司,北京 100724)
夏进军 (中石油辽河油田分公司金马油田开发公司地质研究所,辽宁 盘锦 124010)
泥页岩储层试井解释软件中有限状态机的设计与实现
刘波涛,王新海 ( 油气资源与勘探技术教育部重点实验室 (长江大学))长江大学计算机科学学院,湖北 荆州 434023
王青海 (中石化胜利油田分公司钻井工艺研究院信息中心,山东东营 257000)
王钊 (中国石油伊拉克公司,北京 100724)
夏进军 (中石油辽河油田分公司金马油田开发公司地质研究所,辽宁 盘锦 124010)
泥页岩储层是一种非常规油气资源,对该类储层的研究是当前研究的一个热点方向。而泥页岩储层试井解释软件是专门针对该储层进行试井解释的一套软件,讨论其有限状态机的设计与实现对最终实现该软件起着至关重要的作用。以VS2010为开发平台,详细阐述了泥页岩储层试井解释软件有限状态机的设计思路与实现技巧。结果显示,应用有限状态机设计的泥页岩储层试井解释软件逻辑结构清晰、运行稳定可靠、具有较好的应用价值。
试井解释软件;泥页岩储层;有限状态机;VS2010
泥页岩储层作为一种非常规油气资源[1],正发挥着越来越重要的作用[2],国内外大量泥页岩油气藏不断发现和近年来北美地区页岩气勘探获得的巨大成功表明,对泥页岩储层的研究尤为重要[3]。作为一套专门针对泥页岩储层进行试井资料解释的软件,泥页岩储层试井解释软件 (mudstone reservoir welltesting interpretation software,简称MRWIS)有其实际的应用意义和复杂性。而有限状态机[4](finite state machine,FSM)是一种划分复杂系统的数学模型,因此,讨论如何设计及实现其有限状态机对最终实现该软件起着至关重要的作用。
有限状态机一般被用来描述具有有限个状态的系统,该系统在输入的驱动下从一个状态转换到另一个状态,并产生必要的输出[4]。作为一种基本的形式化方法,它可以精确地刻画软件系统或其子系统的行为,在计算机相关领域得到了广泛的应用,如应用系统的建模、形式语言的定义、网络协议的描述、实时系统、嵌入式软件设计、面向对象软件中类的行为及其交互等等[5~9]。
有限状态机又称有穷状态自动机 (finite automation,FA),对于一个给定的属于该自动机的状态和一个给定的属于该自动机的触发事件,它都能根据事先给定的转移函数转移到下一个状态[10]。用于描述状态转换的有限状态机可以定义为一个六元组M=(S,S0,Z,I,O,f)。其中S为有限集合,集合中每个元素对应于有限状态机的一个状态;S0是一个特殊状态,它是有限状态机的初始态,S0∈S;Z是有限状态机的非空终止状态集合,ZS;I为输入符号的集合;O为输出符号的集合;f为状态转换函数,它是一个Q×I→Q的映射函数,f(S1,I1,O1)=S2就意味着在状态S1下发生触发事件I1时,有限状态机从当前状态S1变迁到次态S2,并输出字符O1。
FSM包含了以下5个要素[8]:状态 (State)、条件 (Guard)、事件 (Event)、动作 (Action)、迁移 (Transition),这些要素的关系可用图1表示。
泥页岩储层试井解释软件 (MRWIS)的设计思路是:首先要根据渗流力学理论建立泥页岩试井的数学模型,再利用数值模拟方法求解数学模型的数值解,在此基础上,利用软件工程技术在Windows环境下用VS2010开发工具进行开发。
MRWIS软件的界面如图2所示,左边的操作控制台将用户的界面操作命令以按钮形式呈现并以分组方式显示。
图1 FSM状态迁移图
软件流程图如图3所示。
总结软件中的触发事件、状态及输出如图4所示。
1)当用户点击 【读入产量数据】命令按钮并成功读入产量数据后,定义此时发生的事件为 【E-vent_ReadQ】,此时软件会输出产量数据曲线(如图2中下面画布所示阶梯状曲线),状态机会从当前状态迁移到 【State_ReadedQ】。
2)当用户点击 【读入压力数据】命令按钮并成功读入压力数据后,定义此时发生的事件为 【E-vent_ReadPwf】,此时软件会输出压力数据曲线(如图2中上面画布所示锯齿状分段曲线),状态机会从当前状态迁移到 【State_ReadedPwf】。
图2 MRWIS软件界面图
3)当用户点击 【输入参数】命令按钮并成功读入所有输入参数后,定义此时发生的事件为 【Event_GetPara】,此时软件不需输出,状态机会从当前状态迁移到 【State_GetedPara】。
4)当用户点击 【选择解释区间】命令按钮并成功选择一个压力恢复解释段[11](即图2中被选中的解释段)后,定义此时发生的事件为 【Event_SelectRange】,此时软件会推导并输出压力恢复段对应的3条曲线:实测压力及压力导数双对数曲线[11]、实测压力半对数曲线[11]及实测压力曲线恢复段,状态机会从当前状态迁移到 【State_SelectedRange】。
5)当用户点击 【绘制图版】命令按钮并成功选择一个解释模型后,定义此时发生的事件为 【Event_DrawChart】,此时软件会根据用户选择的模型生成一套理论图版曲线 (即格林加登图版曲线[11]和布德图版曲线[11])。状态机会从当前状态迁移到 【State_DrawedChart】。
6)此时需要移动实测压力及压力导数双对数曲线来拟合计算地层参数,用户点击界面中的 【图版拟合】按钮,定义此时发生的事件为 【Event_StartChartFit】,此时软件会将实测压力及压力导数双对数曲线所在页面设置为能移动曲线的模式,以方便用户进行图版拟合操作。此时状态机会从当前状态迁移到 【State_ChartFitting】。
7)当用户在图版页面中移动了图版曲线后,定义此时发生的事件为 【Event_MoveChart】,此时软件会根据用户的移动更新实测压力及压力导数双对数曲线,并自动计算地层参数 (pi和渗透率)。状态机会从当前状态迁移到 【State_MovedChart】。这一过程可能会反复出现多次,直到用户对当前的图版拟合结果满意为止。
8)一旦用户对当前图版拟合结果满意后,可点击界面 【验证图版拟合结果】按钮,定义此时发生的事件为 【Event_EndChartFit】,软件就会利用当前理论图版曲线的拟合段部分推导绘制 (或更新)计算的Horner曲线及计算的压力曲线。状态机会从当前状态迁移到 【State_EndChartFit】。
9)此后,用户可根据当前3个页面中的4套曲线 (即实测压力双对数曲线与格林加登图版曲线、实测压力导数双对数曲线与布德图版曲线,实测Horner曲线及计算的Horner曲线,实测压力曲线恢复段及计算的压力曲线)的拟合程度来判断是否需要继续上述第7)~8)步骤以期获得更好的拟合结果。如果用户对当前拟合结果满意,则可点击界面的 【输出解释报告】按钮,定义此时发生的事件为【Event_OutputToWord】,软件就会输出Word报告。状态机会从当前状态迁移到 【State_Output-ToWord】。
2.4.1 状态机定义
状态机及触发事件个数都有限,故可用C++语言中的枚举型变量定义。状态机定义如下:
触发事件的定义当然也可以采用上述方法直接定义,但这样一来就无法记录状态机到底经历了哪些事件,因此为了保存最近发生事件的历史记录,触发事件定义如下:
此后,即可用置位方式操作int型变量m_iEvent来记录状态机所有已发生的触发事件。例如,如果读入了参数可以调用m_iEvent|=Event_GetPara来实现。同理,还需要定义一个EnumType_StateMachineState型的全局变量m_enumState来记录状态机的当前状态。
2.4.2 程序实现
FSM模型实现方法很多,这里采用结构化方法[12]的思路来实现,具体实现如下:
1)给每个界面操作按钮添加相应的界面命令更新函数及界面命令响应函数。以 【选择解释区间】命令按钮为例,其界面命令更新函数void OnUpdate_SelectTestRange(CCmdUI*pCmdUI)和界面命令响应函数afx_msg void OnCmd_SelectTestRange()实现流程分别如图5(a)和图5(b)所示。由图5(a)可知,只有在读入了参数、压力数据及产量数据后,【选择解释区间】命令菜单才会响应用户的操作。由图5(b)可知,在响应用户操作后,首先会调用事件检查函数bool FSM_EventCheck()来检查事件Event_SelectRange是否能够执行,若能执行,软件会在绘制三条曲线后利用状态机变迁函数void FSM_SetState()将状态机置成State_SelectedRange状态;若不能执行,则该操作将不被执行。
2)bool FSM_EventCheck()函数的实现原理是以入口参数 (即当前即将要发生事件)划分Case分支语句,在语句里面根据当前已经经历的历史事件m_iEvent来综合判断,当前即将要发生的事件是否允许发生。例如,如果没有经历事件Event_ReadPwf,则Event_SelectRange事件是不能发生的。
3)void FSM_SetState(EnumType_StateMachineState iState)函数主要完成2个工作:首先将状态机的当前状态置为入口参数所指状态,接着记录本次状态变迁所发生的触发事件。
图5 界面命令菜单更新及响应函数流程图
经笔者测试验证,依据所述方法设计与实现的MRWIS软件在实际解释应用中运行稳定,状态机变迁正常。
有限状态机不仅仅是一种设计工具,而且还是一种思想方法。笔者以实现MRWIS软件为最终目的,详细讨论了其状态机的设计与实现思路,实际应用结果表明:利用有限状态机来分解复杂的试井解释软件,能使软件逻辑结构更加清晰、编码更加简单、健壮性更强,最终可使软件具备更好的实际应用效果。当然,笔者的设计思路和实现技巧对其他软件系统 (特别是石油软件)如何应用有限状态机,有很好的借鉴价值。
[1]郝运轻,谢忠怀,周自立,等 .非常规油气勘探领域泥页岩综合分类命名方案探讨 [J].油气地质与采收率,2012,19(6):16~24.
[2]何金钢,康毅力,游利军,等 .流体损害对页岩储层应力敏感性的影响 [J].天然气地球科学,2011,22(5):915~919.
[3]丁文龙,许长春,久凯,等 .泥页岩裂缝研究进展 [J].地球科学进展,2011,26(2):135~143.
[4]刘轶,刘涛,张兴军,等 .基于有限状态机的呼叫中心软件设计 [J].微电子学与计算机,2006,23(2):83~88.
[5]张涌,钱乐秋,王渊峰 .基于确定有限状态机的测试输入序列选取 [J].计算机研究与发展,2002,39(9):1144~1150.
[6]刘宝旨 .基于事件驱动状态机的多线语音应用程序设计 [J].计算机应用,1999,19(7):14~18.
[7]徐健,周杏鹏 .基于有限状态机的SMS液晶显示终端的研究与实现 [J].计算机应用,2006,25(11):24~26.
[8]张菁 .基于有限状态机的UDP传输设计 [J].计算机工程,2011,37(17):52~54.
[9]吴春波,苏厚勤 .基于有限状态机模型的GUI设计及其应用 [J].计算机应用与软件,2010,27(11):141~144.
[10]王飞,裴海龙,王清阳 .有限状态机在数控系统任务管理中的应用 [J].机械设计与制造,2011,32(5):245~247.
[11]刘能强 .实用现代试井解释方法 [M].北京:石油工业出版社,1992.
[12]徐小良,汪乐宇,周泓 .有限状态机的一种实现框架 [J].工程设计学报,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
国家科技重大专项 (2011ZX0515-002);中国石油天然气集团公司重大科技项目 (2012E-3414);油气资源与勘探技术教
育部重点实验室 (长江大学)开放基金资助项目 (K2013-27)。
刘波涛 (1980-),男,2003年大学毕业,讲师,博士生,现主要从事油藏工程方面的研究工作。