Click to edit Master title style,*,Click to edit Master text styles中,Second level,Third level,Fourth level,Fifth level,基于Forward平台的二次开发流程,时新磊,长江大学生产测井实验室,参考书籍,均有电子版,安装Forward和SDK后提供,重点是WellBase技术开发手册,Contents,Forward/WellBase简介,1,开发一个方法模块的操作步骤,2,源代码说明,3,模块的挂接实现,4,Forward/WellBase简介,WellBase(Well Basic Analysis System Environment)是为了满足勘探、开发测井资料分析处理的需要而设计开发的,测井解释平台底层,,是构成Forward和Watch测井系统的基础,具有,测井数据输入、测井资料预处理、测井资料基本处理、测井解释成果输出等功能,,由平台数据底层和平台工具两部分组成。,WellBase,数据底层,数据管理工具,平台工具,预处理工具,成果输出工具,应用工具,Forward/WellBase简介,为满足我国勘探开发测井解释处理的需要,由CNPC油气勘探部和油气开发部组织全国各油田测井单位、研究院和院校的优秀测井软件人员,组成测井软件开发项目组,对七五和八五攻关成果进行优选和整理,在建立WellBase环境的基础上开发完成了具有我国独立自主版权的勘探测井解释系统Forward(Formation Oil&Gas Reservoir Well_Logging Analysis&Research&Development)和生产测井解释系统Watch(Well_Logging Analysis Technique for Casing Hole),Forward/WellBase简介,WellBase开发工具包(SDK),为帮助您快速开发测井处理程序,WellBase提供其软件开发工具包SDK(Software Development Kit)。,SDK中提供了大量的Fortran和C+输入输出接口函数,并分类进行了面向对象封装,SDK还提供了多种开发工具,帮助您快速生成各种测井应用源程序框架,通过必要的修改后便可产生各种应用程序。,Forward/WellBase简介,安装WellBase开发工具包(SDK),bin目录中存放平台所有可执行文件及动态库。在WellBase上开发的应用程序的执行文件必须存放在该目录下,bin的子目录dlldecode中存放数据解编动态库。用户开发完成的数据解编动态库必须存放在该目录下才能够被数据解编程序加载和调用。,bin的子目录dllprocess中存放处理方法动态库。用户开发完成的处理方法动态库必须存放在该目录下才能够被综合常规处理程序加载和调用,include目录中存放利用C或C+语言对平台进行开发时需要的所有头文件,Forward/WellBase简介,安装WellBase开发工具包(SDK),lib目录中存放利用Fortran、C或C+语言对平台进行开发时需要的所有库文件,source目录中存放WellBase平台提供的所有源程序。其子目录method中存放处理方法动态库源程序;process中存放Fortran处理方法源程序;processframe中存放处理部分框架源程序,decode中存放部分解编源程序,Forward/WellBase简介,安装WellBase开发工具包(SDK),template目录中存放处理程序的绘图模板、缺省处理参数文件以及参数可视编辑控制文件,,处理程序的模板目录名称采用处理程序名,处理程序的绘图模板、缺省处理参数文件(*.def)以及参数可视编辑控制文件(*.cfg)均存放在该目录下。,系统的模板目录与bin等目录平级。进行用户登记时可将用户的模板目录修改为用户缺省模板目录(用户名template)或用户缺省指定目录。采用用户缺省模板目录的优点在于不同的用户具有各自的模板目录,用户修改模板时不会影响其他用户,Forward/WellBase简介,安装WellBase开发工具包(SDK),workspace目录为用户工作区,其中存放用户处理井的数据,其目录结构如右图所示。,一口井的全部数据存放在名为“#井名”的目录下,可以采用一个WIS文件保存该井的全部数据,也可将数据分类(例如,按测井系列分类)保存为多个WIS文件。采用拖拉方式处理井时,缺省打开“井名.wis”文件。,tapedata目录中存放若干可供练习使用的测井原始数据文件。,系统的用户工作区目录与bin等目录平级。进行用户登记时可将用户的工作区目录修改为用户缺省目录(用户名workspace)或用户缺省指定目录。采用用户缺省工作区目录的优点在于不同的用户具有各自的工作区目录,用户修改井数据时不会影响其他用户。,Forward/WellBase简介,WellBase SDK提供的主要C+类,开发一个方法模块的操作步骤,利用WellBase可以开发三种类型的扩展模块/程序:,测井处理动态库,DLL库,测井处理动态库是一种外挂式的测井处理模块,开发人员利用动态库来完成测井资料的计算过程,由测井常规处理框架,LogProcess,动态调用,并由LogProcess实现图形操作、数据同步、参数编辑等过程,通过调用动态库的计算模块完成整个处理过程。测井常规处理框架如下图所示,测井处理框架应用,EXE程序,测井处理框架是一种基于LogFrame底层的多文档或单文档应用程序。LogFrame底层定义了应用类CLogFrameApp、主窗口类CLogMDIMainFrame、子窗口类CLogChildFrame、文档类CLogProcessDoc、视图类CLogProcessView及许多图形对象类,应用软件仅需完成自己的处理方法对象类。通过底层函数,应用程序可以访问所有的图形对象、修改图形的显示方式、控制鼠标动作、加入自己的图形对象,是一个真正的应用程序,数据解编动态库,DLL库,数据解编动态库是一种外挂式的测井数据解编模块,开发人员利用动态库来完成对单个文件的解编过程,由WellBase平台的,LogTape,主应用程序来实现对磁带机或磁盘文件的控制,配置解编动态库及调用顺序,主计算模块通过解编动态库的文件识别、信息扫描和数据转换函数实现对测井数据的解编,开发一个方法模块的操作步骤,测井应用程序一般结构,输入:指定要处理的曲线,处理:对曲线数据进行加工,输出:生成新的曲线或重写现有曲线,WellBase,完成了井数据格式的管理(Wis),完成了井绘图功能,开发者所需要做的工作,多数情况下只需要编写处理代码,开发一个方法模块操作步骤,首先建立一个应用图像框架工程:,开发一个方法模块操作步骤,代码窗口,操作步骤流程如下,熟悉了解待开发的模块的原理和解释方法,利用Forward SDK提供的VC6.0“测井分析动态库自动生成器”Wizard产生初始代码,修改代码:,修改输入曲线描述结构和输入曲线数据缓冲结构,修改输出曲线描述结构和输出曲线数据缓冲结构,修改参数描述信息结构、参数数据缓冲结构和参数默认值结构,编写Method方法的代码,撰写以下文件,参数可视化配置文件(.CFG),缺省参数文件(.DEF),缺省绘图模块(.PPR),编译调试,反复修改直到符合要求,源代码说明,由Wizard产生的项目包括下列文件(XXX为方法名):,XXX.cpp主文件,实现入口函数DoProcess和About,DoProcess函数构造处理方法对象,并调用该方法的处理函数进行处理。About函数显示版本、版权等信息。,XXX.def模块定义文件,定义两个引出函数DoProcess和About。,XXX.rc资源文件。,XXXMethod.cpp处理方法对象源文件,实现所有的处理函数。定义输入、输出曲线及参数名称。,XXXMethod.h处理方法对象头文件,定义处理方法对象及其函数,定义输入、输出曲线及参数变量。,Stdafx.cpp预编译源文件。,Stdafx.h预编译头文件。,Resource.h资源符号定义头文件。,Readmt.txt工程说明文件。,源代码说明,定义输入曲线,描述方法所需的输入曲线:,在XXXMethod.h头文件的,InVar,结构中定义输入曲线数据变量,可以是各种类型的变量或数组,变量的类型和井数据文件中实际存放曲线的类型无关,有数据底层实现不同类型数据的转换过程,例子中定义两个输入曲线变量GR和SP,都为单精度浮点,在XXXMethod.cpp中定义,INCURVE,结构数组变量(该结构在LogProcess.h中定义,关于该结构具体说明参考ClogProcess底层),数组的元素个数通过宏变量NNoI给出,它的值为输入曲线条数,例子中为两条输入曲线,该值为2。,对定义的INCURVE结构数组变量,PInCurve,赋值,每条曲线结构的变量代码和数据采样个数必须和InVar结构变量中指定的一致。若输入曲线数据结构InVar中定义的某条曲线变量类型不是单精度浮点,则在PInCurve结构数据中对应的元素中指定变量代码类型,若输入曲线数据结构InVar中定义的某条曲线变量是数组,则在PInCurve结构数据中对应的元素中指定采样点数。,源代码说明,定义输出曲线,描述方法所产生的输出曲线:,在XXXMethod.h头文件的,OutVar,结构中定义输出曲线数据变量,可以是各种类型的变量或数组,变量的类型与井数据文件中实际存放曲线的类型无关,有数据底层实现不同类型数据的转换过程,例子中定义两个输出曲线变量XGR和XSP,都为单精度浮点。,在XXXMethod.cpp中定义,OUTCURVE,结构数组变量(该结构在LogProcess.h中定义,关于该结构具体说明参考ClogProcess底层),数组的元素个数通过宏变量NNoO给出,它的值为输出曲线条数,例子中为两条输出曲线,该值为2。,对定义的,OUTCURVE,结构数组变量,POutCurve,赋值,每条曲线结构的变量代码和数据采样个数必须和OutVar结构变量中指定的一致。若输出曲线数据结构OutVar中定义的某条曲线变量类型不是单精度浮点,则在POutCurve结构数据中对应的元素中指定变量代码类型,若输出曲线数据结构OutVar中定义的某条曲线变量是数组,则在POutCurve结构数据中对应的元素中指定采样点数,源代码说明,定义输入参数:,在XXXMethod.h头文件的,InpVar,结构中定义输入参数变量,变量的类型必须是单精度浮点。,在XXXMethod.cpp中,INPNAME,类型字符串数组变量(该结构在LogProcess.h中定义,关于该结构具体说明参考ClogProcess底层),数组的元素个数通过宏变量NNoC给出,它的值为输入参数个数,例子中为两个输入参数,该值为2。,在XXXMethod.cpp中,定义参数缺省值数组变量,PARA,,并赋缺省值,源代码说明,方法调用过程:,第一步:主程序装入方法动态库,并调用DoProcess函数,将井文件名和参数名传递到该函数中,控制转移到该函数。,第二步:DoProcess函数构造处理方法对象,并调用方法对象的Processing函数,控制转移到该函数。,第三步:Processing函数实现数据处理后,返回到DoProcess函数。,第四步:DoProcess函数删除方法对象,返回由Processing函数返回的数值,控制回到主程序。,第五步:主程序释放方法动态库,根据DoProcess的返回代码判断是否刷新图形及同步数据,若返回值小于零,不刷新图形和同步数据,否则刷新图形和同步数据,模块的挂接实现,第一步:,将编译后的可执行文件(.exe)拷贝至Forward或Watch平台安装目录下的执行程序目录.bin下;,第二步:,数据表定义文件“deftable.inf