嵌入式系統中BACnet-MS/TP協(xié)議棧的實(shí)現
1 引言
本文引用地址:http://dyxdggzs.com/article/148842.htm20世紀90年代,Internet經(jīng)歷了爆炸性發(fā)展,成為壟斷全球的計算機網(wǎng)絡(luò )。以Cisco和Sun為代表的一批公司借助這一浪潮發(fā)展成為世界上頂尖的大公司。而在智能建筑領(lǐng)域,也正在重現這一過(guò)程。上世紀80年代,直接數字控制器(DDC)的出現大大改善了建筑控制系統的精度和靈活性。但隨著(zhù)智能建筑涉及領(lǐng)域的不斷延伸,如HVAC、照明、消防、安防等等領(lǐng)域,分立式控制設備已經(jīng)不能滿(mǎn)足設備間互操作和系統間通訊的需求;另一方面,隨著(zhù)建筑控制系統的集成度越來(lái)越高,不僅要求一棟樓宇或者一個(gè)小區的設備之間可以通訊,甚至地區、國家乃至全球的控制設備之間都可以進(jìn)行通訊。因此,建立一個(gè)可以在異構系統、不同廠(chǎng)商設備之間的通訊機制,成為建筑智能化的迫切需求。BACnet協(xié)議就在這樣一種情況下應運而生了。
2 BACnet協(xié)議介紹
BACnet是專(zhuān)門(mén)為建筑自動(dòng)控制網(wǎng)絡(luò )制定的一種數據通信協(xié)議,最初由美國制冷采暖空調工程師協(xié)會(huì )(簡(jiǎn)稱(chēng)ASHRAE)于1995年制定。其最根本的目的是要提供給建筑自動(dòng)控制系統實(shí)現互操作的方法。所謂互操作是指一種能力,可以使得分布的控制系統設備通過(guò)相關(guān)信息的數字交換,能夠協(xié)調地工作,從而完成一個(gè)共同的目標。BACnet解決了建筑自控系統中存在的多廠(chǎng)商系統和設備不兼容而難以集成的問(wèn)題,提供了不同建筑自動(dòng)控制系統實(shí)現互操作的方法,有望成為控制網(wǎng)絡(luò )中的TCP/IP協(xié)議。2003年1月,BACnet成為正式的國際標準(ISO 16484標準)。
BACnet有以下特點(diǎn):
·開(kāi)放性:是美國現行的國家標準和ISO國際標準。
·面向對象:BACnet協(xié)議采用面向對象的技術(shù),因此具有可擴展性和可復用性。
·互操作性:ASHRAE的BACnet委員會(huì )提出了一種新的描述自動(dòng)控制系統功能性的方法,稱(chēng)為“互操作域(Interoperability Areas)”,其中規定了5個(gè)互操作域,分別是:數據共享、報警和事件管理、時(shí)序安排、趨勢記錄、設備與網(wǎng)絡(luò )管理。
2.1 BACnet體系結構
BACnet以OSI模型為參考,結合建筑自動(dòng)控制領(lǐng)域的實(shí)際需求,形成了一個(gè)簡(jiǎn)化模型。BACnet充分利用現有成熟的網(wǎng)絡(luò )技術(shù),在底層兼容5種網(wǎng)絡(luò )結構,降低了開(kāi)發(fā)成本,同時(shí)也利于系統集成。
2.2 應用層
應用層協(xié)議數據單元(APDU)傳送包含在應用服務(wù)原語(yǔ)和相關(guān)參數中的信息。因為BACnet采用簡(jiǎn)化的OSI體系結構,不包含任何表示層的功能,必須預先定義好通信設備一致遵守的編碼規則。BACnet的編碼規則設計考慮到了樓宇自動(dòng)控制體系對簡(jiǎn)單化、緊湊化的要求。因此,這個(gè)編碼規則在一些方面與 ISO 8825有所不同。但是仍然允許使用ASN.1對BACnet的APDU進(jìn)行編碼。
2.3 網(wǎng)絡(luò )層
網(wǎng)絡(luò )層提供網(wǎng)絡(luò )路由功能,使得報文可以被直接傳遞到一個(gè)遠程設備、一個(gè)遠程網(wǎng)絡(luò )上的所有設備、或者所有網(wǎng)絡(luò )上的所有設備。一個(gè)BACnet設備由一個(gè)網(wǎng)絡(luò )號碼和一個(gè)MAC地址唯一確定。由于BACnet協(xié)議規定兩個(gè)BACnet設備之間只能有一條有效路徑,這個(gè)限制大大降低了網(wǎng)絡(luò )層的復雜性,簡(jiǎn)化了路由算法。
2.4 數據鏈路層(MS/TP)
數據鏈路層負責將報文從一個(gè)設備傳送到另一個(gè)單獨設備,或者所有本地網(wǎng)設備。在本文中,只討論MS/TP網(wǎng)絡(luò )。MS/TP使用主/從令牌來(lái)控制對總線(xiàn)網(wǎng)絡(luò )的訪(fǎng)問(wèn)。MS/TP協(xié)議向上為網(wǎng)絡(luò )層提供與ISO 8802-2邏輯鏈路控制協(xié)議一樣的服務(wù);向下使用EIA-485物理層提供的服務(wù)。
3 程序實(shí)現
3.1 協(xié)議棧軟件結構
在高端機器(如工作站)上,我們可以很好地利用C++語(yǔ)言的面向對象特性,完整實(shí)現整個(gè)BACnet協(xié)議棧。但在低端MCU上,程序空間和數據空間非常有限,因此需要盡可能簡(jiǎn)化協(xié)議棧軟件的體系結構。同時(shí)根據不同型號的DDC,對協(xié)議棧軟件進(jìn)行剪裁配置,協(xié)議棧軟件中各個(gè)模塊之間的接口關(guān)系。在整個(gè)結構中最復雜的是應用層模塊,包含BACnet對象模塊,基本數據類(lèi)型模塊,APDU解析/分發(fā)模塊和APDU組裝模塊。
3.2 應用層模塊
BACnet協(xié)議為了簡(jiǎn)化其層次結構,使得BACnet應用層涵蓋了開(kāi)放系統互聯(lián)參考模型(OSI)中會(huì )話(huà)層、表示層和應用層的功能。BACnet應用層模塊是BACnet應用軟件的基礎,它實(shí)現BACnet協(xié)議應用層內容,負責提供工作站的各功能模塊與物理設備直接的通信服務(wù)。根據應用層的功能分析,可以將應用層劃分為如下幾個(gè)模塊:對象模塊、服務(wù)模塊、基本數據類(lèi)型模塊。
對象模塊定義了BACnet對象。BACnet對象按其功能可分為兩類(lèi):一類(lèi)是采集數據的對象,如模擬輸入/輸出對象,這類(lèi)對象需要訪(fǎng)問(wèn)設備硬件;另一類(lèi)對象是在采集的數據基礎上完成復雜功能,如環(huán)對象以及其他實(shí)現報警事件功能的對象,這類(lèi)對象不需訪(fǎng)問(wèn)硬件。另外,某些對象的屬性(如趨勢登錄對象的緩存器大小屬性)需要設備廠(chǎng)商根據DDC型號進(jìn)行初始配置,協(xié)議棧提供對這些屬性的配置函數接口。
服務(wù)模塊用于處理報文的分發(fā)、解析和組裝。對于從網(wǎng)絡(luò )層上來(lái)的APDU,服務(wù)模塊根據APDU的類(lèi)型和服務(wù)選擇參數,調用相應的服務(wù)解析模塊。服務(wù)解析模塊對APDU的信息進(jìn)行解碼,并根據需要與DDC中的BACnet對象進(jìn)行交互。另一方面,DDC會(huì )發(fā)出響應報文(如讀屬性響應),或者主動(dòng)發(fā)出某些報文(如事件與報警服務(wù)),因此服務(wù)模塊還提供服務(wù)報文組裝的函數接口。
基本數據類(lèi)型模塊是一個(gè)工具類(lèi)庫,包含對基本數據類(lèi)型的定義及其編、解碼函數。BACnet包含13種應用數據類(lèi)型以及其他基本數據類(lèi)型。 BACnet應用數據類(lèi)型可以直接進(jìn)行編、解碼。BACnet基本數據類(lèi)型對應著(zhù)ASN.1中的復合數據類(lèi)型,它是由BACnet應用數據類(lèi)型配合標記按照一定的結構組合而成。因此,基本數據類(lèi)型的編/解碼實(shí)際上是按一定的規則調用應用數據類(lèi)型以及標記的編/解碼方法來(lái)實(shí)現的。
3.3 網(wǎng)絡(luò )層模塊
對于DDC來(lái)說(shuō),網(wǎng)絡(luò )層向應用層提供一個(gè)不確認的無(wú)連接數據單元傳輸服務(wù)。網(wǎng)絡(luò )層與應用層交互的服務(wù)原語(yǔ)是網(wǎng)絡(luò )層數據單元請求(N-UNITDATA.request)和網(wǎng)絡(luò )層數據單元指示(N-UNITDATA.indication)。其原語(yǔ)參數如下:
N-UNITDATA.request(destination_address, data, network_priority,data_expecting_reply)
N-UNITDATA.indication(source_address, destination_address,data, network_priority,data_expecting_reply)
當DDC收到來(lái)自鏈路層數據,解析出相應的地址信息,并把地址信息和APDU綁定起來(lái)存放到一個(gè)結構中傳送給應用層,這樣當應用層需要回復報文時(shí)可以得到目標地址。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)c++相關(guān)文章:c++教程
評論