摘 要:隨著信息技術(shù)的飛速發(fā)展,真正意義上的智能建筑管理系統(tǒng)應(yīng)當(dāng)采用Web技術(shù)且具有很強(qiáng)的開放性和通用性。提出基于子系統(tǒng)平等方式的智能建筑管理系統(tǒng),并對其數(shù)據(jù)庫模塊,包括實(shí)時數(shù)據(jù)庫、實(shí)時數(shù)據(jù)分發(fā)服務(wù)器、歷史數(shù)據(jù)庫、實(shí)時數(shù)據(jù)庫與OPC的通信幾個子模塊進(jìn)行深入的研究和設(shè)計(jì)。實(shí)際應(yīng)用表明,該系統(tǒng)的數(shù)據(jù)庫模塊設(shè)計(jì)合理、實(shí)時性高、安全穩(wěn)定性好。
關(guān)鍵詞:子系統(tǒng)平等;智能建筑;實(shí)時數(shù)據(jù)庫;OPC;hash表
中圖分類號:TP311.13 文獻(xiàn)標(biāo)識碼:A
1 引言
智能建筑管理系統(tǒng)(Intelligent Building Man-agement System)是信息時代和計(jì)算機(jī)技術(shù)應(yīng)用的重要產(chǎn)物,其具體任務(wù)就是在物理上集成各子系統(tǒng)信息,集中監(jiān)視各子系統(tǒng)、關(guān)鍵設(shè)備、關(guān)鍵監(jiān)測點(diǎn)狀態(tài),執(zhí)行集中管理控制指令,向數(shù)據(jù)庫提供各子系統(tǒng)數(shù)據(jù)、圖像信息,實(shí)現(xiàn)各子系統(tǒng)間的聯(lián)動功能,并且協(xié)調(diào)優(yōu)化各系統(tǒng)的運(yùn)行,從而為建筑物提供安全、舒適、方便的生活條件和高效的工作環(huán)境,并保證其運(yùn)行維護(hù)管理的經(jīng)濟(jì)性和智能化。
現(xiàn)階段智能建筑管理系統(tǒng)集成模式…主要有:①基于硬結(jié)點(diǎn)方式的系統(tǒng)集成;②以串行通信方式進(jìn)行的系統(tǒng)集成;③以樓宇自控系統(tǒng)BAS為平臺進(jìn)行的系統(tǒng)集成;④采用開放式標(biāo)準(zhǔn)協(xié)議實(shí)現(xiàn)的系統(tǒng)集成;⑤基于子系統(tǒng)平等方式進(jìn)行的系統(tǒng)集成。其中基于子系統(tǒng)平等方式進(jìn)行的系統(tǒng)集成是目前公認(rèn)最先進(jìn)的集成方式,其核心思想是:
整個BMS集成分為上層管理網(wǎng)和下層現(xiàn)場控制網(wǎng)兩個網(wǎng)絡(luò)層次。系統(tǒng)集成數(shù)據(jù)庫位于上層管理網(wǎng),各個子系統(tǒng)以平等的方式集成在現(xiàn)場控制網(wǎng)。各子系統(tǒng)的實(shí)時數(shù)據(jù)通過開放的工業(yè)標(biāo)準(zhǔn)接口(如OPC接口)轉(zhuǎn)換成統(tǒng)一的格式,存儲在系統(tǒng)集成數(shù)據(jù)庫中。系統(tǒng)集成管理網(wǎng)絡(luò)通過BMS系統(tǒng)核心調(diào)度程序?qū)Ω髯酉到y(tǒng)實(shí)現(xiàn)統(tǒng)一管理、監(jiān)控及信息交換。這種系統(tǒng)集成方法有利于設(shè)備制造商各種子系統(tǒng)之間的集成,可以降低開發(fā)成本和開發(fā)難度,有利于節(jié)省項(xiàng)目開發(fā)時間。
隨著現(xiàn)代信息技術(shù)的發(fā)展,基于子系統(tǒng)平等的系統(tǒng)集成方式和支持以Web瀏覽和數(shù)據(jù)庫為核心應(yīng)用的B/S(Browser/Server)監(jiān)控模式的IBMS,已成為智能建筑系統(tǒng)集成的發(fā)展方向。
2 系統(tǒng)框架
本文研究的系統(tǒng)是在VC的背景下集成開發(fā)的,采用了基于子系統(tǒng)平等的集成方式。系統(tǒng)基本框架如圖1所示,整個系統(tǒng)采用分層分布式結(jié)構(gòu)的集散監(jiān)控,總體分為三層。最上層為監(jiān)控管理中心,負(fù)責(zé)整個系統(tǒng)協(xié)調(diào)運(yùn)行和綜合管理;中間監(jiān)控層及各子系統(tǒng),具有獨(dú)立運(yùn)行能力,實(shí)現(xiàn)各系統(tǒng)的監(jiān)測和控制;下層為現(xiàn)場設(shè)備層,包括各類傳感器、探測器、儀表和執(zhí)行機(jī)構(gòu)等。
3 數(shù)據(jù)庫模塊的研究與實(shí)現(xiàn)
在整個系統(tǒng)實(shí)現(xiàn)過程中,數(shù)據(jù)庫模塊為IBMS系統(tǒng)集成的關(guān)鍵,同時也是項(xiàng)目開發(fā)難點(diǎn)。數(shù)據(jù)庫模塊主要包括實(shí)時數(shù)據(jù)庫模塊、歷史數(shù)據(jù)庫模塊、實(shí)時數(shù)據(jù)分發(fā)服務(wù)器模塊以及實(shí)時數(shù)據(jù)庫與OPC客戶端的通信模塊。它為集成系統(tǒng)和下層子系統(tǒng)之間的數(shù)據(jù)通信提供高速通道,是智能建筑系統(tǒng)集成的核心。
數(shù)據(jù)庫模塊向上接受監(jiān)控中心的控制指令,準(zhǔn)確迅速地傳遞給各個子系統(tǒng),達(dá)到控制設(shè)備運(yùn)轉(zhuǎn)的目的;向下數(shù)據(jù)庫模塊從現(xiàn)場控制網(wǎng)獲取數(shù)據(jù),對數(shù)據(jù)進(jìn)行分析、處理,執(zhí)行用戶定義的子系統(tǒng)聯(lián)動功能,保存歷史數(shù)據(jù)。數(shù)據(jù)庫模塊的層次結(jié)構(gòu)如圖2所示。
3.1 實(shí)時數(shù)據(jù)分發(fā)服務(wù)器
實(shí)時數(shù)據(jù)分發(fā)服務(wù)器(RDDS)是實(shí)時數(shù)據(jù)庫與Web客戶端的數(shù)據(jù)通信接口。其功能是為瀏覽器端的頁面表現(xiàn)提供數(shù)據(jù)分發(fā)服務(wù),接收并轉(zhuǎn)發(fā)客戶端(訪問、操作人員)下發(fā)的控制命令和事件記錄。這里我們設(shè)計(jì)了基于Sockett的實(shí)時數(shù)據(jù)分發(fā)服務(wù)器,提供客戶端與服務(wù)器之間的可靠無差錯的數(shù)據(jù)傳輸。
數(shù)據(jù)分發(fā)服務(wù)器與客戶端之間的數(shù)據(jù)交互方式采用面向連接的TCP/IP流式套接字,通信雙方接收數(shù)據(jù)通過多次握手完成,保證了數(shù)據(jù)傳輸?shù)挠行?。?shù)據(jù)由操作功能信息碼和操作數(shù)據(jù)信息兩部分組成。接收方首先讀取操作功能信息碼,再根據(jù)操作功能信息碼確定下一步讀取操作中的數(shù)據(jù)類型和數(shù)據(jù)大小,以完成讀取操作數(shù)據(jù)信息,保證了數(shù)據(jù)傳輸?shù)陌踩?。操作功能信息碼的各字段值由交互雙方的操作類型決定。操作類型劃分為客戶端注冊、客戶端注銷、客戶端用戶登錄、客戶端用戶退出、信息點(diǎn)同步、分發(fā)狀態(tài)數(shù)據(jù)和接收控制指令。操作數(shù)據(jù)信息的數(shù)據(jù)包結(jié)構(gòu)如圖3所示:
實(shí)時數(shù)據(jù)分發(fā)服務(wù)器采用事件驅(qū)動機(jī)制傳輸數(shù)據(jù),服務(wù)器把更新的數(shù)據(jù)主動提供給客戶端,以保證數(shù)據(jù)傳輸?shù)膶?shí)時性。
3.2 實(shí)時數(shù)據(jù)庫
實(shí)時數(shù)據(jù)庫是數(shù)據(jù)庫模塊的核心部分,在智能建筑集成系統(tǒng)中起著至關(guān)重要的作用。
本系統(tǒng)的實(shí)時數(shù)據(jù)庫基于對象方式進(jìn)行設(shè)計(jì),采用從上至下包容的方式:包含系統(tǒng)類對象、子系統(tǒng)類對象、設(shè)備類對象和點(diǎn)類對象。實(shí)時數(shù)據(jù)庫類對象的層次結(jié)構(gòu)如圖4所示:
目前,在Windows環(huán)境的組態(tài)軟件中I/O接口驅(qū)動程序與系統(tǒng)實(shí)時數(shù)據(jù)庫之間的數(shù)據(jù)交換一般都是利用動態(tài)數(shù)據(jù)交換協(xié)議(DDE)來實(shí)現(xiàn)的。由于DDE為基于消息的協(xié)議標(biāo)準(zhǔn),數(shù)據(jù)傳送過程需要處理多條消息,數(shù)據(jù)交換效率會受到影響。為了提高系統(tǒng)的實(shí)時性能,本文提出了利用動態(tài)鏈接庫(DLL)和全局共享內(nèi)存技術(shù)來建立實(shí)時數(shù)據(jù)庫的設(shè)計(jì)思想,并通過給用戶提供一套接口標(biāo)準(zhǔn)——實(shí)時數(shù)據(jù)庫接口,來實(shí)現(xiàn)OPC Client及用戶程序和實(shí)時數(shù)據(jù)庫間的高速數(shù)據(jù)傳遞。實(shí)時數(shù)據(jù)庫接口由一組API函數(shù)組成,包括創(chuàng)建點(diǎn)、刪除點(diǎn)、設(shè)置點(diǎn)屬性、讀取點(diǎn)屬性等功能,OPC Client和各個用戶模塊可以直接訪問數(shù)據(jù)庫,使系統(tǒng)具有全面的開放型和二次開發(fā)功能。
如圖5,實(shí)時數(shù)據(jù)庫,OPC Client和分發(fā)服務(wù)器之間通過內(nèi)存映射實(shí)現(xiàn)全局共享內(nèi)存。OPCClient通過內(nèi)存映射獲得實(shí)時數(shù)據(jù)庫點(diǎn)對象的指針,完成寫,讀,修改配置參數(shù)以及對數(shù)據(jù)的操作,包括添加、刪除對象。由于系統(tǒng)包含的點(diǎn)對象數(shù)量龐大,需要使用hash表來記錄點(diǎn)名與點(diǎn)對象的地址。本系統(tǒng)采用靜態(tài)分配桶(hash鏈表長度)結(jié)合拉鏈的方法構(gòu)造hash鏈表。拉鏈即將所有關(guān)鍵字為同義詞的結(jié)點(diǎn)鏈接在同一個單鏈表中。hash表的結(jié)構(gòu)如圖6所示,縱向的為靜態(tài)桶數(shù)據(jù)結(jié)構(gòu),橫向的為hash node節(jié)點(diǎn)數(shù)據(jù)。
以上的結(jié)構(gòu)建立了點(diǎn)名與點(diǎn)內(nèi)存地址的一個映射,這樣通過點(diǎn)名就可以查詢到點(diǎn)的內(nèi)存地址,即點(diǎn)對象指針。本系統(tǒng)采用time33的hash算法,定義點(diǎn)名變量str,取hash初值為5381。核心代碼為:
hash+=(hash<<5)+(*str++);
用掩碼取結(jié)果的有效位,得到最終的hash值。
在多線程訪問同一個數(shù)據(jù)對象的情況下必須要考慮沖突的解決問題。本系統(tǒng)采用對數(shù)據(jù)加鎖的方式,即訪問數(shù)據(jù)必須先獲得鎖再進(jìn)行操作。該算法構(gòu)造一個和hash靜態(tài)桶數(shù)組一樣的一個BOOL型記錄鎖數(shù)組,訪問時通過點(diǎn)名經(jīng)過hash函數(shù)運(yùn)算得到一個key及對應(yīng)桶數(shù)組的位置。得到key后判斷鎖數(shù)組對應(yīng)位置的BOOL型變量是否為0(沒其他線程訪問),如果為0則改為1(這個操作過程須為原子操作),如果為1(其他線程正在操作數(shù)據(jù))則放棄剩余時間片,等到下個時間再判斷是否鎖已經(jīng)開了,循環(huán)一段時間如果還沒有開則放棄此次操作報(bào)警。經(jīng)過測試,拉鏈長度16229靜態(tài)桶,插入10000個隨機(jī)字符串,最大拉鏈長度為7,一個記錄鎖最多鎖住7個點(diǎn),函數(shù)調(diào)用總時間不超過1.4秒。算法分布為:kong:8739,elements=10000,good=5426,second=1683,three=322.four=53,five=6。輸出中的kong表示hash表的空桶數(shù)。elements表示hash表中一共存放了多少個元素,good表示“只有一個元素”的桶個數(shù),sec-ond表示“有兩個元素”的桶個數(shù),three表示“有三個元素”的桶個數(shù),four表示“有四個元素”的桶個數(shù),five表示“有五個元素”的桶個數(shù),函數(shù)調(diào)用總時間表示hash函數(shù)總的執(zhí)行時間。以上測試表明,該算法能以較快的速度建立hash表,并能很好地組織點(diǎn)名與內(nèi)存地址的映射關(guān)系,減少沖突問題的發(fā)生。
3.3 實(shí)時數(shù)據(jù)庫與OPC的通信
OPC是OLE for Process Control的縮寫。顧名思義,OPC是一種利用微軟的COM/DCOM技術(shù)來達(dá)成自動化控制的協(xié)定。基于OPC技術(shù)的接口是一種有效的手段,能夠?qū)崿F(xiàn)各異構(gòu)子系統(tǒng)的無縫連接,從而快捷有效地把已有建筑子系統(tǒng)融合起來,組成智能建筑系統(tǒng)集成。
OPC協(xié)議采用Client/Server體系。應(yīng)用程序作為OPC接口中的Client方,硬件驅(qū)動程序作為OPC接口中的Server方。OPC Client通過讀取配置文件,加載實(shí)時數(shù)據(jù)庫DLL并且打開內(nèi)存映射文件獲得實(shí)時數(shù)據(jù)庫對象的指針。接著OPCClient遍歷實(shí)時數(shù)據(jù)庫各個子系統(tǒng)對象,創(chuàng)建相應(yīng)線程并建立與各OPC Server的連接。OPC Client與實(shí)時數(shù)據(jù)庫間的通信如圖7所示,包括以下幾個步驟:
1)OPC Client初始化實(shí)時數(shù)據(jù)庫,由OPCClient提供初始化函數(shù);
2)Web界面發(fā)生控制事件或觸發(fā)聯(lián)動腳本執(zhí)行,實(shí)時數(shù)據(jù)庫執(zhí)行OPC Client提供的接口函數(shù)寫OPC Server;
3)OPC Server數(shù)據(jù)發(fā)生變化時,系統(tǒng)調(diào)用COM接口里面的回調(diào)函數(shù)OnDataChange(),通過實(shí)時數(shù)據(jù)庫提供的接口,把更新的數(shù)據(jù)寫入實(shí)時數(shù)據(jù)庫。
當(dāng)有大量的客戶和大量的數(shù)據(jù)進(jìn)行交互的時候,采用這種異步通訊的方式可以避免客戶端數(shù)據(jù)請求的阻塞,最大限度地節(jié)省CPU和網(wǎng)絡(luò)資源,提高數(shù)據(jù)傳輸效率。
3.4 歷史數(shù)據(jù)庫
本系統(tǒng)使用SOL Server作為歷史數(shù)據(jù)庫的開發(fā)平臺。歷史數(shù)據(jù)庫用于記錄、保存和查詢各種報(bào)警和操作事件、設(shè)備運(yùn)行數(shù)據(jù)及故障情況。系統(tǒng)采用時間片結(jié)合緩沖區(qū)鏈表的方法將實(shí)時數(shù)據(jù)庫里的數(shù)據(jù)寫入歷史數(shù)據(jù)庫。具體實(shí)現(xiàn)辦法是:緩沖區(qū)維護(hù)一個300條數(shù)據(jù)的鏈表,實(shí)時數(shù)據(jù)庫不斷將已更新的數(shù)據(jù)寫入緩存區(qū)。一旦緩存區(qū)滿或經(jīng)過了一個時間片,系統(tǒng)就將緩存區(qū)里的數(shù)據(jù)追加到歷史數(shù)據(jù)庫里面。這樣做的好處是能防止斷電丟失緩存區(qū)里的數(shù)據(jù)且能提高數(shù)據(jù)的有效性和準(zhǔn)確性。
4 結(jié)束語
本文提出了基于子系統(tǒng)平等的智能建筑管理系統(tǒng),并對該系統(tǒng)的數(shù)據(jù)庫模塊,包括實(shí)時數(shù)據(jù)庫、實(shí)時數(shù)據(jù)分發(fā)服務(wù)器、歷史數(shù)據(jù)庫、實(shí)時數(shù)據(jù)庫與OPC的通信幾個子模塊進(jìn)行了深入的研究和設(shè)計(jì)?;诹魇教捉幼值姆职l(fā)服務(wù)器保證了數(shù)據(jù)傳輸?shù)陌踩?、有效性和及時性;動態(tài)鏈接庫和全局共享內(nèi)存技術(shù)的應(yīng)用提高了系統(tǒng)的實(shí)時性;hash表在點(diǎn)名和點(diǎn)的內(nèi)存地址之間建立了快速有效的映射關(guān)系;子系統(tǒng)平等方式集成的特點(diǎn)以及OPC技術(shù)的運(yùn)用使得各個異構(gòu)子系統(tǒng)之間的無縫集成成為可能,解決了系統(tǒng)集成的伸縮性問題。
目前該系統(tǒng)集成已在深圳某大廈得到了較好的應(yīng)用。經(jīng)測試,系統(tǒng)實(shí)時數(shù)據(jù)的傳輸時間≤1秒,控制命令的傳輸時間≤2秒,聯(lián)動控制命令傳輸時間≤2秒。事實(shí)證明該智能建筑管理系統(tǒng)的數(shù)據(jù)庫模塊設(shè)計(jì)合理,實(shí)時性高,安全穩(wěn)定性好。