1 引言
智能建筑集成管理系统(以下简称为IBMS)作为一个典型的分布式系统,系统环境复杂,缺乏统一的规范和标准,它涉及到多种平台和多种协议间的通信与联接,需要与第三方应用软件接口。Java 语言是基于网络开发、面向对象的新一代计算机编程语言。它具有对象封装、多态性和继承性等面向对象语言的基本特征,具有跨平台、可移植的特性,支持 Internet/Intranet网络模式下的数据分布与计算分布。由于 Java 所具有的这些功能特点,使其成为实现智能建筑集成管理系统的理想开发语言。
实时数据库RTDB(Real-Time Database)是实时监控软件的核心。实时数据库常常在动态环境下使用,用来监控现实世界对象的状态和发现所关注事件的发生[1]。实时数据库及时准确地获取现场数据是整个控制系统正常工作的基本前提。同时实时数据库子系统是联系图形子系统、历史数据库子系统、报表子系统、报警系统的桥梁和纽带。实时数据库系统结构的规划和管理系统具体的实现方法
是设计组态软件的核心和难点。实时数据库构建的合理性直接影响到整个系统的性能。目前,市场上流行的实时数据库产品主要有PI系统(适用于流程工业:国外),Info-Plus.21(主要在石油化工方面:国外),力控系统(主要用于控制领域:国内),SuPerlnfo(主要用于电力调度、石油、化工等领域:国内)等等。这些产品都是面向工业控制应用的,而且其产品的价格都比较昂贵,一般中小型系统不可能用此方式进行集成。
本文详细介绍如何利用Java的集合框架及其本身的语言特点开发面向智能集成系统的轻量级实时数据库。与其他的实时数据库相比,该实时数据库具有跨平台,简单易用及成本低的特点,并且能够满足智能建筑集成管理系统的实时性的要求。非常适用于一般中小型系统,具有很好的实用价值及经济效益。
2实时数据库的特点
内存系统与磁盘系统具有不同的特性,主要表现在以下几个方面[2]:内存和磁盘在存取时间上有若干数量级的差别,内存的存取时间在10-8s的数量级而磁盘在5x10-3s数量级;内存是易失性的,而磁盘是永久性的存储器;当系统断电时,前者所存的信息立即消失,通电后也不会恢复;后者则反之,断电时保持信息不会消失,通电后即原样可使用存储格式不同。内存是字节或字编址的,而磁盘是块存储设备;数据的存储组织方法对性能影响不同。不同的组织方式对磁盘的性能影响远比对内存影响大,如顺序存取与随机存取的时间对内存没有什么变化,而对磁盘则有数量级的差别;存取方式不同。内存可由处理机直接存取磁盘则不能,内存比磁盘更易于受到来自程序错误的直接数据破坏;
监控组态软件的实时数据库属于实时数据库中的一种,它具备实时数据库 的基本特征和属性,但和专用的实时数据库相比,它并不严格要求具备实时数 据库在理论上所要求的所有模型特征。近年来计算机技术的发展使存储器单位容量的价格不断下降,在现有条件下,单机上的工作内存已经很容易达到GB数量级。在这种条件下,利用实时数据库开发IBMS系统的实时数据管理模块是一个非常好的解决方案。
3 IBMS系统实时数据操作过程分析
一般来说BMS系统对实时数据的操作包括并发的多用户查询操作和实时数据的更新操作。一般来说一万个监控点的值的刷新必须在0.5秒内完成才能满足工程上的需要,而实时数据到达客户端的时延一般也不能超过一秒。所以内存数据库的必须提供紧凑的数据结构和高效的空间利用率以及各种对各种实时数据操作的高速执行。
对于IBMS系统的监控量,可以分为模拟量和监控量两种,而且监控点的信息也有静态信息和动态信息之分。由于数据点的类型不同,数据处理的方式也不同。我们分别定义它们的数据结构,分别进行存取。同时把数据点的静态信息和动态的变化值分别采用不同的储存和管理方式,以达到理想的性能并且实时数据库的设计也比较紧凑。
因为实时数据的组态信息在系统运行之前已经配置好了,对实时数据的插入及删除操作频率不是很高,相反对实时数据的写操作和读操作则非常频繁,数据库初始化时把相应的子系统的信息和监控点的名称,编号,计量单位,扫描周期等不会随时间变化的静态信息和随时间变化的实时监控数据分别用不同的变量中储存。因为所有的模拟量是按照固定设置的扫描周期刷新监控值的,所以模拟量的测量值采用的ArrayList数据结构进行储存,以实现较高效的刷新操作。在智能建筑的数字量型监控点一般来说是一些开关量,变化频率一般不会很高,有的监控点状态甚至是一个月之内都不会变化,所以数字量型监控点的监控值采用Hash表储存以实现高效率的随机刷新的性能。
4实时数据库的设计
实时数据库与外部系统的典型互交如图1所示:监控客户端通过数据输出接口取得实时数据,不同的外部数据源通过数据输入接口输入实时数据。实时数据库则负责管理实时数据,为监控客户端提供统一的数据源视图,实现实时数据的高速访问及数据储存策略。
[img]20061116942947213.jpg[/img]
[center]图1 实时数据库与外部系统的典型互交[/center]
4.1 实时数据库结构的分析
一个监控系统的实时数据必须根据智能建筑的要求设计实时数据在内存中的存放格式及存取方法。在本文的设计方案中实时数据库的定义主要分为两级,站的定义和点的定义。站是指使用同一个通讯端口的所有设备,其中每个站可以包含多个单元,单元是指对应的RTU(Remote Terminal UNIt,远程终端单元)或者类似设备。点是系统最基本的描述单位,它分属于两种类型,即数字量、模拟量。点属性 描述是系统数据库描述的主要内容,各点的属性依照类型的不同而不同。有些用于定义常量数据,例如站名、点名、类型、单位等;有些用于定义实时处理 参数,例如遥测报警的限值、脉冲电度的峰谷时段划分等;有些用于设置处理 方式,例如各种处理的允许标志、存储标志。另外,点还有一些属性是用于统 计计算的,例如电压合格率、最大值、最小值、电度峰谷平段的统计等[3]。为实现系统中各个设备运行状态和数据的实时监视,分别建立系统中各类 量的一个实时映射。这种映射用一种数据结构实现,通过面向对象的方法将这 些数据结构有效地封装起来而构成一个类,使它除了能实现系统运行状态的实时映射外,还能够进行一些相关操作,这些类就构成了实时数据库。
4.2 实时数据库静态类结构
实时数据库有两个核心的对象,用于有效地管理实时过程数据。一个是DataSource,另一个是DataManager。DataSource为各子系统在集成平台的镜像,负责保存子系统相关的信息,如有哪些监控点,每个监控点有哪些属性以及子系统的相关信息。DataSource类有三个重要的成员变量,分别是pointList,analogyPointCache 和digitalPointCache。其结构如图2所示。
[img]20061116944246575.jpg[/img]
[center]图2 DataSource类的静态结构[/center]
其中pointList保存了监控点的静态信息,analogyPointCache 则为模拟量的高速缓存,类似地digitalPointCache则为数字量的高速缓存。
DataManager负责维持全局实时数据的镜像,并且管理客户端的高速缓存,分配每个客户端的服务号等。具体设计如图3所示。
[img]20061116944627185.jpg[/img]
[center]图3 DataManager类的静态结构[/center]
4.3 实时数据的存储方式
DataSource对象中的pointList属性保存点相关的静态信息,其键值映射中的键为点名称,值也为一个HashMap,保存点属性名称及属性值的集合。analogyPointCache和digitalPointCache内部维持着一个按一定顺序的保存监控点实时值的ArrayList,其容纳的对象分别为analogyPointValue类和digitalPointValue类实例。这样就可以实现很高性能的顺序批量更新。同时analogyPointCache和digitalPointCache内部也都维持着一个名值对应的HashMap,其键值映射中的键为点名称,其值为analogyPointValue类和digitalPointValue类实例的引用,因为实时数据是采用HashMap的数据结构保存,所以AnalogyPointValue非常简单,只有一个类型为float的value属性,而digitalPointValue也是只有一个类型为float的value属性和一个类型为long的timestemp属性。这样程序在计算HashCODe时速度比较快,可以实现较高速度的随机刷新。
[img]20061116945131546.jpg[/img]
[center]图4实时数据的存储方式[/center]
在DataManager的全局实时数据缓存中analogyPointCache和digitalPointValue也保存着和子系统缓存一样的信息,以便实现较好速度的全局查找。
由以上的说明可知在实时数据的存储方式中充分利用了Java语言的对象引用机制的特点来设计实时数据的储存。在因为DataSource对象和DataManager对象的缓存都只是保存了监控点实时值的引用,实际保存监控点实时值的是ArrayList类。但ArrayList容器里的监控点实时值被更新后,通过DataSource对象和DataManager对象缓存中的HashMap取得的实时值便自动为最新的了。
4.4 实时数据处理过程
外部系统通过DataSource对象的updateAnaCache ()方法更新实时数据库内模拟量的高速缓存,如果方法传入的参数为HashMap,则不要求按照缓存储存顺序传入数据,如果方法传入的参数为List,则必须按照缓存储存顺序传入数据,后者更新数据的速度大约是前者的2~3倍。数字量的更新方法和模拟量相识,每个数字量的更新记录都被保存到digStateLogger,以方便查询其状态的变化情况。这功能对于监控系统是很有必要的。应用系统通过每隔一定时间间隔把digStateLogger的内容储存到外存并清空digStateLogger。同时利用Observer 的设计模式把DataManager对象注册为DataSource的观察者,如果数字量的实时数据有变化,DataManager就马上自动更新相应的clientCache。
通过调用DataManager的getPoints()函数可以获得相应监控页面的实时数据。具体的流程为:首先根据pageID通过analogyPointCache获取模拟量数据,再根据pageID通过clientCache获取数字量数据,然后把所有数据组装为一个HashMap返回给调用者,最后清空clientCache中相应的缓存。这里之所以没有简单的把所有的数字量数据返回是考虑到数字量相对来说变化速度不是很高,如一般的报警或设备开关状态的数字量在一天甚至一个月之内都不会改变,通过以上的处理方法可以实现只有但状态改变才把最新信息传到客户端,优化了数据的传输过程,并有效地减低了服务器端的负载。
5 结束语
本文在分析智能建筑集成系统的实时数据存储过程的基础上,详细介绍了如何设计基于Java语言的面向智能建筑集成系统的轻量级实时数据库设计。对如何对智能建筑集成系统实时数据的管理进行了有益的探讨。本文所讨论的实时数据库技术已经应用到了大型的5A级智能化商城-广州国际轻纺城IBMS集成系统,该系统满足了现代智能建筑管控一体化的需求, 实现消除“信息孤岛”及统一调度,优化物业投运成本的目的。为智能建筑的优化管理和合理利用提供了切实可行的方案。




