产品与方案
基于面向对象的组态软件实时数据库的设计
马华兵1 张齐2
1.华南理工大学 计算机软件学院 广州 510640
2.华南理工大学 计算机科学与工程学院 广州 510640
摘 要 本文介绍了基于面向对象技术的组态软件实时数据库系统的设计思想,在面向对象思想指导下,针对实时数据库的特点,提出一种利用设计模式缓存数据的方法,提高了访问效率;给出实时数据库和其他应用的接口实现方式和通信方法,由此建立的实时数据库具有实时性、正确性和一致性。关键词 组态软件;实时数据库;设计模式;面向对象;XML
引言
实时数据库的设计是组态软件的核心和关键。实时数据库及时准确地获取现场数据是整个控制系统正常工作的基本前提, 同时实时数据库管理系统是实时数据库联系图形系统、历史数据库系统、报表系统和报警系统的桥梁和纽带[1]。本文充分利用面向对象的各种先进思想和技术进行实时数据库设计,提高实时数据库的时效性、高效性、易维护性和开放性。
件实时数据库要建立一套完成数据采集、实时数据、历史数据和统计数据存储管理的功能模块,为用户提供接口,使用户能够对来自现场控制系统或人工键入的数据进行分析处理,并能对控制系统进行反馈控制输出,为实现生产过程的先进控制及优化或其他应用提供数据服务。
1 实时数据库设计
1.1 实时数据库结构
组态软件通过通信程序从现场设备获得实时数据,对数据进行必要的加工后,一方面以图形的方式直观地显示在计算机屏幕上;另一方面按照组态要求和操作人员指令将控制数据送给I/O设备,对其实施控制或调整控制参数(见图1)。
图1 系统结构图
1.2.1 实时数据库存储策略
设计实时数据库系统时,需要处理时空矛盾,此时应优先考虑效率的要求[2]。采用关系数据库系统、文件
管理系统和内存缓冲区三者相结合的方法,利用多种存
1.2 实时数据库设计
组态软件的核心就是对实时数据进行管理,组态软
64
信息通信技术
储介质来构造实时数据库系统,从而满足组态软件对实时性的要求[3]。在进行实时数据库存储时,主要依据以下原则:
1) 采用文件管理系统直接存储需长期保存的、相对稳定的非共享数据,主要是组态软件的参数数据。
2) 采用内存缓冲区存取需频繁访问的、经常变化的实时数据。
3) 采用关系数据库存取现场设备的历史数据和数据量大而组态软件无特殊要求的共享数据等。1.2.2 组态参数数据模型
组态参数作为联系开发系统和运行系统的纽带,描述了工程得信息如设备、采集点描述工程信息如设备、变量、图形等等的信息,以供运行系统加载、识别,生成现场监控画面的数据。组态参数包括以下几个关键数据类型(见图2)。
图2 组态参数对象关系
1) 工程类(Project):组态系统支持多工程的组态和运行,组态类对工程的属性和相关操作进行封装。
2) 站点类(Site):封装了站点的参数信息和相关操作,逻辑上和一台硬件设备对应。
3) 采集点类(GatherPoint):采集点对应于采集硬件设备的一个I/O采集端口。
2 实时数据库实现方法
2.1 XML
考虑到组态软件的开发系统和运行系统可能独立运行,而组态参数是由开发系统定义的、开发系统和
运行系统之间的联系纽带,因此组态参数需要以文件形式进行传递,避免以共享内存和关系数据库形式传递在开发系统不启动情况下的局限性。XML提供了计算机文档的一种标准格式,具有扩展性、灵活性和自描述性等特性,是信息共享与数据交换的基础,因此,组态参数采用XML进行数据存储。
在解析组态参数XML时采用Digester,Digester支持基于规则的对任意XML文档的处理,能够将XML文件解析为Java对象。Digester隐藏了遍历XML元素这些细节,而是提供了更高一层的、更友好的SAX事件接口,从而让程序员的精力放在对数据的处理过程中。
2.2 Timer定时器
数据采集通常需要定时进行,如果将采集点定时执行算法融入到采集算法中,不仅增加了采集算法的难度,而且降低了软件的可维护性和复用性。因此,在进行数据采集时,利用面向对象的Java语言中Timer创建定时器管理类,负责数据采集线程的定时执行,将数据采集算法和定时算法分离开来。
public class GatherTimer{
private Timer timer = timer = new Timer();public void start() { //启动采集//获取本工程的所有采集点
List listPoint = ParameterManager.getPoint(prjId);
//定义实时采集任务
for (int i = 0; i
// GatherTask为继承TimerTask的执行数据采集的任务,包含采集算法
GatherTask task = new GatherTask (site);timer.schedule(task, 10000, site.getGatherSpace());
}}
public void stop() { //停止采集if(timer!=null) timer.cancel();
2009 01
65
}}
当需要启动工程的数据采集时,调用start()方法启动定时器;当需要停止采集时,调用stop()方法。
return instance; }
//根据参数关键字查询组态参数对象public Object getParameter(String key){通过消息判断XML是否已经修改,如修改则重新加载
}……}
在获取组态参数数据时,判断文件是否已经修改,如修改则重新加载,这样就可以实现组态参数热更新(修改以后无需重启服务器)。可以采用同样的方法缓冲各采集点的实时数据,提高实时数据库的性能。2.3.2 门面模式
如实时数据库的系统结构图(图1)所示,实时数据库需和其他模块进行通信,从数据采集模块获取采集数据,同时将实时数据传送到报警等模块。如果在其他模块随意调用实时数据库的方法,而没有统一管理,则造成其他模块和实时数据库之间存在很大的依赖性,使得其他模块的逻辑变得复杂,维护成本提高,复用率减,为此采用门面模式(Facade)(见图3)。
2.3 设计模式
设计模式(Design pattern)是在一定场景对常见问题的解决方案,利用设计模式可以增强软件的可维护性和可复用性,降低模块间的耦合度。2.3.1 单例模式
组态参数数据相对稳定,所以采用XML存储。为了减低和其他应用的耦合度,采用面向对象对其进行封装,创建组态参数管理类,统一负责对组态参数XML进行存储和访问。为了避免多个对象同时存储组态参数XML时造成XML数据紊乱;同时为了减低对象频繁访问XML的开销,将组态参数缓存到内存区,因此在实现组态参数类时利用单例模式(Singleton)。
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例[4]。由于组态参数管理类只创建唯一实例,且在初始化时读取组态参数XML并缓存到内存区,所以其他应用通过组态参数管理器访问组态参数时,通过唯一实例直接从缓存中获取,节省了访问文件的时间,提高了访问速度,而且通过统一管理器访问,降低了和其他应用的耦合度,提高了软件的可维护性。组态参数管理类的实现如下:
public class ParameterManager {
private Map map = new HashMap(); //缓存组态参数数据
//管理器唯一实例
private static final ParameterManager instance = new ParameterManager();
private ParameterManager{
构造函数初始化时,将组态参数Xml缓存到map中}
//提供管理器唯一实例
public static ParameterManager getInstance(){
图3 门面模式结构图
门面模式使外部与一个子系统的通信必须通过一个统一的门面对象进行[4]。门面模式提供一个高层次的接口,使得实时数据库更易于使用,同时提高实时数据库的独立性。实时数据库门面类定义如下:
//实时数据库门面类,封装和其他模块的通信接口
pubic class RealTimeDataFacade{//获取某采集点的实时数据
public List getRealData(String name){……}
66
信息通信技术
……}
2.4 WebService
基于以上分析可知,实时数据库需要和其他应用系统进行通信,虽然以上实现可以提高实时数据库的可维护性和性能,但是如果其他应用系统采用非JAVA的面向对象的语言开发或者处于分布式环境中,则实时数据库会处于孤立状态,无法获取实时数据,同时无法向其他应用系统提供实时数据。为此,需要为实时数据库系统提供和其他应用系统整合的途径。
WebService的主要目标是跨平台的可互操作性。为了达到这一目标,WebService完全基于XML、XSD等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台,实现远程数据交互的一个技术和协议。在实时数据库中将需要和其他应用程序通信的接口定义为Web服务,使其他分布式应用能够远程访问实时数据库,同时WebService采用XML进行数据传输,提高了实时数据库的开放性和标准性。
3 总结
实时数据库是组态软件的数据处理核心,构建分布式应用系统的基础。因此在设计实时数据库时,不仅要考虑实时数据库的时效性,而且要考虑实时数据库的独立性和开放性。将J2EE中面向对象思想引入实时数据库设计中,利用XML存储组态参数,利用单例
模式读取组态参数并缓存到内存区,大大提高了数据的访问速度;利用Timer实现数据采集算法和定时算法分离,利用Facade定义实时数据库向外提供的接口,使实时数据库具有很强的独立性和开放性,降低了和其他模块的耦合度;利用WebService定义实时数据库的分布式接口,使实时数据库具有了良好的分布式能力。本文创新点如下:
1) 利用XML存储组态参数,利用单例模式读取组态参数并缓存到内存区,大大提高了数据的访问速度。
2) 利用Timer实现数据采集算法和定时算法分离,利用Facade定义实时数据库向外提供的接口,使实时数据库具有很强的独立性和开放性,降低了和其他模块的耦合度。
3) 利用WebService定义实时数据库的分布式接口,使实时数据库具有了良好的分布式能力。
参考文献
[1]王恒青,宋如敏,李宏.微机硬盘管理实用详解[M] .北
京:清华大学出版社,2002
[2]韩玫瑰,史明华,马涛,等.DCS组态软件实时数据库
系统的设计[J].自动化仪表,2006,27(1):18-21[3]张齐,周博慧.组态软件实时数据库的设计与实现
[J].微计算机信息,2007.23(2-3):161-163[4]阎宏.java与模式[M].北京:电子工业出版社,2002
2009 01
67
作者简历
马华兵
硕士研究生,主要研究方向为智能信息处理及其应用。
产品与
方案
张 齐
副教授,主要研究方向为工业设备自动化。
Design of Configuration Software Real-time Database based on Object-oriented
Ma HuabingZhang Qi2
1
1.School of Computer Software Engineering, South China Univ., Guangzhou 510640, Guangdong, China
2.School of Computer Science and Engineering, South China Univ. of Tech.,Guangzhou 510640, Guangdong, China
Abstract This paper introduced a design idea of configuration software real-time database, which is based on object-oriented technology. According to the characteristics of real-time databases, it put forward a new method, which uses design pattern to cache data and improve access efficiency according to object-oriented, and new method to implement interfaces with real-time databases and other applications and communicate with them. Using this method, the new created real-time database will be real-time, correct, and consistent.
guration software; Real-time database; Design pattern; Object-oriented; XMLKeywords Confi
68
信息通信技术