深拖式地震数据采集记录系统软件设计与实现

2019-05-22 06:30宋山张正炳裴彦良吴爱平
长江大学学报(自科版) 2019年4期
关键词:数传线程震源

宋山,张正炳,裴彦良,吴爱平

(长江大学电子信息学院,湖北 荆州 434023)(自然资源部第一海洋研究所海洋沉积与环境地质国家海洋局重点实验室,山东 青岛 266061 青岛海洋科学与技术国家实验室海洋地质过程与环境功能实验室,山东 青岛 266061)(长江大学电子信息学院,湖北 荆州 434023)

在经济高速发展的今天,各领域对石油天然气等战略性资源的需求量很大,而陆地上油气资源状况逐渐变得严峻。海洋中蕴含着丰富的油气、水合物等资源[1],因而各国都将目光转移到海洋资源开发上,希望能替代原有的能源供社会各领域使用[2]。我国是海洋大国,海洋资源储量丰富,开发潜力巨大。但是,与西方国家相比,我国在海洋资源开发方面相关技术起步较晚,相关设备主要依赖进口[3]。海洋地震采集拖缆技术又受到国外的出口限制[4],这使得我国在海洋勘察开采方面处于被动的局面。 为了打破国外的技术封锁,应对我国天然气水合物勘探和试采工程对高精度海洋地质探查的迫切需要,由国家海洋局第一研究所联合国内优势单位启动了“深拖式高分辨率多道地震探测技术与装备研究”的课题[5],深拖式地震采集记录系统软件是其子课题“深拖多道数字缆与采集系统研制”的关键部分,在深拖式地震采集系统中起着中央控制与数据记录的作用。因此,研究海洋深拖式地震采集记录系统软件对于深拖系统实现海洋勘探的目标有着重要意义。下面,笔者在现有的海洋地震勘探软件的基础上,针对连续采集的新要求和本地数据存储实时性问题,采用多线程技术和内存映射技术,实现了连续采集模式下的实时监控和大量地震数据的快速存储。

1 系统总体框架与工作流程

1.1 深拖系统组成

图1 深拖系统组成示意图

图2 深拖系统结构框图

深拖系统是深海拖曳式地震数据采集系统,对比海面拖曳式地震数据采集系统,深拖系统有较高的地层分辨率[6]。深拖系统从设备所处位置上可分为水上船载部分和水下拖曳部分,其中,水下拖曳部分又可分为拖体部分和拖缆部分,如图1所示。水上船载部分可控制水下拖体,使拖体上携带的震源激发地震波。地震波经过地层反射后,被拖缆中的检波器接收,随后产生模拟电信号被拖缆中的采集器转化为数字电信号。采集器将数字电信号逐级向上一级数传单位传播,最终经过拖体上传到水上船载部分,后期使用专业软件对上传的地震数据进行分析可得出地层地质信息[7]。

1.2 深拖系统结构

深拖系统结构框图如图2所示。

水上船载部分是系统的中央控制记录单元和监控中心,主要由主控计算机、质量控制(Quality Control,QC)单元、状态监控单元、GPS定位系统和网络交换机组成。负责对水下作业系统进行系统设备参数配置、系统运行状态监控、任务分发与调度等。主控计算机是系统中央控制和记录单元的关键部分,负责向运行控制中心(Operating Control Center,OCC)发送控制指令和接收OCC上传的采集数据、系统状态数据等,并将接收的数据处理后进行显示和存储。QC是独立于控制平台的系统工作质量监控中心,能实时接收和解析采集数据,并分析给出评价结果。状态监控单元能接收网络交换机中特定端口的状态数据,该状态数据由OCC获取并上传,反映了OCC在水下工作时的温湿度、高度和深度等信息。GPS定位系统可通过卫星实时获取当前拖曳船的位置、行驶速度等信息,可为采集的地震数据提供地理位置坐标信息。网络交换机用于数据的传输与交换。

