鄭翔,張珣
(杭州電子科技大學 電子信息學院,杭州 310018)
?
BACnet/IP智能終端的模型研究與設計
鄭翔,張珣
(杭州電子科技大學 電子信息學院,杭州 310018)
BACnet/IP是BACnet協議與IPV4互聯網互連的協議。本文提出了一種將BACnet/IP與無線通信相結合的終端模型,同時將BACnet Protocol Stack開源工程移植應用于此種模型之上。硬件平臺是ARM9處理器和CC1101無線通信模塊,經測試此控制器符合BACnet/IP的通信協議規程。重點完成了ARM9嵌入式平臺的軟硬件搭建、BACnet Protocol Stack在此平臺的移植與改進,以及無線模塊與BACnet協議棧的互操作和終端提供的web服務。
BACnet/IP;ARM9;CC1101; BACnet Protocol Stack;樓宇控制器
BACnet(Building Automation and Control network)是一種為樓宇自動控制網絡所制定的數據通信協議,其產生的背景是用戶對樓宇自動控制設備互操作性的廣泛要求,即將不同廠家的設備組成一個一致的自控系統,它是智能建筑樓宇自控領域中唯一的國際標準。目前全球跨國樓宇自控廠商均支持和生產BACnet自控設備和產品,而國內對于BACnet方面的研究與應用僅限于少量的論文及會議,這對于我國智能建筑自控領域的發展顯然是十分不利的。本文在研究國外BACnet發展的基礎上提出了一種BACnet/IP樓宇控制器的模型,并在實驗室環境中實現和測試。
BACnet最成功之處就在于采用了面向對象的技術,定義了一組具有屬性的對象(Object)來表示任意的樓宇自控設備的功能,從而提供了一種標準的表示樓宇自控設備的方式。BACnet標準中定義的標準對象有模擬輸入(Analog Input)、模擬輸出(Analog Output)、設備(Device)等,其中“設備對象”是每個BACnet必須擁有的對象,這是一個具有網絡訪問特征的集合模型。 舉例來說,一個標準的BACnet測溫設備就可以用設備對象(Device)加一個模擬輸入對象(Analog Input)來表示。
當一個BACnet設備要與另一個BACnet設備進行通信時,它必須要獲得該設備的設備對象中所包含的某些信息,這些信息在BACnet中就稱為BACnet設備對象的屬性,“對象標識符”是BACnet設備中的每個對象必須具有的屬性,它是一個32位的編碼,可以唯一地標識一個BACnet設備。對象標識符由對象的類型和其實例標號組成,第一部分為對象類型標識域,占10位,可以表示1024個對象類型。協議規定0~127為BACnet保留類型,例如Analog Input對象類型為0,Analog Output對象類型為1,Device對象類型為8等;第二部分為對象實例編碼域,共22位,可以表示4T個對象實例,也就是說Device對象在整個BACnet網絡中只能有4T個實例,而其他對象在一個BACnet設備中就可以有4T個實例。類比于IPV4協議來說,Device對象所對應的實例號就相當于IP地址,除Device對象外的其他對象在每個BACnet設備中可以多達4T個,每個對象都可以提供不同的服務,如BACnet測溫設備中的Analog Input對象可以提供讀取溫度服務,這就相當于IP通信進程中的“PORT”,每個PORT可以提供不同的服務,BACnet設備的通信過程與IPV4協議中通過IP + PORT在IP網絡中確立一個服務進程的思想是一致的。
BACnet/IP作為BACnet協議的擴展于1999年加入至BACnet標準中,BACnet/IP 提出了使用IPV4網絡作為BACnet的底層網絡,從而可以極其方便地利用IP網絡組建大型的BACnet網絡。
2.1 傳統BACnet/IP終端模型
傳統的BACnet/IP終端在實現上基本上遵循這樣的模型:終端控制器一方面實現BACnet/IP協議棧的功能,另一方面還要和底層控制器,如空調控制、照明控制器等各種DDC(直接數字控制系統),進行通信。每個BACnet設備由一個Device對象和一個其他的服務對象組成,這個服務對象就和特定的DDC進行通信,從而完成特定的工作。
傳統的BACnet/IP終端設備模型如圖1所示,往往是每個控制器負責一樣具體的工作,如每個控制器只能單一的控制空調設備,暖通設備或者照明設備等,這種做法可以降低BACnet/IP控制器的工作負荷,每個控制器只用維護很少量的資源,節約控制器的制造成本,甚至可以用單片機實現。但是,缺點是顯而易見的:這種做法必將占用大量的Device實例號,不易于BACnet的大規模組網與實現。

圖1 傳統BACnet/IP終端設備模型
2.2 改進的BACnet/IP終端模型
鑒于前述的傳統BACnet/IP終端模型的缺點,提出了一種改進的終端模型:一個BACnet設備由一個Device對象和多個其他對象組成,相同的對象類型則由對象實例域進行區分,比如溫度對象和濕度對象在BACnet標準中都是用Analog Input對象來表示,但是相同對象可進一步用不同的對象實例號來區分。若遠端試圖訪問本BACnet終端的濕度對象,則需要在BACnet/IP網絡上通過Device對象實例號與濕度對象對應的Analog Input對象實例號來訪問。
相比與傳統的BACnet/IP終端模型,改進后的終端中每個BACnet/IP控制器可以負責不同的工作,擁有多種不同的對象及屬性,可以提供更多的服務,同時大大減少Device對象的使用量,適合BACnet網絡的大規模實現。
傳統與改進后的BACnet/IP終端模型如圖2所示。

