论文部分内容阅读
摘 要:随着信息技术的飞速发展,真正意义上的智能建筑管理系统应当采用Web技术且具有很强的开放性和通用性。提出基于子系统平等方式的智能建筑管理系统,并对其数据库模块,包括实时数据库、实时数据分发服务器、历史数据库、实时数据库与OPC的通信几个子模块进行深入的研究和设计。实际应用表明,该系统的数据库模块设计合理、实时性高、安全稳定性好。
关键词:子系统平等;智能建筑;实时数据库;OPC;hash表
中图分类号:TP311.13 文献标识码:A
1 引言
智能建筑管理系统(Intelligent Building Man-agement System)是信息时代和计算机技术应用的重要产物,其具体任务就是在物理上集成各子系统信息,集中监视各子系统、关键设备、关键监测点状态,执行集中管理控制指令,向数据库提供各子系统数据、图像信息,实现各子系统间的联动功能,并且协调优化各系统的运行,从而为建筑物提供安全、舒适、方便的生活条件和高效的工作环境,并保证其运行维护管理的经济性和智能化。
数据库模块向上接受监控中心的控制指令,准确迅速地传递给各个子系统,达到控制设备运转的目的;向下数据库模块从现场控制网获取数据,对数据进行分析、处理,执行用户定义的子系统联动功能,保存历史数据。数据库模块的层次结构如图2所示。
3.1 实时数据分发服务器
实时数据分发服务器(RDDS)是实时数据库与Web客户端的数据通信接口。其功能是为浏览器端的页面表现提供数据分发服务,接收并转发客户端(访问、操作人员)下发的控制命令和事件记录。这里我们设计了基于Sockett的实时数据分发服务器,提供客户端与服务器之间的可靠无差错的数据传输。
数据分发服务器与客户端之间的数据交互方式采用面向连接的TCP/IP流式套接字,通信双方接收数据通过多次握手完成,保证了数据传输的有效性。数据由操作功能信息码和操作数据信息两部分组成。接收方首先读取操作功能信息码,再根据操作功能信息码确定下一步读取操作中的数据类型和数据大小,以完成读取操作数据信息,保证了数据传输的安全性。操作功能信息码的各字段值由交互双方的操作类型决定。操作类型划分为客户端注册、客户端注销、客户端用户登录、客户端用户退出、信息点同步、分发状态数据和接收控制指令。操作数据信息的数据包结构如图3所示:
如图5,实时数据库,OPC Client和分发服务器之间通过内存映射实现全局共享内存。OPCClient通过内存映射获得实时数据库点对象的指针,完成写,读,修改配置参数以及对数据的操作,包括添加、删除对象。由于系统包含的点对象数量庞大,需要使用hash表来记录点名与点对象的地址。本系统采用静态分配桶(hash链表长度)结合拉链的方法构造hash链表。拉链即将所有关键字为同义词的结点链接在同一个单链表中。hash表的结构如图6所示,纵向的为静态桶数据结构,横向的为hash node节点数据。
以上的结构建立了点名与点内存地址的一个映射,这样通过点名就可以查询到点的内存地址,即点对象指针。本系统采用time33的hash算法,定义点名变量str,取hash初值为5381。核心代码为:
hash =(hash<<5) (*str );
用掩码取结果的有效位,得到最终的hash值。
在多线程访问同一个数据对象的情况下必须要考虑冲突的解决问题。本系统采用对数据加锁 的方式,即访问数据必须先获得锁再进行操作。该算法构造一个和hash静态桶数组一样的一个BOOL型记录锁数组,访问时通过点名经过hash函数运算得到一个key及对应桶数组的位置。得到key后判断锁数组对应位置的BOOL型变量是否为0(没其他线程访问),如果为0则改为1(这个操作过程须为原子操作),如果为1(其他线程正在操作数据)则放弃剩余时间片,等到下个时间再判断是否锁已经开了,循环一段时间如果还没有开则放弃此次操作报警。经过测试,拉链长度16229静态桶,插入10000个随机字符串,最大拉链长度为7,一个记录锁最多锁住7个点,函数调用总时间不超过1.4秒。算法分布为:kong:8739,elements=10000,good=5426,second=1683,three=322.four=53,five=6。输出中的kong表示hash表的空桶数。elements表示hash表中一共存放了多少个元素,good表示“只有一个元素”的桶个数,sec-ond表示“有两个元素”的桶个数,three表示“有三个元素”的桶个数,four表示“有四个元素”的桶个数,five表示“有五个元素”的桶个数,函数调用总时间表示hash函数总的执行时间。以上测试表明,该算法能以较快的速度建立hash表,并能很好地组织点名与内存地址的映射关系,减少冲突问题的发生。
3)OPC Server数据发生变化时,系统调用COM接口里面的回调函数OnDataChange(),通过实时数据库提供的接口,把更新的数据写入实时数据库。
当有大量的客户和大量的数据进行交互的时候,采用这种异步通讯的方式可以避免客户端数据请求的阻塞,最大限度地节省CPU和网络资源,提高数据传输效率。
3.4 历史数据库
本系统使用SOL Server作为历史数据库的开发平台。历史数据库用于记录、保存和查询各种报警和操作事件、设备运行数据及故障情况。系统采用时间片结合缓冲区链表的方法将实时数据库里的数据写入历史数据库。具体实现办法是:缓冲区维护一个300条数据的链表,实时数据库不断将已更新的数据写入缓存区。一旦缓存区满或经过了一个时间片,系统就将缓存区里的数据追加到历史数据库里面。这样做的好处是能防止断电丢失缓存区里的数据且能提高数据的有效性和准确性。
4 结束语
本文提出了基于子系统平等的智能建筑管理系统,并对该系统的数据库模块,包括实时数据库、实时数据分发服务器、历史数据库、实时数据库与OPC的通信几个子模块进行了深入的研究和设计。基于流式套接字的分发服务器保证了数据传输的安全性、有效性和及时性;动态链接库和全局共享内存技术的应用提高了系统的实时性;hash表在点名和点的内存地址之间建立了快速有效的映射关系;子系统平等方式集成的特点以及OPC技术的运用使得各个异构子系统之间的无缝集成成为可能,解决了系统集成的伸缩性问题。
目前该系统集成已在深圳某大厦得到了较好的应用。经测试,系统实时数据的传输时间≤1秒,控制命令的传输时间≤2秒,联动控制命令传输时间≤2秒。事实证明该智能建筑管理系统的数据库模块设计合理,实时性高,安全稳定性好。
关键词:子系统平等;智能建筑;实时数据库;OPC;hash表
中图分类号:TP311.13 文献标识码:A
1 引言
智能建筑管理系统(Intelligent Building Man-agement System)是信息时代和计算机技术应用的重要产物,其具体任务就是在物理上集成各子系统信息,集中监视各子系统、关键设备、关键监测点状态,执行集中管理控制指令,向数据库提供各子系统数据、图像信息,实现各子系统间的联动功能,并且协调优化各系统的运行,从而为建筑物提供安全、舒适、方便的生活条件和高效的工作环境,并保证其运行维护管理的经济性和智能化。
![](/img/pic.php?url=http://img1.qikan.com/qkimages/jszd/jszd200704/jszd20070426-2-l.jpg)
数据库模块向上接受监控中心的控制指令,准确迅速地传递给各个子系统,达到控制设备运转的目的;向下数据库模块从现场控制网获取数据,对数据进行分析、处理,执行用户定义的子系统联动功能,保存历史数据。数据库模块的层次结构如图2所示。
3.1 实时数据分发服务器
实时数据分发服务器(RDDS)是实时数据库与Web客户端的数据通信接口。其功能是为浏览器端的页面表现提供数据分发服务,接收并转发客户端(访问、操作人员)下发的控制命令和事件记录。这里我们设计了基于Sockett的实时数据分发服务器,提供客户端与服务器之间的可靠无差错的数据传输。
数据分发服务器与客户端之间的数据交互方式采用面向连接的TCP/IP流式套接字,通信双方接收数据通过多次握手完成,保证了数据传输的有效性。数据由操作功能信息码和操作数据信息两部分组成。接收方首先读取操作功能信息码,再根据操作功能信息码确定下一步读取操作中的数据类型和数据大小,以完成读取操作数据信息,保证了数据传输的安全性。操作功能信息码的各字段值由交互双方的操作类型决定。操作类型划分为客户端注册、客户端注销、客户端用户登录、客户端用户退出、信息点同步、分发状态数据和接收控制指令。操作数据信息的数据包结构如图3所示:
![](/img/pic.php?url=http://img1.qikan.com/qkimages/jszd/jszd200704/jszd20070426-4-l.jpg)
如图5,实时数据库,OPC Client和分发服务器之间通过内存映射实现全局共享内存。OPCClient通过内存映射获得实时数据库点对象的指针,完成写,读,修改配置参数以及对数据的操作,包括添加、删除对象。由于系统包含的点对象数量庞大,需要使用hash表来记录点名与点对象的地址。本系统采用静态分配桶(hash链表长度)结合拉链的方法构造hash链表。拉链即将所有关键字为同义词的结点链接在同一个单链表中。hash表的结构如图6所示,纵向的为静态桶数据结构,横向的为hash node节点数据。
以上的结构建立了点名与点内存地址的一个映射,这样通过点名就可以查询到点的内存地址,即点对象指针。本系统采用time33的hash算法,定义点名变量str,取hash初值为5381。核心代码为:
hash =(hash<<5) (*str );
用掩码取结果的有效位,得到最终的hash值。
在多线程访问同一个数据对象的情况下必须要考虑冲突的解决问题。本系统采用对数据加锁 的方式,即访问数据必须先获得锁再进行操作。该算法构造一个和hash静态桶数组一样的一个BOOL型记录锁数组,访问时通过点名经过hash函数运算得到一个key及对应桶数组的位置。得到key后判断锁数组对应位置的BOOL型变量是否为0(没其他线程访问),如果为0则改为1(这个操作过程须为原子操作),如果为1(其他线程正在操作数据)则放弃剩余时间片,等到下个时间再判断是否锁已经开了,循环一段时间如果还没有开则放弃此次操作报警。经过测试,拉链长度16229静态桶,插入10000个随机字符串,最大拉链长度为7,一个记录锁最多锁住7个点,函数调用总时间不超过1.4秒。算法分布为:kong:8739,elements=10000,good=5426,second=1683,three=322.four=53,five=6。输出中的kong表示hash表的空桶数。elements表示hash表中一共存放了多少个元素,good表示“只有一个元素”的桶个数,sec-ond表示“有两个元素”的桶个数,three表示“有三个元素”的桶个数,four表示“有四个元素”的桶个数,five表示“有五个元素”的桶个数,函数调用总时间表示hash函数总的执行时间。以上测试表明,该算法能以较快的速度建立hash表,并能很好地组织点名与内存地址的映射关系,减少冲突问题的发生。
![](/img/pic.php?url=http://img1.qikan.com/qkimages/jszd/jszd200704/jszd20070426-6-l.jpg)
3)OPC Server数据发生变化时,系统调用COM接口里面的回调函数OnDataChange(),通过实时数据库提供的接口,把更新的数据写入实时数据库。
当有大量的客户和大量的数据进行交互的时候,采用这种异步通讯的方式可以避免客户端数据请求的阻塞,最大限度地节省CPU和网络资源,提高数据传输效率。
3.4 历史数据库
本系统使用SOL Server作为历史数据库的开发平台。历史数据库用于记录、保存和查询各种报警和操作事件、设备运行数据及故障情况。系统采用时间片结合缓冲区链表的方法将实时数据库里的数据写入历史数据库。具体实现办法是:缓冲区维护一个300条数据的链表,实时数据库不断将已更新的数据写入缓存区。一旦缓存区满或经过了一个时间片,系统就将缓存区里的数据追加到历史数据库里面。这样做的好处是能防止断电丢失缓存区里的数据且能提高数据的有效性和准确性。
![](http://img1.qikan.com/qkimages/jszd/jszd200704/jszd20070426-7-l.jpg)
4 结束语
本文提出了基于子系统平等的智能建筑管理系统,并对该系统的数据库模块,包括实时数据库、实时数据分发服务器、历史数据库、实时数据库与OPC的通信几个子模块进行了深入的研究和设计。基于流式套接字的分发服务器保证了数据传输的安全性、有效性和及时性;动态链接库和全局共享内存技术的应用提高了系统的实时性;hash表在点名和点的内存地址之间建立了快速有效的映射关系;子系统平等方式集成的特点以及OPC技术的运用使得各个异构子系统之间的无缝集成成为可能,解决了系统集成的伸缩性问题。
目前该系统集成已在深圳某大厦得到了较好的应用。经测试,系统实时数据的传输时间≤1秒,控制命令的传输时间≤2秒,联动控制命令传输时间≤2秒。事实证明该智能建筑管理系统的数据库模块设计合理,实时性高,安全稳定性好。