水下拖曳系统分为拖体部分和拖缆部分,拖体部分包含了震源、OCC、高度计和深度计。震源可由OCC控制激发声波,声波经过地层反射后的地震波可反映地质情况。OCC是采集作业主要的控制和处理单元,可接收水上的控制指令自主控制拖缆中的采集单元进行采集作业,并将接收到的采集数据处理打包后上传至水上船载部分。高度计和深度计可检测拖体当前所处的水深。

水下拖缆部分负责地震波数据的采集和传输,其结构图如图3所示。一条拖缆包含数传包和工作段采集缆。其中,数传包一方面负责接收OCC的指令和下发控制指令到采集缆中的采集器,另一方面,数传包能将其下一级数传包上传的数据和其本身连接的采集器上传的数据上传到其上一级。数传包在数据传递的过程中相当于数据中继站,OCC下发的指令和数传包打包的数据,在各个数传包之间可逐级向下级传输或逐级向上级传输。工作段采集缆中包含有检波器和采集站,检波器可检测地震波信号并将其转换成电信号;采集站上带有采集单元,能接收电信号并将其转化成数据。1个采集站连接有4组检波器,能采集4道地震数据。每一个数传包两边各有2个采集站接口,总共负责打包上传16道地震数据。当数传包和工作段采集缆接驳到一起时,数传包通过采集缆中的通信线路和其上一级以及下一级数传包建立通信,同时也和与其直接接驳的采集缆中的采集站建立通信。

图3 拖缆结构图

1.3 系统工作流程

深拖式地震数据采集记录系统软件通过向OCC下发指令,控制数传包对采集站加电,并设置好采样率、增益。开始采集时,OCC控制震源激发地震波,地震波经地层反射之后被拖缆上的检波器检测到,检波器产生电信号被采集站捕捉产生数据,采集器将数据上传至数传包。数传包将采集数据按一定的格式打包之后,往其上一级数传包上传,若其下一级数传包有数据传来,则将其下一级数传包的数据往上一级数传包方向上传。这样,整条缆的数据最终都会传至OCC,进而上传至水上船载部分。

深拖式地震数据采集记录系统软件运行于主控计算机上,用户通过操作软件,对水下拖曳系统进行控制,进而驱动整个深拖系统进行采集作业,并记录水下拖曳系统上传的采集数据,它是系统中央控制和记录单元的关键组成部分。

2 软件设计

2.1 软件需求分析

深拖式地震数据采集记录软件是运行于主控计算机上的监控和记录软件,一方面,该软件方便用户对系统设备进行配置与控制,从而使采集单元按照用户要求进行采集作业。同时,该软件可实时显示采集波形,方便用户及时了解当前系统的工作状态。另一方面,软件接收数据后以规定的数据格式记录采集数据,以方便后期的地震数据处理与分析。为满足深拖式地震数据采集记录软件的功能需求,其应具有以下功能:

1)系统控制 能通过网口与OCC进行通信,进而控制和管理系统设备,如控制OCC下发采集站加电或断电指令、设置采集站的采样率和增益、控制采集站开始采集或停止采集等。

2)实时监控 能实时接收和解析OCC上传的采集数据和状态数据,进而显示地震波波形曲线和基本的状态信息。在深拖系统中,需要考虑非连续采集工作模式和连续采集工作模式下的实时监控问题。在非连续采集模式下,软件每接收一段时间的数据之后,会有一段空闲时间可供软件做数据解析、实时波形显示。而在连续采集模式下,软件持续不断地接收采集数据,每接收完一段时间的采集数据,就需要立即显示地震波形和进行数据存储,在此期间,程序仍在接收采集数据,这对软件的实时性提出了更高的要求。状态信息主要包括数字包加电状态、GPS信息(经度、纬度、船速)、当前采集信息(采样率、增益)、震源触发时间间隔和触发信号脉冲宽度等。

3)数据存储 深拖式地震数据采集记录软件在接收和解析采集数据之后,能及时以SEGY格式将地震数据存储到本地硬盘,以供后期地震数据的处理和解释使用。

2.2 软件结构设计