圖2 傳統與改進后的BACnet/IP終端模型
2.3 基于無線的BACnet/IP終端
在改進的BACnet/IP終端模型中,BACnet控制器與底層控制器間仍然是以有線的方式進行通信,有線通信對于BACnet/IP通信環境的搭建以及以后的擴展維護都是一個極大的阻礙。所以本文采用無線通信的方案進行BACnet/IP終端的實現,其模型如圖3所示。當BACnet/IP終端收到經由IPv4網絡發送而來的BACnet服務原語,會經過其內部的BACnet協議棧確認為對象訪問類服務,控制器需要操作無線模塊對特定的無線采集DDC節點進行訪問,如讀取當前溫度值、調節照明亮度等。

圖3 基于無線的BACnet/IP終端
將無線通信的方法應用于BACnet,可以使得BACnet組織更加靈活,更加方便地增加和移除設備。
基于上述模型,終端需要同時提供多個對象的服務、IP網絡服務,以及和無線模塊之間通信,這對于硬件資源的要求較高,所以終端在硬件微處理器的選擇芯片為三星公司的S3C2440A處理器,而在無線模塊上選擇是CC1101無線芯片。圖4是終端控制器的硬件結構圖,各部分的功能如下:
① S3C2440A控制核心板,負責嵌入式Linux操作系統及BACnet協議棧的運行。
② USB模塊,主要是外接無線網卡,可以通過WLAN將終端接入IP互聯網中,接無線網卡的好處是進一步省去了IP網絡布線的麻煩。
③ UART模塊,使終端可以通過RS232接口和PC機進行通信,主要是為了調試。
④ 無線模塊,終端側的無線節點,和底層無線采集節點進行通信。
⑤ LCD觸摸屏,用于和用戶交互,平時工作時可以將背光關掉以節能。

圖4 BACnet/IP終端硬件設計
基于前面的BACnet/IP終端模型與硬件平臺,軟件平臺上選擇嵌入式Linux作為平臺,ARM9和Linux的配置也是當前較為先進和流行的嵌入式平臺。軟件設計部分主要涉及嵌入式Linux系統的搭建與裁剪、BACnet/IP協議棧的移植,以及BACnet/IP協議棧和無線模塊之間的交互。
4.1 嵌入式Linux系統構建
在ARM9處理器上移植與構建嵌入式Linux系統目前已經有比較成熟的方案,在移植Linux系統時不要裁剪網絡功能,需要將IPV4與IPV6網絡功能保證完全,因為BACnet/IP協議正是基于TCP/IP協議棧的UDP層,而保留IPV6協議棧是考慮到BACnet也可以架構與IPV6網絡之上,這是需要注意的。
4.2 BACnet/IP協議棧的移植
BACnet/IP協議棧的實現上,本文采用移植BACnet Stack Protocol工程。BACnet Stack Protocol是Steve Karg在2005年于著名的開源網站sourceforge上維護的一個BACnet協議棧開源工程,它完整地實現了BACnet協議標準,并且可以方便地移植應用于多種平臺上,如WIN32、Linux、PIC單片機、ARM7處理器等,目前最新的版本是bacnet-stack-0.8.0。
由于BACnet Stack Protocol工程采用C語言開發,所以可以很方便地移植于嵌入式Linux系統中,具體來說只要在編譯的時候選擇相應處理器對應的編譯器即可。BACnet Stack Protocol之所以具有高度的可移植性,歸功于其模塊化的編程方法和BACnet協議棧的分層設計。在將BACnet Stack Protocol移植于不同硬件平臺時,只需要修改對應數據鏈路層部分,而網絡層和應用層代碼無需修改,這和IP協議棧能應用于不同硬件場合的思想也是一致的。
4.3 無線模塊與BACnet/IP通信
由于無線模塊只負責控制著底層的DDC,相應于BACnet協議中的應用服務,也就是說無線模塊只需要負責和BACnet協議棧中的應用層進行通信,當應用層協議數據單元(APDU)需要獲取DDC的數據時,即調用無線模塊進程與之進行通信。整個系統的軟件設計如圖5所示。

圖5 BACnet/IP終端軟件設計
系統的軟件由以下幾部分模塊組成:
① Linux內核模塊,主要用于IP網絡協議棧以及各種底層驅動(如LCD屏幕,無線模塊驅動)的實現。
② BACnet協議棧模塊,主要用于移植BACnet Protocol Stack開源工程。
③ 無線模塊,用戶態的無線模塊進程用于和底層的各個無線采集節點進行通信,而通信的上層進程為BACnet協議棧。
④ Web模塊,提供Web服務,使得用戶可以通過IP網絡的http服務遠程訪問和控制終端。

Research and Design of Intelligent Terminal Model of BACnet/IP
Zheng Xiang,Zhang Xun
(Electronic Information Institute,Hangzhou Dianzi University,Hangzhou 310018,China)
BACnet/IP is the protocol linking BACnet and IPV4 Internet. The paper puts forward a terminal model that combined BACnet/IP and wireless communication, and applys the open source projects “BACnet Protocol Stack" on this model. With the ARM9 processor and CC1101 wireless communication module hardware platform, this terminal controller complies with BACnet/IP communication protocol well. The paper focuses on building the ARM9 embedded hardware and software platform, BACnet Protocol Stack migration and improvement, as well as wireless module with BACnet protocol stack, to provide interoperable Web services and terminals.
BACnet/IP;ARM9;CC1101; BACnet Protocol Stack;building controller
TP368.1
A