BacNet开发入门2
???????
BACnet 說明1?????? BACnet含義
A Data Communication Protocol for Building Automation and Control Network的簡稱,是一種為樓宇自控網(wǎng)絡制定的數(shù)據(jù)通訊協(xié)議。
2?????? BACnet技術(shù)特點
BACnet采用了面向?qū)ο蟮募夹g(shù),它定義了一組具有屬性的對象(Object)來表示任意的樓宇自控設備的功能,從而提供了一種標準的表示樓宇自控設備的方式。同時BACnet定義了四種服務原語來傳遞某些特定的服務參數(shù)。目前BACnet共定義了18個對象,123 個屬性和35個服務。對象的方法稱為服務,由于一個樓宇自控系統(tǒng)中并不是所有的設備都要有必要支持BACnet所有的功能,BACnet協(xié)議還定義了6個性能級別和13個功能組。
6個性能級別,每個級別規(guī)定了設備要是先的最小服務子集,且包含級別低的服務,最小級別1.
表1 BACnet對象
|
| 對 象 名 稱 | 應? 用? 舉? 例 |
| 01 | 模擬輸入Analog Input | 模擬傳感器輸入如機械開關(guān)On/Off輸入 |
| 02 | 模擬輸出Analog Output | 模擬控制量輸出 |
| 03 | 模擬值Analog Value | 模擬控制設備參數(shù)如設備閥值 |
| 04 | 數(shù)字輸入Binary Input | 數(shù)字傳感器輸入如電子開關(guān)On/Off輸入 |
| 05 | 數(shù)字輸出Binary Output | 繼電器輸出 |
| 06 | 數(shù)字值Binary Value | 數(shù)字控制系統(tǒng)參數(shù) |
| 07 | 命令Command | 向多設備多對象寫多值如日期設置 |
| 08 | 日歷表Calender | 程序定義的事件執(zhí)行日期列表 |
| 09 | 時間表Schedule | 周期操作時間表 |
| 10 | 事件登記Event Enrollment | 描述錯誤狀態(tài)事件如輸入值超界或報警事件。通知一個設備對象,也可通過“通知類”對象通知多設備對象 |
| 11 | 文件File | 允許訪問(讀/寫)設備支持的數(shù)據(jù)文件 |
| 12 | 組Group | 提供單一操作下訪問多對象多屬性 |
| 13 | 環(huán)Loop | 提供訪問一個“控制環(huán)”的標準化操作 |
| 14 | 多態(tài)輸入Multi-state Output | 表述多狀態(tài)處理程序的狀況,如制冷設備開、關(guān)和除霜循環(huán) |
| 15 | 多態(tài)輸出Multi-state Output | 表述多狀態(tài)處理程序的期望狀態(tài),如制冷設備開始冷卻、除霜的時間 |
| 16 | 通知類Notification Class | 包含一個設備列表,配合“事件登記”對象將報警報文發(fā)送給多設備 |
| 17 | 程序Program | 允許設備應用程序開始和停止、裝載和卸載,并報告程序當前狀態(tài) |
| 18 | 設備Device | 其屬性表示設備支持的對象和服務以及設備商和固件版本等信息 |
?
BACnet應用層提供證實和非證實兩種類型的服務。BACnet定義了四種服務原語:請求、指示、響應和證實,它們通過應用層協(xié)議數(shù)據(jù)單元(APDU)傳遞。由于BACnet建立在無連接的通信模式上,所以OSI模型提供端到端服務的傳輸層部分簡
化功能也由應用層實現(xiàn),分別為:可靠的端到端傳輸和差錯校驗;報文分段和流量控制;報重組和序列控制。
3?????? BACnet優(yōu)點
1)具有良好的互連特性和擴展性。BACnet標準雖然從體系結(jié)構(gòu)上定義了不同的局域網(wǎng)絡,但BACnet標準可以擴展到其他任意通信網(wǎng)絡。例如,BACnet/IP標準可以實現(xiàn)與Internet的無縫互連。
2)具有良好的伸縮性。BACnet標準沒有限制BACnet系統(tǒng)中設備節(jié)點的數(shù)量,BACnet集成系統(tǒng)可以由幾個設備節(jié)點構(gòu)成一個極小的自控系統(tǒng),也可以形成一個規(guī)模極大的超級大系統(tǒng)。
4?????? BACnet體系結(jié)構(gòu)
(1)OSI/RM模型的實現(xiàn)需要很高的費用,實際上在絕大部分樓宇自控系統(tǒng)應用中也并不需要這么多的層次,事實上BACnet只包含OSI模型中被選擇的層次,其它各層則去掉,這樣減少了報文長度,降低了通信處理開銷,同時也節(jié)約了樓宇自控工業(yè)的生產(chǎn)成本。
(2)BACnet應充分利用現(xiàn)有的廣泛使用的局域網(wǎng)技術(shù),如Ethernet、ARCNET和LonTalk,因此成本進一步降低,同時也有利于技術(shù)的推廣和性能的提高。
在考慮了樓宇設備監(jiān)控網(wǎng)絡的特征和要求以及盡可能少的協(xié)議開銷原則后,BACnet協(xié)議提出了一種簡化的四層體系結(jié)構(gòu),相當于OSI/RM模型中的物理層、數(shù)據(jù)鏈路層、網(wǎng)絡層和應用層。
支持五種組合類型的數(shù)據(jù)鏈路/物理層規(guī)范。其中主從/令牌傳遞(MS/TP)協(xié)議是專門針對樓宇自控設備設計的數(shù)據(jù)鏈路規(guī)范。BACnet在物理介質(zhì)上,支持雙絞線、同軸電纜和光纜,在拓撲結(jié)構(gòu)上,支持星型和總線拓撲。
5?????? BACnet網(wǎng)絡結(jié)構(gòu)
BACnet沒有嚴格規(guī)定網(wǎng)絡拓撲結(jié)構(gòu)。其中:網(wǎng)段(Segment)是多個物理網(wǎng)段通過中繼器(R)連接形成的段落區(qū)間;網(wǎng)絡是多個網(wǎng)段通過網(wǎng)橋(B)連接而成的,每個網(wǎng)絡都形成一個MAC地址域;BACnet/Internet網(wǎng)絡是將使用不同局域網(wǎng)技術(shù)的多個網(wǎng)絡用路由器(RT)互聯(lián)起來形成的網(wǎng)際網(wǎng)。
目前,BACnet標準使用兩種技術(shù)實現(xiàn)與Internet的互聯(lián)。第一種技術(shù)附件H中稱之為“隧道”技術(shù),并將其設備稱之為分組封裝/拆裝設備,簡稱PAD。其作用就像一個網(wǎng)關(guān)/路由器,這在圖2中兩個半路由器連接廣域網(wǎng)形成一個完全的BACnet路由器有所體現(xiàn)。第二種技術(shù)附件J中稱之為BACnet/IP,設備直接封裝IP幀/包在BACnet網(wǎng)絡和Internet上傳輸。PAD將BACnet報文數(shù)據(jù)封裝在IP協(xié)議數(shù)據(jù)包內(nèi)傳輸,在目的BACnet網(wǎng)絡解封。因此每個連接Internet的BACnet網(wǎng)絡都要配置PAD網(wǎng)關(guān)/路由器。它可以是一個單獨的設備,也可以是某種樓宇控制設備功能的一部分。
在BACnet拓撲中設備之間只存在一條邏輯通路,無需廣域網(wǎng)的最優(yōu)路由算法;其次,BACnet具有單一的局部地址空間,所以BACnet參照OSI模型制定了簡化的網(wǎng)絡層協(xié)議,向應用層提供不確認無連接的數(shù)據(jù)單元傳送服務。每個BACnet設備都被一個網(wǎng)絡號碼和一個MAC地址唯一確定。
網(wǎng)絡層通過“路由器”實現(xiàn)兩個或多個異類BACnet局域網(wǎng)(不同的數(shù)鏈層)的連接,并通過協(xié)議報文進行“路由器”的自動配置、路由表維護和擁塞控制。BACnet路由器與每個網(wǎng)絡的連接處稱為一個“端口”。路由表中包含端口的下列項目:(1)端口所連接網(wǎng)絡的MAC地址和網(wǎng)絡號;(2)端口可到達網(wǎng)絡的網(wǎng)絡號列表及與這些網(wǎng)絡的連接狀態(tài)。圖2中,“1/2RT”是半路由器,由PTP連接形成一個完整的BACnet路由器,即BACnet網(wǎng)際網(wǎng)將廣域網(wǎng)技術(shù)向應用層屏蔽。
BACnet應用層即BACnet應用實體,通過API(應用編程接口)為上層應用程序服務,并與對等應用層實體通信。應用實體由兩部分組成:用戶單元和應用服務單元(ASE)。ASE是一組特定內(nèi)容的應用服務。而用戶單元支持本地API、保存事務處理上下文信息、產(chǎn)生請求ID、記錄ID對應的應用服務響應、維護超時重傳機制所需的計數(shù)器以及將設備行為要求映射為對象。
BACnet應用層提供證實和非證實兩種類型的服務。BACnet定義了四種服務原語:請求、指示、響應和證實,它們通過應用層協(xié)議數(shù)據(jù)單元(APDU)傳遞。由于BACnet建立在無連接的通信模式上,所以OSI模型提供端到端服務的傳輸層部分簡化功能也由應用層實現(xiàn),分別為:可靠的端到端傳輸和差錯校驗;報文分段和流量控制;報文重組和序列控制。
?
6?????? BACnet協(xié)議實現(xiàn)
6.1??? BACnet/IP的報文結(jié)構(gòu)
在網(wǎng)絡上傳輸?shù)奈锢韼袷饺鐖D2所示。
?
?
PCI:協(xié)議控制單元。
APDU = APCI+ DATA
NPDU = NPCI+ NSDU
LPDU = LPCI+? LSDU
MPDU = MPCI+ MSDU
PPDU = PPCI+ PSDU
?
圖2? 物理幀的格式
6.2????? 報文實現(xiàn)過程
?????? 數(shù)據(jù)
+
APCI(應用層協(xié)議控制單元)
+
NPCI(網(wǎng)絡層協(xié)議控制單元)
+
BVLLPCI(BACnet 虛擬鏈路層協(xié)議控制單元)
?
然后將所得的BVLL 報文整體交給網(wǎng)絡層,這里采用UDP(用戶數(shù)據(jù)報)協(xié)議,指定接收端的IP地址和端口‘0xBAC0’發(fā)送。
客戶端發(fā)送ReadProperty-Request(讀屬性請求)報文,而服務器端在正確接收報文并解碼成功后,如果存在該屬性(Property),則返回Result(+)正響應ReadProperty-ACK(讀屬性響應)報文,如果不存在該屬性,則返回Result(-)負響應報文,并返回相應的錯誤代碼。解碼過程只是編碼過程的逆過程。
6.3????? 編碼過程
5.3.1 ?ASN(Abstract Syntax Notation One)
是一種 ISO/ITU-T 標準,描述了一種對數(shù)據(jù)進行表示、編碼、傳輸和解碼的數(shù)據(jù)格式。它提供了一整套正規(guī)的格式用于描述對象的結(jié)構(gòu),而不管語言上如何執(zhí)行及這些數(shù)據(jù)的具體指代,也不用去管到底是什么樣的應用程序。
TLV編碼是指先對Tag編碼,再對Length編碼,最后對Value編碼。
編碼方式
BACnet協(xié)議采用混合編碼方式,其APDU編碼分為兩部分。第一部分是數(shù)據(jù)部分也就是APDU部分,采用ASN.1基本編碼規(guī)則,即TLV編碼,它把各種數(shù)據(jù)表示為三部分:標識符字節(jié)(T),長度字節(jié)(L),內(nèi)容字節(jié)(V),來明確標識每個數(shù)據(jù)。這一部分是難點和重點,不僅需要完成對數(shù)據(jù)的編解碼,而且需要編解碼其相應的標記。
第二部分控制信息部分,由于PCI部分格式固定,具有固定的位置和長度所以可以不使用標記和長度字段直接編碼,所以可以通過參數(shù)的賦值直接完成。BACnet采用混合編碼的方法既不失靈活性又節(jié)省了開銷。
首先是對數(shù)據(jù)部分的編碼,也就是標記及各類數(shù)據(jù)的編解碼
BACnet標記編碼:BACnet的標記主要有一般標記、開始標記和結(jié)束標記。所有的標記均被封裝成一個類,其第一字節(jié)為固定的TLV格式,BACnet里以TCL表示即Tag Number(4位),Class(1位,表示上下文標記或者應用標記)和Length/Value/Type(3位),如果出現(xiàn)Tag Number 和Length/Value/Type 有超過第一字節(jié)規(guī)定的數(shù)據(jù)的,就在其后加上擴展的字節(jié)。
標記的類定義如下,其中TCL以結(jié)構(gòu)體field來定義完成位操作,并定義了擴展字節(jié)externnum作為后續(xù)的擴展標記字節(jié),以及extra1,2,3作為擴展長度字節(jié)。同時定義了三種標記的編解碼函數(shù)來通過參數(shù)傳遞完成相應的操作。
class tag
{
public:
??? struct
??? {
??????? unsigned int l:3;
??????? unsigned int c:1;
??????? unsigned int n:4;
??? }field;
??? short externnum;??
??? short extra1;
??? short extra2;
??? int extra3;
?
??? tag();
??? void TagEncode(char *p,int number,int class_t,int len);
??? void TagDiscode(char *p,int *pnum,int *pclass_t,int *plen);
??? int StartTagE(char *p,int number);
??? int EndTagE(char *p,int number);
int StartTagD(char *p,int *number);
??? int EndTagD(char *p,int *number);
private:
??? int temp;
};
具體賦值遵循如下原則:對于一般標記來說,標記編號域(T):當標記編號為0~14(包含0 和14)時,用該域直接進行編碼。當標記編號為15~254(包含15 和254)時,則該域編碼為‘B 1111’,并在該標記字段之后用一個字節(jié)對標記編號進行編碼。但標記編碼號根據(jù)目前應用需要不得大于254,因而標記編碼擴展字節(jié)只有一個字節(jié)就可以滿足實際應用。長度/值/類型域(L):該域所表示的內(nèi)容較為復雜,一是用于區(qū)分簡單(Primitive)類型編碼和構(gòu)造(Constructed)類型編碼。二是用于表示簡單編碼中簡單類型數(shù)據(jù)的長度和值。具體的表示方法參加BACnet協(xié)議。
?對于開始標記,該標記標識構(gòu)造編碼開始。其標記字節(jié)的Class域為‘B 1’,Length/Value/Type 域為‘B 110’。相應的結(jié)束標記的標記字節(jié)的Class域為‘B 1’,Length/Value/Type 域為‘B 111’。所以這兩個標記的編解碼只需簡單的傳遞number參數(shù)。開始標記和結(jié)束標記用于構(gòu)造類型數(shù)據(jù)的編碼。
讀屬性服務是構(gòu)造類型數(shù)據(jù)。構(gòu)造類型數(shù)據(jù)是簡單類型經(jīng)過復雜組合而形成的具有一定結(jié)構(gòu)的復合數(shù)據(jù),構(gòu)造類型可以嵌套。該類型由兩個必須包括的項:objectIdentifier 、propertyIdentifier 和一個可選的項: propertyArrayIndex 分別描述讀請求所要讀的對象,屬性和是否存在數(shù)據(jù)類型組。
6.4????? 地址碼設定
BACnet參照OSI模型制定了簡化的網(wǎng)絡層協(xié)議,向應用層提供不確認無連接的數(shù)據(jù)單元傳送服務。每個BACnet設備都被一個網(wǎng)絡號碼和一個MAC地址唯一確定。
可信自控的控制器(DDC)在BACnet網(wǎng)絡中遵循以下簡單的地址設置方法,來保證在多種廠商設備聯(lián)網(wǎng)的BACnet網(wǎng)絡中地址的唯一性。這里,Device# 是BACnet地址碼,RCC#是可信自控的地址碼。
主網(wǎng): Device# = 主網(wǎng)控制器RCC# *1000
子網(wǎng)SubA: Device# = 主網(wǎng)控制器RCC# *1000 + SubA控制器RCC#
子網(wǎng)SubB: Device# = 主網(wǎng)控制器RCC# *1000 + SubB控制器RCC# + 200
下面說明可信自控的地址碼(RCC#)與BACnet地址碼(BACnet#)在一個網(wǎng)絡系統(tǒng)中共存和相互之間的關(guān)系。
在主網(wǎng)上,有控制器MACH1、MACH-Zone、ETHRT-Link和MACH-Global,其RCC#分別為1、2、3和4,其Device#分別為1000,2000,3000,4000。在MACH-Global(RCC#=4)
上有2個子網(wǎng)SubA和SubB。SubA上MACH2和MACH-Air控制器,其RCC#為4A1和4A2,其BACnet地址碼Device#為4001和4002。SubB上有MACH-Air和MACH-Zone控制器,其RCC#為4B1和4B2,其BACnet地址碼Device#為4201和4202。同理,ETHER-Link(Device#=3)下掛一個子網(wǎng),有MACH-Air和MACH-Zone控制器,其RCC#為3A1和3A2,其BACnet地址碼Device#為3001和3002。
7?????? BACnet協(xié)議摘錄
1.?????? 應用層模型:
應用程序,應用程序接口API,下面是BACnet的應用層,由BACnet 用戶元素和BACnet ASE組成,ASEl“application service element”。對等的應用層之間采用抽象服務原語進行信息交互。
四服務原語的定義:請求,指示,響應和確認。原語通過PDUS協(xié)議數(shù)據(jù)單元進行表達,(protocol data units)
通過應用程序接口,用戶實現(xiàn)遠程訪問。接口控制信息包括ICI(interface control information)服務原語和服務的具體參數(shù),
?
ICI接口參數(shù):DA,SA, NP, DER
DA: destination_address:欲接收設備的地址。
SA: source_address: 服務原語發(fā)出的設備地址.?格式(設備名稱,網(wǎng)絡地址)
NP: network_priotiry: 四層網(wǎng)絡優(yōu)先參數(shù)。
DER: data_expecting_reply: 服務發(fā)出后是否期待返回,TRUE OR FALSE.
?
BACnet定義了客戶端和服務器通信模型的應用服務
APDU長度:
本地BUFFER, NPDU, 50字節(jié),三者中的最小者。
?
2.?????? 網(wǎng)絡層
BACnet網(wǎng)絡層提供由一個BAC到另一個的網(wǎng)絡連接而,不管各自網(wǎng)絡采用了怎樣的數(shù)據(jù)鏈路層技術(shù)。一個BACnet設備地址由網(wǎng)絡地址和MAC地址唯一確定。
?
NPDU長度最大值列表:
?
網(wǎng)絡層交互提供的數(shù)據(jù)原語:
??
????? NPDU中的第一個字節(jié)是版本信息,第二個字節(jié)是控制信息,只是當前或存在的NPCI。
一個控制字節(jié)中的位信息表示如下:
Bit7: 1: NSDU是一個消息類型字段 0:NSDU是一個BACnet 的APDU。
Bit6:? ?保留信息 0 。
Bit5: ??目的地址符
Bit4:? 保留信息 0.
Bit3:? 源地址符。
Bit2:? 返回原語中data_expecting_reply參數(shù)的含義
Bit1: Bit0: 網(wǎng)絡優(yōu)先權(quán)。
?
NPDU格式:
DNET: 2:? 目的網(wǎng)絡地址號
DLEN: 1:? 目的MAC層地址長
DADR: V:? 目的MAC地址
DA:??????? 本地網(wǎng)絡MAC地址
SNET:? 2 :源網(wǎng)絡網(wǎng)絡號
SLEN:?? 1?? 源MAC地址長
SADR:? V: 源MAC地址
SA:???????? ?? 本地網(wǎng)絡MAC地址
Hop Count:? 跳躍次數(shù),避免循環(huán)路徑。
Message type:?消息類型,00- 0A, +80?? ,P62
?
?
?
?
?
?
?
3.?????? 數(shù)據(jù)鏈路層和物理層
DATALINK 、logical link control
?
Format of an MPDU on an ISP8802-3LAN
尋找創(chuàng)業(yè)合作伙伴, 加QQ 404536204
總結(jié)
以上是生活随笔為你收集整理的BacNet开发入门2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用C++访问OPC Server的简单
- 下一篇: ffmpeg 0.6.3 代码, 经过我