为了满足深拖采集与记录软件功能设计需求,针对该软件数据交互性强、对时序性和实时性要求高的特点,深拖式采集与记录软件采用分层设计结构,如图4所示。软件分为3个处理层:①数据层实现接收网络报文数据、载入配置文件、程序状态初始化和指令报文发送的功能;②处理层完成接收数据的校验、解析和计算,并交给应用层,同时也能按照用户要求将要下发的参数指令合成打包;③应用层接收处理层过来的数据,并按照功能模块进行波形显示、状态显示和数据存储。

2.3 软件功能设计

深拖式地震数据采集记录系统软件的功能框架图如图5所示,软件主要包含以下功能模块:

1)参数配置 可对OCC、采集站和软件本身的功能参数进行配置:对OCC可设置其网络通讯IP地址、设定工作方式(非连续采集、连续采集);采集站主要指对其采集类型(采集检波器信号、采集自检信号)、采样率和增益的设置;软件本身的参数设置则包含了对波形显示参数(波形显示幅值、波形显示时间长度、显示道数等)和采集数据保存路径的设置。

2)数据采集 数据采集功能包括非连续采集和连续采集。其工作流程如图6所示,对上位机而言,无论是连续采集还是非连续采集,其工作模式无改变,软件始终根据“开始帧”和“结束帧”来决定是否继续接收采集数据。当接收到“开始帧”时,软件将继续接收采集数据,直到接收到“结束帧”,则进行数据解析、波形显示和数据存储,随后又继续判断是否接收到“开始帧”,如此循环执行数据接收任务。而对于OCC而言,连续采集和非连续采集模式下的工作流程则有所区别。在非连续采集模式下,OCC判断当前是否达到触发条件(达到触发时间间隔或者触发距离),如果达到触发条件,则触发震源,发送“开始帧”给主控机并同时发送“开始采集”指令给数传包,进而下发到采集站,使其开始采集数据。如果未达到触发条件,则继续等待和判断是否达到触发条件。而在连续采集模式下,数据采集和震源触发是2个相对独立的部分。数据采集一旦开始则会连续不断地采集数据,并且不断地按序发送“开始帧”、“采集数据”和“结束帧”。而OCC也不断地判断是否达到触发条件,若达到触发条件,则触发震源,并且记录当前时刻的采集文件的名称和采集数据点号到炮时文件中,方便后期将炮号与采集时间对应起来。

图6 深拖系统数据采集工作流程

图7 OCC震源触发工作流程

3)震源触发 包含定时触发、定距触发和外部触发3种方式,如图7所示。定时触发由用户设置触发时间间隔,如T_tri。配置完成后,OCC每隔时间T_tri激发震源产生地震波。定距触发方式下,用户需要设置定距距离,OCC将根据图7(b)中的流程计算触发时间并触发震源。外部触发,则是外部其他设备控制震源激发地震波,每一次激发地震波的同时,外部设备向OCC发送脉冲信号,以此通知OCC控制采集单元进行采集作业。

4)实时监控 软件可显示地震数据波形和系统状态。通过配置显示参数,用户可选择多道地震波形显示,也可选择单道地震波形进行显示。可以选择“高通”“低通”滤波器选项,则软件会对采集的数据做滤波处理,以便更好地观察地震波形。系统状态显示包括数传包通讯状态、数字包电源状态及GPS信号状态。

5)数据存储 数据存储包括地震采集数据、炮时信息和软件配置参数的存储。地震数据主要以SEGY格式存储于软件所在的主机硬盘上。炮时信息记录了震源激发时刻的GPS信息(包括GPS时间、经度、纬度和GPS船速)和当前保存的SEGY文件的文件名,用于后期将采集数据和震源放炮时间点联系对应起来。软件每次做完参数配置,都会将配置信息写入硬盘中程序运行所在目录。在下次打开软件时,软件会自动载入之前保存的配置信息,从而免去每次上线工作前都要重新设置参数的麻烦。

3 软件实现关键技术

3.1 多线程技术

