樓宇自控系統(tǒng)中BACnet網(wǎng)絡(luò)節(jié)點(diǎn)平臺(tái)的開發(fā)
李里,付東翔
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海200093)
摘要針對(duì)樓宇自動(dòng)化中BACnet協(xié)議的實(shí)現(xiàn)及協(xié)議棧移植的問(wèn)題,提出了對(duì)協(xié)議棧交互模型簡(jiǎn)要的設(shè)計(jì)方法,介紹了移植到STM32開發(fā)板的過(guò)程。該方法分析了協(xié)議結(jié)構(gòu)中應(yīng)用層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層的實(shí)現(xiàn)過(guò)程。移植以BACnet-stack-0.8.2版本源代碼為樣本,根據(jù)標(biāo)準(zhǔn)對(duì)象的功能需求和硬件配置對(duì)BACnet協(xié)議棧進(jìn)行剪裁和移植。實(shí)驗(yàn)結(jié)果使STM32開發(fā)板成為一個(gè)BACnet網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)備,能通過(guò)RS485與PC機(jī)上的虛擬設(shè)備進(jìn)行通信,具有讀寫屬性等服務(wù)的能力。
關(guān)鍵詞BACnet協(xié)議;STM32平臺(tái);移植;通信
收稿日期:2015-04-22
作者簡(jiǎn)介:李里(1991—),男,碩士研究生。研究方向:樓宇自動(dòng)化。E-mail:1136791564@qq.com。付東翔(1971—),男,副教授。研究方向:嵌入式系統(tǒng),樓宇自動(dòng)化。
doi:10.16180/j.cnki.issn1007-7820.2015.12.025
中圖分類號(hào)TN915.04;TP29文獻(xiàn)標(biāo)識(shí)碼A
Development of BACnet Network Node Platform
LI Li,FU Dongxiang
(School of Optical-Electrical and Computer Engineering,University of Shanghai for
Science and Technology,Shanghai 200093,China)
AbstractThis paper introduces the application of BACnet protocol and transplantation of protocol stack,proposes a brief method on designing stack’s interactive model,and presents the process of transplanting into STM32 demoboard.This method analyzes the implementation process of every layer in BACnet’s structure including application layer,network layer and data link layer.Transplantation is based on the BACnet-stack-0.8.2 version,with the BACnet stack tailored and transplanted according to standard objects’ function and hardware configuration.The STM32 demoboard is transformed into a BACnet node device which can communicate with virtual device in PC through RS485 and fulfill services like read and write properties.
KeywordsBACnet protocol;STM32 platform;transplant;communication
智能建筑的應(yīng)用正在迅速發(fā)展,而作為樓宇自控系統(tǒng)中唯一的國(guó)際標(biāo)準(zhǔn),BACnet(Building Automation and Control Networks)標(biāo)準(zhǔn)是專門針對(duì)樓宇自動(dòng)化和控制系統(tǒng)開發(fā)的一個(gè)標(biāo)準(zhǔn)數(shù)據(jù)通信協(xié)議,目的是使所有樓宇自控設(shè)備互聯(lián)和信息共享,最終實(shí)現(xiàn)互動(dòng)與互操作。
BACnet技術(shù)的應(yīng)用在近年越來(lái)越廣泛,國(guó)外多家公司如Alerton、Honeywell等都在生產(chǎn)符合BACnet標(biāo)準(zhǔn)的樓宇自控設(shè)備。而國(guó)內(nèi)對(duì)BACnet的研究還有所欠缺:(1)在工程應(yīng)用上,即使采用BACnet標(biāo)準(zhǔn),也多是引進(jìn)國(guó)外的產(chǎn)品和技術(shù)。(2)非ISO標(biāo)準(zhǔn)的應(yīng)用遠(yuǎn)超BACnet國(guó)際標(biāo)準(zhǔn)的應(yīng)用[1]。因此,深入研究BACnet協(xié)議,對(duì)我國(guó)智能建筑領(lǐng)域未來(lái)的發(fā)展是必要的。
1BACnet協(xié)議的分析
1.1BACnet的網(wǎng)絡(luò)特點(diǎn)
BACnet網(wǎng)絡(luò)是一個(gè)局域網(wǎng),由一個(gè)或多個(gè)網(wǎng)段通過(guò)中繼器或網(wǎng)橋在物理層上互連而成,每個(gè)網(wǎng)絡(luò)擁有唯一的地址空間,因此通過(guò)在物理層和數(shù)據(jù)鏈路層上連接到網(wǎng)段的設(shè)備,可利用MAC地址實(shí)現(xiàn)報(bào)文的過(guò)濾[2]。
為滿足各種不同網(wǎng)絡(luò)應(yīng)用的需求,BACnet協(xié)議沒(méi)有嚴(yán)格規(guī)定其網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。對(duì)于數(shù)據(jù)鏈路/物理層,BACnet提供了5種選擇方案:ISO 8802-3(以太網(wǎng))、ARCNET、MS/TP(主從/令牌Master-Slave/Token-Passing)、Lon Talk和PTP。本文研究選擇了MS/TP協(xié)議,物理層采用EIA-485標(biāo)準(zhǔn)。
1.2BACnet對(duì)象模型
BACnet采用面向?qū)ο蟮募夹g(shù),這些對(duì)象是一種抽象的數(shù)據(jù)結(jié)構(gòu),對(duì)象之間不互相直接操作,而是通過(guò)服務(wù)實(shí)現(xiàn),服務(wù)即為訪問(wèn)和作用于對(duì)象的方法。對(duì)象的屬性包含有屬性標(biāo)識(shí)符、屬性的數(shù)據(jù)類型以及一致性代碼等。BACnet定義了23種對(duì)象和42種服務(wù),在這23個(gè)標(biāo)準(zhǔn)對(duì)象中,有些標(biāo)準(zhǔn)對(duì)象與硬件基本控制功能單元直接相對(duì)應(yīng),而大多數(shù)則反映了控制系統(tǒng)的控制邏輯和控制參數(shù)[3]。
2BACnet協(xié)議棧的實(shí)現(xiàn)
2.1協(xié)議棧的整體設(shè)計(jì)
根據(jù)BACnet給出的協(xié)議棧交互模型,將協(xié)議棧的設(shè)計(jì)分為3個(gè)層次:應(yīng)用層、網(wǎng)絡(luò)層、鏈路層。
協(xié)議棧中數(shù)據(jù)處理進(jìn)程如圖1所示,數(shù)據(jù)鏈路層用DL_UNITDATA.request和DL_UNIT-DATA.indication原語(yǔ)同網(wǎng)絡(luò)層交換MPCI(MAC層協(xié)議控制信息)和NPDU(網(wǎng)絡(luò)層協(xié)議數(shù)據(jù)單元)。網(wǎng)絡(luò)層使用NL_UNIT-DATA.request原語(yǔ)和NL_UNITDATA.indication原語(yǔ),同應(yīng)用層交換NPCI(網(wǎng)絡(luò)層協(xié)議控制信息)和 APDU(應(yīng)用層協(xié)議數(shù)據(jù)單元)[4]。
圖1 BACnet協(xié)議棧數(shù)據(jù)進(jìn)程圖
2.2MS/TP數(shù)據(jù)鏈路層的實(shí)現(xiàn)
MS/TP是一個(gè)主從/令牌傳遞的數(shù)據(jù)鏈路協(xié)議,物理層采用RS-485通信標(biāo)準(zhǔn)。數(shù)據(jù)鏈路層接收并校驗(yàn)來(lái)自物理層的數(shù)據(jù)幀,解析該幀并上傳到網(wǎng)絡(luò)層,接收從網(wǎng)絡(luò)層傳遞來(lái)的數(shù)據(jù)報(bào)文,并封裝成幀傳遞給物理層,同時(shí)管理和維護(hù)MS/TP網(wǎng)絡(luò)中的令牌。
MS/TP鏈路層包含的子模塊及其功能如下[5]:(1)設(shè)備(主節(jié)點(diǎn))啟動(dòng)模塊,主要完成各 種數(shù)據(jù)與變量的初始化處理;(2)接收模塊,主要完成接收幀狀態(tài)機(jī)描述的內(nèi)容;(3)發(fā)送模塊,主要完成主節(jié)點(diǎn)狀態(tài)機(jī)描述的內(nèi)容;(4)串口控制模塊,完成串口數(shù)據(jù)幀收發(fā),包括對(duì)UART寄存器中存取數(shù)據(jù);(5)網(wǎng)絡(luò)層接口模塊,完成MS/TP實(shí)體與BACnet網(wǎng)絡(luò)層實(shí)體通信服務(wù)。
2.3網(wǎng)絡(luò)層的實(shí)現(xiàn)
網(wǎng)絡(luò)層的功能就是屏蔽數(shù)據(jù)鏈路層的差異,并接收、發(fā)送和處理網(wǎng)絡(luò)層報(bào)文。BACnet網(wǎng)絡(luò)層根據(jù)樓宇自控網(wǎng)絡(luò)的特點(diǎn)對(duì)ISO-RM網(wǎng)絡(luò)層進(jìn)行簡(jiǎn)化,具有較高的路由效率,以滿足樓宇設(shè)備信息交換和實(shí)時(shí)性的要求。網(wǎng)絡(luò)層報(bào)文的處理流程如圖2所示[6]。
圖2 網(wǎng)絡(luò)層報(bào)文處理流
2.4應(yīng)用層的實(shí)現(xiàn)
應(yīng)用層負(fù)責(zé)BACnet的APDU的發(fā)送、接收、編碼、解碼以及與應(yīng)用程序的交互,其設(shè)計(jì)分為5個(gè)模塊:API接口模塊、BACnet服務(wù)模塊、BACnet對(duì)象模塊、狀態(tài)機(jī)模塊以及BACnet數(shù)據(jù)類型編/解碼模塊,如圖3所示。
3協(xié)議棧的移植與測(cè)試
實(shí)驗(yàn)所用硬件主要由奮斗STM32開發(fā)板V5組成,該開發(fā)板帶有以太網(wǎng)接口和RS485接口。處理器處理數(shù)據(jù)與控制系統(tǒng),以太網(wǎng)接口與RS485負(fù)責(zé)對(duì)現(xiàn)場(chǎng)總線上的數(shù)據(jù)進(jìn)行收發(fā)。
將STM32開發(fā)板通過(guò)J-link與PC連接,在PC上使用Keil uVision4軟件開發(fā)環(huán)境完成對(duì)BACnet協(xié)議棧源代碼的修改、編 譯、調(diào)試以及對(duì)開發(fā)板的寫入。實(shí)驗(yàn)使用的BACnet源代碼為BACnet-stack-0.8.2版本,同時(shí)用到的還有自ST官網(wǎng)上下載的STM32的固件庫(kù),版本為V3.5。
3.1協(xié)議棧源代碼的處理
在協(xié)議棧的目錄中可找到專門適用于stm32f10x開發(fā)平臺(tái)的程序文件,將其拷貝到Keil里新建的工程文件中,然后將用到的STM32部分固件庫(kù)添加進(jìn)入。因?yàn)楸菊n題在數(shù)據(jù)鏈路層選擇了MS/TP,所以需要在源代碼文件config.h中首先定義BACDL _MSTP以替代缺省設(shè)置的BACnet/IP。
圖3 應(yīng)用層結(jié)構(gòu)圖
在工程中添加了rp.c、wp.c、iam.c、whois.c等源代碼文件及相對(duì)應(yīng)的句柄文件后,理論上便可實(shí)現(xiàn)ReadProPerty、Write-ProPerty、I-Am、Who-is等服務(wù)。BACnet協(xié)議的初始化函數(shù)如下
void BACnet_init(
void)
{ dlmstp_set_mac_address(255);
dlmstp_set_max_master(127);
/* 初始化數(shù)據(jù)鏈路層 */
dlmstp_init(NULL);
/* 初始化對(duì)象 */
Device_Init(NULL);
/* 建立處理證實(shí)服務(wù)和無(wú)法識(shí)別服務(wù)的程序 */
apdu_set_unrecognized_service_handler_handler
(handler_unrecognized_service);
/* 通過(guò)處理who-is報(bào)文來(lái)支持動(dòng)態(tài)設(shè)備綁定 */
apdu_set_unconfirmed_handler(
SERVICE_UNCONFIRMED_WHO_IS,handler_who_is);
apdu_set_unconfirmed_handler(SERVICE _UNCONFIRMED_WHO_HAS,handler_who_has);
/* 對(duì)支持的所有確認(rèn)服務(wù)建立句柄 */
/* 對(duì)象訪問(wèn)服務(wù),其中讀屬性服務(wù)必不可少 */
apdu_set_confirmed_handler(SERVICE_ CONFIRMED_READ_PROPERTY,
handler_read_property);
apdu_set_confirmed_handler(SERVICE_
CONFIRMED_READ_PROP_MULTIPLE,
handler_read_property_multiple);
/* 控制通訊使得被請(qǐng)求時(shí)可以保持空閑狀態(tài) */
apdu_set_confirmed_handler(SERVICE_
CONFIRMED_DEVICE_COMMUNICA
-TION_CONTROL,handler_device_communication_control;
/* 為DCC(DeviceCommunicationControl)啟動(dòng)循環(huán)1 s定時(shí)器*/
timer_interval_start_seconds(&DCC_Timer,DCC_CYCLE_SECONDS);
/* 發(fā)送I_am報(bào)文建立連接 */
Send_I_Am(&Handler_Transmit_Buffer[0]);
}
對(duì)于本文節(jié)點(diǎn)設(shè)備中對(duì)象屬性的設(shè)置,應(yīng)以要求實(shí)現(xiàn)的具體功能為準(zhǔn)。若作為基于BACnet標(biāo)準(zhǔn)的現(xiàn)場(chǎng)控制器來(lái)使用,除了Device對(duì)象是必須的之外,還應(yīng)包括Analog Input(模擬輸入)、Analog Output(模擬輸出)、Binary Input(數(shù)字輸入)等標(biāo)準(zhǔn)對(duì)象。而在標(biāo)準(zhǔn)對(duì)象中,規(guī)定所有對(duì)象必須定義的有以下3個(gè)屬性項(xiàng):Object_Identifier(對(duì)象標(biāo)志符)、Object_Name(對(duì)象名稱)、Object_Type(對(duì)象類型)[7]。需要注意的是,存在多個(gè)BACnet設(shè)備時(shí),同一個(gè)BACnet網(wǎng)絡(luò)中每個(gè)設(shè)備的Device 對(duì)象必須具有唯一的對(duì)象標(biāo)識(shí)符,例如屬性中的對(duì)象實(shí)例可以在0~4 194 303中任意選取配置,但不可以重復(fù),這樣做的目的是對(duì)不同設(shè)備進(jìn)行識(shí)別[8]。
物理層次的初始化關(guān)鍵代碼如下:
timer_init();
lse_init();
led_init();
rs485_init();
BACnet_init();
timer_interval_start(&Blink_Timer,125);
在經(jīng)過(guò)調(diào)試、編譯無(wú)誤后,通過(guò)J-link將程序?qū)懭隨TM32開發(fā)板中,然后將開發(fā)板通過(guò)RS485串口轉(zhuǎn)USB與PC相連。
3.2設(shè)備硬件
開發(fā)板中的32位STM32F103vet6芯片由意法半導(dǎo)體(ST)公司出品,其內(nèi)核是Cortex-M3,提供最高72 MHz工作頻率,擁有64 kB的RAM,程序內(nèi)存大小為512 kB,有2個(gè)12位模數(shù)轉(zhuǎn)換器及1 μs轉(zhuǎn)換時(shí)間,帶有以太網(wǎng)接口和RS485接口。RS485采用3.3 V低功耗全雙工收發(fā)器芯片SP3490,數(shù)據(jù)傳輸速率高達(dá)100 Mbit·s-1。同時(shí)開發(fā)板還擁有GPIO接口、USART2接口、CAN接口和攝像頭接口等多種外設(shè),可實(shí)現(xiàn)多種應(yīng)用功能[9]。
圖4 硬件展示
3.3協(xié)議棧的測(cè)試
測(cè)試軟件VTS(Visual Test Shell)是一個(gè)專用于測(cè)試樓宇自動(dòng)化系統(tǒng)中各種設(shè)備的BACnet功能性的協(xié)議測(cè)試工具,且運(yùn)行于 Windows平臺(tái)[10]。首先在VTS中配置好設(shè)備、對(duì)象、設(shè)備實(shí)例、端口以及別名等屬性,然后便可通過(guò)Send選項(xiàng)進(jìn)行功能性測(cè)試,測(cè)試內(nèi)容主要包括報(bào)警與事件服務(wù)、文件訪問(wèn)服務(wù)、對(duì)象訪問(wèn)服務(wù)、遠(yuǎn)程設(shè)備管理服務(wù)和虛擬終端服務(wù),這里以對(duì)象訪問(wèn)服務(wù)中的讀屬性服務(wù)為例進(jìn)行說(shuō)明。
圖5為VTS中對(duì)ReadProperty服務(wù)測(cè)試的軟件截圖,可看到設(shè)備做出了正確的響應(yīng)回復(fù),成功讀取了設(shè)備中二進(jìn)制值對(duì)象的名稱、當(dāng)前值以及標(biāo)識(shí)符等屬性。上述實(shí)驗(yàn)結(jié)果表明,經(jīng)過(guò)對(duì)BACnet協(xié)議棧的移植,STM32開發(fā)板已經(jīng)可作為一個(gè)BACnet網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)備進(jìn)行通信。
圖5 VTS截圖
4結(jié)束語(yǔ)
通過(guò)對(duì)BACnet協(xié)議棧的分析和移植,在STM32平臺(tái)上實(shí)現(xiàn)了BACnet網(wǎng)絡(luò)節(jié)點(diǎn)通信功能,取得了良好效果,可將STM32開發(fā)板作為一個(gè)BACnet現(xiàn)場(chǎng)級(jí)設(shè)備用于BACnet網(wǎng)絡(luò)中,為開發(fā)基于BACnet具有通信功能的樓宇自控設(shè)備奠定了基礎(chǔ)。
參考文獻(xiàn)
[1]洪敦志.基于BACnet協(xié)議研究與實(shí)現(xiàn)[D].上海:華東師范大學(xué),2012.
[2]吳振洲.基于STM32的BACnet協(xié)議設(shè)計(jì)研究[J].湖北函授大學(xué)學(xué)報(bào),2012,25(8):104-105.
[3]張瑞.基于ARM9的BACnet現(xiàn)場(chǎng)控制器研究[D].西安:西安科技大學(xué),2008.
[4]邱展輝.BACnet路由器研究與設(shè)計(jì)[D].上海:上海理工大學(xué),2014.
[5]董春橋.智能樓宇BACnet原理與應(yīng)用[M].北京:電子工業(yè)出版社,2003.
[6]冷正龍.智能建筑中 BACnet MS/TP 控制模塊研究與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2012.
[7]曹坤.嵌入式Linux中BACnet協(xié)議棧的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2004.
[8]楊繼東,王巍,苗淼.BACnet在樓宇自動(dòng)化中的應(yīng)用[J].科技廣場(chǎng),2012(7):42-44.
[9]王蘭英.基于STM32嵌入式系統(tǒng)的μCGUI移植與實(shí)現(xiàn)[J].四川理工學(xué)院學(xué)報(bào):自然科學(xué)版,2012,25(1):56-58.
[10]Liu Q,Ren P.Design and implementation of MS/TP in embedded system[C].Shanghai:Second IEEE Conference on Industrial Electronics and Applications,2007.