一、BACnet協(xié)議概述
BACnet協(xié)議(A Data Communication Protocol for Building Automation and Control Networks),是由美國采暖、制冷和空調(diào)工程師協(xié)會(ASHRAE)制定的一個樓宇自動控制技術(shù)標(biāo)準(zhǔn)文件,BACnet協(xié)議最根本的目的是提供一種樓宇自動控制系統(tǒng)實現(xiàn)互操作的方法。BACnet協(xié)議并不能簡單的認(rèn)為是一種應(yīng)用層的協(xié)議,而是包含四個層次的簡化分層體系結(jié)構(gòu),這四層相當(dāng)于OSI模型中的物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層和應(yīng)用層。
BACnet中有很多專業(yè)術(shù)語,解釋如下:
1、服務(wù)原語
與ISO服務(wù)中的約定用法一致,BACnet中兩個對等應(yīng)用進(jìn)程間的信息交換,被表示成抽象服務(wù)原語的交換。這些服務(wù)原語用來傳遞一些特定的服務(wù)參數(shù),本協(xié)議定義了四種服務(wù)原語:請求(request)、指示(indication)、響應(yīng)(response)和證實(confirm)。
同樣,本協(xié)議定義了下列幾種服務(wù):
有證實(confirmed)服務(wù):用CONF_SERV標(biāo)記,表示客戶方通過具體的服務(wù)請求實例向服務(wù)器方請求服務(wù),服務(wù)器方通過響應(yīng)請求來為客戶方提供服務(wù)。存在客戶/服務(wù)器模型、區(qū)分“請求方BACnet用戶”和“響應(yīng)方BACnet用戶”等。
無證實(unconfirmed)服務(wù):用UNCONF_SERV標(biāo)記,只有“發(fā)送方BACnet用戶”和“接收方BACnet用戶”的概念,不存在客戶/服務(wù)器模型,只有發(fā)送方和接收方,而不是請求-響應(yīng)對。
分段確認(rèn)(segment acknowledge)服務(wù):用SEGMENT_ACK標(biāo)記,為了實現(xiàn)長報文(長度大于通信網(wǎng)絡(luò)、收/發(fā)設(shè)備所支持的長度)的傳輸,BACnet采取了應(yīng)用層報文分段的機(jī)制來對報文進(jìn)行分段。在BACnet中只有有證實請求(Confirmed-Request)和復(fù)雜確認(rèn)(Complex-ACK)報文可能需要分段,因此分段還是BACnet的一個可選特性。
另外,還有差錯(ERROR)服務(wù),拒絕(REJECT)服務(wù),中止(ABORT)服務(wù)。
因此,根據(jù)不同的服務(wù)類型和原語類型,據(jù)有下表所示的服務(wù)原語。這些原語中的信息,由各種協(xié)議數(shù)據(jù)單元(PDU:Protocol Data Unit)傳遞。
2、PDU類型
BACnet協(xié)議定義了七種不同的PDU,用以傳遞原語信息。
2.1 BACnet有證實請求PDU
用于傳送包含在有證實服務(wù)請求原語中的信息。
2.2 BACnet無證實請求PDU
用于傳送包含在無證實服務(wù)請求原語中的信息。
2.3 BACnet 簡單確認(rèn)PDU
傳送包含在一個服務(wù)響應(yīng)原語中的信息,這個信息是服務(wù)請求已經(jīng)成功執(zhí)行。
2.4 BACnet復(fù)雜確認(rèn)PDU
用于傳送包含在一個服務(wù)響應(yīng)原語中的信息,這個信息除了包含服務(wù)請求已經(jīng)成功執(zhí)行之外,還有其它一些信息。
2.5 BACnet 分段確認(rèn)PDU
用于對收到一個或者多個PDU進(jìn)行確認(rèn),這些PDU包含一個分段報文的分段。BACnet 分段確認(rèn)PDU也用于對分段報文的下一個或者幾個分段的請求。
2.6 BACnet差錯PDU
用于傳送包含在一個服務(wù)響應(yīng)原語中的信息,這個信息指出前一個服務(wù)請求完全失敗的原因。
2.7 BACnet拒絕PDU
用于對一個有證實請求PDU的拒絕接收,其原因是這個被拒絕的PDU具有句法結(jié)構(gòu)錯誤或者其它的協(xié)議錯誤,使得不能對這個PDU進(jìn)行解讀,或者不能夠提供請求的服務(wù)。只能對有證實請求PDU進(jìn)行拒絕。
2.8 BACnet 中止PDU
用于結(jié)束兩個對等實體之間的事務(wù)處理。
3 服務(wù)選擇
BACnet定義了以下幾類可選擇的服務(wù),用于兩個對等實體之間的交互。
3.1 文件訪問服務(wù)
定義一組訪問和操作在BACnet設(shè)備中的文件的服務(wù)。文件只是一個抽象的概念,表示一個任意長度和意義的字節(jié)集合的網(wǎng)絡(luò)可見形式。
基本讀文件(AtomicReadFile)服務(wù):一個客戶端的BACnet用戶使用基本讀文件服務(wù)對某個文件進(jìn)行一個“打開-讀出-關(guān)閉”的操作。
基本寫文件(AtomicWriteFile)服務(wù):一個客戶端的BACnet用戶使用基本寫文件服務(wù)對某個字節(jié)流進(jìn)行一個“打開-寫入-關(guān)閉”的操作,將它寫入到文件的某個位置。
3.2 對象訪問服務(wù)
定義九個應(yīng)用服務(wù),這些服務(wù)共同提供一組訪問和操作BACnet對象的方法。
添加列表元素(AddListElement)服務(wù):一個客戶端的BACnet用戶使用添加列表元素服務(wù)向一個具有列表的對象的屬性添加一個或者多個列表元素。
刪除列表元素(RemoveListElement)服務(wù):一個客戶端的BACnet用戶使用刪除列表元素服務(wù)從一個具有列表的對象的屬性中刪除一個或者多個列表元素。
創(chuàng)建對象(CreateObject)服務(wù):一個客戶端的BACnet用戶使用創(chuàng)建對象服務(wù)創(chuàng)建一個對象的新實例。
刪除對象(DeleteObject)服務(wù):一個客戶端的BACnet用戶使用刪除對象服務(wù)刪除一個已有的對象。
讀屬性(ReadProperty)服務(wù):一個客戶端的BACnet用戶使用讀屬性服務(wù)請求一個BACnet對象的一個屬性值。
條件讀屬性(ReadPropertyConditional)服務(wù):一個客戶端的BACnet用戶使用條件讀屬性服務(wù)請求那些滿足一個選擇準(zhǔn)則列表的所有BACnet對象的對象標(biāo)識符和0個或者多個特定屬性的值。
讀多個屬性(ReadPropertyMultiple)服務(wù):一個客戶端的BACnet用戶使用讀多個屬性服務(wù)請求一個或者多個BACnet對象的一個或者多個特定屬性的值。
寫屬性(WriteProperty)服務(wù):一個客戶端的BACnet用戶使用寫屬性服務(wù)修改一個BACnet對象的一個屬性值。
寫多個屬性(WritePropertyMultiple)服務(wù):一個客戶端的BACnet用戶使用寫多個屬性服務(wù)修改一個或者多個BACnet對象的一個或者多個特定屬性的值。
3.3 遠(yuǎn)程設(shè)備管理服務(wù)
定義一組遠(yuǎn)程設(shè)備管理服務(wù)。
設(shè)備通信控制(DeviceCommunicationControl)服務(wù)。
有證實專有傳輸(ConfirmedPrivateTransfer)服務(wù)。
無證實專有傳輸(UnconfirmedPrivateTransfer)服務(wù)。
重新初始化設(shè)備(ReinitializeDevice)服務(wù)。
有證實文本報文(ConfirmedTextMessage)服務(wù)。
無證實文本報文(UnconfirmedTextMessage)服務(wù)。
時間同步(TimeSynchronization)服務(wù)。
3.4 Who-Has和I-Have服務(wù)
一個發(fā)送的BACnet用戶使用Who-Has服務(wù)確定一些其它BACnet設(shè)備的設(shè)備對象標(biāo)識符和網(wǎng)絡(luò)地址,設(shè)備使用I-Hava服務(wù)響應(yīng)Who-Has服務(wù)請求,或者通告自己有一個具有給定的對象名稱屬性或者對象標(biāo)識符屬性的對象。
3.5 Who-Is和I-Am服務(wù)
一個發(fā)送方BACnet用戶使用Who-Is服務(wù)確定在同一個互聯(lián)網(wǎng)上的其它BACnet設(shè)備的設(shè)備對象標(biāo)識符和網(wǎng)絡(luò)地址,Who-Is服務(wù)是一個無證實服務(wù)。I-Am服務(wù)也是一個無證實的服務(wù),這個服務(wù)用于響應(yīng)Who-Is服務(wù)請求。
3.6 虛擬終端服務(wù)
略。
4 對象
對象是對現(xiàn)實設(shè)備中某一特征的抽象。
4.1 模擬輸入對象類型(Analog Input Object Type)
模擬輸入對象類型定義為一個標(biāo)準(zhǔn)對象,其屬性表示一個模擬輸入的外部可見一致性代碼。
4.2 模擬輸出對象類型(Analog Output Object Type)
模擬輸出對象類型定義為一個標(biāo)準(zhǔn)對象,其屬性表示一個模擬輸出的外部可見一致性代碼。
4.3 模擬值對象類型(Analog Value Object Type)
模擬值對象類型定義為一個標(biāo)準(zhǔn)對象,其屬性表示一個模擬值的外部可見一致性代碼。BACnet設(shè)備的一個“模擬值”是駐留在這個設(shè)備的內(nèi)存中的一個控制系統(tǒng)參數(shù)。
4.4 二進(jìn)制輸入對象類型(Binary Input Object Type)
二進(jìn)制輸入對象類型定義為一個標(biāo)準(zhǔn)對象,它的屬性表示二進(jìn)制輸入的外部可見一致性代碼?!岸M(jìn)制輸入”是物理設(shè)備或硬件的輸入,該輸入只存在兩種狀態(tài),即“活動(ACTIVE)”狀態(tài)和“非活動(INACTIVE)”狀態(tài)。二進(jìn)制輸入的主要用途是指明機(jī)械設(shè)備狀態(tài),如:風(fēng)機(jī)或水泵是否運行。活動表示設(shè)備開或運轉(zhuǎn),非活動表示設(shè)備關(guān)或未運行。
4.5 二進(jìn)制輸出對象類型(Binary Output Object Type)
二進(jìn)制輸出對象類型定義為一個標(biāo)準(zhǔn)對象,它的屬性表示二進(jìn)制輸出的外部可見一致性代碼?!岸M(jìn)制輸出”是物理設(shè)備或硬件的輸出,該輸出只存在兩種狀態(tài),即“活動”狀態(tài)和“非活動”狀態(tài)。二進(jìn)制輸出的主要用途是切換機(jī)械設(shè)備狀態(tài),如:風(fēng)機(jī)或水泵的開和關(guān)?;顒颖硎驹O(shè)備開或運轉(zhuǎn),非活動表示設(shè)備關(guān)或未運行。
4.6 二進(jìn)制值對象類型(Binary Value Object Type)
二進(jìn)制值對象類型定義為一個標(biāo)準(zhǔn)對象,它的屬性表示二進(jìn)制值的外部可見一致性代碼?!岸M(jìn)制值”是駐留在BACnet設(shè)備內(nèi)存中的控制系統(tǒng)參數(shù)。這個參數(shù)只存在兩種狀態(tài)即:“活動”狀態(tài)和“非活動”狀態(tài)。
4.7 日期表對象類型(Calendar Object Type)
日期表對象類型定義為一個標(biāo)準(zhǔn)對象,用于描述日期列表,例如,“節(jié)假日”、“特別日”或簡單的日期列表。
4.8 命令對象類型(Command Object Type)
命令對象類型定義為一個標(biāo)準(zhǔn)對象,其屬性反映了多操作命令過程的外部可見一致性代碼。命令對象的作用是,根據(jù)寫入到命令對象自己的當(dāng)前值屬性中的“操作代碼(action code)”,向一組對象屬性寫入一組值。無論何時,只要命令對象的當(dāng)前值屬性被寫入,就會觸發(fā)命令對象采取一組改變其它對象的屬性值的操作。
4.9 設(shè)備對象類型(Device Object Type)
設(shè)備對象類型定義為一個標(biāo)準(zhǔn)對象,其屬性表示BACnet設(shè)備的外部可見一致性代碼。每個BACnet設(shè)備有且只有一個設(shè)備對象。每個設(shè)備對象由它的對象標(biāo)識符屬性確定,該屬性在BACnet設(shè)備中乃至整個BACnet互聯(lián)網(wǎng)中都是唯一的。
4.10 事件登記對象類型(Event Enrollment Object Type)
事件登記對象類型定義為一個標(biāo)準(zhǔn)對象,表示BACnet系統(tǒng)內(nèi)管理事件的信息?!笆录笔侵笣M足預(yù)先規(guī)定條件的所有對象的任何屬性值的變化。事件登記對象主要用于定義一個事件和提供在事件發(fā)生與通告消息向一個或多個接收者進(jìn)行傳輸這兩者之間的聯(lián)系。
1.4.11 文件對象類型(File Object Type)
文件對象類型定義為一個標(biāo)準(zhǔn)對象,用于定義可以通過文件服務(wù)(見第14節(jié))訪問的數(shù)據(jù)文件的屬性。
4.12 組對象類型(Group Object Type)
組對象類型定義為一個標(biāo)準(zhǔn)對象,其屬性表示一個其它對象的集合以及這些對象的一個或多個屬性。組對象提供一種快速的方式,可以一次確定組的成員,從而簡化BACnet設(shè)備間的信息交換。一個組對象可以是任何對象類型的組合。
4.13 環(huán)對象類型(Loop Object Type)
環(huán)對象類型定義為一個標(biāo)準(zhǔn)對象,其屬性表示任何形式的反饋控制環(huán)路的外部可見一致性代碼。環(huán)對象通過提供三個獨立的無單位增益常數(shù),可以具有廣泛的適用性。每個增益常數(shù)由控制算法具休確定,如何使用不同的算法確定增益常數(shù)的方法,由生產(chǎn)商自行確定。
4.14 多態(tài)輸入對象類型(Multi-state Input Object Type)
多態(tài)輸入對象類型定義了一個標(biāo)準(zhǔn)對象,它的當(dāng)前值屬性表示對象駐留的BACnet設(shè)備內(nèi)算法處理的結(jié)果。
4.15 多態(tài)輸出對象類型(Multi-state Output Object Type)
多態(tài)輸出對象類型定義了一個標(biāo)準(zhǔn)對象,它的屬性表示這個對象駐留的BACnet設(shè)備內(nèi)的處理程序或一個或多個物理輸出的期望狀態(tài)。
4.16 通告類對象類型(Notification Class Object Type)
通告類對象類型定義了一個標(biāo)準(zhǔn)對象,表示在BACnet系統(tǒng)內(nèi)事件通告發(fā)布所需的信息。
4.17 程序?qū)ο箢愋停≒rogram Object Type)
程序?qū)ο箢愋投x了一個標(biāo)準(zhǔn)對象,它的屬性表示應(yīng)用程序的外部可視一致性代碼。在本協(xié)議中,應(yīng)用程序是指對一個在BACnet設(shè)備中的處理過程的抽象表示,這個處理過程執(zhí)行一個指令集,對某個數(shù)據(jù)結(jié)構(gòu)集合進(jìn)行操作。
4.18 時間表對象類型(Schedule Object Type)
時間表對象類型定義了一個標(biāo)準(zhǔn)對象,用于描述一個周期性的時間表。這個時間表中確定了某事件在一個日期范圍內(nèi)可能重復(fù)發(fā)生,同時表示有些日期是事件不發(fā)生的日期。
5 屬性
上述各對象除了有公有的屬性外,還有自己私有的屬性。
常用的公有屬性有:
對象名稱(Object_Name)
對象類型 (Object_Type)
當(dāng)前值 (Present_Value)
描述(Description)
通常對象名稱由對象類型和對象實例一起標(biāo)識。需注意,當(dāng)前值屬性并不一定為實數(shù),可以為BOOL型、INT型等。
二、TCP/IP組網(wǎng)布署
每個設(shè)備有一個唯一的設(shè)備地址,在TCP/IP網(wǎng)絡(luò)中,就是IP地址。在設(shè)備不是一個BACnet路由器的情況下,設(shè)備不知道或不需要知道他們BACnet網(wǎng)絡(luò)的網(wǎng)絡(luò)號。一個或多個子網(wǎng)可以有相同的網(wǎng)絡(luò)號。
1 BBMD結(jié)構(gòu)
為了確保廣播消息不會在所有子網(wǎng)中路由,引入了BACnet廣播管理設(shè)備(BACnet Broadcast Management Device,BBMD)。很多功能,比如動態(tài)name綁定、值改變通知都會廣播,通過BBMD把這些消息限制在各自的網(wǎng)絡(luò)中。
1.1 樹形結(jié)構(gòu)
優(yōu)點:
結(jié)構(gòu)簡單,只有一個parent和幾個child
易增加新設(shè)備
消息不會被復(fù)制成幾份
缺點:
一條鏈路失敗,整個支路不通
動態(tài)TOPO復(fù)雜
1.2 環(huán)形結(jié)構(gòu)
缺點:一條鏈路壞了,整個環(huán)就癱瘓
1.3 B/IP網(wǎng)絡(luò)結(jié)構(gòu)
完全連接的星形結(jié)構(gòu),注意只是邏輯結(jié)構(gòu)而不是物理結(jié)構(gòu)。
2 跨網(wǎng)段之間的定點通信或廣播
如果知道各自的IP和端口,并且具有BBMD設(shè)備,則相互之間就能正常通信。注意BBMD和相關(guān)的BVLL協(xié)議只是用來廣播消息。
3 BBMD本地廣播的接收
BBMD是一個被動設(shè)備,幾乎沒有消息主動傳遞給它,通常它僅僅用來監(jiān)聽本地局域網(wǎng)的廣播消息。
4 廣播消息的轉(zhuǎn)發(fā)
BBMD會根據(jù)自身的BBMD表和掩碼,對接收到的消息進(jìn)行轉(zhuǎn)發(fā)。通過創(chuàng)建Forwarded-NPDU消息,發(fā)送到目的地址。