廣東工業大學 游健波 黃俊澄 許錦標
以STM32F103單片機芯片為硬件平臺,研發設計一種實現BACnet/IP的智能傳感器設備嵌入式模塊,該模塊能夠在BACnet協議基礎使得數字量和模擬量的智能傳感器封裝成BACnet標準設備,構成一個片上系統(SOC)。為完成這個目標,首先要對BACnet協議標準的對象和屬性進行深入的研究,然后根據著手研究BACnet在應用層的數據信息及編碼形式,然后根據相應的原理寫出編碼和解碼函數,完成對BACnet報文解碼以及響應。最后通過以太網在客戶端軟件與智能傳感器和智能執行器設備實現BACnet通訊。
近年來,隨著我國樓宇智能以及工業自動化的不斷發展,也不斷推進了我國制造業向前的步伐。而隨著因特網的迅速發展,樓宇智能以及工業自動化與因特網的結合已經成為必然趨勢,1999年1月,BACnet標準委員會制定了BACnet互聯協議,由于該協議是基于IPv4的,所以被稱為BACnet/IP協議。普通傳感器作為眾多工業場景的應用基礎,其作用不言而喻。而普通傳感器相對價格更高,功能單一,精度較低等特點,使之很難廣泛應用于眾多工業場合。同時,智能傳感器以其成本低、易于維護、系統部署靈活等特點,令其成為自動控制領域的佼佼者,為此,智能傳感器應運而生。BACnet協議作為一個全球通用的標準協議,在當今時代已經得到了廣泛應用,如美國舊金山的州政府大樓,西雅圖的美國英航大廈,都是BACnet技術帶來的杰作。因此,設計一種基于BACnet智能傳感器對于樓宇智能以及工業的發展是十分必要的。
根據BACnet智能傳感器的功能,設計了智能傳感器的標準模型,如圖1所示。

圖1 BACnet傳感器設計結構框圖
通信進程只接受讀屬性(ReadProperty)應用層服務,完成MS/TP通信協議的功能,然后發出相應響應報文,應用進程主要完成模擬量和數字量之間的轉換,然后更新模擬輸入(Analog Input)對象實例“Present_Value”的值;配置管理進程則主要對一些有關的參數進行設置,并在智能傳感器安裝時進行調試。
本文選用STM32F103ZET6芯片作為主控芯片,下載電路部分是給STM32F103ZET6芯片下載其自身運行的程序的接口,而協議棧則是通過串口下載到芯片中,芯片在通過運行自身的程序去對輸入信號進行解釋。以太網接口部分是通過以太網芯片和以太網RJ45接口共同組成的,W5500芯片通過這個接口實現對以太網輸入端的IP數據包拆封,同時又對STM32傳送來的BACnet報文進行封裝,搭建的硬件電路圖如圖2所示。

圖2 硬件系統示意圖
要完成對BACnet設備的設計,首先要理解并讀懂報文協議的內容,然后解析報文,這時候我們可利用BACnet協議的可視化工具—VTS軟件。根據BACnet智能傳感器(B-SS)支持的BIBBs,向IP地址為192.168.113.255的BACnet設備發送一個ReadProperty請求,具體的報文如圖3所示。

圖3 BACnet報文分析
紅框中的一串數字就是向BACnet設備發送的一段報文,提取出來后得到:“C0A871FFBAC0 810A0011 01040003A10C 0C038000 001955”,接下來我們則對報文逐個解析。
(1)“C0 A8 71 FF BA C0”這是報文的頭部,轉化為十進制則可得到Local Broadcast,即目的地址192.168.113.255,UDP端口號為47808;
(2)“81 0A 00 11”這是BACnet虛擬鏈路層信息,類型為BACnet/IP,其中把0A簡單地轉換為十進制后可知道,這是表示BVLL協議中的第十種功能Original-Unicast-To-Network,11轉化為十進制的17,表示報文的長度為17字節,即“81 0A 00 11 01 04 00 03 A1 0C 0C 03 80 00 00 19 55”的長度。
(3)“01 04”這是網絡層內容,表示BACnet協議執行的版本號為1,是一條BACnet協議的APDU;
(4)“00 03 A1 0C”,“00”表示這是一個沒有后續分段的報文,“03”轉化為二進制則為“0011”,表示最大的報文長度為480字節;“A1”則表示Invoke ID為161,代表發過來的報文標號為161,“0C”對應的十進制為12,查表可得這是一個ReadProperty請求,另外WriteProperty則是15;
(5)“0C 03 80 00 00 19 55”,這是一段請求數據,“0C”BACnet標準對象標識碼的格式,后面的編碼長度為4個字節,“03 80 00 00”轉化為二進制為“00000011 10000000 00000000 00000000”根據BACnet協議標準規定,對象的“Object-Identifier”屬性由4個字節組成,總共32位,前22位(000000 00000000 00000000)為對象實例,后10位(00000011 10)為對象類型,即該報文表示實例號(Instance)為0,對象號為14,即多態輸出對象類型(Multistateoutput);“19”表示對象屬性標識符的長度為1字節;“55”轉換為十進制為85,表示Present屬性。
本文就BACnet智能傳感器的相關設計以及報文進行了研究,并對該類型傳感器提出了一種設計方案。在基于STM32F103的基礎上在增加了W5500以太網芯片,為BACnet智能傳感器設備提供了了一種接入以太網的方法。另外,通過對復雜BACnet協議報文的具體分析,對以后BAcnet協議轉其他協議以及BACnet設備的開發研究具有重要的指導意義。