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