閆 偉,白 清,谷 行,王 東,王 宇,靳寶全,2*
(1.太原理工大學(xué)新型傳感器與智能控制教育部與山西省重點實驗室,太原 030024; 2.煤與煤層氣共采國家重點實驗室,山西 晉城 048012)
布里淵光時域反射BOTDR(Brillouin Optical Time Domain Reflectometry)應(yīng)變檢測技術(shù)是一種基于光纖布里淵散射信號與應(yīng)變的線性關(guān)系,采取單模光纖作為應(yīng)變信息的傳感與傳輸?shù)慕橘|(zhì),從而實現(xiàn)在全光纖長度上應(yīng)變檢測的技術(shù)[1-2]。該技術(shù)具有單端探測,長距離在線監(jiān)測等優(yōu)點,故成為研究熱點并在結(jié)構(gòu)健康檢測等領(lǐng)域得到了廣泛應(yīng)用[3-4]。
目前布里淵分布式光纖應(yīng)變檢測系統(tǒng)應(yīng)用最廣泛的數(shù)據(jù)處理方式是利用上位機系統(tǒng)進(jìn)行數(shù)據(jù)處理,由于傳感器產(chǎn)生的數(shù)據(jù)量龐大、上位機自身計算能力和存儲空間的限制,因此降低了應(yīng)變檢測系統(tǒng)的整體性能,且研發(fā)集數(shù)據(jù)采集處理、顯示、云存儲以及異常報警查詢功能于一體的分布式光纖應(yīng)變監(jiān)測系統(tǒng)及技術(shù)路線寥寥無幾[5]。因此,研究基于云數(shù)據(jù)處理的分布式光纖應(yīng)變遠(yuǎn)程監(jiān)測系統(tǒng)集成方案,設(shè)計研發(fā)一套數(shù)據(jù)高效實時處理的云數(shù)據(jù)監(jiān)測系統(tǒng),進(jìn)而提升系統(tǒng)的整體性能具有非常重要的意義[6]。
針對以上問題,本文在原有分布式光纖應(yīng)變檢測實驗平臺的基礎(chǔ)上設(shè)計了一種基于云數(shù)據(jù)處理的分布式光纖應(yīng)變遠(yuǎn)程監(jiān)測系統(tǒng),依據(jù)BOTDR應(yīng)變檢測技術(shù),通過原理驗證及系統(tǒng)集成完成模塊設(shè)計[7-8]。在MFC(Microsoft Foundation Classes,微軟基礎(chǔ)類庫)應(yīng)變檢測軟件中借助ActiveX數(shù)據(jù)對象ADO(ActiveX Data Objects)數(shù)據(jù)庫訪問技術(shù)和多線程機制實現(xiàn)對云數(shù)據(jù)庫的訪問和數(shù)據(jù)的高效傳輸,通過基于ORACLE設(shè)計的數(shù)據(jù)庫系統(tǒng)來實現(xiàn)對云數(shù)據(jù)的實時處理和存儲[9]。
本監(jiān)測系統(tǒng)選擇客戶端/服務(wù)器(Client/Server)模式進(jìn)行系統(tǒng)架構(gòu),分為上位機客戶端和云端服務(wù)器數(shù)據(jù)庫。C/S的系統(tǒng)架構(gòu)模式是由客戶端和服務(wù)器構(gòu)成,該模式充分發(fā)揮了兩終端計算機的數(shù)據(jù)處理性能,因此具有強大的數(shù)據(jù)操縱和事務(wù)處理能力[10]。其整體方案如圖1所示。
圖1 系統(tǒng)整體方案設(shè)計圖
上位機系統(tǒng)的應(yīng)變檢測依據(jù)BOTDR應(yīng)變檢測技術(shù),采用微波外差相干探測法實現(xiàn)對布里淵信號的檢測,最終實現(xiàn)了數(shù)據(jù)的采集[11-12]。本應(yīng)變檢測系統(tǒng)空間分辨率為1 m,為提高系統(tǒng)測量精度,采用250 MSa/s的數(shù)據(jù)高速采集卡對采集信號進(jìn)行了 10 000 次的實時累加平均,使應(yīng)變測量精度達(dá)到±50 με。若將系統(tǒng)的應(yīng)變靈敏度定義為傳感光纖不施加應(yīng)變時系統(tǒng)可檢測到的最小應(yīng)變,因此本系統(tǒng)應(yīng)變靈敏度為 25 με。
上位機客戶端程序通過ADO接口編寫數(shù)據(jù)庫訪問接口程序來實現(xiàn)應(yīng)用程序級的數(shù)據(jù)庫訪問,使用多線程同步互斥機制實現(xiàn)與數(shù)據(jù)庫的高并發(fā)數(shù)據(jù)交互。在此基礎(chǔ)上,ADO通過對象連接與嵌入OLE DB(Object Link and embed)系統(tǒng)級數(shù)據(jù)庫驅(qū)動與云數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互。上位機客戶端位于地面監(jiān)控中心,與埋設(shè)在地下管道表面的光纜連接,用于實時采集和解調(diào)光纖中的布里淵后向散射信號,具有詳細(xì)參數(shù)設(shè)置、應(yīng)變信息解調(diào)顯示以及應(yīng)變數(shù)據(jù)云存儲等功能。
為充分挖掘客戶端與服務(wù)器的運算處理性能,系統(tǒng)將部分?jǐn)?shù)據(jù)處理和數(shù)據(jù)存儲的工作遷移至遠(yuǎn)程云服務(wù)器完成。在云服務(wù)器搭建ORACLE數(shù)據(jù)庫存儲上位機計算產(chǎn)生的數(shù)據(jù),通過OLE DB系統(tǒng)級數(shù)據(jù)庫接口將數(shù)據(jù)存入云數(shù)據(jù)庫中,并完成進(jìn)一步的處理,實現(xiàn)實時報警數(shù)據(jù)的篩選、應(yīng)變報警閾值的設(shè)定、數(shù)據(jù)合并、數(shù)據(jù)批量綁定傳輸、歷史數(shù)據(jù)存儲等功能。
分布式光纖鋪設(shè)于地下管道表面用來檢測埋地管線的應(yīng)力危害,當(dāng)埋地管道的某一位置發(fā)生裂縫或彎曲時,鋪設(shè)管道表面的分布式光纖隨之產(chǎn)生相應(yīng)的應(yīng)力變化,光纖中返回的布里淵后向散射信號隨之發(fā)生頻移變化。針對系統(tǒng)采集與處理的海量數(shù)據(jù)[11],首先通過上位機軟件的計算進(jìn)行預(yù)處理,解調(diào)出基本的應(yīng)變信息進(jìn)行可視化顯示。
ADO數(shù)據(jù)庫訪問編程接口是由微軟公司推出的一種以ActiveX技術(shù)為基礎(chǔ)的基于通用對象模型(COM)的數(shù)據(jù)庫訪問技術(shù),它是一組基于OLE DB系統(tǒng)級數(shù)據(jù)庫接口的高級應(yīng)用程序接口[13]。ADO數(shù)據(jù)傳輸?shù)牧鞒虉D如圖2所示。要使用ADO編程接口,首先要在MFC程序中引用ADO類型庫并初始化環(huán)境。在接口的設(shè)計與實現(xiàn)中使用Connection對象連接數(shù)據(jù)庫,使用Recordset記錄集對象獲取數(shù)據(jù)庫的數(shù)據(jù)表記錄數(shù)據(jù),使用Command對象調(diào)用關(guān)鍵數(shù)據(jù)處理的存儲過程,從而完成數(shù)據(jù)分析與處理的流程。最后在OLE DB系統(tǒng)級數(shù)據(jù)庫接口與Oracle提供的驅(qū)動程序的匹配下,通過RDS(Remote Data Service)遠(yuǎn)程數(shù)據(jù)服務(wù)實現(xiàn)MFC程序與云數(shù)據(jù)庫的遠(yuǎn)程數(shù)據(jù)交互。
圖2 ADO數(shù)據(jù)傳輸流程圖
ADO是一個支持多線程的應(yīng)用程序接口,當(dāng)客戶端出現(xiàn)大量并發(fā)的數(shù)據(jù)請求時,仍然可以保持云服務(wù)器穩(wěn)定的運行效率。因此在大數(shù)據(jù)量采集和高速數(shù)據(jù)傳輸?shù)男枨笙?上位機客戶端使用多線程機制來實現(xiàn)對數(shù)據(jù)庫的并行訪問。
在MFC程序主進(jìn)程中建立數(shù)據(jù)讀取、數(shù)據(jù)寫入和數(shù)據(jù)函數(shù)調(diào)用三個子線程。為使三個子線程的數(shù)據(jù)傳輸達(dá)到同步,利用多線程同步互斥的機制為三個子線程分別建立多線程同步信號鎖,通過控制三個同步信號鎖的建立和釋放實現(xiàn)數(shù)據(jù)同步;同時為三個子線程共同訪問的數(shù)據(jù)臨界區(qū)添加臨界區(qū)互斥鎖,避免三個線程在操作同一數(shù)據(jù)時出現(xiàn)死鎖的現(xiàn)象導(dǎo)致程序卡死,最終保證了各子線程中數(shù)據(jù)交互的唯一性和安全性,初步實現(xiàn)了MFC程序與云端數(shù)據(jù)庫多線程、安全、并發(fā)、高效的數(shù)據(jù)傳輸。MFC多線程訪問云數(shù)據(jù)庫流程圖如圖3所示。
圖3 MFC多線程訪問云數(shù)據(jù)庫流程圖
針對原分布式光纖應(yīng)變檢測系統(tǒng)無法實現(xiàn)遠(yuǎn)程監(jiān)控的問題,基于ORACLE設(shè)計了云數(shù)據(jù)庫實現(xiàn)對系統(tǒng)數(shù)據(jù)的云處理。ORACLE數(shù)據(jù)庫系統(tǒng)是美國甲骨文公司發(fā)布的目前最流行的一種關(guān)系型數(shù)據(jù)庫[14]。本監(jiān)測系統(tǒng)中產(chǎn)生的數(shù)據(jù)量龐大,且需要保證大數(shù)據(jù)量的實時傳輸,因此數(shù)據(jù)庫對數(shù)據(jù)的實時處理和分析過程較為復(fù)雜。本數(shù)據(jù)庫系統(tǒng)設(shè)計中主要涉及需求分析、數(shù)據(jù)庫結(jié)構(gòu)設(shè)計以及關(guān)鍵數(shù)據(jù)處理流程設(shè)計等過程[14]。
本系統(tǒng)處理的數(shù)據(jù)關(guān)系較為簡單,但數(shù)據(jù)量龐大,實時性要求較高,因此使用結(jié)構(gòu)化分析方法(Structured Analysis)及自頂向下逐層分解的思想設(shè)計了數(shù)據(jù)流圖。數(shù)據(jù)流圖不同于傳統(tǒng)的流程圖和框圖,它是從數(shù)據(jù)傳輸和處理加工的角度,以圖形為描述方式來描述數(shù)據(jù)在系統(tǒng)中的流動和處理的數(shù)據(jù)庫描述工具[15]。通過數(shù)據(jù)流圖的設(shè)計,可以清晰的明確數(shù)據(jù)在系統(tǒng)內(nèi)部的邏輯流向和邏輯變換過程,為后續(xù)數(shù)據(jù)處理存儲過程的設(shè)計提供思路[15]。數(shù)據(jù)流圖如圖4。
圖4 數(shù)據(jù)庫數(shù)據(jù)流圖
由圖4可知,本遠(yuǎn)程數(shù)據(jù)庫系統(tǒng)含有四個數(shù)據(jù)實體,它們分別是實時應(yīng)變信息、歷史應(yīng)變信息、實時異常信息和應(yīng)變閾值信息,對這四個數(shù)據(jù)實體進(jìn)行深入分析,以及進(jìn)一步深入分析得出各數(shù)據(jù)實體的屬性及實體之間的數(shù)據(jù)關(guān)系,從而完成數(shù)據(jù)庫概念模型的設(shè)計。通過設(shè)計的數(shù)據(jù)庫概念結(jié)構(gòu)模型,可以設(shè)計出數(shù)據(jù)的存儲結(jié)構(gòu)(即數(shù)據(jù)表結(jié)構(gòu)),解決數(shù)據(jù)的存儲問題。實體關(guān)系圖(E-R圖)是一種描述現(xiàn)實世界的概念模型,它主要包含實體、屬性、聯(lián)系三大元素,其中矩形框代表實體,菱形代表實體之間的關(guān)系,橢圓框代表實體所擁有的屬性[15]。設(shè)計的數(shù)據(jù)庫系統(tǒng)E-R圖如圖5所示,由圖5可知數(shù)據(jù)庫中需要建立實時數(shù)據(jù)表、歷史信息記錄表、閾值表以及異常應(yīng)變報警表。
圖5 數(shù)據(jù)庫實體關(guān)系圖
在Oracle數(shù)據(jù)庫中,數(shù)據(jù)的處理和分析是通過一系列的觸發(fā)器、存儲過程以及事務(wù)處理來完成的。根據(jù)圖4的數(shù)據(jù)流圖深入分析設(shè)計得出關(guān)鍵數(shù)據(jù)處理的流程圖。關(guān)鍵數(shù)據(jù)處理流程圖如圖6所示,由圖6可知需要建立三個存儲過程來完成關(guān)鍵數(shù)據(jù)的處理,它們分別是數(shù)據(jù)合并、數(shù)據(jù)批量綁定以及序列重置。
圖6 關(guān)鍵數(shù)據(jù)處理流程圖
數(shù)據(jù)合并存儲過程用來將實時數(shù)據(jù)表中的多條記錄通過大字段數(shù)據(jù)合并成一條記錄并將其存入歷史表中完成存儲。該存儲過程在觸發(fā)器中執(zhí)行,當(dāng)云數(shù)據(jù)庫系統(tǒng)檢測到新的實時數(shù)據(jù)存入并完成數(shù)據(jù)刷新后,該存儲過程將被觸發(fā)執(zhí)行。為存儲合并后的超長字符串?dāng)?shù)據(jù),采用字符型大型對象CLOB(Character Large Object)數(shù)據(jù)類型對其進(jìn)行存儲,該數(shù)據(jù)類型可存儲單字節(jié)字符數(shù)據(jù),其字段容量大,最多可存儲 4 Gbyte 的數(shù)據(jù),非常適用于大數(shù)據(jù)量的處理和存儲[16]。在使用CLOB類型之前,首先聲明CLOB對象變量,向目標(biāo)表中插入一條空記錄,即插入的記錄中CLOB類型的變量沒有數(shù)據(jù),然后將CLOB字段與聲明的CLOB變量進(jìn)行綁定,并以讀寫的方式打開該對象變量。與此同時,從源表中獲取數(shù)據(jù)將合并后的超長字符串傳遞給聲明的CLOB變量,再將CLOB變量指向的超長字符串傳遞給目標(biāo)表的對應(yīng)字段中,最后關(guān)閉CLOB對象,完成數(shù)據(jù)合并和超長字符串的插入[14]。數(shù)據(jù)合并存儲過程流程如圖7所示。
圖7 數(shù)據(jù)合并存儲過程流程圖
數(shù)據(jù)批量綁定存儲過程通過MFC客戶端程序的ADO編程接口調(diào)用SQL命令來執(zhí)行。傳統(tǒng)的命令循環(huán)傳遞的方式數(shù)據(jù)存儲速率緩慢,效率低下,無法實現(xiàn)系統(tǒng)的實時性要求。為解決這一問題,本系統(tǒng)使用批量綁定技術(shù),將異常記錄進(jìn)行提取并以時間遞減的方式排列;建立一個存儲數(shù)據(jù)的數(shù)組,將實時數(shù)據(jù)表的關(guān)鍵字段與建立的數(shù)組綁定。當(dāng)實時數(shù)據(jù)表中存在異常記錄時,通過篩選數(shù)據(jù)和批量綁定方法存入數(shù)組后,執(zhí)行并發(fā)插入命令將大批量數(shù)據(jù)高效并發(fā)的插入到異常應(yīng)變報警表中。最終實現(xiàn)在實時數(shù)據(jù)表更新數(shù)據(jù)之前將異常應(yīng)變報警表中的數(shù)據(jù)存入異常應(yīng)變報警表中。數(shù)據(jù)批量綁定存儲過程流程圖如圖8所示。
圖8 數(shù)據(jù)批量綁定存儲過程流程圖
序列重置存儲過程用來重置歷史信息記錄表中S_ID字段遞增用到的序列。為清除歷史信息記錄表中因各種原因插入錯誤的數(shù)據(jù),防止客戶端程序在訪問云數(shù)據(jù)庫時發(fā)生錯誤,在數(shù)據(jù)庫中設(shè)計了一個存儲過程和一個觸發(fā)器來實現(xiàn)錯誤數(shù)據(jù)的自動清除與序列的自動重置,其中存儲過程在觸發(fā)器中觸發(fā)執(zhí)行。當(dāng)歷史信息記錄表中錯誤數(shù)據(jù)過多時,數(shù)據(jù)庫管理員將會對該表執(zhí)行刪除或清空操作,該操作將引發(fā)觸發(fā)器的自動執(zhí)行,實現(xiàn)表序列的重置,從而使得新插入的數(shù)據(jù)記錄保持正確的順序。序列重置存儲過程流程圖如圖9。
圖9 序列重置存儲過程流程圖
基于安全與數(shù)據(jù)加密的因素,本遠(yuǎn)程監(jiān)測系統(tǒng)根據(jù)設(shè)計的系統(tǒng)方案通過組建專線內(nèi)網(wǎng)實現(xiàn)了上位機客戶端與云數(shù)據(jù)庫的數(shù)據(jù)傳輸。在上位機配置數(shù)據(jù)庫連接環(huán)境,MFC程序中設(shè)計編寫MFC數(shù)據(jù)庫訪問接口模塊并完成代碼封裝;在云服務(wù)器配置數(shù)據(jù)庫環(huán)境,分配IP地址搭建設(shè)計完成的數(shù)據(jù)庫系統(tǒng),并完成單用戶數(shù)據(jù)訪問終端的部署。最終完成了云數(shù)據(jù)庫的搭建和上位機客戶端的部署,初步實現(xiàn)了單用戶模式下基于云數(shù)據(jù)處理的分布式光纖應(yīng)變遠(yuǎn)程監(jiān)測系統(tǒng)。
在此基礎(chǔ)上測試了系統(tǒng)在長時間連續(xù)傳感狀態(tài)下,上位機與云數(shù)據(jù)庫數(shù)據(jù)交互與實時監(jiān)測數(shù)據(jù)的性能。通過對云數(shù)據(jù)庫系統(tǒng)連續(xù)1 h的運行性能監(jiān)控,可以看到系統(tǒng)運行進(jìn)程主要分為CPU、System I/O及Commit三部分,其中CPU處理事務(wù)的平均活動會話數(shù)基本保持在0.04,System I/O事務(wù)的平均活動會話數(shù)約占0.02,事務(wù)提交的平均活動會話數(shù)約占0.02,CPU Wait時間可以忽略不計,證明數(shù)據(jù)傳輸過程中未發(fā)生異常等待事件,初步證明該數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)處理穩(wěn)定性較好。遠(yuǎn)程數(shù)據(jù)庫系統(tǒng)連續(xù)運行性能監(jiān)控如圖10所示。
圖10 遠(yuǎn)程數(shù)據(jù)庫系統(tǒng)連續(xù)運行性能監(jiān)控
通過對系統(tǒng)單個數(shù)據(jù)塊讀取等待時間的連續(xù)1 h運行監(jiān)控,可以看到等待時間穩(wěn)定在4 ms內(nèi),從系統(tǒng)的整體運行狀態(tài)來看是可以忽略不計的,證明該數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)實時性較好。數(shù)據(jù)庫系統(tǒng)單個數(shù)據(jù)塊讀取等待時間如圖11所示。
圖11 數(shù)據(jù)庫系統(tǒng)單個數(shù)據(jù)塊讀取等待時間
圖12 云數(shù)據(jù)庫應(yīng)變實時表數(shù)據(jù)可視化監(jiān)測顯示
同時,在上位機應(yīng)變檢測程序與云數(shù)據(jù)庫正常運行狀態(tài)下進(jìn)行1.5 km光纖的拉伸應(yīng)變模擬實驗,拉伸光纖布里淵頻移為10.725 GHz,采用微波本地振蕩器以5 MHz的掃頻間隔對其進(jìn)行頻率掃描,從而得出光纖沿線所有的布里淵頻移,最終得出光纖沿線的應(yīng)變變化。通過對1.5 km光纖的末端1 430 m處施加拉伸應(yīng)變來模擬異常應(yīng)變。使用數(shù)據(jù)庫管理工具對云數(shù)據(jù)庫應(yīng)變實時表中的數(shù)據(jù)可視化處理得到光纖沿線應(yīng)變分布。由圖12可知在1 429 m到1 430 m之間存在異常應(yīng)變,應(yīng)變峰值為866.94 με。
綜上所述,系統(tǒng)在1 h連續(xù)監(jiān)測狀態(tài)下運行穩(wěn)定,有良好的實時性,驗證了在連續(xù)傳感狀態(tài)下,系統(tǒng)達(dá)到了上位機與云數(shù)據(jù)庫之間數(shù)據(jù)并發(fā)和實時監(jiān)測的數(shù)據(jù)交互速度。初步實現(xiàn)了集云數(shù)據(jù)處理、存儲、顯示于一體的分布式光纖應(yīng)變遠(yuǎn)程監(jiān)測系統(tǒng)。
本文基于ORACLE設(shè)計搭建了單用戶模式下的分布式光纖應(yīng)變遠(yuǎn)程監(jiān)測系統(tǒng)的云數(shù)據(jù)庫系統(tǒng),基于ADO數(shù)據(jù)庫訪問技術(shù)完成了云數(shù)據(jù)庫訪問接口的設(shè)計與封裝。本遠(yuǎn)程監(jiān)測系統(tǒng)將位于現(xiàn)場光纜中的實時數(shù)據(jù)傳輸?shù)轿挥诘孛姹O(jiān)控中心的上位機客戶端中,實現(xiàn)了初步的數(shù)據(jù)處理和顯示,地面監(jiān)控中心通過ADO接口及其RDS遠(yuǎn)程數(shù)據(jù)服務(wù)將實時應(yīng)變數(shù)據(jù)傳輸?shù)皆品?wù)器中,實現(xiàn)了云數(shù)據(jù)處理和存儲的功能。通過系統(tǒng)性能測試和實踐結(jié)果表明,該系統(tǒng)可在單用戶模式下實現(xiàn)實時的應(yīng)變監(jiān)測、異常數(shù)據(jù)云處理和存儲功能,數(shù)據(jù)信息獲取方便,簡化后續(xù)網(wǎng)絡(luò)監(jiān)測的實現(xiàn),有效的解決了數(shù)字化管理系統(tǒng)中大數(shù)據(jù)量的數(shù)據(jù)處理和存儲問題。