強 杰 劉功發(fā)
(中國科學技術大學國家同步輻射實驗室 合肥 230029)
合肥光源是第二代專用同步輻射光源,其數(shù)據(jù)存檔系統(tǒng)用于存儲合肥光源的束流運行參數(shù)、實時設備數(shù)據(jù)和故障報警記錄等,是合肥光源控制系統(tǒng)中的關鍵部分。合肥光源控制系統(tǒng)是基于實驗物理和工業(yè)控制系統(tǒng)(EPICS,Experimental Physics and Industrial Control System)的分布式控制系統(tǒng),EPICS提供的以文件為基礎的存檔工具 Channel Archiver由于在數(shù)據(jù)查詢和文件管理方面存在不足,已逐漸為基于關系數(shù)據(jù)庫的存檔工具 RDB Channel Archiver所取代。目前的合肥光源數(shù)據(jù)存檔系統(tǒng)以Oracle為基礎,通過JSP開發(fā)的網(wǎng)頁對采集的數(shù)據(jù)進行查詢和統(tǒng)計,其初步應用表明,該系統(tǒng)可以幫助運行和研究人員快捷高效地處理和分析數(shù)據(jù),能滿足合肥光源機器運行和研究的需要。
為彌補EPICS自帶的Channel Archiver工具集的不足,同時使用 Java編程語言豐富的庫函數(shù)和Oracle數(shù)據(jù)庫的良好功能特性,本存檔系統(tǒng)將改變數(shù)據(jù)采集引擎、數(shù)據(jù)存儲形式及應用開發(fā)方式。引擎采集到的數(shù)據(jù)不再按照特定格式以文本形式存入磁盤,而是存入Oracle關系型數(shù)據(jù)庫中。Oracle數(shù)據(jù)庫提供強大的檢索計算功能,并為Java程序提供通用接口,方便了應用程序對數(shù)據(jù)的利用,有利于應用程序的編寫和系統(tǒng)的后續(xù)擴展。
合肥光源數(shù)據(jù)存檔系統(tǒng)的建立和應用開發(fā)涉及EPICS、RDB Channel Archiver、Oracle和JSP等技術。
EPICS是廣泛用于粒子加速器等大型實驗物理裝置的分布式控制系統(tǒng)開發(fā)平臺,它具有分布式體系結構,采用Client/Server和Publish/Subscribe模式按CA(Channel Access)網(wǎng)絡協(xié)議進行計算機間的通信[1]。
RDB Channel Archiver是基于EPICS的數(shù)據(jù)存檔工具[2]。利用其從合肥光源控制系統(tǒng)的輸入輸出控制器(IOC,Input/Output Controller)采集數(shù)據(jù),然后把數(shù)據(jù)存儲到Oracle數(shù)據(jù)庫中。
Oracle是以高級結構化查詢語言(SQL)為基礎的大型關系數(shù)據(jù)庫,是目前最流行的客戶/服務器(CLIENT/SERVER)體系結構的數(shù)據(jù)庫之一。
JSP技術是將Java代碼嵌入在HTML代碼中,服務器端在頁面被客戶端請求以后對這些 Java代碼進行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器[3]。
合肥光源數(shù)據(jù)庫系統(tǒng)分為數(shù)據(jù)采集、數(shù)據(jù)存檔、網(wǎng)頁應用功能模塊,具體結構如圖1所示[2]。各個功能模塊介紹如下:
數(shù)據(jù)采集:IOC中保存著監(jiān)控設備相關的各種運行數(shù)據(jù),是整個系統(tǒng)的數(shù)據(jù)來源;Archive Engine通過CA協(xié)議從IOC采集數(shù)據(jù),然后把數(shù)據(jù)存儲在Oracle數(shù)據(jù)庫中。
數(shù)據(jù)存檔:Oracle數(shù)據(jù)庫以表的形式保存著Archive Engine采集到的數(shù)據(jù),以方便數(shù)據(jù)查詢。
網(wǎng)頁應用:網(wǎng)頁應用采用Browser/Server方式。網(wǎng)頁服務器中采用JSP技術,生成和運行動態(tài)的、交互的、高性能的網(wǎng)頁服務器應用程序,其任務是接受用戶的請求,并按要求生成標準的網(wǎng)頁送給客戶端瀏覽器,達到人機交互的目的。
圖1 系統(tǒng)結構圖Fig.1 System structure.
在數(shù)據(jù)存檔系統(tǒng)中,關系數(shù)據(jù)庫采用Oracle10G 10.2.0.1版本,運行平臺為Dell Optiplex 990,操作系統(tǒng)為CentOS release5.7。關系數(shù)據(jù)庫中表的設計尤為關鍵,其關系到數(shù)據(jù)管理效率及應用程序利用數(shù)據(jù)是否便捷。本系統(tǒng)中的表主要根據(jù)RDB Channel Archiver的參考文檔進行設計,并利用了Oracle中的partition技術,主要包括采集模式表(smpl_mode)、通道表(channel)、通道組表(chan_grp)、采集引擎表(smpl_eng)、狀態(tài)表(status)、采集數(shù)據(jù)表(sample)、狀態(tài)定義表(enum_metadata)等。其中最重要的是采集數(shù)據(jù)表,系統(tǒng)中采集到的數(shù)據(jù)都是存放在sample表中,其結構如下:
表1 采集數(shù)據(jù)表Table 1 Sample table.
利用 RDB Channel Archiver中的 Archive Engine模塊從IOC中采集數(shù)據(jù)。Archive Engine啟動后讀取xml格式的配置文件,根據(jù)配置文件中提供的過程變量(PV)信息和數(shù)據(jù)庫信息,與IOC建立起基于CA的通道連接。連接完成后,按照scan或monitor模式向IOC發(fā)送數(shù)據(jù)采集請求。當接收到從 IOC傳送回的數(shù)據(jù)時,存儲引擎將數(shù)據(jù)存放到Oracle數(shù)據(jù)庫對應的表中。sample表中數(shù)據(jù)如下:
表2 Sample表中數(shù)據(jù)Table 2 Data of sample table.
表2中的數(shù)據(jù)是采集到的合肥光源儲存環(huán)束流流強數(shù)據(jù),sample表中主要字段有:channel_id、smpl_time、float_val,其中channel_id表示通道編號,為int型數(shù)據(jù),是channel表的外鍵;smpl_time是timestamp格式的時間戳,表示采集時間;float_val表示流強大小,是float型的數(shù)據(jù)。
在Java 網(wǎng)頁應用程序中訪問Oracle的方式主要有:(1)通過數(shù)據(jù)庫本身的JDBC Driver連接到數(shù)據(jù)庫;(2)通過JDBC-ODBC橋連接到數(shù)據(jù)庫。在本系統(tǒng)中,使用基于第一種方式的c3p0連接池技術連接Oracle數(shù)據(jù)庫。c3p0連接池技術是Hibernate推薦的JDBC連接池,它在lib目錄中與Hibernate一起發(fā)布,包括了實現(xiàn)jdbc3和jdbc2擴展規(guī)范說明的Connection 和 Statement 池的 DataSources對象[4]。Hibernate是一個開放源代碼的對象關系映射框架,它對 JDBC進行了非常輕量級的對象封裝,使得Java程序員可以方便地使用對象編程思維來操縱數(shù)據(jù)庫[5]。
在上述配置中,Hibernate根據(jù)配置文件生成連接,再交給c3p0管理。
數(shù)據(jù)庫查詢通過SQL語句來實現(xiàn)。針對不同的用戶需求,可以通過不同的SQL語句完成相應的功能。在本系統(tǒng)中主要通過一個DAO類實現(xiàn)與Oracle的數(shù)據(jù)查詢,主要代碼如下:
該方法返回執(zhí)行SQL語句后的結果集,然后可以把結果集應用在程序中。如需要查詢channel_id=2857的記錄,則該SQL語句為:select *from sample channel_id=2857,然后把該語句交給DAO類中的execsql方法處理,就可以得到需求的結果集。
網(wǎng)頁應用程序采用JSP作為開發(fā)工具。JSP具備了Java技術的簡單易用、完全面向對象、平臺無關性、安全可靠、主要面向因特網(wǎng)等所有特點。
本系統(tǒng)主要使用JSP中的模型1來開發(fā)網(wǎng)頁應用程序,其結構如圖2所示。JSP頁面獨自響應請求并將處理結果返回給客戶,所有的數(shù)據(jù)通過JavaBean來處理,JSP實現(xiàn)頁面的顯示。
圖2 JSP的模型1架構Fig.2 Model1 of JSP.
目前主要針對采集的合肥光源儲存環(huán)束流流強、運行模式等數(shù)據(jù)進行了初步的應用開發(fā),完成的應用有合肥光源的實時狀態(tài)顯示、歷史狀態(tài)查詢、運行狀態(tài)統(tǒng)計等。后續(xù)還將開發(fā)合肥光源的故障自動分析與診斷、報警信息的短信發(fā)布等功能。
運行狀態(tài)統(tǒng)計查詢首先通過 SQL查詢對應時間段內某狀態(tài)的記錄條數(shù),然后將記錄條數(shù)和采集間隔相乘,其次把得到的值做時間轉換,則可得到小時制的狀態(tài)持續(xù)時間,不同的狀態(tài)根據(jù)此法依次算出持續(xù)時間,最后經一定計算,得到每個狀態(tài)所占百分比,這樣就得到了整個運行狀態(tài)的統(tǒng)計信息。
故障自動分析與診斷首先要研究同步輻射光源故障事件分類的策略,這是實現(xiàn)自動化故障診斷的基礎。故障事件是指同步輻射光源運行在非正常狀態(tài),影響用戶的正常使用,即故障事件直接與同步輻射光源的可用性相關。再次研究粒子同步輻射光源故障事件與報警信息之間的相關性,以實現(xiàn)故障原因的快速定位。最后研究基于關系數(shù)據(jù)庫的同步輻射光源性能分析及處理方法。
圖3為合肥光源的歷史狀態(tài)圖,可以查詢指定時間范圍內光源的運行狀態(tài)。圖4為合肥光源的運行狀態(tài)統(tǒng)計圖,工作人員可以方便地得到指定時間范圍內光源的運行狀態(tài)統(tǒng)計結果,提高了合肥光源的信息管理水平,也與“中國科學院重大科技基礎設施信息管理平臺”的要求相一致[6]。圖5為合肥光源的束流狀態(tài)過程統(tǒng)計圖,它呈現(xiàn)了24 h內束流狀態(tài)的迭代變換過程,方便了運行人員對運行狀態(tài)的監(jiān)測。
圖3 合肥光源歷史狀態(tài)圖Fig.3 History status of HLS.
圖4 合肥光源運行狀態(tài)統(tǒng)計Fig.4 Statistics of HLS status.
圖5 合肥光源的束流狀態(tài)過程統(tǒng)計圖Fig.5 HLS beam current state of the process.
以關系數(shù)據(jù)庫Oracle為基礎建立的合肥光源數(shù)據(jù)存檔系統(tǒng),在數(shù)據(jù)查詢和文件管理方面克服了原來以文件為基礎的數(shù)據(jù)存檔系統(tǒng)的缺點,方便了應用程序的功能擴展。目前完成的運行狀態(tài)統(tǒng)計等初步應用表明,該系統(tǒng)可以幫助運行和研究人員快捷高效地處理和分析數(shù)據(jù),能滿足合肥光源機器運行和機器研究的需要。
致謝 真誠感謝中國科學技術大學電子工程和信息科學系的袁平波老師在 Oracle數(shù)據(jù)庫的設計和使用等方面給予的幫助。
1 EPICS homepage[OL]. http://www.aps.anl.gov/epics/
2 Kay Kasemir. RDB Channel Archiver[OL].http://cs-studio.sourceforge.net/docbook/ch10.html#fig_ar chive
3 孫鑫. Servlet/JSP深入詳解[M]. 北京: 電子工業(yè)出版社,2010: 297–298 SUN Xin. Servlet/JSP depth explain [M]. Beijing:Publishing House of Electronics Industry, 2010: 297–298
4 c3p0:JDBCDataSources/ResourcePools[OL].http://sourceforge.net/projects/c3p0
5 hibernate[OL]. http://www.hibernate.org/
6 中國科學院重大科技基礎設施[OL].
http://www.lssf.cas.cn
Major scientific and technological infrastructure of
Chinese Academy[OL]. http://www.lssf.cas.cn