李春旺,孫育英,吳義民,施 方
(1.北京聯(lián)合大學(xué)生物化學(xué)工程學(xué)院,北京100023;2.北京工業(yè)大學(xué),北京100022;3.北京施能通智能科技開(kāi)發(fā)有限公司,北京100081)
BACnet協(xié)議是樓宇自控網(wǎng)絡(luò)協(xié)議領(lǐng)域的唯一ISO標(biāo)準(zhǔn)(ISO 16484-5),幾十家著名公司開(kāi)發(fā)了相關(guān)產(chǎn)品,在工程中得到廣泛應(yīng)用[1].Modbus通信協(xié)議作為規(guī)范工業(yè)自動(dòng)化網(wǎng)絡(luò)協(xié)議的國(guó)家標(biāo)準(zhǔn)之一,成為樓宇機(jī)電設(shè)備控制器和測(cè)控儀表串行通信接口的常規(guī)配置.傳統(tǒng)BACnet/Modbus網(wǎng)關(guān)的設(shè)計(jì)思路是在BACnet和Modbus兩種通信協(xié)議之間通過(guò)數(shù)據(jù)共享來(lái)實(shí)現(xiàn)數(shù)據(jù)交換,即Modbus通過(guò)輪詢方式獲取數(shù)據(jù)后暫存在數(shù)據(jù)共享區(qū),當(dāng)BACnet發(fā)出請(qǐng)求時(shí),直接從數(shù)據(jù)共享區(qū)讀取數(shù)據(jù)并進(jìn)行相應(yīng)的解析和封裝處理,保證BACnet和 Modbus協(xié)議的正確映射[2].但這種方式存在2個(gè)問(wèn)題:①軟、硬件資源占用大,真正需求數(shù)據(jù)的實(shí)時(shí)轉(zhuǎn)換效率不高;②從BACnet軟件或硬件環(huán)境中,無(wú)法直接識(shí)別Modbus側(cè)設(shè)備,導(dǎo)致Modbus設(shè)備管理產(chǎn)生盲區(qū).針對(duì)以上問(wèn)題,筆者研制了一種具有路由定向功能的BACnet/Modbus協(xié)議轉(zhuǎn)換器,可以實(shí)現(xiàn)Modbus設(shè)備與BACnet軟件或硬件之間的數(shù)據(jù)透明傳輸,并將Modbus設(shè)備封裝成BACnet設(shè)備,可直接支持各種BAC-net軟件或硬件對(duì)Modbus設(shè)備進(jìn)行的管理和操作功能,實(shí)現(xiàn)了真正意義的無(wú)縫集成.
BACnet協(xié)議具有應(yīng)用層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層和物理層4層架構(gòu).在數(shù)據(jù)鏈路層和物理層提供5種選擇,其中以太網(wǎng)選擇之一是由ISO 88O2 Type 1定義的邏輯連接控制協(xié)議、媒體訪問(wèn)控制MAC和物理層協(xié)議組合在一起.ISO 88O2 Ethernet協(xié)議的報(bào)文比IP通信協(xié)議報(bào)文短,通信效率較高,可以避開(kāi)使用IP地址技術(shù)的一些弊端,是路由器、網(wǎng)關(guān)以太網(wǎng)端口的通信協(xié)議首選.圖1所示的BACnet Ethernet通信協(xié)議報(bào)文由6個(gè)部分構(gòu)成:應(yīng)用層協(xié)議數(shù)據(jù)單元(APDU),網(wǎng)絡(luò)層協(xié)議控制信息(NPDU),數(shù)據(jù)鏈路層數(shù)據(jù)單元(LPDU),邏輯鏈路控制(LLC),X82X82X03是服務(wù)訪問(wèn)點(diǎn)信息,物理層報(bào)文負(fù)責(zé)具體硬件收發(fā)字節(jié)內(nèi)容.
標(biāo)準(zhǔn)的Modbus網(wǎng)絡(luò)通信可以設(shè)置成ASCII或RTU兩種傳輸模式.Modbus報(bào)文結(jié)構(gòu)包括設(shè)備地址、功能代碼、所要發(fā)送的數(shù)據(jù)和錯(cuò)誤檢測(cè)域.Modbus通信使用主從方式,即主設(shè)備能發(fā)送查詢報(bào)文幀進(jìn)行查詢,從設(shè)備根據(jù)主設(shè)備查詢提供的數(shù)據(jù)發(fā)送回應(yīng)報(bào)文幀作出反應(yīng).查詢報(bào)文幀中的功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能,數(shù)據(jù)段包含了從設(shè)備要執(zhí)行功能的任何附加信息,錯(cuò)誤檢測(cè)域?yàn)閺脑O(shè)備提供了一種驗(yàn)證消息內(nèi)容是否正確的方法[4].如果從設(shè)備產(chǎn)生正常的回應(yīng),在回應(yīng)報(bào)文幀中的功能代碼是在查詢消息中的功能代碼的回應(yīng),數(shù)據(jù)段包括了從設(shè)備收集的數(shù)據(jù),如寄存器值或狀態(tài),如果有錯(cuò)誤發(fā)生,功能代碼將被修改以用于指出回應(yīng)報(bào)文是錯(cuò)誤的,同時(shí)數(shù)據(jù)段包含了描述此錯(cuò)誤信息的代碼.錯(cuò)誤檢測(cè)域允許主設(shè)備確認(rèn)消息內(nèi)容是否可用.
圖1 BACnet Ethernet通信協(xié)議的報(bào)文結(jié)構(gòu)Fig.1 BACnet Ethernet communication protocol message structure
圖2為BACnet Ethernet報(bào)文轉(zhuǎn)化為Modbus報(bào)文的過(guò)程.圖2所示,BACnet NPDU報(bào)文中的NPCI存放的是Modbus設(shè)備地址,當(dāng)BACnet軟件或BACnet以太網(wǎng)設(shè)備發(fā)出BACnet NPDU報(bào)文時(shí),直接將Modbus設(shè)備地址解析出來(lái),傳遞給處理Modbus設(shè)備通信協(xié)議的任務(wù)中,Modbus設(shè)備通信處理任務(wù)的下一次指令則直接針對(duì)這個(gè)地址的Modbus設(shè)備進(jìn)行主從查詢,即發(fā)出對(duì)這個(gè)地址的Modbus設(shè)備的查詢指令字節(jié).
圖3所示,將Modbus設(shè)備回復(fù)的應(yīng)答數(shù)據(jù)報(bào)文中的Modbus設(shè)備地址直接解析出來(lái),傳遞給處理BACnet設(shè)備通信協(xié)議的任務(wù)中,其下一次任務(wù)執(zhí)行則回復(fù)給查詢軟件或其它以太網(wǎng)設(shè)備所查詢的Modbus設(shè)備的地址及數(shù)據(jù)內(nèi)容.
2.3.1 BACnet“I am”響應(yīng)功能
當(dāng)轉(zhuǎn)換器收到BACnet軟件或其它BACnet以太網(wǎng)設(shè)備發(fā)出的BACnet對(duì)象“Who is”查詢指令時(shí),轉(zhuǎn)換器根據(jù)已經(jīng)在線Modbus設(shè)備的地址,為每個(gè)Modbus設(shè)備自動(dòng)分配生成BACnet通信協(xié)議必需的器件編號(hào).例如,假設(shè)Modbus設(shè)備所在的RS485通信網(wǎng)絡(luò)被定義為BACnet通信網(wǎng)絡(luò),網(wǎng)絡(luò)編號(hào)為61,則硬件地址為1的Modbus設(shè)備的BACnet器件編號(hào)為6101,硬件地址為2的Modbus設(shè)備的BACnet器件編號(hào)為6102,…,依此類推,將每個(gè)在線的Modbus設(shè)備均分配一個(gè)獨(dú)立的BACnet通信時(shí)唯一辨識(shí)的編號(hào),完成了Modbus設(shè)備的BACnet封裝的基本條件準(zhǔn)備.然后,就在Modbus設(shè)備地址的前后封裝網(wǎng)絡(luò)編號(hào)和其器件編號(hào),組成標(biāo)準(zhǔn)的BACnet報(bào)文,并向BACnet軟件或其它BACnet以太網(wǎng)設(shè)備發(fā)回“I am”回應(yīng)報(bào)文.如圖4所示.
2.3.2 BACnet“Read”響應(yīng)功能
當(dāng)BACnet軟件或其它BACnet以太網(wǎng)設(shè)備收到轉(zhuǎn)換器發(fā)出的“I am”回應(yīng)報(bào)文后,發(fā)出查詢?cè)揗odbus設(shè)備型號(hào)、數(shù)據(jù)等信息的 BACnet報(bào)文.當(dāng)轉(zhuǎn)換器收到該報(bào)文時(shí),將報(bào)文中的NPCI網(wǎng)絡(luò)報(bào)文頭部中的Modbus設(shè)備地址信息解析出來(lái),立即啟動(dòng)Modbus側(cè)的查詢?nèi)蝿?wù),將查詢?cè)摰刂吩O(shè)備相關(guān)信息的Modbus報(bào)文發(fā)送出去.當(dāng)收到查詢結(jié)果時(shí),封裝為BACnet報(bào)文進(jìn)行回復(fù),實(shí)現(xiàn)對(duì)BACnet的“Read”響應(yīng)功能.當(dāng)轉(zhuǎn)換器收到查詢地址1 Modbus設(shè)備型號(hào)的報(bào)文時(shí),回復(fù)的響應(yīng)報(bào)文,如圖5所示.
圖6所示電路包括控制單元、以太網(wǎng)接口、串行接口和系統(tǒng)電源.控制單元采用TI的微控制器Lm3s6911+實(shí)現(xiàn),用于路由定向、Modbus與BAC-net Ethernet報(bào)文的雙向解析和封裝.在通信方面,Lm3s6911+有3個(gè)可編程的UART,2個(gè)同步串行接口SSI和可編程MAC地址的10/100 MHz以太網(wǎng)控制器.其中2個(gè)同步串口做為Modbus的通信端口,MAX485CPA芯片分別與Lm3s6911+的PA2和PA3引腳連接,用于接收和發(fā)送封裝好的Modbus網(wǎng)絡(luò)數(shù)據(jù).100 MHz以太網(wǎng)接口做為BACnet Ethernet通信端口.本設(shè)計(jì)中,系統(tǒng)電源提供標(biāo)準(zhǔn)5 V和3.3 V兩種電壓,5 V用于給接口電路供電,3.3 V用于給控制單元供電,再通過(guò)Lm3s6911+中可編程片內(nèi)低壓差穩(wěn)壓器調(diào)整到2.75 V以滿足芯片的要求.
轉(zhuǎn)換器軟件為BACnet和Modbus通信協(xié)議的實(shí)現(xiàn)各分配一個(gè)獨(dú)立任務(wù),在兩個(gè)任務(wù)之間建立路由關(guān)系,傳遞Modbus設(shè)備的通信協(xié)議地址和數(shù)據(jù)內(nèi)容.為實(shí)現(xiàn)多任務(wù)功能,軟件系統(tǒng)架構(gòu)采用免費(fèi)開(kāi)源的嵌入式操作系統(tǒng)ucOSII,具有小巧、可裁減、實(shí) 時(shí) 的 特 點(diǎn)[5-6].將 ucOSII 移 植 到Lm3s6911+微控制器上,并根據(jù)轉(zhuǎn)換器的需要對(duì)其內(nèi)核進(jìn)行配置,連同用ANSI C編寫的應(yīng)用程序一同編譯下載到控制單元,實(shí)現(xiàn)了可同時(shí)偵聽(tīng)和處理BACnet Ethernet通信協(xié)議幀和Modbus通信協(xié)議幀的功能.
轉(zhuǎn)換器Modbus側(cè)的任務(wù)要同步跟隨BACnet側(cè)的需求,當(dāng)BACnet側(cè)查詢某個(gè)地址的Modbus設(shè)備信息時(shí),轉(zhuǎn)換器的路由功能則唯一定向在這個(gè)地址上,啟動(dòng)Modbus側(cè)的查詢?nèi)蝿?wù),并將查詢結(jié)果BACnet封裝后返回BACnet側(cè).為了實(shí)現(xiàn)上述任務(wù)的協(xié)同工作,轉(zhuǎn)換器在軟件設(shè)計(jì)上采用了“消息”機(jī)制,即在BACnet和Modbus通信協(xié)議處理任務(wù)中分別建立了“消息”標(biāo)記,用來(lái)同步BACnet報(bào)文中的NPCI段和Modbus報(bào)文地址段,及BACnet報(bào)文的APDU段和Modbus報(bào)文數(shù)據(jù)段的相關(guān)信息.
需要注意的是,為了提高通信效率,轉(zhuǎn)換器需要每次Modbus查詢能回復(fù)該Modbus設(shè)備的全部寄存器表數(shù)據(jù),因此Modbus設(shè)備必須支持批讀查詢指令,而且能夠提供寄存器表內(nèi)的全部數(shù)據(jù)值的固定格式,以便于解析封裝為對(duì)應(yīng)的BACnet點(diǎn)位AV或BV值.
圖6 硬件電路原理圖Fig.6 Hardware circuit principle diagram
傳統(tǒng)的 BACnet/Modbus網(wǎng)關(guān),在 BACnet軟件環(huán)境下只能顯示該網(wǎng)關(guān)及其全部已經(jīng)完成數(shù)據(jù)共享的Modbus數(shù)據(jù),而無(wú)法看到每個(gè)Modbus設(shè)備的狀態(tài).筆者采用帶 Modbus通信接口的YD2010數(shù)字電表做為Modbus設(shè)備,典型的Navigator樓宇自動(dòng)化組態(tài)軟件做為BACnet設(shè)備.圖7所示,新型協(xié)議轉(zhuǎn)換器直接將Modbus設(shè)備封裝為具有BACnet對(duì)象屬性的BACnet設(shè)備,Navigator軟件將YD2010數(shù)字電表等同于BACnet DDC設(shè)備進(jìn)行管理,并正常顯示了讀取的全部數(shù)據(jù).
基于路由功能的BACnet/Modbus轉(zhuǎn)換器,通過(guò)路由功能直接根據(jù)Modbus設(shè)備地址進(jìn)行地址定向查詢,無(wú)需將資源浪費(fèi)在沒(méi)有查詢需求的Modbus設(shè)備數(shù)據(jù)上,保證了BACnet設(shè)備讀取的均為實(shí)時(shí)值.圖8為采用邏輯分析儀對(duì)查詢-響應(yīng)速度測(cè)試的結(jié)果,白色數(shù)據(jù)塊為電表回復(fù)字節(jié)信息,可以看出回復(fù)內(nèi)容本身需要100 ms左右的發(fā)送時(shí)間.白色數(shù)據(jù)塊之間的黑色間隔時(shí)間長(zhǎng)度加上白色數(shù)據(jù)塊的時(shí)間長(zhǎng)度則為軟件發(fā)送查詢命令的間隔時(shí)間,約為200 ms左右,達(dá)到了每秒鐘查詢5塊Modbus電表內(nèi)的所有電量值的速度.若采用傳統(tǒng)的BACnet/Modbus網(wǎng)關(guān),則無(wú)法保證實(shí)時(shí)性和效率.以集成30個(gè)聯(lián)網(wǎng)的Modbus數(shù)字電表為例,每秒鐘順序查詢5個(gè)Modbus電表內(nèi)所有數(shù)據(jù),則需要6 s完成網(wǎng)關(guān)內(nèi)數(shù)據(jù)共享區(qū)的所有數(shù)據(jù)更新,從而導(dǎo)致BACnet設(shè)備通過(guò)網(wǎng)關(guān)讀取的Modbus電表數(shù)據(jù)已經(jīng)滯后實(shí)時(shí)值6 s,還未必都是BACnet側(cè)所需查詢數(shù)據(jù).
采用嵌入式技術(shù)實(shí)現(xiàn)基于路由功能的BAC-net/Modbus轉(zhuǎn)換器,直接將Modbus設(shè)備封裝為具有BACnet對(duì)象屬性的BACnet設(shè)備,可以利用現(xiàn)有的各種BACnet軟件進(jìn)行管理和操作,彌補(bǔ)了傳統(tǒng)Modbus網(wǎng)關(guān)管理不透明的缺陷,提高了實(shí)時(shí)性,方便了在BACnet環(huán)境中Modbus設(shè)備的調(diào)試和維護(hù),提高了系統(tǒng)集成的價(jià)值.
[1]董春橋,劉賢德,惠曉實(shí).樓宇自動(dòng)控制網(wǎng)絡(luò)通信協(xié)議BACnet實(shí)現(xiàn)模型的研究[J].計(jì)算機(jī)工程與應(yīng)用2003,39(5):172 -174.
[2]廖方誠(chéng),周祖德.基于BACnet和Modbus協(xié)議轉(zhuǎn)換器的設(shè)計(jì)[J].武漢理工大學(xué)學(xué)報(bào).2009,31(23):89-91.
[3]ANSI/ASHARE Standard 135 -2001:BACnet-A Data Communication Protocol for Building Automation and Control Networks,USA 2001.
[4]線巖團(tuán),許江淳,鄢大鵬.基于單片機(jī)的MODBUS的協(xié)議實(shí)現(xiàn)[J].云南大學(xué)學(xué)報(bào):自然科學(xué)版.2009,31(S2):120 -124.
[5]張桂,金國(guó)強(qiáng),李輝.基于ARM平臺(tái)Modbus RTU協(xié)議的研究與實(shí)現(xiàn)[J].電力科學(xué)與工程,2011,27(1):23 -27.
[6]邵貝貝.嵌入式實(shí)時(shí)操作系統(tǒng)ucOSII[M].北京:北京航空航天出版社,2006.