王加敏,王莉森,張曉剛,梁紅杰
(河北省地震局,河北 石家莊 050021)
電磁擾動(dòng)觀測(cè)與研究是電磁學(xué)領(lǐng)域的重要組成部分,也是地震短臨預(yù)報(bào)的重要方法之一。CNEM08-I型數(shù)字化電擾動(dòng)儀,可同時(shí)觀測(cè)電場(chǎng)強(qiáng)度和地電阻率兩個(gè)測(cè)項(xiàng),具有高精度的主機(jī)與穩(wěn)定的數(shù)據(jù)采集功能(何案華,2010),觀測(cè)數(shù)據(jù)經(jīng)中國(guó)地震前兆數(shù)據(jù)管理系統(tǒng)采集后存入Oracle數(shù)據(jù)庫(kù)。目前,該儀器可產(chǎn)出20 Hz的高頻數(shù)據(jù),經(jīng)儀器內(nèi)軟件處理后可轉(zhuǎn)換為秒采樣數(shù)據(jù)。另外,通過(guò)不同軟件的處理,可產(chǎn)出基于秒采樣的分鐘值、小時(shí)值、日均值產(chǎn)品數(shù)據(jù)。CNEM08-I型電擾動(dòng)儀的觀測(cè)數(shù)據(jù)及產(chǎn)品數(shù)據(jù)在Oracle數(shù)據(jù)庫(kù)中以CLOB類(lèi)型的大文本存儲(chǔ)形式進(jìn)行存儲(chǔ)(王莉森,2011)。
電磁擾動(dòng)觀測(cè)作為地震前兆觀測(cè)的重要手段之一,目前河北省內(nèi)共有14個(gè)地震前兆臺(tái)架設(shè)了CNEM08-I型數(shù)字化電磁擾動(dòng)觀測(cè)儀(牛露,2016)。臺(tái)站值班人員每天收取觀測(cè)數(shù)據(jù)后,對(duì)數(shù)據(jù)進(jìn)行去除單點(diǎn)突跳、批量刪除成片壞數(shù)據(jù)等預(yù)處理操作(王軍,2016)。在電擾動(dòng)的原始數(shù)據(jù)處理過(guò)程中,發(fā)現(xiàn)部分臺(tái)站的CNEM08-I型電擾動(dòng)數(shù)據(jù)在同一時(shí)刻不同測(cè)項(xiàng)出現(xiàn)數(shù)據(jù)突跳,并且突跳后的數(shù)據(jù)幅度一直持續(xù)不變。經(jīng)過(guò)對(duì)比分析,可以判定是電擾動(dòng)儀的兩個(gè)通道數(shù)據(jù)發(fā)生跳轉(zhuǎn),或四個(gè)通道的數(shù)據(jù)依次偏移到相鄰?fù)ǖ赖木壒?。由于電擾動(dòng)儀產(chǎn)出的數(shù)據(jù)量較大,無(wú)法依靠人工識(shí)別及處理。針對(duì)此現(xiàn)象,本文從數(shù)據(jù)存儲(chǔ)方面入手,編寫(xiě)軟件實(shí)現(xiàn)多通道數(shù)據(jù)的修正,為數(shù)據(jù)使用人員提供準(zhǔn)確直觀的數(shù)據(jù)。
圖1 軟件的工作流程
系統(tǒng)分為用戶(hù)管理界面和數(shù)據(jù)處理界面,主要包括5個(gè)功能模塊,分別為用戶(hù)管理、預(yù)處理數(shù)據(jù)查看、數(shù)據(jù)交換、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)繪圖。在用戶(hù)管理界面,可進(jìn)行用戶(hù)的添加、刪除及激活操作;數(shù)據(jù)處理界面用于數(shù)據(jù)繪圖和數(shù)據(jù)處理,并且只能處理當(dāng)前用戶(hù)所在臺(tái)站的電擾動(dòng)儀觀測(cè)數(shù)據(jù)。
軟件的工作流程如圖1所示。
該軟件采用C/S結(jié)構(gòu)模式,以Com組件和Active技術(shù)實(shí)現(xiàn)業(yè)務(wù)邏輯,進(jìn)行模塊化編程。程序基于用戶(hù)認(rèn)證的方式登錄Oracle數(shù)據(jù)庫(kù),通過(guò)數(shù)據(jù)庫(kù)接口向Oracle數(shù)據(jù)庫(kù)請(qǐng)求查詢(xún)、保存數(shù)據(jù)等操作。CLOB類(lèi)型數(shù)據(jù)的讀取與存儲(chǔ)等操作與String類(lèi)型數(shù)據(jù)不同,需要利用Oracle客戶(hù)端提供的驅(qū)動(dòng)程序?qū)崿F(xiàn)讀寫(xiě)Oracle數(shù)據(jù)庫(kù)中的CLOB類(lèi)型數(shù)據(jù)。另外,該程序采用Visual C++編程語(yǔ)言,調(diào)用OCI全面訪問(wèn)Oracle數(shù)據(jù)庫(kù)。
本軟件使用Visual C++語(yǔ)言進(jìn)行編程,可在Windows2000、windows7等操作系統(tǒng)下運(yùn)行,軟件的運(yùn)行系統(tǒng)需安裝ORACLE10g及以上版本的客戶(hù)端。
啟動(dòng)程序后,彈出用戶(hù)登錄窗口,認(rèn)證用戶(hù)登錄信息后進(jìn)入如圖2所示的數(shù)據(jù)處理界面。根據(jù)登錄用戶(hù)信息,程序自動(dòng)加載臺(tái)站配置信息,避免人工輸入出現(xiàn)錯(cuò)誤。在數(shù)據(jù)處理界面,用戶(hù)可通過(guò)下拉框選取測(cè)點(diǎn)編碼和日期,查看預(yù)處理數(shù)據(jù)。在數(shù)據(jù)繪圖區(qū)域,用戶(hù)通過(guò)鼠標(biāo)獲取數(shù)據(jù)出現(xiàn)錯(cuò)誤的精確時(shí)間段,選擇開(kāi)始時(shí)間和結(jié)束時(shí)間,點(diǎn)擊“交換數(shù)據(jù)”即可完成串?dāng)_數(shù)據(jù)的交換。程序執(zhí)行時(shí),操作日志區(qū)域輸出當(dāng)前操作結(jié)果,提示用戶(hù)讀取及處理結(jié)果數(shù)據(jù)。數(shù)據(jù)交換完畢,用戶(hù)在繪圖界面查看通道數(shù)據(jù)曲線(xiàn)是否還存在交叉(兩測(cè)項(xiàng)僅一次交換即可完成數(shù)據(jù)處理),確認(rèn)無(wú)誤后點(diǎn)擊“入庫(kù)”即可將處理后的數(shù)據(jù)寫(xiě)入Oracle數(shù)據(jù)庫(kù)。
圖2 軟件數(shù)據(jù)處理界面
為減少用戶(hù)操作步驟,該軟件界面用戶(hù)操作區(qū)域多為下拉菜單,部分選項(xiàng)為聯(lián)動(dòng)操作,避免用戶(hù)錄入錯(cuò)誤信息。主要程序執(zhí)行過(guò)程如下:(1)根據(jù)用戶(hù)選擇的測(cè)點(diǎn)編碼、日期,程序中讀取文本框數(shù)據(jù),將臺(tái)站代碼、測(cè)點(diǎn)編碼及日期賦值到相對(duì)應(yīng)的字段,組成SQL條件查詢(xún)語(yǔ)句,訪問(wèn)數(shù)據(jù)庫(kù)。(2)讀取Oracle數(shù)據(jù)庫(kù)中電擾動(dòng)數(shù)據(jù)時(shí),使用OracleClob類(lèi)對(duì)象存儲(chǔ)CLOB數(shù)據(jù),調(diào)用OracleDataReader 對(duì)象GetOracleClob讀取定位器,然后通過(guò)Read訪問(wèn)OracleClob中存儲(chǔ)的CLOB字段。(3)調(diào)用Visual Studio自帶的chart插件,設(shè)置series圖表序列,以時(shí)間為橫坐標(biāo),繪制預(yù)處理秒數(shù)據(jù)曲線(xiàn)。(4)使用chart懸停選定數(shù)值操作getTollTip事件,獲取精確時(shí)間。其中e.Text = string.Format(),分別顯示x軸和y軸的數(shù)值,程序根據(jù)時(shí)間計(jì)算出數(shù)據(jù)位置,交換數(shù)組數(shù)據(jù),并再次調(diào)用chart畫(huà)圖插件,將轉(zhuǎn)換后的圖形顯示到界面上。(5)CLOB數(shù)據(jù)的存儲(chǔ)。在保存處理后的數(shù)據(jù)前,先刪除Oracle中存儲(chǔ)的CLOB數(shù)據(jù),然后調(diào)用 OracleDataReader 的 GetOracleClobForUpdate() 函數(shù),將處理后的數(shù)據(jù)保存到Oracle數(shù)據(jù)庫(kù)中。
本文以文安臺(tái)2017年10月17日電擾動(dòng)觀測(cè)數(shù)據(jù)為例,原始預(yù)處理秒數(shù)據(jù)如圖3所示,經(jīng)軟件處理后的秒數(shù)據(jù)如圖4所示。
圖3 軟件處理前電擾動(dòng)秒數(shù)據(jù)
圖4 軟件處理后電擾動(dòng)秒數(shù)據(jù)
通過(guò)本軟件的處理,可識(shí)別電擾動(dòng)儀不同測(cè)項(xiàng)在相同時(shí)段內(nèi)出現(xiàn)數(shù)據(jù)交叉的精確時(shí)間,完成交叉數(shù)據(jù)的交換,以及修正后數(shù)據(jù)的保存,從而保證電擾動(dòng)儀觀測(cè)數(shù)據(jù)的準(zhǔn)確性。