深拖系统数据交互性和实时性强,其软件在接收采集数据的同时,还要能及时处理采集数据,如显示采集波形和存储数据。特别是当软件处于连续采集工作模式下,数据接收、数据解析和波形显示功能要始终处于不间断运行状态,才能达到实时监控的要求。要实现这种多个任务并发性处理,必须引入多线程技术。多线程技术可将CPU时间按照一定的优先级进行划分,各子线程在各自的CPU时间片段内共享CPU,依次执行这些时间片段内的任务,在宏观上就表现为任务的并发性处理[8]。深拖式地震数据采集与记录软件主要包含有数据接收线程、采集波形显示线程、数据存储线程。其中采集波形显示线程和数据存储线程需要等待数据接收线程完成当前炮数据的接收和解析之后,才开始启动运行。在此之前,这2个线程应处于等待状态,以减少对CPU资源的占用。当数据接收线程完成了采集数据的接收和解析之后,波形显示线程和数据存储线程则会被唤起,继续做数据处理。为了协调这种线程之间的同步问题,软件中使用事件[9](Event)驱动线程的方式,对线程运行的先后次序进行控制。如在程序中定义全局变量CEventm Event,随后在子线程中的循环语句(while)中,使用等待事件语句:WaitForSingleObject(mEvent.m_hObject,INFINITE),只有当事件变量mEvent执行mEvent.SetEvent()语句之后,该子线程才会跳过等待事件语句,继续执行在其之后的语句。在深拖式地震数据采集与记录软件进行数据采集的过程中,特别是在连续采集模式下,为了能进一步保证实时性和稳定性,除了利用多线程事件驱动方式保证程序功能的时序性和实时性之外,还要利用多线程技术的优先级别设定功能,进一步分配CPU资源,才能保证软件的实时性。VC中设置线程优先级的函数为:BOOL SetThreadPriority( HANDLE hThread, intnPriority),其中hThread为线程的句柄,nPriotity为线程的优先级标志,按照由低到高的顺序,有以下6个级别:

THREAD_PRIORITY_LOWEST

THREAD_PRIORITY_BELOW_NORMAL

THREAD_PRIORITY_NORMAL

THREAD_PRIORITY_ABOVE_NORMAL

THREAD_PRIORITY_HIGHEST

THREAD_PRIORITY_TIME_CRITICAL

在软件中,采集数据线程和数据存储线程需要设置优先级别为“THREAD_PRIORITY_TIME_CRITICAL”(实时),以此保证能接收到所有的数据而不被程序中其他线程打断,其他线程如波形显示线程、指令发送线程、状态检测线程和状态显示线程等则处于优先级较低的级别。

3.2 数据快速存储技术

深拖式采集记录软件不仅要求对采集数据作实时监控,还要求能实时存储采集数据。在地震数据持续采集的过程当中,在较短的时间内会产生大量的采集数据。要做到实时存储这些采集数据,就需要在尽可能短的时间内,将数据存储到磁盘中。特别在连续采集模式下,在存储数据的同时也在接收新的采集数据,则需要保证存储数据的速度大于接收采集数据的速度。使用多线程技术,虽然能提高CPU利用效率,但也无法完全解决存储速度的问题,这和软件编译平台下的磁盘I/O操作函数有关,如在Windows下使用典型的fwrite函数,由于调用该函数需要调用系统库,所以其接口速度较慢,存储大量采集数据时会耗费较长的时间。因此,深拖主控软件采用内存映射的方式实现快速磁盘I/O操作[10]。内存映射技术使应用程序可通过内存指针(虚拟地址)对磁盘上的文件进行访问,从而建立了磁盘文件内容和进程虚拟地址空间的映射关系,使得程序可直接通过虚拟地址访问磁盘上的文件,从而绕过了调用系统库函数这一过程,也无需对文件内容进行缓冲处理,大大提高了磁盘I/O操作效率。使用内存映射的方式存储采集数据到磁盘中,其过程如下所示:

1)定义临时指针变量:__int8 * TempSegMem

2)申请临时内存控件:TempSegMem = new __int8[m_dwMemSize]

