最權威的BACnetIP開發(fā)經驗分享_第1頁
最權威的BACnetIP開發(fā)經驗分享_第2頁
最權威的BACnetIP開發(fā)經驗分享_第3頁
最權威的BACnetIP開發(fā)經驗分享_第4頁
最權威的BACnetIP開發(fā)經驗分享_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

最權威的BACnetIP開發(fā)經驗分享介紹BACnetIP開發(fā)經驗分享 --什么是 BACnet/IP介紹BACnet是ADataCommunicationProtocolforBuildingAutomationandControlNetwork的簡稱,是一種為樓宇自控網絡制定的數據通訊協(xié)議。隨著因特網的迅猛發(fā)展,智能建筑與因特網之間產生了越來越多的結合點,可以看到目前基于因特網的智能建筑應用技術和產品大批涌現(xiàn)出來。而把UDP/IP協(xié)議與BACnet標準相結合,使用UDP/IP協(xié)議來實現(xiàn)BACnet網絡的互聯(lián)與報文傳輸,必將為智能建筑向開放性和靈活性的發(fā)展提供更廣闊的空間。實現(xiàn)IP互聯(lián)BACnet網絡技術,一種技術在BACnet標準附件H中進行了描述,稱之為“隧道”技術,其設備稱之為BACnet/IP分組封裝拆裝設備,簡稱PAD,其作用像一個路由器,將BACnet報文通過IP互聯(lián)網傳送。另一種技術在附件 J中進行了描述,稱之為BACnet/IP網絡技術,設備稱之為BACnet/IP設備,其作用就是直接將BACnet報文封裝進IP幀中進行傳輸。用PADffl建BACnet互聯(lián)網隧道技術是指要實現(xiàn)這樣一個過程,首先將數據封裝在一個網絡協(xié)議的數據包內,然后使用該協(xié)議進行數據傳輸,最后在它們到達其目的地時解開封裝。為了通過 IP網絡連接 BACnet網絡,在每一個BACnet網絡中要配置一個稱為PAD勺特殊類型的路由器,其作用是通過IP網絡將兩個 BACnet網絡互連。PADM以是一個單獨的設備,也可以是樓宇控制設備的一部分功能。PAD的功能像一個BACnet路由器,當它接收到一個BACnet報文時,將該報文封裝進一個IP幀中,給出位于目標BACnet網絡中對應的PAD的IP地址,作為封裝幀的目標 IP地址,將此幀發(fā)送到IP互聯(lián)網中。接收方的PAD從IP幀中取出BACnet報文,并將其傳送給本地局域網內的目標設備。使用隧道傳輸技術的好處是,在將數據包發(fā)往遠程目的地之前,PAD設備可以修改數據包。為此,最常見的用法就是對數據包進行加密,從而形成一個安全的網絡。用BACnet/IP組建BACnet互聯(lián)網。1999年1月,常設標準方案135委員會(SSPC135而PAD基礎上改進、開發(fā)了新的互聯(lián)協(xié)議,稱為BACnet/IP,簡稱B/IP,作為BACnet標準附件J。B/IP路由器的主要作用就是直接將BACnet報文封裝進IP幀中進行傳輸。IP只取代BACnet標準體系結構中的鏈路層和物理層,并重新定義了一個微協(xié)議層 (MicoProtocolLayer)。該微協(xié)議層稱為BACnet虛擬鏈路層,簡稱為BVLL位于BACnet網絡層與IP協(xié)議之間,其作用是進行BACnet廣播管理,并提供向其他通信協(xié)議擴展的擴展機制。同時,為了充分利用IP協(xié)議棧,減少對 IP協(xié)議的影響,這種擴展方式利用IP用戶數據報

(UDP)進行BACnet信息傳輸。圖1為這種擴展方式的體系結構圖,該體系結構圖即為BACnet/IP體系結構。BACnet的層次OSI

BACnet的層次應用層BACcet應用層應用層網絡層BACn巳t網絡層網絡層圖-1BACnet/IP體系結構二、介紹BACnetIP開發(fā)經驗分享----工具準備篇。1網絡調試程序因為在BACnetIP開發(fā)中,開發(fā)者要時刻關心 BACnet數據包的狀態(tài),在這里僅給大家推薦2款串口監(jiān)視調試軟件。Ethereal這個工具很常見,在網絡上可以搜索到很多,筆者用的是比較舊的版本,剛剛開始 TCP/IP或者UDP/IP廣播網絡探索階段,基本上都是依靠該軟件,信息 分析結果比較可靠也比較權威,但是在特定環(huán)境下也是存在著分析結果不太準確的狀況, 這就需要配合其他軟件一起使用,來分析誰對誰錯??赡苁枪P者使用的版本 太老的緣故,該工具無法解析 BACnet數據包。Wireshark筆者感覺在分析BACnetIP數據包方面,Wireshark還是比較簡單易用,它能夠解析絕大多數BACnet數據包格式,而且一個便利之處就在于您可以下載 BACnet開發(fā)前輩Save的BACnet開發(fā)中的數據結構結果, 從中來分析BACnetIP數據的組成狀況,在初級開發(fā)階段,該工具相當值得推薦,而且它會把 Ethernet數據包、BVLL層數據包、UDP數據包、IP數據包、BACnetNPDU、BACnetAPDU等所有層次的數據包都一層一層的分撥開來,分析起來層次關系相當明晰。該工具在BACnet下載頁面中也有提供。Sniffer在談到網絡通訊數據包的捕捉方面, 好些年長的技術大佬都推薦 Sniffer,筆者沒有使用過該工具,如果您的開發(fā)環(huán)境發(fā)現(xiàn)其他的網絡監(jiān)視工具都不太理想的話,可以嘗試該工具。2數據包仿真軟件什么樣的BACnetIP數據包是準確的符合BACnetIP協(xié)議標準的數據包,這個是初級開發(fā)人員時常困惑的問題,筆者在初步接觸BACnet的時候,也是無從下手,好在筆者開發(fā)的條件比較充足,手上不僅有一個標準的BACnetIPDDC,還有一些前輩已經摸著石頭趟了一番BACnetIP開發(fā)的渾水,并且留下了一批槍支彈藥。2.1VTSVTS是BACnet開發(fā)認證的官方測試工具, 功能很好很強大,但是由于文檔有限,很多功能都需要慢慢挖掘,不過在后續(xù)章節(jié)中,筆者會給大家詳細介紹 VTS,并以圖式的方式給大家一個VTS使用的快速入門。注:在BACnet官方認證階段,BACnet是否符合BACnetBTL認證標準,也需要提供一個預先在 VTS中Pre-Scan的PICS腳本文檔,該文檔是BTL認證的重要組成部分。2.2BACbeatBACbeat也是筆者開發(fā)中經常用到的一款很不錯的 BACnet開發(fā)工具,他的數據包和數據分發(fā)方式,筆者認為借鑒作用很大,不過也有一些弊端,后續(xù)會和大家分享。三、介紹BACnetIP開發(fā)經驗分享--BACnetIP數據包篇。在BACnet中國技術聯(lián)盟的BACnet開發(fā)討論欄目中,已經介紹了相關的數據包格式,這里主要是分享一下, BACnetIP數據包EncodingDecoding中的注意事項。其網站鏈接如下: 什么是BACnet/IP介紹,最權威的BACnet/IP中文版介紹(組圖)BACnetIP的實現(xiàn),按照實現(xiàn)的硬件平臺,可以分為設備級(在樓宇自動化行業(yè)中主要是在DDC上以Firmware的方式實現(xiàn))和PC級實現(xiàn)(主要是作為BACnetIP的配置工具或仿真、調試工具在個人電腦上以執(zhí)行文件 EXE的方式實現(xiàn)),在后續(xù)的章節(jié)中,我們都假設為后面的這種實現(xiàn)方式,即在PC上以配置、調試工具的方式在Windows上的實現(xiàn)。BACnetIP數據包的接收BACnetIP是建構在UDP/IP協(xié)議棧之上的,BACnet協(xié)議在網絡通信上的實現(xiàn)。 為了進行設備的路由和擴展多網絡設備,引入了BVLL的概念,也就是BACnet虛擬邏輯鏈路層。引入該微型協(xié)議的目的就是實現(xiàn)跨不同網絡的設備管理,包括廣播消息、以及注冊外網設備(ForeignDevice),并且引入了BACnet廣播管理設備BBMD、和廣播分發(fā)表Broadcast-Distribution-Table的概念,就是為了 兼容不同網絡設備之間的通訊。涉及到BACnetIP數據包的接收,則要求BACnetIP開發(fā)技術人員具有一定的網絡開發(fā)經驗,為了接收BACnet數據包,首先要建立一個在 0xBAC0端口下的UDP/IP的Socket綁定,此處提醒開發(fā)人員就是為了能夠復用該 BACnet規(guī)定必須支持通訊端口 0xBAC0,開發(fā)人員應該建立一個包括選項為 SO_REUSEADDR的Socket,并且為了能夠進行廣播消息傳輸要添加上SO_BROADCAST的Socket選項。完成了建立Socket,設定了Socket選項,并且bind到一個端口,則進入recvfrom的阻塞式監(jiān)聽狀態(tài)就可以了,然后根據進來的數據包包頭來篩選出BACnet數據包,后續(xù)進行廣播數據、本地數據的分類解碼, 根據不同的BVLL->NPDU->APDU 的層層處理,如果有應答需求,把組好的 BACnet數據包再放到發(fā)送線程處理。那數據包如何接收合適呢,最簡單的解釋就是只要不影響您的 OS系統(tǒng)的其他任務的運行,采樣越快越好,這樣才不會造成通訊過程中數據包的丟失。BACnetIP數據包的發(fā)送數據包的發(fā)送小節(jié),主要是介紹 BACnetIP的非分段數據包發(fā)送過程。做為一個BACnetIPServer,有兩種數據包的發(fā)送方式,一種是對于每一個接收到的 Socket數據建立一個,接收->解析->發(fā)送的線程,處理整個Socket的生命周期內的事務;另一種方式是建立幾個獨立的循環(huán)狀態(tài)機,分別去處理接收 ->解析->發(fā)送的各個事務,把Socket的連接作為這些狀態(tài)機的一個參數傳入各個 BACnetIP狀態(tài)機進行循環(huán)處理,直到發(fā)送完數據結束該UDP/IP連接的生命周期。兩種方式只要處理得當,都是BACnetIPServer狀態(tài)機的不錯選擇。BACnetIP數據包的發(fā)送,其BVLL數據包頭部分,如果在消息優(yōu)先級上沒有特殊處理,可以直接反過程接收的BVLL數據包頭數據即可四、介紹BACnetIP開發(fā)經驗分享----狀態(tài)機篇。在BACnetMS/TP協(xié)議定義了3個有限狀態(tài)機。一個是接收數據幀狀態(tài)機(BACnetReceiveFrameFiniteStateMachine),2一個是Master節(jié)點狀態(tài)機(BACnetMasterNodeFiniteStateMachine),3一個是Slave節(jié)點狀態(tài)機(BACnetSlaveNodeStateMachine)。詳情參見相關的鏈接: 【百度谷歌原創(chuàng)排行榜-原創(chuàng)系列-置頂推薦】【絕對原創(chuàng)】BACnetMS/TPFF發(fā)經驗分享系列-003狀態(tài)機篇(組圖)而在BACnetIP部分,BACnet技術協(xié)會并沒有給出一個嚴格的BACnetIP的官方狀態(tài)機的開發(fā)指導,簡單分析原因在于BACnetIP的主要OSI映射部分,數據鏈路層和物理層是建構在成熟的UDP/IP基礎上的,而BVLL只是一個簡單的微協(xié)議,主要目的是實現(xiàn)BACnet協(xié)議開發(fā)互聯(lián)的要求,能夠將其他不同網絡的設備掛接至ijBACnetIPServer上,在這里只簡單介紹BACnetIPBVLL的Original-Unicast-NPDU,也就是在相同子網絡內部的設備直接的互聯(lián)。BVLL很大程度上Follow的是以太網Ethernet的封裝方式,只是一個增強版的Ethernent的邏輯鏈路層部分。下面就簡單介紹一下BVLL的組成。圖形化表示如下所示,BVLL長度描述1字節(jié)0x81代表BACnet/IP的BVLL功能碼1字節(jié)0x0a代表Original-Unicast-NPDU,非廣播的本地網絡數據長度2字節(jié)該長度為整個BACnet/IP數據包的長度,包括BVLL的類型、功能碼、長度和NPDU勺長度數據區(qū)N字節(jié)后面NPDU勺數據包或網絡分發(fā)表數據或Foreign設備注冊信息為了BACnet開發(fā)的統(tǒng)一性,在BACnetIP中同樣可以模仿BACnetMS/TP的結構,定義出接收狀態(tài)機和主節(jié)點處理狀態(tài)機,來完成 BACnetIPServer和Client之間的交互。只是接收狀態(tài)機中的串口接收部分要轉換成以 Socket為主的UDP/IP接收部分,主狀態(tài)機部分的時序控制主要根據Client的接入順序和NPDU中的消息優(yōu)先級部分進行排序處理,并在發(fā)送數據封包處理程序中進行 Socket的分發(fā)處理,完成一個服務器和客戶端 的數據交換過程。在BACnetIP開發(fā)經驗分享的本章節(jié)中,給大家介紹 BACnet開發(fā)--UDP/IP傳輸篇。在BACnet串口傳輸這個章節(jié)中,重點給大家介紹兩部分內容。1BACnet數據包的接收部分BACnet/IP的數據通訊架構在UDP/IP通訊協(xié)議之上,它的優(yōu)點是數據包的傳輸效率高,沒有太多的多余數據包信息,缺點是 UDP/IP屬于無連接的、非安全性的數據傳輸協(xié)議,不排除有丟包、錯誤數據包的情況發(fā)生,這就要求 BACnet協(xié)議的應用層去進行相關的處理,添加Retry機制,保障數據通 訊的穩(wěn)定和安全性。當BACnet/IP作為服務器端運行時,要保障有一個的比較大的網絡吞吐量,則一方面要有一個運行速度足夠強大的BACnet運行的硬件系統(tǒng),另一方面要對每一個呼入的BACnet客戶端進行多線程的處理,保障每一個BACnetClient的請求都能夠在BACnetClient的允許時間內給出解析和應答。BACnet數據包的發(fā)送部分在BACnet數據包的發(fā)送部分,如果 BACnet數據包字節(jié)個數不是很多的話,最好一次性的輸出。防止UDP/IP數據包在下層傳輸時,如果跨越 BACnet或標準Ethernet路由器,而造成應答的分段數據包不能按照順序到達,還需要在接受端進行數據包的分組和排序加重BACnet設備的通訊 處理時間和負載。BACnet開發(fā)注意事項:在 BACnet/IP數據包傳輸過程中,數據的處理要進行預期的篩選和判斷,防止無效的數據過多的影響后面的BACnet狀態(tài)機狀態(tài),造成 BACnet設備CPU的Loading過高,影響其他事務的處理過程。五、介紹BACnetIP開發(fā)經驗分享 優(yōu)化篇。在Windows操作系統(tǒng)中,如何實現(xiàn) BACnet/IP狀態(tài)機BACnet/IP協(xié)議屬于BACnet協(xié)議的AnnexJ的附錄部分程序,在最新版本的BACnet協(xié)議2008版本中,還沒有一個規(guī)范化的BACnetIP的狀態(tài)機。而市場上主流的BACnet廠商都已經提供了BACnet/IP的設備,所以如何實現(xiàn)一個 BACnet/IP的狀態(tài)機才能和眾多的樓宇自動化廠商的BACnet設備正常通訊。這就需要相關的樓宇自動化行業(yè)經驗和依靠BACnet咨詢培訓機構的指導。筆者多年的BACnet開發(fā)經驗告訴大家,工欲善其事,必先利其器,擁有一個經驗豐富的BACnet研發(fā)團隊,更需要一個高瞻遠矚的BACnet開發(fā)架構師。如果想得到更好的BACnet設備兼容性,一方面要保證狀態(tài)機設計規(guī)范,嚴格遵守 BACnet協(xié)議規(guī)定,另一方面要有豐富的BACnet設備、網絡設備的TCP/IP,UDP/IP的調試經驗,具體問題具體分析,針對特定的應用環(huán)境設計不同的BACnet/IP狀態(tài)機。如何提高BACnet設備的數據訪問速度由于BACnet/IP的特性是架構在Ethernet網絡環(huán)境中,這一特性和 BACnetMS/TP比起來就有很大的優(yōu)勢,不像 RS-485串行接口那樣,只能通過令牌環(huán) Token的模式,保障 BACnet設備通訊的正常進行。BACnet/IP可以充分利用當前的不斷升級的網絡運行環(huán)境,從100base的以太網到1000base的以太網,以及目前正在普及的光纖網絡,這些都保障了BACnet/IP可以達到幾倍于、幾十倍于 BACnetMS/TP網絡模式的數據訪問吞吐量。如何提高 BACnet設備的數據訪問速度的問題就只是在 BACnet軟件

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論