APP下载

基于Qt和动态链接库的SEG-Y格式地震数据读写软件开发

2017-04-14张成云石深涵熊杰夏成静张伊

长江大学学报(自科版) 2017年1期
关键词:格式文件数据格式二进制

张成云,石深涵,熊杰,夏成静,张伊

(长江大学电子信息学院,湖北 荆州 434023)

基于Qt和动态链接库的SEG-Y格式地震数据读写软件开发

张成云,石深涵,熊杰,夏成静,张伊

(长江大学电子信息学院,湖北 荆州 434023)

SEG-Y格式是国际通用的地震数据文件格式。针对该格式文件结构复杂、读取困难的问题,在Qt框架下采用动态链接库技术开发了可重用的SEG-Y格式地震数据读写软件。该软件首先读取文件头和道头信息,然后以人机交互方式设置相应参数,最后读取实际地震数据。测试结果表明,该软件能正确读写SEG-Y格式地震数据文件,并以动态链接库的形式供第三方使用,为地震数据处理解释软件的国产化提供支持。

SEG-Y格式;地震数据;读写软件;Qt;动态链接库

地震勘探是石油勘探中一种最常见和最重要的方法[1],地震数据一般采用SEG-Y格式存储,该格式是由SEG(Society of Exploration Geophysicists)提出的国际标准,是石油勘探行业通用的地震数据格式。目前,国外商业软件对SEG-Y格式文件读写支持较好,但其SEG-Y格式读写模块不对外开放,无法重用。因此,有必要开发可重用的SEG-Y格式[1]地震数据读写软件,为地震数据处理解释软件国产化提供支持。下面,笔者将先对SEG-Y文件格式进行分析,再在Qt框架[2]下开发SEG-Y格式地震数据读写软件,最后分析在Qt中利用DLL对读写代码封装的方法及软件调试结果。

1 SEG-Y格式文件格式

标准SEG-Y格式文件[3]一般包括3部分,第1部分是EBCDIC文本文件头,第2部分是二进制文件头,第3部分是地震道数据集。SEG-Y文件格式如图1所示,其中,文本文件头长度为3200字节,采用EBCDIC字符编码,需转换成ASCII码后才能在PC上显示;二进制文件头长度为400字节,其数据类型是16位或32位整型,记录SEG-Y文件的格式信息;地震道数据集由各道地震数据组成,每一道地震数据由240字节的二进制道头和采样点数据集组成。其中,二进制道头包含该道的CDP号、XLine号、Line号、采样点数、采样间隔、采样点数据格式等信息。

图1 SEG-Y文件格式示意图

2 SEG-Y格式读写软件设计

图2 SEG-Y格式读写软件结构框图

SEG-Y格式读写软件采用人机交互方式设置参数,实现地震数据读取和导出功能。根据SEG-Y格式文件的特点,设计软件功能模块框图如图2所示。

该软件模块由5个模块组成:工作区管理模块为新建文件和打开工作区提供支持;地震数据文件信息处理模块负责读取文本文件头、二进制文件头和各道头参数,如CDP号、XLine号、Line号、采样点数、采样间隔、采样点数据格式等;地震数据读取模块实现SEG-Y文件数据读取功能;地震数据格式转换模块负责IEEE、IBM、PC 3种格式的相互转换;文件管理模块实现文件输入和输出功能。

3 SEG-Y格式文件读写软件开发

3.1 SEG-Y格式文件读写流程

SEG-Y格式文件的读取过程复杂,包括文本文件头、二进制文件头的解析与显示,人机交互进行参数设置,地震数据的读取、导出等步骤。SEG-Y格式文件读写的流程图如图3所示。

图3 SEG-Y格式文件读写流程图

3.2 数据格式转换

SEG-Y格式文件支持IEEE、IBM、PC这3种数据格式,软件可以实现3种格式之间相互转换的功能。以IBM格式转换为IEEE格式为例,其转化代码如下:

void SEGy::IBM2IEEE(float* data, bool swap)

{

if(swap)

{

tem = cbuf[0]; cbuf[0] = cbuf[3]; cbuf[3] = tem;

tem = cbuf[2]; cbuf[2] = cbuf[1]; cbuf[1] = tem;

}

expp = (unsigned char)(*mantis≫24);

*mantis = (*mantis)≪8;

shift = 1;

while(*mantis > 0 && shift < 23) {

*mantis = *mantis≪1;

shift++;

}

*mantis = *mantis≪1;

sign = expp & 0x80;

expp = expp & 0x7F;

if(expp != 0)

{

expp = expp-64;

*umantis = *umantis≫9;

expll = 0x7F + (expp*4 - shift);

expll = expll≪23;

if(sign) *umantis = expll | *mantis | 0x80000000;

else *umantis = expll | *mantis;

}

}

3.3 Qt框架下DLL开发

