BACnet通訊協議是樓宇自動控制技術應用的數據通訊網絡標準。樓宇自動控制領域在BACnet協議出現之前很長的一段時間都是各個樓宇自動控制廠商使用各自公司自行設計的私有協議。私有協議的使用使各個公司生產的產品之間無法互聯。這給產品的維護和擴展帶來很大的障礙。
BACnet協議是爲了針對以上出現的問題,根據開放系統互聯模型(OSI)(ISO7498)而提出的。開放系統互聯模型採用分層結構,具有7層,解決了異構網絡的互聯通信。由於OSI模型所具有的功能是非常全面的,而在樓宇自控領域,我們只需要一些特定的功能,因此我們不需要完整的七層結構。因此,針對不同應用的網絡協議都會在這七層的基礎上進行剪裁。BACnet協議具有四層結構,而現在應用廣泛的TCP/IP通訊協議也是一種具有四層結構的網絡。
可見,針對不同應用的網絡,對七層的OSI模型進行簡化是極其必要的。因爲完整的OSI模型將需要大量的軟件和硬件成本,提供了大量在應用環境內不需要的功能。
BACnet協議具有四層結構,分別爲:物理層,數據鏈路層,網絡層,應用層。BACnet協議與標準OSI模型的各層對應關係如下:
放系統互聯模型(OSI) |
BACnet通訊協議 |
|
應用層 |
BACnet應用層 |
|
表示層 |
||
會話層 |
||
傳輸層 |
||
網絡層 |
BACnet網絡層 |
|
數據鏈路層 |
LLC |
BACnet數據鏈路層 |
MAC |
||
物理層 |
BACnet物理層 |
BACnet協議四層結構的每層功能如下:
BACnet物理層:物理層提供了連接設備和傳輸數據的比特流的方式。物理層對於通訊協議來說是必不可少的。它是上層所有數據封裝後產生可傳輸信號的層。是信號具體的產生層。
BACnet數據鏈路層:負責將數據組織成幀(frame)或者分組(packet),管理通信介質的訪問、尋址,以及完成一些差錯校正和流量控制的任務,這些都是BACnet所需要的,因此數據鏈路層是必不可少的。
BACnet網絡層:在一個或多個網絡中進行報文的路由、全局地址解析爲局部地址、協調異構網絡、流量控制、序列控制、差錯控制以及信道複用。
BACnet應用層:應用層爲應用程序提供API接口,也就是提供通信服務。BACnet應用層還包括了OSI模型裏表示層、會話層和傳輸層中BACnet所需要的功能。BACnet協議只需要上面三層中的很少一部分功能,因此爲了減少成本,將這些功能放在應用層。
一個BACnet網絡示意圖如下:
其中可以看到一個BACnet網絡的示意圖,有一些基本的概念:
1、 BACnet設備:任何可以使用BACnet協議進行通信的真實或者虛擬的設備叫BACnet設備。
2、 物理網段:BACnet設備與物理介質相連,物理介質稱爲物理網段。
3、 網段:一個或多個物理網段通過中繼器在物理層相連,形成一個BACnet網段
4、 中繼器(Repeater):工作在物理層,用於連接物理網段。因此中繼器工作在物理層。
5、 網橋(Bridge):網橋用於連接兩個局域網絡,從而擴大局域網絡的規模。由網橋連接起來的具有相同網絡地址的網段集合稱爲網絡。網橋是用於連接兩個網絡的,而現在普遍使用的交換機,是用於連接多個網絡進行數據交換的,相當於一個擴展的網橋。網橋工作在數據鏈路層。
6、 路由器(Router):網橋連接起來相同地址的網段形成網絡後,路由器負責將網絡連接起來。路由器的特色是可以連接兩個異構網絡。例如有些路由器可以實現BACnet網絡和TCP/IP網絡的互聯。路由器工作在網絡層。
7、網關(Gateway):用於連接BACnet網絡與非BACnet網絡,網關工作在傳輸層以上。
其中幾個主要設備工作的層如下:
中繼器 Repeater |
物理層 |
網橋Bridge |
數據鏈路層MAC子層 |
路由器 Router |
網絡層 |
網關 Gateway |
傳輸層以上 |
BACnet應用層
BACnet應用層的主要功能:
1、 定義“非證實服務”和“證實服務”;
2、 “分組和重組”功能(七層結構中傳輸層實現);
3、 檢錯和糾錯功能(七層結構中傳輸層實現)。
一個應用進程包括:應用程序和應用實體,應用實體位於應用層內,屬於通信協議的部分,應用程序不屬於協議部分。應用程序和應用實體之間通過API進行通信。
應用層有四種原語,分別爲:請求(request)、指示(indication)、響應(response)和證實(confirm)。
上面說的應用層提供兩種服務:有證實服務(CONF_SERV)和無證實服務(UNCONF_SERV)。兩種服務將產生兩種不同的PDU。還有一些其他通信中需要的服務:分段確認服務(SEGMENT_ACK)、差錯服務(ERROR)、終止服務(ABORT)。
每個設備都只有一個Dvice對象,每個設備由一個包含了一個網絡編號和一個MAC地址的NASP唯一定位。NASP(Network Service Access Point)是網絡層服務訪問點的意思。應用層的信息形成APDU(Application Protocol Data Unit)之後,通過NASP發送出去。
下面示意圖是一個有證實服務的過程:
如果發送的是請求,可以用who-is指令,可以得到I-am,它包含APDU的最大長度。然後可以根據APDU的最大長度進行分段。
關於分段
APDU包括APCI和數據塊。APCI包括8位的序號(標示分段在整個報文序列中的位置)和8位的最大報文分段數(預設窗口尺寸)和一些其他信息。分段的APDU中第一個包要有確認,第一個包確認代表接收端獲取到預設窗口尺寸,返回的包帶有實際窗口尺寸。預設窗口尺寸是發送設備準備收到確認前準備發送的最大報文數。但並不是每一次都會傳到預設窗口尺寸纔會得到確認信息,接收方會在以下四種情況下發送確認報文:
1、 收到第一個分段;
2、 未確認的、有序的、數量爲實際窗口尺寸的分段;
3、 亂序報文;
4、 最後一個分段。
以上講的是APDU的產生和傳輸部分,而BACnet的數據部分是通過API函數產生的對象進行填充的。BACnet網絡協議使用先進的面向對象技術,通過封裝在APDU內的對象數據進行通訊。BACnet擁有23個對象,每個對象擁有三個屬性值:Object_Identifier 、Object_Name、Object_Type。其中“設備對象”對於每個設備都是必須的,並且只能有一個。這23個對象是:
序號 |
對象名稱 |
應用舉例 |
01 |
Analog Input |
模擬傳感器輸入 |
02 |
Analog Output |
模擬控制量輸出 |
03 |
Analog Value |
模擬控制設備參數 |
04 |
Binary Input |
數字傳感器輸入 |
05 |
Binary Output |
繼電器輸入 |
06 |
Binary Value |
數字控制系統參數 |
07 |
Command |
向多設備多對象寫多值 |
08 |
Calendar |
事件執行日期列表 |
09 |
Schedule |
週期操作時間表 |
10 |
Event Enrollment |
描述錯誤狀態事件 |
11 |
File |
允許訪問設備的數據文件 |
12 |
Group |
提供單一操作下 |
13 |
Loop |
訪問“控制環“標準化操作 |
14 |
Multi-state Input |
多狀態處理程序的狀態 |
15 |
Multi-state Output |
多狀態處理程序的期望狀態 |
16 |
Notification Class |
包含一個設備列表 |
17 |
Program |
允許設備應用程序開始和停止、裝載及卸載 |
18 |
Device |
設備支持的對象和服務以及設備商和固件版本等信息 |
19 |
Life Safety Point |
生面安全監測點的信息檢測 |
20 |
Life Safety Zone |
生面安全區域的信息檢測 |
21 |
Multi-state Value |
模擬的多態值 |
22 |
Schedule |
語氣時間的操作運行 |
23 |
Trend Log |
記錄單個運行數據 |
BACnet具有35種服務,服務是操作對象的方法。這35種服務分爲6類,分別爲:報警與事件服務,文件訪問服務,對象訪問服務,遠程設備管理服務、虛擬終端服務和網絡安全服務。由於不是所有設備都具有所有服務,爲了統一標準,把服務分爲5個通用的一致性等級。每一個等級都有一個最少要實現的服務數量。
BACnet網絡層的作用是檢查網絡拓撲結構,決定最佳路由。
與TCP/IP協議對比,TCP/IP模型被廣泛的應用在各種規模的網絡中。TCP/IP是一種協議簇,其中TCP協議和IP協議是協議簇中比較重要的兩種協議。協議分爲四層:應用層、傳輸層、網絡層和網絡接口層。
BACnet網絡層原語是:N-UNITDATA.request和N-UNITDATA.indication。網絡層原語中包含了APDU,也就是說應用層原語相當於一個函數的功能,將應用層給過來的數據和一些必要的參數,使用原語給到應用層,應用層將會進行封裝成NPDU。
因此應用層原語是用於應用層之間的溝通,應用層原語將會把通過API傳過來的信息中的對象數據封裝成APDU。網絡層接到APDU之後,將通過原語將APDU封裝成NPDU,繼續向下傳輸。
NPDU內的控制字段用於表示NPDU的不同類型,其中第七位用於表示NPDU是一個包含BACnet APDU的報文還是一個網絡層協議報文。網絡層協議報文用於網絡層的控制和管理,帶有報文類型域,用於標示不同的網絡層協議報文類型,如Who-Is-Router-To-Network等10種報文,用於路由器的管理、維護、網絡層擁塞控制、PTP鏈路控制和管理等作用。
整個BACnet網絡的傳輸示意圖如下:
BACnet/IP協議
BACnet網絡和IP網絡之間是無法通信的。因爲BACnet和TCP/IP協議都是一種四層的網絡結構,而BACnet的網絡層和應用層與TCP/IP的應用層、傳輸層和網絡層結構和功能都不相同,因此他們的數據幀也不同。因此不僅BACnet設備節點和TCP/IP設備節點之間無法互相識別通信包,而且廣域網中的路由是無法識別BACnet數據幀的。然而TCP/IP是現在應用的極其廣泛的協議,用於構建幾乎所有規模的網絡。而且BACnet應用系統的現場控制層,也就是服務器端一般使用TCP/IP協議,因此BACnet協議如果可以使用IP協議將會更容易設計和減少成本。並且,由於BACnet網絡是一種局域網,因此在連接兩個遠程BACnet網絡的時候,使用TCP/IP將是最佳的解決辦法。
然後如果實現BACnet可以在TCP/IP網絡中的傳輸主要解決的就是IP設備和IP路由可以識別帶有BACnet數據的包,主要有兩種技術:
1、 B/IP PAD技術,也叫“隧道”技術。
2、 BACnet/IP技術
隧道技術的原理爲:B/IP PAD節點既具有BACnet網絡地址,又有IP地址,既具有BACnet路由功能又具有解析、執行和實現用戶UDP數據報的功能。因此它將BACnet數據封裝進UDP包的數據部分進行傳輸,相當於在TCP/IP網絡中爲BACnet開闢了一條隧道。UDP端口號:X’BAC0。
PAD技術示意圖:
BACnet/IP
BACnet/IP路由直接把BACnet數據幀封裝進IP幀進行傳輸。定義了一個新的微協議層BVLL。層次結構如下:
由上圖可以看出,BACnet/IP協議相當於只用了BACnet的應用層和網絡層,將NPDU傳輸給BVLL(新加的層),然後BVLL的數據向下都是TCP/IP協議。傳輸層使用的是UDP協議,UDP協議相對TCP協議更適合此處的應用。
BVLL層的作用主要是進行BACnet廣播管理,並提供想其他通訊協議的擴展機制。由於IP協議爲了防止網絡擁塞,不支持廣播,BVLL使IP協議可以實現BACnet所需要的廣播功能。
還引入了一種廣播管理的新設備,用來進行廣播管理,這種設備叫做BBMD。BBMD是BVLL協議的關鍵設備,每個IP子網中只有一個BBMD設備。用於進行外部設備的註冊和廣播管理,使網絡內的所有BACnet設備都可以進行廣播。
BBMD:1、當其他網絡向本網絡廣播時,用於接收報文並向本網絡內設備進行廣播。
2、用於本網絡內設備對外網絡內廣播時,先傳輸到本網的BBMD,再由BBMD發送出去。
對遠程設備進行廣播的時候,有兩種方法,主要取決於遠程路由是否具有廣播功能,如果具有廣播功能,使用一跳法,即直接廣播方法,將數據直接發送到遠程路由,由路由進行廣播。第二種是二跳法,遠程路由不支持廣播,將報文發送到遠程網絡中的BBMD,由BBMD在IP子網內進行廣播。
數據鏈路層和物理層
以上討論的BACnet應用層和網絡層,還有TCP/IP的結構都是指在數據鏈路層和網絡層以上。TCP/IP的數據鏈路層和物理層包含在網絡接口層(也叫鏈路層)裏面。BACnet數據鏈路層和物理層有多種標準進行實現。如以太網標準、ARRCnet網絡標準等,他們都定義了信號的具體傳輸方式,接口標準等。這裏不進行討論。
舉例
通過wireshark抓包工具可以抓取網絡上的數據包,我們拿出一個bacnet數據包進行舉例分析:
可以從圖中看到,下面部分爲實際傳輸的數字形式的數據,而數據的不同部分代表不同的數據包,上面可以看到,整個數據包由下到上(從上層到下層)分別包括APDU、NPDU、BACnet Virtual Link Control、UDP、IP、Ethernet II。與上面分析的剛好吻合。這五層對象下面數字的五個區域,形成BACnet數據包
總結
綜上所述,BACnet協議主要是定義了應用層和網絡層,下面兩層可以使用現有的技術實現。BACnet協議已經定義了四層中的每一層,通過這些技術就可以構建一個BACnet網絡。但是,由於遠程通信的要求,純BACnet網絡與服務器等溝通時會存在一些通信上的問題,因此引入了BACnet/IP網絡通信技術,使BACnet數據包可以使用成熟的、應用極廣的IP網絡進行傳輸。這樣不僅解決了遠程通信的問題,也解決了與服務器端溝通的問題。