测井数据解析与成像控件的设计与实现
2015-05-15董音王国基张发光蒋海军
董音 王国基 张发光 蒋海军
摘要:目前国内测井文件格式多样,测井分析软件五花八门,处理不同厂家的测井数据需要不同的测井软件,如何才能打破厂家之间的界限,用一款软件处理所有的测井数据呢?该文对测井数据格式的解析与成像控件的设计进行了深入研究。主要从数据模型的设计、测井图像绘制、绘图模板、组件的扩展进行了详细的介绍与分析。
关键词:测井;测井曲线;测井数据解析;测井数据成像
中图分類号:TP311 文献标识码:A 文章编号:1009-3044(2015)08-0045-03
Abstract: There are many problems with well-logging data storages within domestic in China. The data formats are different from one product producer to another. How to process different data from various producers, and how to propose this bug to break the boundary between different producers is one of the problems. This paper is aimed at deal this problem with deep research into many well-logging data format, and then we designed an Imaging Controller to common use. We focused in data model design, well logging imaging, drawing template, and component extension.
Key words: well-logging; well-log data parsers; imaging logging
目前塔里木油田测井数据库中的数据格式多种多样,测井文件格式[1]包括3317、ASCII、BIT、CLS、DAT、DLIS、FMT、LA716、LAST、LIS、NTI、PDS、WF3700、WIS、XJ716、XTF。由我们承建塔里木油田测井生产管理系统与测井数据库项目需要解析上述测井数据格式并根据测井数据绘制测井图像。但是在我们开发过程中,还没有一种成熟的产品能够满足上述要求。基于此,我们决定自行研发一套满足上述要求的测井数据解析与成像控件。
1原理和方法
测井数据解析与成像控件主要完成上述测井数据格式的数据解析与根据测井数据绘制测井图像。解析数据包括各类数据的读取与写入以及格式转换,根据数据绘制测井图像包括常规曲线、声电成像、核磁共振、地层倾角等等,以及实现测井图像的保存、浏览、编辑、缩放、打印、下载功能。
将来我们可以对此控制进行扩展,不公可能进行显示测井数据,面且能够满足对不同专业数据进行综合展示和处理的能力。所谓不同专业即包括钻井、录井、测井、试井、分析化验等,还有开发生产。
1.1 数据模型设计
1.1.1 数据模型概述
一口井的数据中包含了井的基本信息如井号、井名、位置坐标、所属区块和构造、所属行政管理机构、开钻日期、完井日期等等,勘探会产生许多勘探数据,钻井会产生许多钻井数据,录井会产生许多录井数据,测井会产生测井数据,开发生产会产生开发生产数据等等,随着油田信息化的发展,各个油田已经相继建立和再建着各式各样的信息化系统,每个信息化系统都要设计到数据的存储和处理工作。其中数据的存储方式多种多样,最常见的方式是存储在数据库中,或是以文件的方式存储在磁盘上,或是以文件的方式存储在磁带上。我们知道计算机要处理任何数据,首先是要将数据读取到内存中,然后再对内存中的数据进行处理。那么我们就建立一个统一的数据模型[2],它能够表示和存储不同专业的数据,并且能够在相应的管理机制下随意扩充,来满足不同数据的存储需要。这个数据模型具有以下特点:
1) 数据模型对象可以在计算机内存中建立,它是属于实体层;
2) 数据模型对象有一套完整的管理机制,来定义、改变和扩展自身的结构并维护存储的数据;
3) 数据访问层对象可以通过数据模型对象的管理机制来建立符合自己需要的存储结构,来满足自己数据的存储需要;
4) 由数据访问层对象负责对具体数据源数据的读取,然后将取得的数据保存在数据模型对象中;
5) 应用层对象通过数据模型对象的管理机制来了解数据存储结构并能够方便的读取数据;
6) 应用层对象能够对这些数据进行处理;
7) 数据访问层对象负责将处理过的数据再写入到相应的数据源中;
8)不用的时候,在计算机内存中建立的数据模型对象可以销毁。
通过这样的设计,我们在开发应用层程序的时候,可以使应用层只关心数据模型,而不关心数据模型中的数据是从什么地方获取的以及怎么获取的。应用层程序对数据的处理只涉及到对数据对象模型中相关数据的处理,它不操作具体的数据源。数据模型的设计分离的应用层和数据源,应用层根本就不知道物理数据源也不用关心物理数据源。这样我们做到了应用层和数据源的分离并带来了许多好处,其中一个好处就是,比如:我们不知道WIS文件数据格式,但是我们只要熟悉数据模型的结构,我们就可以开发应用层程序。
1.2 数据模型的管理机制
既然数据模型能够保存各种各样的数据,那么首先数据模型对象的结构必须是可以定义和扩充的,否则它就无法胜任这样的工作,第二点数据模型对象的结构不能随意被改变,否则就乱套了,它的结构可直接影响到应用层程序。那么怎样是数据模型的结构既能被改变,又不能被随意改变呢?这就需要引入一定的管理机制。数据模型只有建立了这样的管理机制,在程序的运行期间,其结构才能保持相对的稳定,有这样的管理机制,其结构才可以被安全的改变,同时也能为应用层提供相应的服务,使应用层知道其存储结构。还有重要的一点,那就是权限管理,我们知道有很多重要的数据是不能随便被没有授权的用户看到的,那么数据模型还必须提供这样的权限管理功能,没有权限的用户是不能访问相应的数据。
1.2.1 数据访问层设计
1.2.2 数据访问层接口
数据源多种多样,但是对数据源的操作却可以简单的抽象成读和写,所以在处理多样的数据之前,先要统一对数据源操作的方法,这个接口对象就是IDAL,它主要有两个方法Read()、Write()和两个属性CanRead、CanWrite组成。
1.2.3 具体数据源的读写实现
具体的数据源的读写由具体的数据访问层类构成,每个类都继承了数据访问层接口,都具有读和写的方法,它们单独完成对某一个数据源数据的读写功能。
1.2.4 定义自己的文件格式
由于我们对测井控件的要求不仅仅局限在读取和显示并能编辑测井数据上,我们赋予了测井控件更多的功能,比如不同专业数据的综合展示,以及现在还未想到的一些其它应用。如果将来把这些成果保存到上面的这些测井文件中,很可能会造成很多信息的丢失,所以我们可以自定义一种开放的文件格式,文件由一系列XML文件、图片文件、音频文件、视频文件、数据文件等等压缩后构成。任何用户即使没有我们的测井控件,也可以通过常用的工具打开查看,当然这种文档是可以设置保护密码的。
1.2.5 数据读写策略
1) 面向抽象,而不是面向具体
将对所有数据源的操作抽象出来,建立IDAL接口,主要有Read()方法和Write()方法组成,它们抽象的表示读操作和写操作。Read()方法负责将数据源中的数据读取到DataModel对象中,Write()方法负责将DataModel中的数据写入到数据源中。此外还有两个属性CanRead和CanWrite,表示是否可读和是否可写。
2)具体问题具体对待
针对不同的数据源,定义不同的数据访问层类来实现,这些类继承自统一的数据访问层接口IDAL,用来具体实现Read()和Write()方法。这个时候读和写就具有了具体性。如果实现了对具体数据源的Read()操作,那么设置CanRead为TRUE,否则设置CanRead为FALSE;如果实现了对具体数据源的Write()操作,那么设置CanWrite为TRUE,否则设置CanWrite为FALSE。这样用户可以知道对具体的数据源是否有读的功能或写的功能。
3)单一职责
要注意控制每个数据访问层类的功能,让每个类只负责完成对一种数据源的操作,并且每个类最终编译成一个DLL文件,即让每个数据访问层类仅具有单一职责,不使具体数据访问层类的功能无限扩大。如果让一个类来实现对所有数据源的访问是不现实的,而且每当有一种新的数据源出现时,我们都需要修改原来这个类,这种不断修改的情况应当极力避免。
4)面向扩展开放,面向修改关闭
不仅是每个数据访问层类具有单一职责,而且一个类只编译成一个DLL文件,而不是将多个数据访问层类都编译到一个DLL文件中,这符合面向扩展开放面向修改关闭的原则。当有新的数据源出现时,只需要扩展新的数据访问层类,在物理上就是新增一个DLL文件,我们只需要将这个文件部署到应用程序中就可以了,而不是去修改原来的DLL文件。当某个数据访问层类的实现有错误时,也仅需要修改后,只替换哪个有错误的DLL文件。
1.2.6 文件(数据源)格式转换
能实现常见测井文件的格式转换,但是由于每种文件格式的特点不同,可能在轉换的过程中会有数据丢失,这个无法避免,我们也允许出现这样的情况。
1.3 测井图像绘制
采用面向对象技术开发,以对象方式定义现实中的各类实体和数据,多个对象共同组成了一个完整的测井应用。在测井专业控件中以对象的方式管理各种测井道、测井曲线、解释结论等。
这些绘图对象应用于具体的测井专业控件之中,实现相应测井应用的绘图显示[3]与编辑操作功能,客户端可以直接编辑对象的显示属性、深度范围、深度比例等。
绘图对象总体上可分为:
井对象、道对象、测井曲线对象、解释结论对象、地质对象、工程对象、其它对象等。
绘图编辑控制功能包括:
主要有新建、打开、编辑、保存、关闭。
井对象绘图操作包括:
加载井数据后可以选择绘图模板对井对象属性、井对象大小、井对象线型、井对象字体、井对象填充、井对象深度棒、井对象格线、绘图深度进行设置。
道对象绘图操作包括:
道对象有常规曲线道、深度道等,道对象的基本操作是道加载和删除、道基本属性、道特性、道对象排列设置、道对象格线、道对象线型、道对象填充、道对象字体、道对象宽度及高度。
曲线对象绘图操作包括:
曲线加载和删除、曲线特性设置、曲线数据设置、曲线线型、曲线字体、曲线颜色填充、曲线宽度及高度;
结论对象绘图操作包括:
结论符号对象、油气结论、综合结论、文字结论、地质解释模型对象、地质分层、解释层位对象、旋回编号、测井沉积相、沉积旋回。
地质对象绘图操作包括:
地质数据对象、井壁取芯、物性分析、地层模型、岩性剖面、岩性绘图对象。
工程数据、其它对象绘图操作包括:
深度棒、其它数据对象、测井统计图、注释说明对象等。
1.4 绘图模版开发
测井项目绘图模板是定义了与测井相关的绘图显示的内容和方式。每一种测井项目都需要有各自的绘图模板,而且随着应用目的的不同,每一种测井项目又可能需要定义多个绘图模板。模板绘图能够大大简化客户端资料浏览的操作,提高客户端资料浏览的效率。绘图模板采用XML方式定义,绘图模板具有较强的可读性和通用性。
1.4.1 能够编辑图形
测井图形有两种操作状态,一是浏览状态,二是编辑状态,浏览状态不能对测井图形进行修改操作只能编辑状态才能对测井图形进行修改等操作。
1.4.2 绘图模板编辑和保存
绘图模版是一种确定的绘图格式或绘图规范。所有图件绘制都以模板为基础。模板的两种基本类型为共用模板和专用模板(绘图控制文件)。共用模板所含设置适用于所有数据。专用模板(绘图控制文件)只适用于特殊应用或特定井。模板可以针对测井绘图的每一种显示图件、表格或是要打印的成果图、成果表,定义各自的模版。同一规范的模版只要做一次,则可在所有同类绘图数据上无限次选择使用,具备一劳永逸的优势。
测井绘图模板编辑制作和保存、调用等操作都比较简单,可以将设计的任意测井绘图格式保存为模板。
1.5 组件的扩展
测井控件开发应该具有AddIn的功能,我们前期制作数据显示和编辑的功能,把这些功能注册和添加到控件中,以后有条件了再做数据分析、解释等外挂模块。前期的工作,就是能将各种数据源中的数据读取到DataModel对象中,然后再能把DataModel对象中的数据按照不同的模板显示到屏幕上,并能让用户进行可视化编辑。
2 结果与讨论
塔里木油田测井生产管理系统与测井数据库项目就是基于此研究方案进行开发实施的,很好的完成了测井数据格式的解析并根据测井数据绘制测井图像。完成功能主界面如下图所示:
3 结论
基于测井数据解析与成像控件开发方案开发的应用程序可以满足多种测井数据格式的解析并能根据测井数据绘制图像。
参考文献:
[1] 戴建军. 测井数字资料常见数据格式剖析[J]. 测井专刊, 1996(S1): 1-4.
[2] 翟慧杰, 曹旭光, 宋国东. 面向对象的测井数据模型分析与设计[J]. 长春理工大学学报, 2003(3): 2-3.
[3] 杨浩, 张哲峰. GDI+程序设计[M]. 北京: 清华大学出版社, 2002: 387-410.