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