摘要: 變制冷劑流量(VRV) 空調(diào)控制系統(tǒng)具有多傳感器、溫度數(shù)據(jù)具有時(shí)滯特性,維護(hù)程序代碼和功能調(diào)試非常困難,因而提出利用VRV 系統(tǒng)的通信網(wǎng)絡(luò)和單片機(jī)的Bootloader 特性,開(kāi)發(fā)基于CAN 總線的遠(yuǎn)程下載功能。根據(jù)VRV 控制系統(tǒng)的應(yīng)用需求,制訂了通訊協(xié)議,實(shí)現(xiàn)了包括單點(diǎn)、多點(diǎn)及廣播等多種遠(yuǎn)程下載方式,并具有軟件復(fù)位、數(shù)據(jù)加解密、異常處理等新功能。該技術(shù)已經(jīng)應(yīng)用于VRV 空調(diào)控制系統(tǒng)的開(kāi)發(fā)調(diào)試,應(yīng)用效果良好。
0 引 言
變制冷劑流量(Variable Refrigerant Volume, VRV)空調(diào)系統(tǒng)是一種網(wǎng)絡(luò)空調(diào)系統(tǒng),由制冷劑管路網(wǎng)絡(luò)和通訊信息流網(wǎng)絡(luò)組成,并且一臺(tái)室外機(jī)通過(guò)配管和通訊總線連接多臺(tái)室內(nèi)機(jī),由在監(jiān)控室的監(jiān)控PC 機(jī),監(jiān)控整個(gè)系統(tǒng)的運(yùn)行狀態(tài)。系統(tǒng)結(jié)構(gòu)簡(jiǎn)圖如圖1 所示。
VRV 空調(diào)系統(tǒng)結(jié)構(gòu)簡(jiǎn)圖
圖 1 VRV 空調(diào)系統(tǒng)結(jié)構(gòu)簡(jiǎn)圖
系統(tǒng)控制信息通過(guò)通信網(wǎng)絡(luò)傳輸,實(shí)現(xiàn)對(duì)制冷劑管路網(wǎng)絡(luò)中制冷劑流量的精確調(diào)配,可使系統(tǒng)具有控溫舒適可靠、節(jié)能環(huán)保、節(jié)省建筑空間等優(yōu)勢(shì),近十幾年得到迅猛的普及。
通訊信息流網(wǎng)絡(luò)是VRV 系統(tǒng)的重要組成部分。下文為敘述方便,將監(jiān)控PC 機(jī)稱為主機(jī)端、室外機(jī)和室內(nèi)機(jī)統(tǒng)稱為目標(biāo)端。
由于每套系統(tǒng)都有多個(gè)參數(shù)需要傳感器實(shí)時(shí)檢測(cè),并且溫度數(shù)據(jù)本身具有很大的時(shí)滯性,因而維護(hù)程序代碼和功能調(diào)試非常困難。本文提出一種利用VRV 的通信網(wǎng)絡(luò)和監(jiān)控PC機(jī)進(jìn)行程序遠(yuǎn)程下載的方法。
另外,VRV 空調(diào)系統(tǒng)的通信信息流網(wǎng)絡(luò)目前還沒(méi)有統(tǒng)一的總線標(biāo)準(zhǔn),國(guó)際上各大廠家都是制定自己的總線標(biāo)準(zhǔn),兼容性不夠。我們?cè)谙到y(tǒng)設(shè)計(jì)VRV 控制系統(tǒng)時(shí),經(jīng)多方比較,最后鑒于CAN 總線高安全性、故障自動(dòng)退出等優(yōu)勢(shì),選擇CAN 總線作為系統(tǒng)的通訊總線。
VRV 系統(tǒng)的室外機(jī)和室內(nèi)機(jī)選一款支持CAN 模塊的Microchip公司的dsPIC33FJ 單片機(jī)作為主控制芯片。并且這款單片機(jī)本身支持Bootloader 功能,這為開(kāi)發(fā)遠(yuǎn)程下載,進(jìn)而實(shí)現(xiàn)系統(tǒng)維護(hù)和程序更新提供了一種可能。
本文開(kāi)發(fā)出一種基于 CAN 總線,支持單點(diǎn)、多點(diǎn)及廣播等多種方式的遠(yuǎn)程下載的技術(shù),并具有軟件復(fù)位、異常處理、數(shù)據(jù)加/解密等突出功能。這些功能極大方便了對(duì)VRV 空調(diào)控制系統(tǒng)的維護(hù)和應(yīng)用,也為初期進(jìn)行空系統(tǒng)的設(shè)計(jì)、開(kāi)發(fā)、調(diào)試提供了一種極為便利的手段。
1 總體設(shè)計(jì)方案
1.1 遠(yuǎn)程下載原理
目標(biāo)端復(fù)位后,在一個(gè)指定的時(shí)間內(nèi),目標(biāo)端都監(jiān)測(cè)與主機(jī)端相連的通訊總線是否有數(shù)據(jù)流活動(dòng)。如果有,則跳轉(zhuǎn)到Bootloader 自舉程序,執(zhí)行Bootloader 自舉功能,將接收的數(shù)據(jù),寫入目標(biāo)端的用戶應(yīng)用程序段,直到全部數(shù)據(jù)接收完成后,再跳轉(zhuǎn)到用戶應(yīng)用程序段,執(zhí)行剛接收到的新代碼,實(shí)現(xiàn)用戶應(yīng)用程序的更新。如果超過(guò)時(shí)限,都沒(méi)有監(jiān)測(cè)到該總線上有數(shù)據(jù)流活動(dòng),則直接跳轉(zhuǎn)到用戶應(yīng)用程序段,執(zhí)行原有的程序功能。
在此一共有三段程序:
⑴目標(biāo)端的自舉程序和用戶應(yīng)用程序。這兩個(gè)程序都是基于MAPLAB IDE 工具開(kāi)發(fā)。
⑵主機(jī)端程序。這個(gè)程序是用Visual Studio C++開(kāi)發(fā),只有主機(jī)端程序才能主動(dòng)發(fā)起與目標(biāo)端自舉程序間的通信。
整個(gè)通訊過(guò)程如圖2 所示,其中:
(1)主機(jī)端程序讀取和解析MAPLAB IDE 編譯器生成的用戶應(yīng)用程序,并組織數(shù)據(jù)。
(2)通過(guò)CAN 總線將解析、重組后的數(shù)據(jù)傳輸給目標(biāo)端器件。
(3)目標(biāo)端自舉程序(Bootloader),將收到的數(shù)據(jù)加載到目標(biāo)端器件相應(yīng)的FALSH 段上。
通訊過(guò)程示意圖
圖 2 通訊過(guò)程示意圖
1.2 系統(tǒng)功能設(shè)計(jì)
在整個(gè)設(shè)計(jì)開(kāi)發(fā)中,關(guān)鍵之處是目標(biāo)端 Bootloader 自舉程序的開(kāi)發(fā)。結(jié)合到VRV 空調(diào)系統(tǒng)的實(shí)際應(yīng)用,整個(gè)系統(tǒng)應(yīng)該至少具有以下功能:
(1)多種下載方式的提供。VRV 空調(diào)系統(tǒng)運(yùn)行當(dāng)中,可能需要根據(jù)實(shí)際情況采用不同的方式來(lái)進(jìn)行遠(yuǎn)程下載。因而需要實(shí)現(xiàn)對(duì)單點(diǎn)、多點(diǎn)及廣播等通訊方式的支持。
(2)軟件復(fù)位功能。即便是目標(biāo)端設(shè)備已經(jīng)具備利用Bootloader 自舉程序來(lái)實(shí)現(xiàn)遠(yuǎn)程下載的能力,但由于Bootloader 機(jī)制需要目標(biāo)端先復(fù)位,才能重新再執(zhí)行Bootloader 自舉程序。
然而現(xiàn)場(chǎng)環(huán)境往往不能實(shí)施掉電或其他硬件方式復(fù)位目標(biāo)端設(shè)備,這便需要有軟件實(shí)現(xiàn)復(fù)位的手段。在此,將軟件復(fù)位作為自定義的通訊協(xié)議中一個(gè)命令,由主機(jī)端發(fā)送給目標(biāo)端,目標(biāo)端的用戶應(yīng)用程序內(nèi)接收到這一命令,經(jīng)過(guò)解析、確認(rèn)后進(jìn)行復(fù)位。
(3)加/解密功能。鑒于多聯(lián)機(jī)空調(diào)系統(tǒng)的商用價(jià)值,Bootloader 程序應(yīng)當(dāng)具備加密的功能,保護(hù)知識(shí)產(chǎn)權(quán)。這可以通過(guò)主機(jī)端和目標(biāo)端之間采用一種密鑰或加、解密算法,融合到通訊數(shù)據(jù)中實(shí)現(xiàn)。
(4)異常處理功能。在通訊過(guò)程中,很有可能出現(xiàn)如主機(jī)端出現(xiàn)故障,造成當(dāng)前的數(shù)據(jù)不能繼續(xù)成功發(fā)給目標(biāo)端。目標(biāo)端運(yùn)行自舉程序時(shí),只有等到主機(jī)端數(shù)據(jù)全部通訊完畢,才可以跳轉(zhuǎn)到用戶應(yīng)用程序,繼續(xù)執(zhí)行。此會(huì)造成目標(biāo)端一直處于等待狀態(tài),效率低下或者接收錯(cuò)誤數(shù)據(jù)并執(zhí)行,以致出現(xiàn)嚴(yán)重后果。在系統(tǒng)設(shè)計(jì)開(kāi)發(fā)時(shí)需要預(yù)留一個(gè)能夠?qū)崿F(xiàn)異常處理的命令以便主機(jī)端恢復(fù)后,將這個(gè)命令下發(fā),目標(biāo)段根據(jù)這個(gè)命令,重新接收正確的數(shù)據(jù)。
2 協(xié)議設(shè)計(jì)
要將系統(tǒng)的目標(biāo)端和主機(jī)端之間,設(shè)計(jì)成支持單點(diǎn)、多點(diǎn)以及廣播等多種遠(yuǎn)程下載方式,并且支持、軟件復(fù)位和異常處理、加解密等功能,可以充分利用 CAN 總線數(shù)據(jù)幀的29 位(遵循CAN2.0B 協(xié)議)標(biāo)識(shí)符來(lái)實(shí)現(xiàn)。定制的通訊協(xié)議中CAN 的幀格式如表1 所示,將CAN 的29 位標(biāo)示符分為五段:優(yōu)先級(jí)、控制域、通訊方式、節(jié)點(diǎn)編號(hào)、命令編號(hào)。
表 1 數(shù)據(jù)幀29 位標(biāo)識(shí)符分配表
數(shù)據(jù)幀29 位標(biāo)識(shí)符分配表
優(yōu)先級(jí):00->01->10->11 優(yōu)先級(jí)別依次降低,默認(rèn)優(yōu)先級(jí)別為11,故障報(bào)警優(yōu)先級(jí)最高為00,數(shù)據(jù)傳輸優(yōu)先級(jí)為01,命令下傳優(yōu)先級(jí)為10,應(yīng)答返回優(yōu)先級(jí)為11。
控制域:ID26/ID22,用以表示當(dāng)前的數(shù)據(jù)幀屬于哪一種類型:故障為00、數(shù)據(jù)為01、命令10、應(yīng)答11。
通訊方式:ID24/ID15,指定當(dāng)前的數(shù)據(jù)幀是廣播傳輸或者單點(diǎn)傳輸,全為0 是單點(diǎn)而全為1 是廣播。
節(jié)點(diǎn)編號(hào):ID14/ID8,共7 位,足夠標(biāo)識(shí)CAN 總線支持的多達(dá)112 個(gè)節(jié)點(diǎn)的最大負(fù)載。
命令編號(hào):這里存放的是根據(jù)實(shí)際需要定制的一些命令,如軟件復(fù)位命令、異常處理命令。主機(jī)端將定制的命令編號(hào)下發(fā),目標(biāo)端接收到命令后,解析后執(zhí)行相應(yīng)動(dòng)作。仿照上表,配置各個(gè)目標(biāo)端的接收過(guò)濾碼和接收屏蔽碼,便可以實(shí)現(xiàn)單點(diǎn)、多點(diǎn)以及廣播通訊。另外,對(duì)于單點(diǎn)通訊方式下的遠(yuǎn)程下載,為保證主機(jī)端和目標(biāo)端的通訊數(shù)據(jù)的正確和可靠傳輸,采用應(yīng)答機(jī)制來(lái)實(shí)現(xiàn),并定制了一套圖3 所示的通訊鏈路機(jī)制。
主機(jī)端和目標(biāo)端應(yīng)答鏈路機(jī)制圖
圖 3 主機(jī)端和目標(biāo)端應(yīng)答鏈路機(jī)制圖
遠(yuǎn)程下載的通訊只能由主機(jī)端開(kāi)啟。主機(jī)端先發(fā)送讀取器件型號(hào)命令,讀取目標(biāo)端器件芯片型號(hào),目標(biāo)端收到這個(gè)命令,回復(fù)本身的型號(hào)數(shù)據(jù)作為一個(gè)應(yīng)答,主機(jī)端根據(jù)這個(gè)型號(hào),再開(kāi)辟動(dòng)態(tài)內(nèi)存和組織要下傳的數(shù)據(jù)。主機(jī)端接著下發(fā)一個(gè)讀取器件PROM 命令,以獲取目標(biāo)端器件位于地址0x00 處的數(shù)據(jù),將和從主機(jī)端讀取并解析、組織后的HEX 文件一起下傳。主機(jī)端收到這一步的應(yīng)答后,開(kāi)始發(fā)送寫PROM 命令和PROM 數(shù)據(jù),目標(biāo)端將接收到的數(shù)據(jù)寫入相應(yīng)的地址段,每完成一頁(yè)寫操作,返回一個(gè)應(yīng)答,接著接收主機(jī)端下傳的下一頁(yè)數(shù)據(jù)。PROM 寫數(shù)據(jù)發(fā)送完后,主機(jī)端接著發(fā)送寫CM 數(shù)據(jù)命令和寫CM 數(shù)據(jù),過(guò)程和寫PROM 是一樣的。最后,主機(jī)端下發(fā)一個(gè)跳轉(zhuǎn)命令,目標(biāo)端收到這個(gè)命令后,跳轉(zhuǎn)到程序存儲(chǔ)器的0x00 地址處。然后,目標(biāo)端根據(jù)地址0x00 處存放的數(shù)據(jù),跳轉(zhuǎn)到用戶應(yīng)用程序。
而對(duì)于多點(diǎn)或廣播,通常都是對(duì)數(shù)百甚至上千目標(biāo)端進(jìn)行下載。如果目標(biāo)端都應(yīng)答,會(huì)造成總線上數(shù)據(jù)的堵塞,浪費(fèi)大量的總線時(shí)間。所以采用非應(yīng)答機(jī)制,直接燒寫程序存儲(chǔ)器。
此時(shí)主機(jī)端數(shù)據(jù)的下傳,采用定時(shí)器觸發(fā)方式。每當(dāng)定時(shí)時(shí)間到達(dá)時(shí),觸發(fā)一次數(shù)據(jù)的發(fā)送。
直至最后,發(fā)送一個(gè)跳轉(zhuǎn)命令。如果目標(biāo)端沒(méi)有執(zhí)行跳轉(zhuǎn),那么認(rèn)為當(dāng)前目標(biāo)端沒(méi)能正確接收主機(jī)端發(fā)送的數(shù)據(jù),主機(jī)端重新對(duì)當(dāng)前目標(biāo)端進(jìn)行一次單點(diǎn)方式下的遠(yuǎn)程下載。
3 目標(biāo)端設(shè)計(jì)方案
目標(biāo)端Bootloader 自舉程序一般只是一個(gè)簡(jiǎn)單的通訊程序,負(fù)責(zé)接收和發(fā)送數(shù)據(jù),通常只需極少的存儲(chǔ)空間,可以位于單片機(jī)程序存儲(chǔ)器特定的Boot Segment 區(qū)域。程序存儲(chǔ)器還有一段稱為General Segment 區(qū)域可用于存儲(chǔ)用戶應(yīng)用程序。單片機(jī)的程序存儲(chǔ)器大多都是FLASH 閃存,數(shù)據(jù)是以一個(gè)個(gè)數(shù)據(jù)頁(yè)的形式存儲(chǔ),必須先對(duì)當(dāng)前存儲(chǔ)頁(yè)擦除,然后才能寫入數(shù)據(jù)。自舉程序還需使用dsPIC33 單片機(jī)器件中斷向量表 (IVT) 中的復(fù)位向量實(shí)現(xiàn)程序的跳轉(zhuǎn)、以及器件上的CAN 通信模塊。單片機(jī)的程序存儲(chǔ)器的地址映射如下圖4 所示。
dsPIC33F 程序存儲(chǔ)器地址映射圖
圖 4 dsPIC33F 程序存儲(chǔ)器地址映射圖
上圖給出了dsPIC33 單片機(jī)器件的程序存儲(chǔ)器的物理地址映射,由圖可知用戶應(yīng)用代碼應(yīng)放置在用戶應(yīng)用程序地址段,而B(niǎo)ootloader 代碼放在自舉程序地址段。不論目標(biāo)端自舉程序(Bootloader)需多少存儲(chǔ)空間,自舉程序(Bootloader)和用戶應(yīng)用程序的存儲(chǔ)位置都必須嚴(yán)格遵守目標(biāo)端存儲(chǔ)器構(gòu)架。在具體設(shè)計(jì)中,須注意:
(1)慎用中斷:Bootloader 自舉程序不建議使用中斷方式。目標(biāo)端器件在寫Flash 程序存儲(chǔ)器時(shí),有一個(gè)擦除程序存儲(chǔ)器的操作,可能會(huì)擦除掉位于程序存儲(chǔ)器上的中斷向量表和備用中斷向量表地址處的值,造成系統(tǒng)的死機(jī)。另外,一個(gè)功能強(qiáng)大的程序,一般都是用中斷方式實(shí)現(xiàn)用戶應(yīng)用程序以提高實(shí)時(shí)性,這會(huì)生成一個(gè)中斷向量表,存儲(chǔ)在目標(biāo)端器件程指定中斷向量表和備用中斷向量表地址處。如果在 Bootloader 自舉程序也用中斷方式,會(huì)使得一個(gè)目標(biāo)端器件產(chǎn)生兩個(gè)不一樣的中斷向量表和備用中斷向量表區(qū),造成系統(tǒng)的死機(jī)。
(2)存儲(chǔ)位置:Bootloader 程序和用戶應(yīng)用程序不應(yīng)處于同一頁(yè)。自舉程序(Bootloader)要先執(zhí)行擦除程序存儲(chǔ)器,才能將接收的新代碼存入其中。如果處于同一頁(yè),在遠(yuǎn)程下載時(shí),很可能擦除Bootloader 程序本身。
(3)自舉延時(shí):必須為目標(biāo)端自舉程序的執(zhí)行指定一個(gè)延時(shí)值,這個(gè)延時(shí)值作為檢測(cè)總線數(shù)據(jù)流活動(dòng)的時(shí)限。
(4)鏈接文件配置:?jiǎn)纹瑱C(jī)默認(rèn)的自舉程序地址段是0X400 到0XC00。如果實(shí)際的自舉程序代碼量超過(guò)上述空間,需要修改鏈接文件,重新配置,以適合工程需要。
4 主機(jī)端設(shè)計(jì)方案
主機(jī)端的設(shè)計(jì)主要包含主機(jī)端通訊程序的實(shí)現(xiàn),并為用戶提供一個(gè)管理遠(yuǎn)程下載、軟件復(fù)位、異常處理等功能的監(jiān)控界面。主機(jī)端程序,采用了多線程的通信存儲(chǔ)技術(shù),一共包含線程:主線程、接收線程、遠(yuǎn)程下載線程,使得程序執(zhí)行效率較高。
上位機(jī)軟件界面圖
圖5 上位機(jī)軟件界面圖
軟件界面如上圖 5 所示,在這里實(shí)現(xiàn)的主要功能有:
(1)參數(shù)設(shè)置功能,包括CAN 的連接、斷開(kāi)、復(fù)位、啟動(dòng)、接收過(guò)濾碼和接收屏蔽碼等CAN 自身參數(shù)的設(shè)置。
(2)文件導(dǎo)入功能,載入存儲(chǔ)在任意目錄下目標(biāo)端用戶應(yīng)用程序的HEX 文件。
(3)遠(yuǎn)程下載功能,這一功能由“更新按鈕”觸發(fā)產(chǎn)生,啟動(dòng)主機(jī)端程序和目標(biāo)端的通信,實(shí)現(xiàn)遠(yuǎn)程下載。
(4)狀態(tài)顯示功能,由兩個(gè)列表框,用于顯示導(dǎo)入的HEX 文件的數(shù)據(jù),和實(shí)時(shí)顯示當(dāng)前的通訊狀態(tài)。
(5)軟件復(fù)位功能,這一功能由“自舉復(fù)位”觸發(fā)產(chǎn)生,發(fā)送一個(gè)復(fù)位命令和異常處理命令,目標(biāo)端根據(jù)命令進(jìn)行相應(yīng)操作。
5 結(jié)束語(yǔ)
本文結(jié)合VRV 空調(diào)控制系統(tǒng)開(kāi)發(fā)的實(shí)際應(yīng)用需求,以dsPIC33 單片機(jī)為硬件基礎(chǔ),開(kāi)發(fā)了基于CAN 的遠(yuǎn)程下載系統(tǒng)。系統(tǒng)同時(shí)支持單點(diǎn)、多點(diǎn)、廣播等下載方式,具有數(shù)據(jù)加密、軟件復(fù)位、異常處理等以往所開(kāi)發(fā)的遠(yuǎn)程下載技術(shù)所不具備的功能。
本文主機(jī)端程序的設(shè)計(jì)采用了多線程的通信存儲(chǔ)技術(shù),保證了程序的高效性和擴(kuò)展性,并且可實(shí)時(shí)監(jiān)測(cè)系統(tǒng)的狀態(tài),界面風(fēng)格簡(jiǎn)潔明了,符合工程人員操作習(xí)慣。目標(biāo)端嚴(yán)格按照dsPIC33F 單片機(jī)的體系構(gòu)架,進(jìn)行代碼開(kāi)發(fā)和鏈接文件的修改及配置,程序簡(jiǎn)潔易讀、安全可靠。本系統(tǒng)2009 年初進(jìn)行實(shí)驗(yàn)平臺(tái)的聯(lián)機(jī)調(diào)試,性能良好。
本文作者創(chuàng)新點(diǎn):結(jié)合VRV 空調(diào)控制系統(tǒng)具有多傳感器、溫度數(shù)據(jù)具有時(shí)滯特性,利用VRV 空調(diào)系統(tǒng)的通訊信息網(wǎng)絡(luò),開(kāi)發(fā)遠(yuǎn)程下載技術(shù),節(jié)省成本提高效能;實(shí)現(xiàn)了軟件復(fù)位和故障處理以及加解密等實(shí)際工況的需要,使得更為符合實(shí)際現(xiàn)場(chǎng)的需要。