馬廣慶,張玉林,郭亞亞,魏婭玲
(1.河北省地震局,河北 石家莊050021;2.河北省地震局承德地震監測中心站,河北 承德067000;3.四川省地震局,四川 成都610041)
目前,承德地震監測中心站的形變、地磁觀測儀器已更新為數字化觀測儀,如承德、豐寧和寬城地震臺的VP型寬頻帶傾斜儀、FHD-2B質子矢量磁力儀、SQ-70D數字水平擺、DSQ型水管傾斜儀和SS-Y型銦瓦棒伸縮儀等。使用者需要通過這些觀測儀器自帶的軟件(或儀器網址)才可以查看儀器記錄的原始數據,且操作過程繁瑣(張玉林等,2018)。基于上述問題,承德地震監測中心站擬研發一個基于Windows界面的實時監控系統,該系統能夠使承德地震監測中心站所有觀測儀器記錄的原始數據可以通過一個Windows界面進行實時查看,在此基礎上進一步研發基于Andriod系統的原始數據實時顯示系統,使原始數據實時查看界面從計算機界面變更為手機界面,實現隨時隨地均可查看儀器記錄數據的功能,為臺站儀器運維遠程監控提供軟件支撐。
應用程序需要并行獲取和顯示多臺儀器的記錄數據,因此需要并行調度各個并行的線程(程巖等,2010)。由于臺站觀測儀器分布在各處,不夠集中,為了臺站值守人員能夠更加方便地查看各個臺站儀器的運行狀態,將各個分散網址的臺站觀測儀器數據進行集中匯集,然后通過手機APP將分散的各個臺站觀測數據展現到手機界面中。該軟件采用C/S架構設計:C端即客戶端(即手機APP),負責展現儀器數據;S端即服務端,負責收集數據。服務端每一分鐘向各個儀器請求一次數據,并將數據保存起來,服務端會保存720分鐘(即12小時)的實時觀測數據。APP每分鐘向服務端請求指定儀器的數據,然后將數據以折線圖的形式展示。
手機APP不直接向儀器申請數據,其原因主要有三:一是儀器原因,為保證手機拿到的是最近12小時內的數據,而不只是當前或當天的數據,不僅可以避免凌晨查看到的數據曲線過短,還可以避免有的儀器因只能查看當前數據而導致手機APP需要等待很長時間才能看到波形圖;二是儀器有的時候會更新,手機APP也要隨著更新,這樣就需要將每個APP的用戶進行更新,故采用服務端,只需要更新服務端,讓服務端與更新的儀器進行適配就可以了;三是與APP的設計有關,可以僅通過服務端的修改而改變APP上儀器數據的展示方式。
承德地震監測中心站擁有14套觀測儀器,包括地磁絕對觀測FHD-2B儀器2套,VP型寬頻帶傾斜儀3套,SQ-70D水平擺觀測儀1套,DSQ型水管傾斜儀2套、SS-Y型銦瓦棒伸縮儀2套,TJ-II型體應變儀1套和WYY-1\RTP-II\ZKGD-3000M型氣象三要素儀各1套,共計45個測項。儀器拓撲結構如圖1所示。

