|||
Logging Field Quick-Look Interpolation Software Version 1.0 Beta
开发环境:Visual Studio 2012 ( VC++ MFC ) + Windows 64
1主要功能模块
依据经典的三层(表示层、业务层和数据层)软件开发模型,LFQLS的几个主要模块也可划分为:
(1)数据输入和数据输出的数据层。主要操作为处理开始时导入随钻跟踪过程中提供的测井原始数据、录井气测数据以及录井岩屑描述数据,并在处理完成后,输出各种成果表和成果图。
(2)数据处理的业务层。主要功能为垂深与直深转换、参数计算提取和测井解释中的各种数据计算。
(3)数据绘图的表示层。主要绘制显示各种随钻数据,包括测井原始数据、录井的岩屑和气测数据以及处理参数等,同时包含了打印机内容的绘制功能。
具体模块关系如下图所示:
2软件开发关键技术
2.1基于内存映射技术的大数据量读取和交互技术
在测井数据处理和绘图过程中,会遇到读取大数据量测井数据文件的问题. 在对数据进行处理或绘图时,最常用的方法是定义数组来临时保存数据,但是当数据量很大时,要想一次读取所有数据,数组也必须定义得很大,这样就会发生内存不足的问题,如果用传统的通过I/ O 文件读取技术进行数据读取的方式, 会因为数据量大, 速度慢不能满足要求。本文采用内存映射文件技术来解决这些问题[1]。
内存映射文件是将硬盘上文件的位置与进程逻辑地址空间中一块相同大小的区域之间的一一对应。这种对应关系纯属是逻辑上的概念,物理上是不存在的,原因是进程的逻辑地址空间本身就是不存在的。在内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是逻辑上被放入了内存。内存映射对象创建函数说明:
HANDLECreateFileMapping( HANDLEhFile,PSECURITY_ATTRIBUTES psa,DWORDfdwProtect,DWORDdwMaximumSizeHigh, DWORDdwMaximumSizeLow, PCTSTRpszName);
如果该函数的hFile参数为INVALID_HANDLE_VALUE(无效句柄),则创建共享内存而不是共享文件存取。由于我们是创建共享内存,所以使用期参数为hFile去(HANDLE)-1。
注意在创建多个内存映射文件的时候,内存映射名一定要区分开,否则同名的情况下,又同时打开多个内存映射文件进行数据读写操作,会产生指针误导,数据出错。
下图为内存映射操作步骤及测井原始数据读取类接口示意图
1、采用基于内存映射方式随时读取任意井段的任意曲线的数据
2、内存映射保存的是曲线数据体(具体数据),面向对象保存的曲线信息(如曲线头信息等)
使用Cyq_LAS2类读取测井原始Las文件数据,将数据文件的完整路径和文件名赋值以后,即可调用m_OpenFile函数进行文件读取,随后则可以进行相关属性的补充赋值。文件读取之后,将得到一个文件映射对象的指针首地址v_lp_MapFile,随后的数据访问,则是首地址+偏移量进行(其具体存储形式类似一维数组)。具体针对某条曲线在某个深度段的数据读取,调用函数m_ReadData。
具体内存存储形式如下图所示。
NOTE: 2013/10/8程序调试
注意在创建多个内存映射文件的时候,内存映射名一定要区分开,否则同名的情况下,又同时打开多个内存映射文件进行数据读写操作,会产生指针误导,数据出错。
v_h_Map = CreateFileMapping((HANDLE)-1,NULL,PAGE_READWRITE,0,size,v_str_MapName);
其中:v_str_MapName要根据不同的内存映射文件,选择相对应的别于区分的名称,如利用读取文件的文件名,或者增加后缀等。
2.2双缓冲加局部数据更新的高效率绘制方法
在测井软件的图形绘制过程中,经常需要处理许多的人机交互操作,若是采用一般绘图技术,则会产生严重的窗体重绘闪烁和相应延迟等问题,造成这种现象主要是MFC程序绘图机制中的重绘刷新和绘图数据读取速度等原因。
(1)双缓冲绘图
在开发测井解释系统时,图形元素的类型很多,经常要添加新的图形元素或者删除旧的图形元素,并且经常需要改变图形元素的属性. 例如:添加或删除曲线,添加或删除道,添加或删除解释结论等,修改曲线的线型、颜色,改变道的宽度等. 为了及时反映这些变化,一般要通过快速地反复刷新屏幕作图区来实现. 如果采用常规绘图方法而不加特殊处理的话,屏幕上常常会出现图形闪烁的现象. 由于测井图形经常是巨幅大图,即使采用分屏显示,仍然存在屏幕闪烁、停顿等现象,这种现象会极大的影响程序的运行效果,所以必须加以解决. 通常的高效率绘图方案有双缓冲绘图、局部贴图以及异或作图法三种,也可以混合使用[2]。但考虑实际软件开发中,需要实时显示文字内容等信息,异或做图发不支持文本输出的擦除操作,本文采取了先用内存DC 绘图,然后拷贝到屏幕的方法(即双缓冲绘图)来解决这些问题,具体绘图步骤及操作如下图所示。
(2)局部重绘数据更新
测井图形一般幅度很大,当道很多并且绘图深度很长时,横向和纵向都不可能在当前窗口一次全部显示出来. 如果采用通常的绘图方法,一次把整幅测井图全部绘制出来,由于绘图数据量非常大,绘图速度很慢,甚至用户无法接受. 所以必须采用好的绘图技术,提高绘图效率. 连续滚动显示是常用的方法,但是必须解决巨幅测井图形的绘图速度问题. 只刷新当前屏幕的方法在一些情况下可以应用,但是当测井图形复杂,数据量很大时,仍然存在绘图速度慢的问题,如绘制声电成像测井图. 而采用局部重绘的方法每次只绘制新滚入屏幕的部分,可以进一步减少绘图工作量,提高绘图速度,这种方法由于每次刷新重绘的面积小,绘图占用的内存也少[1],具体如下图所示。
绘图坐标系关系如下所示:
2.3软件绘图类设计图
基于软件面向对象开发设计要求易拓展和松耦合等基本原则,且C++具有不同于C#的指针操作,多态应用比较方便等特点,简单的设计了能够扩展的类图,具体如下所示:
2.4软件工程文件与参数模板
数据管理方面,遵循MFC框架自带的MCV模式,文档类对象管理各种数据操作,视图对象为表示层的绘图和数据表格显示等。其中,文档数据包括各种原始数据和成果数据,见下图所示。
2.5绘图成果打印
在一般的软件开发中打印和打印预览是经常要用到的功能,对于VC中的文档/视图(Doc/View)框架,可以很方便的使用缺省的打印和打印预览。通过充填文档视图提供的框架函数(OnBeginPrinting,OnDraw,OnEndPrinting,OnPrepareDC,OnPreparePrinting,OnPrint等),实现打印功能。但有时候需要直接进行打印工作,如对话框程序需要打印功能,或者在框架设计中,丢失文档视图的自动打印框架响应等情况下,如下图所示,左图为程序实现流程图,右图为具体实现参考源代码。
2.6TVD与MD相互转换计算
测斜仪器在每个点上测得的参数:测深、井斜角和井斜方位角。这三个参数为轨迹的基本参数,而计算TVD深度值,只需要测深(MD和TVD深度)和井斜角度(Inc)即可。具体计算方法参考文献[3]。
3现场解释操作流程现场解释流程主要步骤如下图所示,针对每个目标层段,需要设定用于计算的地层水和泥质含量计算等参数。
现场解释的基本步骤:
(1) 创建目的层,设定解释的井段,并选择用于计算的曲线;
(2) 选择纯水层,计算地层水电阻率Rw;
(3) 选择纯砂岩段,确定GRmin;
(4) 选择纯泥岩段,确定Grmax;
(5) 选择需要解释的储层井段,并进行Sw计算。
3.1创建目的层并设置参数
储层属性编辑对话框
3.2创建储层并计算
3.3取心设计
3.4成果图打印输出
参考文献:
[1] 李河,王祝文,李舟波,王朝辉. 大数据量地球物理测井绘图关键技术研究.地球物理学进展.2005.3
[2] 绘图效率完整解决方案——三种手段提高GDI/GDI+绘图效率http://www.cnblogs.com/fyhui/archive/2011/06/09/2076298.html
[3] 王杰堂,孙耀庭,王勤华等.大斜度井测井资料解释处理方法.断块油气田,2003.9,Vol.10,NO.5,63~65.
[4] 雍世和,张超谟.测井数据处理与综合解释.中国石油大学出版社,2007.8.
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 04:40
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社