宋山,張正炳,裴彥良,吳愛平
(長江大學電子信息學院,湖北 荊州 434023)(自然資源部第一海洋研究所海洋沉積與環(huán)境地質國家海洋局重點實驗室,山東 青島 266061 青島海洋科學與技術國家實驗室海洋地質過程與環(huán)境功能實驗室,山東 青島 266061)(長江大學電子信息學院,湖北 荊州 434023)
在經濟高速發(fā)展的今天,各領域對石油天然氣等戰(zhàn)略性資源的需求量很大,而陸地上油氣資源狀況逐漸變得嚴峻。海洋中蘊含著豐富的油氣、水合物等資源[1],因而各國都將目光轉移到海洋資源開發(fā)上,希望能替代原有的能源供社會各領域使用[2]。我國是海洋大國,海洋資源儲量豐富,開發(fā)潛力巨大。但是,與西方國家相比,我國在海洋資源開發(fā)方面相關技術起步較晚,相關設備主要依賴進口[3]。海洋地震采集拖纜技術又受到國外的出口限制[4],這使得我國在海洋勘察開采方面處于被動的局面。 為了打破國外的技術封鎖,應對我國天然氣水合物勘探和試采工程對高精度海洋地質探查的迫切需要,由國家海洋局第一研究所聯(lián)合國內優(yōu)勢單位啟動了“深拖式高分辨率多道地震探測技術與裝備研究”的課題[5],深拖式地震采集記錄系統(tǒng)軟件是其子課題“深拖多道數字纜與采集系統(tǒng)研制”的關鍵部分,在深拖式地震采集系統(tǒng)中起著中央控制與數據記錄的作用。因此,研究海洋深拖式地震采集記錄系統(tǒng)軟件對于深拖系統(tǒng)實現(xiàn)海洋勘探的目標有著重要意義。下面,筆者在現(xiàn)有的海洋地震勘探軟件的基礎上,針對連續(xù)采集的新要求和本地數據存儲實時性問題,采用多線程技術和內存映射技術,實現(xiàn)了連續(xù)采集模式下的實時監(jiān)控和大量地震數據的快速存儲。
圖1 深拖系統(tǒng)組成示意圖
圖2 深拖系統(tǒng)結構框圖
深拖系統(tǒng)是深海拖曳式地震數據采集系統(tǒng),對比海面拖曳式地震數據采集系統(tǒng),深拖系統(tǒng)有較高的地層分辨率[6]。深拖系統(tǒng)從設備所處位置上可分為水上船載部分和水下拖曳部分,其中,水下拖曳部分又可分為拖體部分和拖纜部分,如圖1所示。水上船載部分可控制水下拖體,使拖體上攜帶的震源激發(fā)地震波。地震波經過地層反射后,被拖纜中的檢波器接收,隨后產生模擬電信號被拖纜中的采集器轉化為數字電信號。采集器將數字電信號逐級向上一級數傳單位傳播,最終經過拖體上傳到水上船載部分,后期使用專業(yè)軟件對上傳的地震數據進行分析可得出地層地質信息[7]。
深拖系統(tǒng)結構框圖如圖2所示。
水上船載部分是系統(tǒng)的中央控制記錄單元和監(jiān)控中心,主要由主控計算機、質量控制(Quality Control,QC)單元、狀態(tài)監(jiān)控單元、GPS定位系統(tǒng)和網絡交換機組成。負責對水下作業(yè)系統(tǒng)進行系統(tǒng)設備參數配置、系統(tǒng)運行狀態(tài)監(jiān)控、任務分發(fā)與調度等。主控計算機是系統(tǒng)中央控制和記錄單元的關鍵部分,負責向運行控制中心(Operating Control Center,OCC)發(fā)送控制指令和接收OCC上傳的采集數據、系統(tǒng)狀態(tài)數據等,并將接收的數據處理后進行顯示和存儲。QC是獨立于控制平臺的系統(tǒng)工作質量監(jiān)控中心,能實時接收和解析采集數據,并分析給出評價結果。狀態(tài)監(jiān)控單元能接收網絡交換機中特定端口的狀態(tài)數據,該狀態(tài)數據由OCC獲取并上傳,反映了OCC在水下工作時的溫濕度、高度和深度等信息。GPS定位系統(tǒng)可通過衛(wèi)星實時獲取當前拖曳船的位置、行駛速度等信息,可為采集的地震數據提供地理位置坐標信息。網絡交換機用于數據的傳輸與交換。
水下拖曳系統(tǒng)分為拖體部分和拖纜部分,拖體部分包含了震源、OCC、高度計和深度計。震源可由OCC控制激發(fā)聲波,聲波經過地層反射后的地震波可反映地質情況。OCC是采集作業(yè)主要的控制和處理單元,可接收水上的控制指令自主控制拖纜中的采集單元進行采集作業(yè),并將接收到的采集數據處理打包后上傳至水上船載部分。高度計和深度計可檢測拖體當前所處的水深。
水下拖纜部分負責地震波數據的采集和傳輸,其結構圖如圖3所示。一條拖纜包含數傳包和工作段采集纜。其中,數傳包一方面負責接收OCC的指令和下發(fā)控制指令到采集纜中的采集器,另一方面,數傳包能將其下一級數傳包上傳的數據和其本身連接的采集器上傳的數據上傳到其上一級。數傳包在數據傳遞的過程中相當于數據中繼站,OCC下發(fā)的指令和數傳包打包的數據,在各個數傳包之間可逐級向下級傳輸或逐級向上級傳輸。工作段采集纜中包含有檢波器和采集站,檢波器可檢測地震波信號并將其轉換成電信號;采集站上帶有采集單元,能接收電信號并將其轉化成數據。1個采集站連接有4組檢波器,能采集4道地震數據。每一個數傳包兩邊各有2個采集站接口,總共負責打包上傳16道地震數據。當數傳包和工作段采集纜接駁到一起時,數傳包通過采集纜中的通信線路和其上一級以及下一級數傳包建立通信,同時也和與其直接接駁的采集纜中的采集站建立通信。
圖3 拖纜結構圖
深拖式地震數據采集記錄系統(tǒng)軟件通過向OCC下發(fā)指令,控制數傳包對采集站加電,并設置好采樣率、增益。開始采集時,OCC控制震源激發(fā)地震波,地震波經地層反射之后被拖纜上的檢波器檢測到,檢波器產生電信號被采集站捕捉產生數據,采集器將數據上傳至數傳包。數傳包將采集數據按一定的格式打包之后,往其上一級數傳包上傳,若其下一級數傳包有數據傳來,則將其下一級數傳包的數據往上一級數傳包方向上傳。這樣,整條纜的數據最終都會傳至OCC,進而上傳至水上船載部分。
深拖式地震數據采集記錄系統(tǒng)軟件運行于主控計算機上,用戶通過操作軟件,對水下拖曳系統(tǒng)進行控制,進而驅動整個深拖系統(tǒng)進行采集作業(yè),并記錄水下拖曳系統(tǒng)上傳的采集數據,它是系統(tǒng)中央控制和記錄單元的關鍵組成部分。
深拖式地震數據采集記錄軟件是運行于主控計算機上的監(jiān)控和記錄軟件,一方面,該軟件方便用戶對系統(tǒng)設備進行配置與控制,從而使采集單元按照用戶要求進行采集作業(yè)。同時,該軟件可實時顯示采集波形,方便用戶及時了解當前系統(tǒng)的工作狀態(tài)。另一方面,軟件接收數據后以規(guī)定的數據格式記錄采集數據,以方便后期的地震數據處理與分析。為滿足深拖式地震數據采集記錄軟件的功能需求,其應具有以下功能:
1)系統(tǒng)控制 能通過網口與OCC進行通信,進而控制和管理系統(tǒng)設備,如控制OCC下發(fā)采集站加電或斷電指令、設置采集站的采樣率和增益、控制采集站開始采集或停止采集等。
2)實時監(jiān)控 能實時接收和解析OCC上傳的采集數據和狀態(tài)數據,進而顯示地震波波形曲線和基本的狀態(tài)信息。在深拖系統(tǒng)中,需要考慮非連續(xù)采集工作模式和連續(xù)采集工作模式下的實時監(jiān)控問題。在非連續(xù)采集模式下,軟件每接收一段時間的數據之后,會有一段空閑時間可供軟件做數據解析、實時波形顯示。而在連續(xù)采集模式下,軟件持續(xù)不斷地接收采集數據,每接收完一段時間的采集數據,就需要立即顯示地震波形和進行數據存儲,在此期間,程序仍在接收采集數據,這對軟件的實時性提出了更高的要求。狀態(tài)信息主要包括數字包加電狀態(tài)、GPS信息(經度、緯度、船速)、當前采集信息(采樣率、增益)、震源觸發(fā)時間間隔和觸發(fā)信號脈沖寬度等。
3)數據存儲 深拖式地震數據采集記錄軟件在接收和解析采集數據之后,能及時以SEGY格式將地震數據存儲到本地硬盤,以供后期地震數據的處理和解釋使用。
為了滿足深拖采集與記錄軟件功能設計需求,針對該軟件數據交互性強、對時序性和實時性要求高的特點,深拖式采集與記錄軟件采用分層設計結構,如圖4所示。軟件分為3個處理層:①數據層實現(xiàn)接收網絡報文數據、載入配置文件、程序狀態(tài)初始化和指令報文發(fā)送的功能;②處理層完成接收數據的校驗、解析和計算,并交給應用層,同時也能按照用戶要求將要下發(fā)的參數指令合成打包;③應用層接收處理層過來的數據,并按照功能模塊進行波形顯示、狀態(tài)顯示和數據存儲。
深拖式地震數據采集記錄系統(tǒng)軟件的功能框架圖如圖5所示,軟件主要包含以下功能模塊:
1)參數配置 可對OCC、采集站和軟件本身的功能參數進行配置:對OCC可設置其網絡通訊IP地址、設定工作方式(非連續(xù)采集、連續(xù)采集);采集站主要指對其采集類型(采集檢波器信號、采集自檢信號)、采樣率和增益的設置;軟件本身的參數設置則包含了對波形顯示參數(波形顯示幅值、波形顯示時間長度、顯示道數等)和采集數據保存路徑的設置。
2)數據采集 數據采集功能包括非連續(xù)采集和連續(xù)采集。其工作流程如圖6所示,對上位機而言,無論是連續(xù)采集還是非連續(xù)采集,其工作模式無改變,軟件始終根據“開始幀”和“結束幀”來決定是否繼續(xù)接收采集數據。當接收到“開始幀”時,軟件將繼續(xù)接收采集數據,直到接收到“結束幀”,則進行數據解析、波形顯示和數據存儲,隨后又繼續(xù)判斷是否接收到“開始幀”,如此循環(huán)執(zhí)行數據接收任務。而對于OCC而言,連續(xù)采集和非連續(xù)采集模式下的工作流程則有所區(qū)別。在非連續(xù)采集模式下,OCC判斷當前是否達到觸發(fā)條件(達到觸發(fā)時間間隔或者觸發(fā)距離),如果達到觸發(fā)條件,則觸發(fā)震源,發(fā)送“開始幀”給主控機并同時發(fā)送“開始采集”指令給數傳包,進而下發(fā)到采集站,使其開始采集數據。如果未達到觸發(fā)條件,則繼續(xù)等待和判斷是否達到觸發(fā)條件。而在連續(xù)采集模式下,數據采集和震源觸發(fā)是2個相對獨立的部分。數據采集一旦開始則會連續(xù)不斷地采集數據,并且不斷地按序發(fā)送“開始幀”、“采集數據”和“結束幀”。而OCC也不斷地判斷是否達到觸發(fā)條件,若達到觸發(fā)條件,則觸發(fā)震源,并且記錄當前時刻的采集文件的名稱和采集數據點號到炮時文件中,方便后期將炮號與采集時間對應起來。
圖6 深拖系統(tǒng)數據采集工作流程
圖7 OCC震源觸發(fā)工作流程
3)震源觸發(fā) 包含定時觸發(fā)、定距觸發(fā)和外部觸發(fā)3種方式,如圖7所示。定時觸發(fā)由用戶設置觸發(fā)時間間隔,如T_tri。配置完成后,OCC每隔時間T_tri激發(fā)震源產生地震波。定距觸發(fā)方式下,用戶需要設置定距距離,OCC將根據圖7(b)中的流程計算觸發(fā)時間并觸發(fā)震源。外部觸發(fā),則是外部其他設備控制震源激發(fā)地震波,每一次激發(fā)地震波的同時,外部設備向OCC發(fā)送脈沖信號,以此通知OCC控制采集單元進行采集作業(yè)。
4)實時監(jiān)控 軟件可顯示地震數據波形和系統(tǒng)狀態(tài)。通過配置顯示參數,用戶可選擇多道地震波形顯示,也可選擇單道地震波形進行顯示。可以選擇“高通”“低通”濾波器選項,則軟件會對采集的數據做濾波處理,以便更好地觀察地震波形。系統(tǒng)狀態(tài)顯示包括數傳包通訊狀態(tài)、數字包電源狀態(tài)及GPS信號狀態(tài)。
5)數據存儲 數據存儲包括地震采集數據、炮時信息和軟件配置參數的存儲。地震數據主要以SEGY格式存儲于軟件所在的主機硬盤上。炮時信息記錄了震源激發(fā)時刻的GPS信息(包括GPS時間、經度、緯度和GPS船速)和當前保存的SEGY文件的文件名,用于后期將采集數據和震源放炮時間點聯(lián)系對應起來。軟件每次做完參數配置,都會將配置信息寫入硬盤中程序運行所在目錄。在下次打開軟件時,軟件會自動載入之前保存的配置信息,從而免去每次上線工作前都要重新設置參數的麻煩。
深拖系統(tǒng)數據交互性和實時性強,其軟件在接收采集數據的同時,還要能及時處理采集數據,如顯示采集波形和存儲數據。特別是當軟件處于連續(xù)采集工作模式下,數據接收、數據解析和波形顯示功能要始終處于不間斷運行狀態(tài),才能達到實時監(jiān)控的要求。要實現(xiàn)這種多個任務并發(fā)性處理,必須引入多線程技術。多線程技術可將CPU時間按照一定的優(yōu)先級進行劃分,各子線程在各自的CPU時間片段內共享CPU,依次執(zhí)行這些時間片段內的任務,在宏觀上就表現(xiàn)為任務的并發(fā)性處理[8]。深拖式地震數據采集與記錄軟件主要包含有數據接收線程、采集波形顯示線程、數據存儲線程。其中采集波形顯示線程和數據存儲線程需要等待數據接收線程完成當前炮數據的接收和解析之后,才開始啟動運行。在此之前,這2個線程應處于等待狀態(tài),以減少對CPU資源的占用。當數據接收線程完成了采集數據的接收和解析之后,波形顯示線程和數據存儲線程則會被喚起,繼續(xù)做數據處理。為了協(xié)調這種線程之間的同步問題,軟件中使用事件[9](Event)驅動線程的方式,對線程運行的先后次序進行控制。如在程序中定義全局變量CEventm Event,隨后在子線程中的循環(huán)語句(while)中,使用等待事件語句:WaitForSingleObject(mEvent.m_hObject,INFINITE),只有當事件變量mEvent執(zhí)行mEvent.SetEvent()語句之后,該子線程才會跳過等待事件語句,繼續(xù)執(zhí)行在其之后的語句。在深拖式地震數據采集與記錄軟件進行數據采集的過程中,特別是在連續(xù)采集模式下,為了能進一步保證實時性和穩(wěn)定性,除了利用多線程事件驅動方式保證程序功能的時序性和實時性之外,還要利用多線程技術的優(yōu)先級別設定功能,進一步分配CPU資源,才能保證軟件的實時性。VC中設置線程優(yōu)先級的函數為:BOOL SetThreadPriority( HANDLE hThread, intnPriority),其中hThread為線程的句柄,nPriotity為線程的優(yōu)先級標志,按照由低到高的順序,有以下6個級別:
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_TIME_CRITICAL
在軟件中,采集數據線程和數據存儲線程需要設置優(yōu)先級別為“THREAD_PRIORITY_TIME_CRITICAL”(實時),以此保證能接收到所有的數據而不被程序中其他線程打斷,其他線程如波形顯示線程、指令發(fā)送線程、狀態(tài)檢測線程和狀態(tài)顯示線程等則處于優(yōu)先級較低的級別。
深拖式采集記錄軟件不僅要求對采集數據作實時監(jiān)控,還要求能實時存儲采集數據。在地震數據持續(xù)采集的過程當中,在較短的時間內會產生大量的采集數據。要做到實時存儲這些采集數據,就需要在盡可能短的時間內,將數據存儲到磁盤中。特別在連續(xù)采集模式下,在存儲數據的同時也在接收新的采集數據,則需要保證存儲數據的速度大于接收采集數據的速度。使用多線程技術,雖然能提高CPU利用效率,但也無法完全解決存儲速度的問題,這和軟件編譯平臺下的磁盤I/O操作函數有關,如在Windows下使用典型的fwrite函數,由于調用該函數需要調用系統(tǒng)庫,所以其接口速度較慢,存儲大量采集數據時會耗費較長的時間。因此,深拖主控軟件采用內存映射的方式實現(xiàn)快速磁盤I/O操作[10]。內存映射技術使應用程序可通過內存指針(虛擬地址)對磁盤上的文件進行訪問,從而建立了磁盤文件內容和進程虛擬地址空間的映射關系,使得程序可直接通過虛擬地址訪問磁盤上的文件,從而繞過了調用系統(tǒng)庫函數這一過程,也無需對文件內容進行緩沖處理,大大提高了磁盤I/O操作效率。使用內存映射的方式存儲采集數據到磁盤中,其過程如下所示:
1)定義臨時指針變量:__int8 * TempSegMem
2)申請臨時內存控件:TempSegMem = new __int8[m_dwMemSize]
3)創(chuàng)建文件:HANDLE hFile = CreateFile(pszPathname
GENERIC_READ | GENERIC_WRITE
FILE_SHARE_READ|FILE_SHARE_WRITE
NULL
CREATE_ALWAYS
FILE_ATTRIBUTE_NORMAL
NULL)
4)創(chuàng)建文件映射對象:
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)
表1 主控機硬件配置
為測試軟件的功能,驗證軟件功能的正確性,在深拖系統(tǒng)聯(lián)合海試過程中,使軟件運行于測試服務器主機上,配合系統(tǒng)其他部分,進行了長達4d的測試。測試服務器主機硬件配置如表1所示。
使用的操作系統(tǒng)為Windows 7(64位)。測試時,先通過軟件設置采集方式為非連續(xù)采集,并設置震源觸發(fā)模式分別為定時觸發(fā)、定距觸發(fā)和外部觸發(fā)模式,隨后通過軟件啟動系統(tǒng)采集功能進行采集。在采集過程中,觀察采集波形,確認波形刷新方式符合各觸發(fā)方式下數據刷新的特點,圖8為系統(tǒng)震源激發(fā)6601炮時,軟件顯示的實時波形。監(jiān)控圖形中央的數字“6601”表明當前放炮的炮數為6601次。軟件繼續(xù)運行,未出現(xiàn)程序穩(wěn)定性問題,說明軟件非連續(xù)采集功能完好且運行穩(wěn)定。
隨后,在軟件上設置采集方式為連續(xù)采集,并同樣設置震源觸發(fā)模式分別為定時觸發(fā)、定距觸發(fā)和外部觸發(fā),觀察顯示波形,確認在連續(xù)采集模式下,軟件持續(xù)不斷地每隔設定記錄時間(3000ms)刷新顯示波形,符合連續(xù)采集模式下數據刷新的特點,說明軟件連續(xù)采集功能完好,運行穩(wěn)定。如圖9所示,可看出采集波形不再像非連續(xù)采集時處于記錄時間靠前的位置,而是處于靠近中間的位置,在實際測試中,連續(xù)采集時的監(jiān)控波形會處于記錄時間各個不同的位置,這是由于測試連續(xù)采集的時候,數據采集一直在進行,而震源觸發(fā)則是間斷的,而且采集時間與震源觸發(fā)時間無聯(lián)系,從而導致直達波顯示的時間不再像非連續(xù)采集那樣固定。在后期對地震數據做處理時,專業(yè)人員將根據OCC記錄的炮時文件,對連續(xù)采集數據文件進行切割整理,進而將放炮時間點和采集時間對應起來。以上測試結果表明,軟件可穩(wěn)定運行且功能良好,在實時性、穩(wěn)定性和功能性方面滿足深拖式地震數據采集作業(yè)的需求
圖8 非連續(xù)采集時的監(jiān)控圖形 圖9 連續(xù)采集時的監(jiān)控圖形
深拖式地震數據采集與記錄系統(tǒng)軟件是深拖采集系統(tǒng)的重要組成部分。筆者介紹了深拖式地震數據采集與記錄系統(tǒng)軟件的設計方法和實現(xiàn)思想,針對系統(tǒng)加入連續(xù)采集工作模式的要求,采用多線程技術和合理分配優(yōu)先級的方法,解決了在連續(xù)采集模式下,軟件的實時性問題;針對大量數據實時存儲的問題,使用內存映射技術,實現(xiàn)了快速數據存儲。軟件經過多次長時間實際測試,其實時性和功能性得到了驗證,可用于深拖式地震數據采集作業(yè)。