廣東工業(yè)大學(xué) 鐘其源
BACnet報(bào)文分析
廣東工業(yè)大學(xué) 鐘其源
所謂通信協(xié)議,是指計(jì)算機(jī)網(wǎng)絡(luò)中各自主節(jié)點(diǎn)在進(jìn)行數(shù)據(jù)(包括控制信息)交換時(shí)必須遵守事先約定的規(guī)程或規(guī)則。BACnet標(biāo)準(zhǔn)作為智能樓宇自控網(wǎng)絡(luò)的通信協(xié)議,網(wǎng)絡(luò)里各個(gè)子系統(tǒng)的互操作要求它們必須認(rèn)識(shí)這個(gè)交流的“語言”。而很多非標(biāo)準(zhǔn)的子系統(tǒng)和控制器,無法接入BACnet系統(tǒng)上,這就需要我們找到一個(gè)“翻譯“,也就是網(wǎng)關(guān),協(xié)議的轉(zhuǎn)換器,這時(shí)候我們就會(huì)覺得對BACnet報(bào)文分析顯得尤為重要。
BACnet協(xié)議;報(bào)文分析;編碼
BACnet的報(bào)文其實(shí)就是一串?dāng)?shù)字,我們可以借助VTS軟件對主流的應(yīng)用服務(wù)進(jìn)行分析。而要全面搞懂報(bào)文,必須深入了解BAC-net協(xié)議本身結(jié)構(gòu),因?yàn)槭荁ACnet網(wǎng)絡(luò)與外界Internet連接,它重新定義一個(gè)微協(xié)議層,稱為虛擬鏈路數(shù)據(jù)層,“BVLL“,位于網(wǎng)絡(luò)層和ip協(xié)議層之間,作用是進(jìn)行BACnet廣播管理,并提供向其他通信協(xié)議擴(kuò)展的擴(kuò)展機(jī)制,這種擴(kuò)展方式利用ip用戶數(shù)據(jù)包(UDP)進(jìn)行BACnet信息傳輸,UDP是無連接服務(wù),優(yōu)點(diǎn)是靈活方便和比較速度,但是不能保證不丟包,VTS測試軟件也是基于UDP進(jìn)行數(shù)據(jù)的傳輸,在報(bào)文上把UDP的端口號(hào)”BAC0“放在目標(biāo)地址的ip地址后。至于其他層協(xié)議的數(shù)據(jù)結(jié)構(gòu)編碼我將結(jié)合VTS軟件和實(shí)際的例子給大家分析講解。
圖1
現(xiàn)在我對本地的BACnet設(shè)備發(fā)送一個(gè)廣播who-is,前面四個(gè)字節(jié)表示一個(gè)廣播地址,“C0 A8 FF BA“為”192.168.1.255“,”BA C0“為UDP的端口號(hào)。接下來的四個(gè)字節(jié)為虛擬鏈路層的報(bào)文結(jié)構(gòu),”81 0A 00 0C“,”81”表示低層通信協(xié)議僅限為ip協(xié)議,是一種特定類型,”0A“是BVLL協(xié)議報(bào)文根據(jù)功能區(qū)分的第十種報(bào)文類型,表示用于對等設(shè)備節(jié)點(diǎn)間信息的單播。目前定義了12種類型,”0A“是比較主流的類型,”00 0C“表示協(xié)議報(bào)文的總長度,由以上報(bào)文數(shù)據(jù)可知道,從”81“開始到”08“的確只有12個(gè)字節(jié)長度。
接著是網(wǎng)絡(luò)層。路由就在網(wǎng)絡(luò)層負(fù)責(zé)轉(zhuǎn)發(fā),它如果是本地內(nèi)局域網(wǎng)數(shù)據(jù)轉(zhuǎn)播時(shí),NPDU中的所有與地址有關(guān)的域均可以缺省,網(wǎng)絡(luò)層可以根據(jù)數(shù)據(jù)鏈路層中的DA(本地MAC目的地址)和SA(本地MAC源地址)確定發(fā)送方和接收方的地址。所以在該who-is服務(wù)請求是本地廣播,查詢到達(dá)某一BACnet網(wǎng)絡(luò)的路由器,類型編號(hào)為”00”,在上述報(bào)文中是“01 20 FF 00 FF”,“01”說明BAC-net協(xié)議的版本號(hào),規(guī)定此字節(jié)為1.“X20”是控制域,即“0010 0000”表示BACnet報(bào)文類型,存在目標(biāo)地址和網(wǎng)絡(luò)號(hào)的一個(gè)正常報(bào)文,其中“FF”表示最終目的網(wǎng)絡(luò)號(hào),為“FFFF”時(shí)表示全局廣播,“00”表示目的地址的長度為0,還有一個(gè)“FF”是Hop Count(轉(zhuǎn)發(fā)計(jì)數(shù))表示用于記錄報(bào)文經(jīng)過BACnet路由器的次數(shù),因?yàn)樗且粋€(gè)本地廣播的報(bào)文,如果DNET存在,則此域必須存在,且初始化為X”FF”。
接著到應(yīng)用層的報(bào)文數(shù)據(jù)結(jié)構(gòu),這一層相對復(fù)雜,服務(wù)原語分證實(shí)服務(wù)和非證實(shí)服務(wù),同樣由數(shù)據(jù)報(bào)文的格式?jīng)Q定。上述報(bào)文中“10 08”為應(yīng)用層的報(bào)文,其中“10”即“0001 0000”表示的是第一種類型非證實(shí)服務(wù)的請求原語,它只是單向的尋找設(shè)備,不是證實(shí)服務(wù),沒有SEG(報(bào)文分段),沒有more-follows(報(bào)文分段接受窗口)?!?8”是BACnet非證實(shí)服務(wù)里面包括的CHOICE第8鐘類型選擇。圖2所示表示這類服務(wù)的框架。
圖2 服務(wù)框架圖
BACnet協(xié)議里面定義35個(gè)服務(wù)原語類型,每一種類型的選擇都有明確的編碼規(guī)則,從上述簡單的一個(gè)非證實(shí)服務(wù),可知道里面的選擇性很多,比如BVLL協(xié)議的功能、不是本地廣播都會(huì)相應(yīng)的改變數(shù)據(jù)報(bào)文,不過它們的對應(yīng)關(guān)系還是相當(dāng)明確,只要熟知了報(bào)文,對開發(fā)BACnet協(xié)議轉(zhuǎn)其他協(xié)議的網(wǎng)關(guān)具有很好的指導(dǎo)作用。證實(shí)服務(wù)涉及到用戶數(shù)據(jù)編碼,里面有很多應(yīng)用標(biāo)記,上下文標(biāo)記,雖然麻煩,但是規(guī)則還是差不多,根據(jù)它們的編碼結(jié)構(gòu)圖慢慢解析就可以。
[1]梁華,劉賢德,惠曉實(shí).基于面向?qū)ο蠹夹g(shù)的樓宇自控網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)[J].智能建筑與城市信息,2013,10(12):35-37.
[2]董春橋.BACnet標(biāo)準(zhǔn)在我國推廣和應(yīng)用的思考[J].智能建筑與城市信息,2013,10(12):33-35.
[3]石巖,劉賢德,惠曉實(shí).BACnet 的服務(wù)[J].工程設(shè)計(jì)CAD與智能建筑,2000,7(2):12-16.
鐘其源,廣東工業(yè)大學(xué)碩士研究生,研究方向:智能樓宇。