圖1 承德地震監測中心站前兆儀器結構拓撲圖
儀器種類不同,數據來源也各不相同,這些儀器有的使用http協議在SVN內網發布數據,如FHD-2B等,有的需要使用Socket發送指令后再接收數據,如豐寧臺SQ-70D水平擺傾斜儀。數據來源多樣,形式變化多樣,應用程序需要不同命令來實現相應儀器的數據采集。利用http發布數據的儀器,應用程序需要使用http協議與觀測儀器進行通信,獲取儀器記錄數據,其主要過程是應用程序向儀器地址發送索取數據的“請求”,接收儀器收到請求之后返回“響應”和各種異常、錯誤情況。利用tcp發布數據的儀器,應用程序需要使用tcp協議與儀器建立Socket連接,通過Socket連接獲取數據,其主要過程是通過IP和端口與儀器建立連接,向儀器發送“請求”,接收儀器返回“響應”和各種異常、錯誤情況。儀器返回的數據都是混雜在通信協議各種表意符號中的,數據解析模塊可以將關注的數據解析出來。數據解析模塊分為兩個部分:處理html數據(即http協議返回的數據)和處理tcp協議返回數據。
為了降低儀器之間的影響,例如一臺儀器通信出問題而影響其它儀器數據的接收,各數據模塊運行于不同線程之中。通過數據鎖保證數據同步技術對系統性能造成較大影響,現代線程技術多采用Actor模型實現線程的調度,研究者利用這一技術實現各個線程通過相互傳遞消息來完成調度,這個消息多是通過原子(程序設計上通過底層保證同一時刻只有一個線程能訪問的變量)來實現線程間的過渡。因此系統采用Channel技術來實現Actor模型,在無鎖情況下通過消息傳遞,把數據從一個線程傳到其它線程(秦虹,2014)。
服務端設計為多個線程協同工作的模式,具體分為主線程、UI線程、計時線程、服務線程和下載線程。主線程負責服務各部分的協同調度工作及產生各個工作。UI線程是負責服務界面顯示的,服務對于界面的需求不大,但考慮使用方便性,還是制作了一個界面。計時線程是為了每間隔一分鐘向各個儀器請求數據的計時而設計的。服務線程是提供響應web請求的。下載線程是從各個儀器上下載數據信息的。當主線程啟動UI線程、計時線程和服務線程后,計時便開始了。然后主線程會每分鐘啟動下載線程一次,每臺儀器運行著一個下載線程。在下載線程中,數據從儀器中請求,并解析出其中的數據。解析出數據之后,下載線程通過Channel把數據傳遞給主線程,然后下載線程結束工作,直到下次再由主線程啟動。主線程會把數據轉發給UI線程,UI線程顯示數據并保存數據。服務線程接到Web請求后,通過Channel向UI線程發消息,然后UI將所請求的數據回復給服務線程。線程之間通過Channel技術運行數據交換。服務端保存著各個儀器720分鐘(即12個小時)的數據,這樣每次APP打開就能有完整的圖形出現。
手機APP端模塊在Android開發應用程序時主要使用Java語言。在采集數據過程中,需要網絡模塊和數據解析模塊(彭宏偉等,2010)。APP能夠實現導航條、菜單、儀器切換等功能,通過嵌入瀏覽器控件,打開對應的Web頁面,實現數據展現等功能,這種混合開發的技術路線也是目前軟件開發的主流選擇。
軟件展示數據的實現:WebView組件是專門用來瀏覽網頁的,在APP界面上添加WebView組件后,就可通過WebView的loadUrl方法來加載指定的網頁,同時將WebView的JavaScript的支持打開。通過:webview.getSettings().setJavaScriptEnabled(true)和webview.setWebChromeClient(new WebChromeClient())這兩個函數來獲得WebView的JavaScript的支持。
前端繪圖主要使用Ajax技術和ECharts組件。Ajax即“Asynchronous Javascript And XML”(異步JavaScript和XML),是指一種創建交互式網頁應用的網頁開發技術。Ajax在瀏覽器與Web服務器之間使用異步數據傳輸(HTTP請求),這樣就可使網頁從服務器請求少量的信息,而不是整個頁面。ECharts是一款由百度前端技術部開發的,基于Javascript的數據可視化圖表庫,提供直觀、生動、可交互、可個性化定制的數據可視化圖表。前端頁面使用Ajax向儀器數據服務發數據請求,當數據從儀器數據服務那里傳過來后,頁面再使用ECharts將其繪制到屏幕上。
數據下載//使用http協議下:
void httpDownload(std::string&url,std::string&target,(void*)(parseFunc*)(std::string&body));spawn httpDownload("http://儀器IP/html/DTSJ.HTM"
接收下載信號,并分發下載到各個儀器的下載線程:
void downloadData();
數據流控制主要有兩方面工作:一方面是通過上面的下載函數,在下達下載命令時將各個儀器處理分開;另一方面是通過函數實現在UI無事件時執行int idleActionCB()函數。

對于手機軟件開發來說,大小各異的手機屏幕尺寸帶來的麻煩不少。Web技術屏幕適配方面比較復雜。本研究采用MediaQueries(屏幕自適應)這種方法,在CSS中寫下不同屏幕下使用不同的CSS來實現屏幕適配,這個方式不但可以進行字體的適配還能實現不同界面顯示不同的樣式,多個屏幕(600px-900px)自適應代碼:<link rel="style sheet"media="screen and(min-width:600px)and(max-width:900px)"href="style.css"type="text/css"/>。用em和rem來代替px(像素點),em根據父標簽的字體大小來設置當前標簽的寬高或字體大小,rem是根據跟標簽的字體大小來適配當前標簽的寬高或字體大小,多用百分比來作為寬高的值。
系統以Windows64位系統為基礎,實現原始數據的實時采集、傳輸與存儲。系統軟件目前已經在承德地震監測中心站三個直屬臺站(寬城、豐寧、承德)投入使用,運行狀態良好,在河北省地震局無線內網范圍內可以隨時隨地查看原始數據運行狀態。該系統由基于Windows系統服務器端與基于Android系統APP端兩部分組成。服務器端提供整個承德地震監測中心站的所有數字化儀器原始數據采集、傳輸與存儲。手機APP端可根據臺站需要,生成三個直屬臺的手機APP軟件,每個臺值班員工安裝本臺相應的手機APP軟件,便可以在本單位內網范圍內隨時,隨地查看12小時內的原始數據實時監控曲線。服務器端運行效果如圖2所示。手機客戶端運行效果如圖3所示。

圖2 基于Windows系統服務器端運行效果

圖3 手機端儀器切換與部分原始數據實時監控曲線
本研究采用C/S架構,利用Java語言進行程序研發,以分為時間單位進行數據采集,利用channel技術進行數據流向控制,服務器端顯示實時原始數據的同時保存12小時內的原始數據,在手機APP端采用數據瀏覽器,可以隨時瀏覽原始數據實時曲線,目前已投入使用,系統有幾個優點:1)可以在內網覆蓋的范圍內隨時瀏覽本臺儀器原始數據觀測曲線及原始數據變化范圍。2)手機客戶端可以自由切換儀器類型,實現坐標系實時轉換,更好地展示12小時內原始數據實時動態。3)軟件設計過程中,沒有設計觀測曲線放縮功能,但在旋轉屏幕時,可以看到更好的曲線形態,缺點是截取完整的圖片比較困難。
軟件只能用于原始數據實時監控,不能對原始數據進行預處理,伴隨首都圈安全保障力度加大,原始數據需要隨時轉換以應用于分析會商,因此開發帶數據預處理的原始數據實時監控系統是未來發展的方向。