宋一凡,謝正源,宣 科,李 川,王季剛,劉功發(fā)
(中國科學(xué)技術(shù)大學(xué) 國家同步輻射實驗室,安徽 合肥 230029)
基于可調(diào)諧紅外激光的能源化學(xué)研究大型實驗裝置(Tunable Infrared Laser for Fundamentals of Energy Chemistry, FELiChEM)是由國家自然科學(xué)基金委員會支持的一個重大科研項目,由廈門大學(xué)、復(fù)旦大學(xué)、中國科學(xué)技術(shù)大學(xué)和中國科學(xué)院大連化學(xué)物理研究所共建。FELiChEM主要由可調(diào)諧紅外自由電子激光光源(IR-FEL)和3個實驗站組成[1-2]。實驗物理和工業(yè)控制系統(tǒng)(Experimental Physics and Industrial Control System, EPICS)是20世紀(jì)90年代初發(fā)展起來的大型分布式控制系統(tǒng)的軟件運行環(huán)境和開發(fā)平臺,廣泛應(yīng)用在國內(nèi)外的大科學(xué)裝置上[3-6]。IR-FEL裝置控制系統(tǒng)是基于EPICS的分布式控制系統(tǒng)[7-8]。
裝置在其運行過程中會產(chǎn)生大量與裝置運行相關(guān)的歷史數(shù)據(jù),這些存檔數(shù)據(jù)可用于裝置的性能分析和故障診斷,對裝置的性能提升和運行維護(hù)具有重要意義。EPICS社區(qū)發(fā)布了一系列歷史數(shù)據(jù)存檔軟件,如Channel Archiver、RDB Channel Archiver[9-10]和Archiver Appliance。其中Archiver Appliance是最新發(fā)布的數(shù)據(jù)存檔軟件,已應(yīng)用在國內(nèi)外多個加速器裝置中,如SLAC、NSLS-Ⅱ、ESS、HLS-Ⅱ等[11-13]。與EPICS社區(qū)其他數(shù)據(jù)存檔軟件相比,Archiver Appliance數(shù)據(jù)查詢性能更高,軟件管理更方便。因此,本文以Archiver Appliance作為數(shù)據(jù)存檔工具,設(shè)計和開發(fā)IR-FEL裝置數(shù)據(jù)存檔和查詢系統(tǒng),以滿足裝置調(diào)試和運行的需求。
Archiver Appliance由SLAC、BNL和MSU合作開發(fā)。Archiver Appliance的核心設(shè)計理念是數(shù)據(jù)多級存儲,即根據(jù)數(shù)據(jù)產(chǎn)生時間將歷史數(shù)據(jù)劃分為3個不同的數(shù)據(jù)存儲級別(表1)。內(nèi)置的數(shù)據(jù)遷移功能將采集到的數(shù)據(jù)首先存入位于讀寫速度最快的內(nèi)存中(短期存儲,short term store, STS),隨著時間的推移,逐步遷移至位于讀寫速度稍慢的本地硬盤(SSD)中(中期存儲,medium term store, MTS),最后數(shù)據(jù)全部存入讀寫速度最慢的網(wǎng)絡(luò)存儲(SAN)中(長期存儲,long term store, LTS)。一般,距離越近的數(shù)據(jù)檢索越頻繁,因此這樣的架構(gòu)可有效提升技術(shù)人員查詢歷史數(shù)據(jù)的效率。
表1 Archiver Appliance存儲級別Table 1 Storage level of Archiver Appliance
圖1 IR-FEL裝置數(shù)據(jù)存檔和查詢系統(tǒng)架構(gòu)圖Fig.1 Architecture of data archiving and query system of IR-FEL facility
IR-FEL裝置數(shù)據(jù)存檔和查詢系統(tǒng)采用了前、后端分離的架構(gòu),前端為客戶端,運行在瀏覽器中,負(fù)責(zé)網(wǎng)頁的內(nèi)容展示;后端為服務(wù)端,運行在服務(wù)器上,負(fù)責(zé)提供頁面動態(tài)渲染需要的數(shù)據(jù),系統(tǒng)架構(gòu)如圖1所示。系統(tǒng)初始數(shù)據(jù)源是控制系統(tǒng)中的IOC,但經(jīng)過了不同的處理流程。在后端,Archiver Appliance中數(shù)據(jù)采集引擎(Engine)將采集到的數(shù)據(jù)保存在磁盤中,內(nèi)置的遷移模塊完成了不同存儲級別之間的數(shù)據(jù)自動遷移,數(shù)據(jù)檢索模塊(Data Retrieval)為前端提供了數(shù)據(jù)查詢的HTTP/JSON接口。此外,開發(fā)實時數(shù)據(jù)推送(Status Push)程序,通過WebSocket協(xié)議將IOC中記錄值推送至前端網(wǎng)頁,實現(xiàn)記錄值的實時顯示。在前端,基于Vue.js等框架開發(fā)單頁應(yīng)用(Single Page Application,SPA),該頁面提供了豐富的數(shù)據(jù)查詢功能,具有良好的用戶體驗。
Archiver Appliance的Data Retrieval模塊內(nèi)置數(shù)據(jù)查詢接口,該接口提供強(qiáng)大的查詢功能,包括豐富的查詢參數(shù)、多樣的數(shù)據(jù)格式,并支持?jǐn)?shù)據(jù)處理。以如下請求為例:
http:∥irfel_aa_host:17668/retrieval/data/getData.json
?pv=IRFEL:DM:G1:ai
&from=2019-04-07T08:34:30.000Z
&to=2019-04-08T08:34:53.222Z
這一請求用于查詢IR-FEL裝置中1 d的G1劑量探測器數(shù)據(jù),其中http:∥irfel_aa_host:17668是IR-FEL Archiver Appliance中DataRetrieval模塊的HTTP地址,/retrieval/data/getData是數(shù)據(jù)查詢接口,.json指明返回數(shù)據(jù)格式為JSON,pv=IRFEL:DM:G1:ai指明查詢PV名,from=2019-04-07T08:34:30.000Z&to=2019-04-08T08:34:53.222Z指明查詢起止時間,時間格式遵循ISO 8601標(biāo)準(zhǔn),.json可換為其他數(shù)據(jù)格式,滿足不同應(yīng)用程序的需要。本文直接使用Archiver Appliance作為歷史數(shù)據(jù)查詢的服務(wù)端程序,為方便與前端交互,使用JSON格式作為返回數(shù)據(jù)格式。
在裝置運行過程中,操作人員一般關(guān)心一些物理量的實時狀態(tài),如束流流強(qiáng)、輻射劑量等,在控制系統(tǒng)中,這些物理量均對應(yīng)于EPICS的1個記錄,現(xiàn)有的數(shù)據(jù)存檔軟件為提高性能,一般設(shè)計有數(shù)據(jù)庫寫入緩沖區(qū)(緩沖時間默認(rèn)值一般為30 s),在采集IOC內(nèi)數(shù)據(jù)后并不會將其實時存入數(shù)據(jù)庫,而是先存入緩沖區(qū),依照寫入周期將緩沖區(qū)內(nèi)數(shù)據(jù)寫入數(shù)據(jù)庫。因此,若客戶端中的Operation Status頁面的數(shù)據(jù)讀取自數(shù)據(jù)庫,那么會存在至多30 s的延時,運行人員無法從網(wǎng)頁獲得裝置的實時狀態(tài)。為解決這一問題,開發(fā)Status Push程序,通過WebSocket的方式把IOC的數(shù)據(jù)直接推送給網(wǎng)頁客戶端,消除時間延時。
WebSocket是一在單個TCP連接上進(jìn)行全雙工通信的協(xié)議,允許服務(wù)端主動向客戶端推送數(shù)據(jù),簡化了兩者之間的數(shù)據(jù)交換??蛻舳?瀏覽器)與服務(wù)端進(jìn)行通信時,在使用HTTP協(xié)議的情況下,每次必須由瀏覽器主動發(fā)起數(shù)據(jù)請求,瀏覽器返回響應(yīng),連接存續(xù)時間短;在使用WebSocket協(xié)議的情況下,兩者完成1次握手后一直保持連接,在連接存續(xù)期間,可相互進(jìn)行數(shù)據(jù)傳輸,直至一端關(guān)閉連接。
實時數(shù)據(jù)推送程序的核心是基于Websocketd的WebSocket服務(wù)器,Websocketd可將標(biāo)準(zhǔn)輸入(stdin)轉(zhuǎn)化為 WebSocket的輸入,標(biāo)準(zhǔn)輸出(stdout)轉(zhuǎn)化為WebSocket的輸出,不限制后臺腳本語言[14-15]。采用Python語言基于PyEPICS庫開發(fā)了Status Push程序,該程序與給定列表中的PV建立Channel Access連接,當(dāng)PV中數(shù)據(jù)更新時,將其打印至標(biāo)準(zhǔn)輸出(stdout),Websocketd將其轉(zhuǎn)化為WebSocket消息,推送給前端。
此外,系統(tǒng)在服務(wù)端上層加入Nginx作為反向代理服務(wù)器,這一設(shè)計主要實現(xiàn)了以下功能:便于實現(xiàn)客戶端瀏覽器的跨域資源請求;整合了多個服務(wù)端程序,為數(shù)據(jù)查詢提供統(tǒng)一的接口,便于客戶端程序開發(fā),也便于服務(wù)端與客戶端的橫向擴(kuò)展;通過Nginx中的geo模塊實現(xiàn)了不同訪問者IP的返回內(nèi)容控制,提高了系統(tǒng)的安全性。
網(wǎng)頁客戶端提供了數(shù)據(jù)查詢與可視化的功能,是技術(shù)人員與存檔系統(tǒng)最便捷的交互方式。Archiver Appliance已提供基于plotly的Web客戶端,但其網(wǎng)頁功能和UI設(shè)計均無法滿足要求。因此,本文基于Vue.js框架開發(fā)了一單頁應(yīng)用,其中包含了數(shù)據(jù)的顯示、查詢、統(tǒng)計和下載功能。
當(dāng)用戶切換單頁應(yīng)用中的子頁面時,瀏覽器通過AJAX的方式向后端請求數(shù)據(jù),并刷新該子頁面,無需刷新整個頁面,提升了頁面響應(yīng)速度,優(yōu)化了用戶使用體驗。Vue.js是一漸進(jìn)式的JavaScript框架,用于開發(fā)單頁應(yīng)用。與其他同類框架相比,Vue.js更易用、靈活和高效。Vue.js采用單文件組件的形式劃分網(wǎng)頁應(yīng)用,每個單文件組件的Vue文件中同時包含HTL、JavaScript和CSS代碼,實現(xiàn)了網(wǎng)頁應(yīng)用的模塊化開發(fā)。此外,Vue.js生態(tài)系統(tǒng)中還包括大量第三方庫,豐富了Vue.js的功能。
歷史數(shù)據(jù)查詢頁面包含了兩種不同的查詢方式,分別是定制查詢和自由查詢,分別對應(yīng)了兩個子頁面,如圖2、3所示。定制查詢子頁面左側(cè)顯示PV分組樹,用于PV的查找和勾選;自由查詢子頁面中,用戶可在左側(cè)文本框內(nèi)自由輸入PV名稱進(jìn)行查詢。兩個子頁面右側(cè)是相似數(shù)據(jù)可視化部分,展示給定時間范圍的數(shù)據(jù)變化曲線,并提供了原始數(shù)據(jù)查看、統(tǒng)計信息顯示和數(shù)據(jù)下載功能。
圖2 歷史數(shù)據(jù)定制查詢頁面Fig.2 Customized query page of historical data
圖3 歷史數(shù)據(jù)自由查詢頁面Fig.3 Free query page of historical data
定制查詢子頁面中的PV分組樹是根據(jù)PV名自動生成的,無需手動配置。IR-FEL控制系統(tǒng)中,所有PV名遵循嚴(yán)格的分級分段命名規(guī)則,即“系統(tǒng)名:設(shè)備名:通道名(可選):參量名:記錄類型”。定制查詢子頁面被加載后,首先調(diào)用Archiver Appliance的getAllPVs接口獲得所有PV列表,按照符號對PV名分段,各段名稱標(biāo)識了該P(yáng)V所屬的系統(tǒng),根據(jù)從屬關(guān)系組成PV分組樹。圖2中的樹狀結(jié)構(gòu)有共同的根節(jié)點IRFEL,表明所有的PV均來自IRFEL控制系統(tǒng),下級是各子系統(tǒng),如IRFEL:DM為輻射劑量檢測系統(tǒng),IRFEL:VA為真空系統(tǒng),IRFEL:BD為束流診斷系統(tǒng)。將根節(jié)點到底層葉節(jié)點路徑上的節(jié)點名連接,即為完整的PV名。在每個底層節(jié)點左側(cè)均有一復(fù)選框,用于勾選PV名。如圖2中用戶勾選了IRFEL:DM:G1:ai、IRFEL:DM:G2:ai和IRFEL:DM:N1:ai 3個PV,之后點擊Draw Line Chart按鈕,右側(cè)將顯示這3個PV一段時間內(nèi)的PV變化曲線。
由于不同子系統(tǒng)被控變量值量級差異較大,如真空值常小于10-5Pa,而磁鐵電源值常大于1 A,若在同一坐標(biāo)軸中顯示,則不易觀察量級較小的變量值的變化特征。針對這一問題,設(shè)計自由查詢子頁面,用戶可手動配置PV并根據(jù)需要進(jìn)行分組。分組輸入框上方的“Add”和“Remove”按鈕用來添加和刪除分組,每個group中的“+”和“-”按鈕用來添加和刪除組中的PV,“l(fā)og”單選框用來將對應(yīng)分組的縱軸設(shè)置為對數(shù)軸。每個group中的所有PV共享同一縱軸。如在圖3中建立Group1和Group2兩個分組,分別在兩個坐標(biāo)軸中顯示束流流強(qiáng)和輻射劑量的變化曲線。
圖4為運行狀態(tài)顯示頁面,頁面上方顯示了IR-FEL裝置的運行參數(shù)和狀態(tài),目前主要顯示后端服務(wù)器通過WebSocket協(xié)議推送的束流流強(qiáng)和束流能量實時值,頁面下方顯示最近24 h的束流流強(qiáng)的變化。IR-FEL裝置使用流強(qiáng)變壓器(current transformer,CT)測量直線加速器中束流流強(qiáng),控制系統(tǒng)中IRFEL:BD:CT:CT1:I和IRFEL:BD:CT:CT2:I兩個記錄分別表示電子槍出口的流強(qiáng)和直線加速器末端的流強(qiáng)。圖中紅色曲線和藍(lán)色曲線分別表示這兩個記錄最近24 h的數(shù)據(jù)變化曲線,圖中時刻兩處流強(qiáng)實時值CT-1和CT-2分別為0.025 A和0.005 A,兩段直線加速器的束流能量實時值分別為16.25 MeV和46.00 MeV。
圖4 實時數(shù)據(jù)顯示頁面Fig.4 Display page of real-time data
本文描述了IR-FEL裝置數(shù)據(jù)存檔和查詢系統(tǒng)的設(shè)計與開發(fā)。系統(tǒng)使用了前、后端分離的軟件架構(gòu)風(fēng)格,使用Archiver Appliance作為歷史數(shù)據(jù)存檔軟件。在后端,設(shè)計了歷史數(shù)據(jù)查詢和實時數(shù)據(jù)推送兩種服務(wù)端程序,并使用Nginx反向代理服務(wù)器提供了統(tǒng)一的數(shù)據(jù)查詢接口。在前端,基于Vue.js開發(fā)了單頁應(yīng)用,提供了豐富的數(shù)據(jù)查詢功能,頁面中包含了PV分組樹和自由查詢功能,優(yōu)化了用戶使用體驗。系統(tǒng)性能穩(wěn)定、功能完善,滿足了IR-FEL裝置調(diào)試和運行的需求。