强 杰 刘功发
(中国科学技术大学国家同步辐射实验室 合肥 230029)
合肥光源是第二代专用同步辐射光源,其数据存档系统用于存储合肥光源的束流运行参数、实时设备数据和故障报警记录等,是合肥光源控制系统中的关键部分。合肥光源控制系统是基于实验物理和工业控制系统(EPICS,Experimental Physics and Industrial Control System)的分布式控制系统,EPICS提供的以文件为基础的存档工具 Channel Archiver由于在数据查询和文件管理方面存在不足,已逐渐为基于关系数据库的存档工具 RDB Channel Archiver所取代。目前的合肥光源数据存档系统以Oracle为基础,通过JSP开发的网页对采集的数据进行查询和统计,其初步应用表明,该系统可以帮助运行和研究人员快捷高效地处理和分析数据,能满足合肥光源机器运行和研究的需要。
为弥补EPICS自带的Channel Archiver工具集的不足,同时使用 Java编程语言丰富的库函数和Oracle数据库的良好功能特性,本存档系统将改变数据采集引擎、数据存储形式及应用开发方式。引擎采集到的数据不再按照特定格式以文本形式存入磁盘,而是存入Oracle关系型数据库中。Oracle数据库提供强大的检索计算功能,并为Java程序提供通用接口,方便了应用程序对数据的利用,有利于应用程序的编写和系统的后续扩展。
合肥光源数据存档系统的建立和应用开发涉及EPICS、RDB Channel Archiver、Oracle和JSP等技术。
EPICS是广泛用于粒子加速器等大型实验物理装置的分布式控制系统开发平台,它具有分布式体系结构,采用Client/Server和Publish/Subscribe模式按CA(Channel Access)网络协议进行计算机间的通信[1]。
RDB Channel Archiver是基于EPICS的数据存档工具[2]。利用其从合肥光源控制系统的输入输出控制器(IOC,Input/Output Controller)采集数据,然后把数据存储到Oracle数据库中。
Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库,是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。
JSP技术是将Java代码嵌入在HTML代码中,服务器端在页面被客户端请求以后对这些 Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器[3]。
合肥光源数据库系统分为数据采集、数据存档、网页应用功能模块,具体结构如图1所示[2]。各个功能模块介绍如下:
数据采集:IOC中保存着监控设备相关的各种运行数据,是整个系统的数据来源;Archive Engine通过CA协议从IOC采集数据,然后把数据存储在Oracle数据库中。
数据存档:Oracle数据库以表的形式保存着Archive Engine采集到的数据,以方便数据查询。
网页应用:网页应用采用Browser/Server方式。网页服务器中采用JSP技术,生成和运行动态的、交互的、高性能的网页服务器应用程序,其任务是接受用户的请求,并按要求生成标准的网页送给客户端浏览器,达到人机交互的目的。
图1 系统结构图Fig.1 System structure.
在数据存档系统中,关系数据库采用Oracle10G 10.2.0.1版本,运行平台为Dell Optiplex 990,操作系统为CentOS release5.7。关系数据库中表的设计尤为关键,其关系到数据管理效率及应用程序利用数据是否便捷。本系统中的表主要根据RDB Channel Archiver的参考文档进行设计,并利用了Oracle中的partition技术,主要包括采集模式表(smpl_mode)、通道表(channel)、通道组表(chan_grp)、采集引擎表(smpl_eng)、状态表(status)、采集数据表(sample)、状态定义表(enum_metadata)等。其中最重要的是采集数据表,系统中采集到的数据都是存放在sample表中,其结构如下:
表1 采集数据表Table 1 Sample table.
利用 RDB Channel Archiver中的 Archive Engine模块从IOC中采集数据。Archive Engine启动后读取xml格式的配置文件,根据配置文件中提供的过程变量(PV)信息和数据库信息,与IOC建立起基于CA的通道连接。连接完成后,按照scan或monitor模式向IOC发送数据采集请求。当接收到从 IOC传送回的数据时,存储引擎将数据存放到Oracle数据库对应的表中。sample表中数据如下:
表2 Sample表中数据Table 2 Data of sample table.
表2中的数据是采集到的合肥光源储存环束流流强数据,sample表中主要字段有:channel_id、smpl_time、float_val,其中channel_id表示通道编号,为int型数据,是channel表的外键;smpl_time是timestamp格式的时间戳,表示采集时间;float_val表示流强大小,是float型的数据。
在Java 网页应用程序中访问Oracle的方式主要有:(1)通过数据库本身的JDBC Driver连接到数据库;(2)通过JDBC-ODBC桥连接到数据库。在本系统中,使用基于第一种方式的c3p0连接池技术连接Oracle数据库。c3p0连接池技术是Hibernate推荐的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和 Statement 池的 DataSources对象[4]。Hibernate是一个开放源代码的对象关系映射框架,它对 JDBC进行了非常轻量级的对象封装,使得Java程序员可以方便地使用对象编程思维来操纵数据库[5]。
在上述配置中,Hibernate根据配置文件生成连接,再交给c3p0管理。
数据库查询通过SQL语句来实现。针对不同的用户需求,可以通过不同的SQL语句完成相应的功能。在本系统中主要通过一个DAO类实现与Oracle的数据查询,主要代码如下:
该方法返回执行SQL语句后的结果集,然后可以把结果集应用在程序中。如需要查询channel_id=2857的记录,则该SQL语句为:select *from sample channel_id=2857,然后把该语句交给DAO类中的execsql方法处理,就可以得到需求的结果集。
网页应用程序采用JSP作为开发工具。JSP具备了Java技术的简单易用、完全面向对象、平台无关性、安全可靠、主要面向因特网等所有特点。
本系统主要使用JSP中的模型1来开发网页应用程序,其结构如图2所示。JSP页面独自响应请求并将处理结果返回给客户,所有的数据通过JavaBean来处理,JSP实现页面的显示。
图2 JSP的模型1架构Fig.2 Model1 of JSP.
目前主要针对采集的合肥光源储存环束流流强、运行模式等数据进行了初步的应用开发,完成的应用有合肥光源的实时状态显示、历史状态查询、运行状态统计等。后续还将开发合肥光源的故障自动分析与诊断、报警信息的短信发布等功能。
运行状态统计查询首先通过 SQL查询对应时间段内某状态的记录条数,然后将记录条数和采集间隔相乘,其次把得到的值做时间转换,则可得到小时制的状态持续时间,不同的状态根据此法依次算出持续时间,最后经一定计算,得到每个状态所占百分比,这样就得到了整个运行状态的统计信息。
故障自动分析与诊断首先要研究同步辐射光源故障事件分类的策略,这是实现自动化故障诊断的基础。故障事件是指同步辐射光源运行在非正常状态,影响用户的正常使用,即故障事件直接与同步辐射光源的可用性相关。再次研究粒子同步辐射光源故障事件与报警信息之间的相关性,以实现故障原因的快速定位。最后研究基于关系数据库的同步辐射光源性能分析及处理方法。
图3为合肥光源的历史状态图,可以查询指定时间范围内光源的运行状态。图4为合肥光源的运行状态统计图,工作人员可以方便地得到指定时间范围内光源的运行状态统计结果,提高了合肥光源的信息管理水平,也与“中国科学院重大科技基础设施信息管理平台”的要求相一致[6]。图5为合肥光源的束流状态过程统计图,它呈现了24 h内束流状态的迭代变换过程,方便了运行人员对运行状态的监测。
图3 合肥光源历史状态图Fig.3 History status of HLS.
图4 合肥光源运行状态统计Fig.4 Statistics of HLS status.
图5 合肥光源的束流状态过程统计图Fig.5 HLS beam current state of the process.
以关系数据库Oracle为基础建立的合肥光源数据存档系统,在数据查询和文件管理方面克服了原来以文件为基础的数据存档系统的缺点,方便了应用程序的功能扩展。目前完成的运行状态统计等初步应用表明,该系统可以帮助运行和研究人员快捷高效地处理和分析数据,能满足合肥光源机器运行和机器研究的需要。
致谢 真诚感谢中国科学技术大学电子工程和信息科学系的袁平波老师在 Oracle数据库的设计和使用等方面给予的帮助。
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]. 北京: 电子工业出版社,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