DLL可以创建可重用代码模块[5,6],通过DLL对代码进行共享,从而实现SEG-Y格式文件读写软件模块代码重用。在Qt中创建DLL工程[4]步骤如下:在Library中选择C++library,在Type中选择Shared Library,在Name中命名DLL的工程名。创建完毕之后会生成2个头文件,一个资源文件,除工程名对应的头文件跟资源文件之外,还有一个“SEGy_global.h”。DLL的工程编译,在工程名头文件中加入需要封装函数的成员变量和函数,同时还需要获取封装类中的对象,代码如下:

extern “C”{

SEGYSHARED_EXPORT SEGy* getSEGyObject(); //获取类SEGy的对象

SEGYSHARED_EXPORT void releseSEGyObject(SEGy*); //获取类SEGy的对象

}

编写的SEG-Y格式读写文件在minGW环境下进行编译后,在工程的debug文件夹下可以找到“SEGy.dll、SEGy.o、SEGy.a”3个文件。其中,“SEGy.dll”是在Windows下面可调用的动态链接库,“SEGy.o”是在Linux下可调用的动态链接库。如果是在MSVC环境下编译可以生成“SEGy.lib”和“SEGy.dll”文件,结果如图4所示。

图4 DLL编译结果

4 软件测试及结果

图5 测试程序流程图

在Qt中建立地震数据可视化的测试

程序,进行SEG-Y格式文件可重用模块的功能检测。测试程序调用的流程图如图5所示。

为在测试程序中实现DLL调用,首先将SEGy.h和SEGy_global.h头文件放在当前的工程文件夹下,添加到当前工程中;然后设置链接库的路径;最后在主程序中包含头文件和宏定义,并导入动态链接库文件。执行结果图如图6所示。

库调用过程中,设置DLL的路径需要以下代码:

LIBS +=segy.DLLDESTDIR #很重要!路径设置问题。

LIBS += 〗 …/…/segy.DLLDESTDIR

通过上述代码指出库所在的文件夹位置,路径设置正确后进行库调用的下一步操作,代码如下:

#include

#include “SEGy.h”

typedef SEGy* (*CreatSEGy)();

typedef bool (*ReleSEGyDll)(SEGy*);

图6(a)是SEG-Y格式文件信息的处理:文件筛选获取,SEG-Y格式文件道头的读取操作及地震数据的平面或立体呈现的选择,为文件的读取做准备;图6(b)是对一个IBM格式文件的识别,读取结果正确,说明读写软件能正确读写SEG-Y格式地震数据;图6(c)是格式转换界面,该文件是由IBM格式转换为IEEE格式,转换后的SEG-Y格式文件各项参数的变化依次呈现,提供详细的数据变换结果。

5 结语

利用Qt框架良好的跨平台特性,编写了SEG-Y格式地震数据文件读写代码,并通过DLL技术进行封装实现了软件模块的可重用性。软件测试结果表明,该软件能正确读取SEG-Y格式地震数据,且具有跨平台和可重用特性,能为地震数据处理解释软件的国产化提供支持。

图6 SEG-Y格式文件读取软件模块执行结果图

[1]刘旭跃,周巍,孔祥宁,等.SEG-Y格式自动转化软件的研究与实现[J].物探化探计算技术,2016,38(1):126~127.

[2]王文芳,许文峰,许冰清,等.基于Qt的人机交互2.5维地质建模软件设计与实现[J].成都大学学报(自然科学版),2013,32(12):371~374.

[3]刘明忱,孙建国.基于C语言的SEG-Y数据格式分析与转化[J] .地球物理学进展,2016,31(1):0260~0267.

[4]Jasmin Blanchette, Mark Summerfield.C++ GUI Programming with Qt4.Second Edition[M].闫锋欣,曾泉人,张志强,等译.北京: 电子工业出版社,2007:174~321.

[5]王保华,陆建林,左宗鑫.地质地层数据处理的GRID类设计及DLL实现[J].长江大学学报(自科版),2016,13(7):63~66.

[6] 宋伟聪,李德春,邱开林,等.VB与Fortran混合编程的重磁数据处理可视化系统[J].长江大学学报(自科版),2016,13(17):28~31.

[编辑] 洪云飞

2016-11-12

湖北省教育厅科学技术研究项目(D20131206, B2016034);长江大学创新创业训练项目(20160042)。

熊杰(1975-),男,博士,副教授,现主要从事科学可视化、云计算、地球物理反演方面的教学与研究工作,xiongjie@yangtzeu.edu.cn。

TP391.9;P631.4

A

1673-1409(2017)01-0012-05

[引著格式]张成云,石深涵,熊杰,等.基于Qt和动态链接库的SEG-Y格式地震数据读写软件开发[J].长江大学学报(自科版),2017,14(1):12~16,74.

猜你喜欢

格式文件数据格式二进制
用二进制解一道高中数学联赛数论题
基于WebGL的轨道交通BIM轻量化应用方案
有趣的进度
二进制在竞赛题中的应用
使用“格式文件”将徕卡仪器数据导出成cass 格式的方法
基于RFID的户外广告监管系统的设计与实现
一种融合多业务的信息化系统框架研究
编写徕卡TS02型全站仪格式文件的方法探索
二进制宽带毫米波合成器设计与分析
回归基础 到底什么是RAW格式文件?