黃艷庭,谷玉海,王菊遠
(北京信息科技大學(xué)現(xiàn)代測控技術(shù)教育部重點實驗室,北京 100192)
風(fēng)電機組Web實時監(jiān)測系統(tǒng)要對風(fēng)電機組的振動、溫度、轉(zhuǎn)速等各種數(shù)據(jù)進行實時監(jiān)測,功能復(fù)雜,數(shù)據(jù)的實時傳輸量大。而傳統(tǒng)監(jiān)測系統(tǒng)的通信主要是通過輪詢的方式不斷地向服務(wù)器發(fā)送請求,但是會導(dǎo)致請求過于頻繁,使服務(wù)器的負(fù)載壓力過大;但是如果通信間隔過長,則無法保證信息的實時性。為了改進這種通信方式,設(shè)計了基于WebSocket的風(fēng)電機組Web實時監(jiān)測系統(tǒng),數(shù)據(jù)服務(wù)器通過TCP/IP通信獲取高速同步采集系統(tǒng)采集的監(jiān)測數(shù)據(jù),并通過Go語言提供的Channel消息通信機制建立數(shù)據(jù)服務(wù)器與Web服務(wù)器之間的數(shù)據(jù)傳輸,確保了數(shù)據(jù)顯示的實時性。在瀏覽器端實現(xiàn)對采集數(shù)據(jù)的實時在線監(jiān)測、處理、分析和診斷,對準(zhǔn)確了解風(fēng)電機組設(shè)備實時狀況及延長設(shè)備壽命具有重要意義。
系統(tǒng)總體結(jié)構(gòu)如圖1所示,針對分布在各地的風(fēng)電機組設(shè)備,監(jiān)控中心的主服務(wù)器與高速同步采集卡建立基于TCP/IP協(xié)議的數(shù)據(jù)連接。在系統(tǒng)中,高速同步采集卡將數(shù)據(jù)實時傳輸給數(shù)據(jù)服務(wù)器,數(shù)據(jù)服務(wù)器一方面將數(shù)據(jù)保存在Postgre數(shù)據(jù)庫內(nèi),另一方面通過Channel消息機制將數(shù)據(jù)傳輸給Web服務(wù)器,客戶端在調(diào)用JavaScript后使WebSocket建立與Web服務(wù)器的實時數(shù)據(jù)連接,實現(xiàn)數(shù)據(jù)的實時交互,最后通過HTML5和Echarts將信息顯示在瀏覽器上。由于系統(tǒng)的各個模塊的功能各不相同,完全獨立,各個模塊之間采用接口進行數(shù)據(jù)交互,保證了系統(tǒng)運行的可靠性。
圖1 系統(tǒng)總體結(jié)構(gòu)
WebSocket是一種建立在HTML5基礎(chǔ)上的由單個TCP連接實現(xiàn)全雙工通信技術(shù)方式。在WebSocket API中,瀏覽器與Web服務(wù)器之間只需完成一次握手動作,就可以在兩者之間建立一條高速數(shù)據(jù)傳輸通道。為建立一個高速WebSocket數(shù)據(jù)通信。首先,瀏覽器端向Web服務(wù)器端發(fā)起一條HTTP連接請求,這個連接與普通的HTTP連接請求不同,發(fā)出的連接中具有一條附加信息,附加信息中的“Upgrade:WebSocket”表代表本條信息是一個申請協(xié)議升級的 HTTP信息。Web服務(wù)器端在接收到請求后,首先處理附加信息,在處理后產(chǎn)生應(yīng)答信息,并將產(chǎn)生的應(yīng)答信息發(fā)送到瀏覽器端,由此瀏覽器端與Web服務(wù)器端就成功的建立了一條基于WebSocket方式的快速數(shù)據(jù)傳輸通道。瀏覽器端和Web服務(wù)器端就可以通過這個WebSocket數(shù)據(jù)傳輸通道隨時進行數(shù)據(jù)傳輸(圖2),而且這條通信連接將會一直持續(xù)保持連接,除非瀏覽器端與Web服務(wù)器端中的一方主動將數(shù)據(jù)通信關(guān)閉。
圖2 WebSocket連接
JavaScript實現(xiàn)WebSocket連接的核心代碼如下。
數(shù)據(jù)服務(wù)器主要實現(xiàn)同Web服務(wù)器的數(shù)據(jù)實時交互,采用以Go語言為核心的Beego框架搭建的平臺,在系統(tǒng)運行最初階段首先建立同Web服務(wù)器端的通信連接。Go語言提供的消息通信機制被稱為Channel,它類似于單雙向數(shù)據(jù)管道(Pipe),用戶可以使用Channel在兩個或多個線程之間傳遞消息。對于在線程間傳輸大量數(shù)據(jù)的應(yīng)用,可以使用異步Channel,從而達到消息隊列的效果(圖3)。異步Channel就是給Channel設(shè)定一個Buffer值。在Buffer未寫滿的情況下,不阻塞發(fā)送操作;在Buffer未讀完之前,不阻塞接收操作。
圖3 線程間通信示意
為能夠?qū)崿F(xiàn)信息的遠程快速傳送要求,系統(tǒng)設(shè)計了基于TCP協(xié)議的自定義數(shù)據(jù)傳輸協(xié)議,遠程數(shù)據(jù)采集系統(tǒng)首先按自定義傳輸協(xié)議將數(shù)據(jù)打包,然后根據(jù)TCP協(xié)議將數(shù)據(jù)包發(fā)送到系統(tǒng)數(shù)據(jù)服務(wù)器。數(shù)據(jù)幀格式定義如表1所示,采用16進制數(shù)字的0xAA0x55代表數(shù)據(jù)的數(shù)據(jù)頭,表示一幀數(shù)據(jù)的基本信息;數(shù)據(jù)包類型表示采集的數(shù)據(jù)類型為數(shù)據(jù)采集結(jié)果包或者數(shù)據(jù)采集參數(shù)數(shù)據(jù)包;數(shù)據(jù)包的最大采樣長度為65 536,其中包含AA55的字節(jié)長度;采樣時間表示一幀數(shù)據(jù)開始采集的時間;采樣頻率代表監(jiān)測數(shù)據(jù)的采樣頻率;起始通道代表和結(jié)束通道分別代表一幀數(shù)據(jù)中數(shù)據(jù)采集系統(tǒng)的開始通道和結(jié)束通道。
將數(shù)據(jù)庫布置在各個數(shù)據(jù)服務(wù)器上,由不同的IP地址進行區(qū)分。由監(jiān)測系統(tǒng)的設(shè)計要求建立系統(tǒng)的數(shù)據(jù)庫數(shù)據(jù)的存儲結(jié)構(gòu)。存儲的數(shù)據(jù)主要包括主軸轉(zhuǎn)速、電機轉(zhuǎn)速、風(fēng)速、溫度等數(shù)據(jù),由于采集的監(jiān)測數(shù)據(jù)非常大,數(shù)據(jù)庫存儲的信息很就可以達到TB數(shù)量級。
根據(jù)PostgreSQL數(shù)據(jù)庫的特點,把需要儲存的監(jiān)測數(shù)據(jù)先進行縱向劃分,然后進行橫向劃分??v向劃分是把采集到的機組數(shù)據(jù)保存在不同的數(shù)據(jù)庫中,每個數(shù)據(jù)庫存儲設(shè)定數(shù)量的監(jiān)測信息,同時建立一個風(fēng)場整體信息數(shù)據(jù)庫用來保存風(fēng)場全部監(jiān)測數(shù)據(jù)。橫向劃分將同一數(shù)據(jù)庫中每一機組的數(shù)據(jù)信息依據(jù)采集時間的不同存儲在不同的數(shù)據(jù)表內(nèi)。劃分之后的各子數(shù)據(jù)庫和監(jiān)測信息存儲表整體設(shè)計和數(shù)據(jù)信息存儲表結(jié)構(gòu)如圖4所示。將同一機組的不同監(jiān)測位置采集的實時在線監(jiān)測信息保存在風(fēng)場整體信息數(shù)據(jù)庫的實時數(shù)據(jù)表內(nèi),同時將監(jiān)測到的各機組數(shù)據(jù)保存在數(shù)據(jù)庫的相關(guān)歷史數(shù)據(jù)表內(nèi)。
表1 數(shù)據(jù)幀格式
為驗證監(jiān)測系統(tǒng)的性能,利用構(gòu)建的綜合試驗臺模擬風(fēng)機齒輪箱的工作平臺,進行數(shù)據(jù)采集及故障診斷分析并在前端瀏覽器實現(xiàn)實時顯示及頻譜分析。圖5為模擬單臺機組的運行監(jiān)測狀態(tài);圖6為模擬單臺機組實時振動波形圖。
根據(jù)以上論述設(shè)計的基于Websocket技術(shù)的風(fēng)電機組Web實時在線監(jiān)測系統(tǒng),它是根據(jù)目前風(fēng)電機組監(jiān)測系統(tǒng)中普遍存在的數(shù)據(jù)傳輸速度慢、功能單一的缺陷和弊端中開發(fā)的一套管理系統(tǒng),經(jīng)過多次測試,效果良好,工作性能穩(wěn)定、可靠,完全滿足設(shè)計需要。
圖4 各子數(shù)據(jù)庫和監(jiān)測信息存儲表整體設(shè)計
圖5 模擬單臺機組的運行監(jiān)測狀態(tài)
圖6 模擬單臺機組實時振動波形圖