3)创建文件:HANDLE hFile = CreateFile(pszPathname

GENERIC_READ | GENERIC_WRITE

FILE_SHARE_READ|FILE_SHARE_WRITE

NULL

CREATE_ALWAYS

FILE_ATTRIBUTE_NORMAL

NULL)

4)创建文件映射对象:

HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, m_nCurTempSegMem, NULL)

5)在调用进程的地址空间映射一个文件视图:

LPBYTE lpbMapAddress = (LPBYTE)MapViewOfFile( hFileMap

FILE_MAP_WRITE

0

0

m_nCurTempSegMem)

6)向内存映射视图中写数据:

memcpy(lpbMapAddress,TempSegMemB,m_nCurTempSegMem)

7)把文件映射视图中的修改的内容或全部写回到磁盘文件中:

FlushViewOfFile(lpbMapAddress, m_nCurTempSegMem )

8)卸载映射:

UnmapViewOfFile(lpbMapAddress)

9)关闭文件映像句柄:

CloseHandle(hFileMap)

10)关闭文件:

CloseHandle(hFile)

4 软件测试

表1 主控机硬件配置

为测试软件的功能,验证软件功能的正确性,在深拖系统联合海试过程中,使软件运行于测试服务器主机上,配合系统其他部分,进行了长达4d的测试。测试服务器主机硬件配置如表1所示。

使用的操作系统为Windows 7(64位)。测试时,先通过软件设置采集方式为非连续采集,并设置震源触发模式分别为定时触发、定距触发和外部触发模式,随后通过软件启动系统采集功能进行采集。在采集过程中,观察采集波形,确认波形刷新方式符合各触发方式下数据刷新的特点,图8为系统震源激发6601炮时,软件显示的实时波形。监控图形中央的数字“6601”表明当前放炮的炮数为6601次。软件继续运行,未出现程序稳定性问题,说明软件非连续采集功能完好且运行稳定。

随后,在软件上设置采集方式为连续采集,并同样设置震源触发模式分别为定时触发、定距触发和外部触发,观察显示波形,确认在连续采集模式下,软件持续不断地每隔设定记录时间(3000ms)刷新显示波形,符合连续采集模式下数据刷新的特点,说明软件连续采集功能完好,运行稳定。如图9所示,可看出采集波形不再像非连续采集时处于记录时间靠前的位置,而是处于靠近中间的位置,在实际测试中,连续采集时的监控波形会处于记录时间各个不同的位置,这是由于测试连续采集的时候,数据采集一直在进行,而震源触发则是间断的,而且采集时间与震源触发时间无联系,从而导致直达波显示的时间不再像非连续采集那样固定。在后期对地震数据做处理时,专业人员将根据OCC记录的炮时文件,对连续采集数据文件进行切割整理,进而将放炮时间点和采集时间对应起来。以上测试结果表明,软件可稳定运行且功能良好,在实时性、稳定性和功能性方面满足深拖式地震数据采集作业的需求

图8 非连续采集时的监控图形 图9 连续采集时的监控图形

5 结语

深拖式地震数据采集与记录系统软件是深拖采集系统的重要组成部分。笔者介绍了深拖式地震数据采集与记录系统软件的设计方法和实现思想,针对系统加入连续采集工作模式的要求,采用多线程技术和合理分配优先级的方法,解决了在连续采集模式下,软件的实时性问题;针对大量数据实时存储的问题,使用内存映射技术,实现了快速数据存储。软件经过多次长时间实际测试,其实时性和功能性得到了验证,可用于深拖式地震数据采集作业。

猜你喜欢
数传线程震源
基于数传电台的靶弹测控系统设计
基于C#线程实验探究
Pusher端震源管理系统在超高效混叠采集模式下的应用*
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
嫦娥卫星数传副瓣信号的干涉测量研究与精度验证
震源的高返利起步
Arkbird 10通道跳频433高频头增程数传
频率偏置对Ka频段圆极化频率复用数传链路的影响
1988年澜沧—耿马地震前震源区应力状态分析