摘要:提出了一種使用以太網(wǎng)技術(shù)和CAN技術(shù)實現(xiàn)樓宇自動化的方案,并給出了軟硬件的具體實現(xiàn)辦法。該方案由主控計算機、以太網(wǎng)通訊節(jié)點以及現(xiàn)場CAN節(jié)點構(gòu)成一個分層網(wǎng)絡(luò)控制系統(tǒng),其中以太網(wǎng)節(jié)點由路由器和嵌入了TCP/IP協(xié)議棧的嵌入式系統(tǒng)構(gòu)成,現(xiàn)場CAN節(jié)點由單片機、AD/DA轉(zhuǎn)換模塊、CAN模塊、傳感器及執(zhí)行機構(gòu)組成。系統(tǒng)具有容錯性好、實時性高,管理方便等優(yōu)勢,可實現(xiàn)智能遙控,故障發(fā)現(xiàn),集中管理等功能。
關(guān)鍵詞:以太網(wǎng);
CAN總線;樓宇自動化;控制系統(tǒng)
隨著現(xiàn)代化城市建設(shè)的發(fā)展,出現(xiàn)了越來越多的高層建筑,如何統(tǒng)一管理和監(jiān)控建筑內(nèi)公用的機電設(shè)備,成為當今樓宇自動化研究的熱點方向之一。以“分散控制,集中管理”為基本思想,設(shè)計了一種基于以太網(wǎng)和CAN總線的樓宇自動化控制系統(tǒng)。采用分層管理和控制,與傳統(tǒng)控制結(jié)構(gòu)相比,每個現(xiàn)場設(shè)備節(jié)點都具有通信和控制能力,各自可以獨立控制而不依賴于主控計算機,同時也具有簡單的故障自動修復功能,因而只要控制規(guī)律確定以后,平時主控機只需要監(jiān)視設(shè)備節(jié)點既可,這樣就提高了整個系統(tǒng)的自動化水平。所選的以太網(wǎng)和CAN總線的組合,相比其他總線,軟硬件技術(shù)成熟、安全可靠、傳輸速度快且成本低廉、易于擴展和維護。
1、網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計
系統(tǒng)結(jié)構(gòu)如圖1所示。系統(tǒng)設(shè)計兩層網(wǎng)絡(luò),第1層是以太網(wǎng),由路由器和交換機組成,負責連接主控機和各個區(qū)域的上位機,各上位機內(nèi)嵌簡單的TCP/IP協(xié)議棧,通過以太網(wǎng)將其下的設(shè)備節(jié)點的狀態(tài)實時的反饋到主控機中,也可以接受主控機發(fā)送出的控制指令。以太網(wǎng)提供了冗余網(wǎng)絡(luò)結(jié)構(gòu),主控機的位置可以隨時移動,通過新的路由器接入網(wǎng)絡(luò)即可。第2層是CAN網(wǎng)絡(luò),由CAN控制器和收發(fā)器組成,負責連接設(shè)備節(jié)點,將采集到的數(shù)據(jù)傳送至上位機,并接收上位機的命令消息。由于上位機實際上起到了一個網(wǎng)關(guān)的作用,因此兩層網(wǎng)絡(luò)結(jié)構(gòu)擴大了通信的帶寬,減輕了總線的負擔。再加上CAN*的非破壞性總線仲裁技術(shù),即使在網(wǎng)絡(luò)負重很大的情況下,也不會出現(xiàn)網(wǎng)絡(luò)癱瘓情況。
2、硬件方案
上位機以NXPLPC2478為主芯片,由電源穩(wěn)壓模塊、以太網(wǎng)收發(fā)器,隔離變壓器、CAN收發(fā)器等組成。LPC2478以ARM7為內(nèi)核,它包括1個10/100以太網(wǎng)媒體訪問控制器(MAC)、1個帶4kB終端RAM的USB全速設(shè)備/主機/OTG控制器、4個UART、兩路CAN通道、1個SPI接口、2個同步串行端口、3個I2C接口和1個I2S接口。同時還帶有1個4MHz的片內(nèi)振蕩器、98kBRAM、以及一個外部存儲器控制器來支持上述的各種串行通信接口。電源穩(wěn)壓模塊將輸入電源電壓濾波并穩(wěn)定在3.3V左右,可以防止電壓瞬時的下降導致的程序跑飛。CAN收發(fā)器采用PCA82C250,以太網(wǎng)接口用常見的的RJ45型網(wǎng)線接口。
設(shè)備節(jié)點使用STC89C52單片機作為微控制器,外擴SJA1000為CAN控制器,為便于調(diào)試,擴展電平轉(zhuǎn)換芯片MAX232作為備用調(diào)試通道。根據(jù)不同需要,還要連接不同的傳感器和其他執(zhí)行機構(gòu),比如中央空調(diào)系統(tǒng),可連接DS18B20溫度傳感器將溫度采集并以數(shù)字量直接傳送給STC89C52,STC89C52則按預先設(shè)置好的方案,控制壓縮機工作。必要時可以由主控機發(fā)送控制命令,修改預先設(shè)置的方案參數(shù)。
將上位機的網(wǎng)口連接至交換機網(wǎng)口,路由器的LAN口也和交換器連接,路由器的WAN口連接進入樓宇局域網(wǎng)。
3、軟件架構(gòu)
軟件由主控機人機接口界面、上位機軟件、設(shè)備節(jié)點軟件組成。上位機軟件包括嵌入式TCP/IP協(xié)議簇、以太網(wǎng)收發(fā)軟件包、CAN收發(fā)軟件包等,設(shè)備節(jié)點軟件包括CAN模塊、數(shù)據(jù)采集分析模塊等組成。
3.1移植μC/OS-Ⅱ?qū)崟r操作系統(tǒng)的方法
上位機既要和主控機通信,又要負責管理下屬的設(shè)備節(jié)點,負載較大。移植μC/OSⅡ操作系統(tǒng)可以使上位機具有多任務(wù)運行的功能。μC/OS-Ⅱ是一個完整的,可移植、固化、裁剪的占先式實時多任務(wù)內(nèi)核。它包含了任務(wù)調(diào)度、任務(wù)管理、時間管理、內(nèi)存管理和任務(wù)間的通信和同步等基本功能。μC/OS-Ⅱ采用的是可剝奪型實時多任務(wù)內(nèi)核,可剝奪型的實時內(nèi)核在任何時候都運行就緒了的zui高優(yōu)先級的任務(wù)。
在ARM下移植μC/OS-Ⅱ操作系統(tǒng)主要是修改μC/OS-Ⅱ中一部分與CPU相關(guān)的匯編代碼,這里主要是任務(wù)上下文的切換代碼。
任務(wù)切換發(fā)生在任務(wù)調(diào)度的時候,μC/OS-Ⅱ下任務(wù)調(diào)度的時機主要有以下幾種情況:1)高優(yōu)先級的任務(wù)因為需要某種臨界資源,主動請求掛起,讓出處理器,此時將調(diào)度就緒狀態(tài)的zui高優(yōu)先級任務(wù)并執(zhí)行。2)高優(yōu)先級的任務(wù)因為時鐘節(jié)拍到來,在時鐘中斷的處理程序中,內(nèi)核發(fā)現(xiàn)更高優(yōu)先級的任務(wù)就緒,獲得了執(zhí)行條件,則在中斷后直接切換到更高優(yōu)先級任務(wù)執(zhí)行。
任務(wù)切換就是保存前一個任務(wù)的基本信息,同時讀取新任務(wù)在上一次被切換時保存的這些信息。調(diào)度器將前一任務(wù)的上述信息保存在該任務(wù)的??臻g中,其目的是為了下次運行時能夠恢復到被切換時的狀態(tài),調(diào)度器將從該任務(wù)的??臻g中讀取上述信息,從而從該任務(wù)上次被中斷的位置繼續(xù)執(zhí)行,其基本過程如下:
1)將當前任務(wù)的PC位置、通用寄存器數(shù)據(jù)、CPU狀態(tài)入棧。
2)將全局變量OSPrioCur(當前任務(wù)優(yōu)先級變量)的值修改為全局變量OSPrioHighRdy(zui高優(yōu)先級任務(wù)優(yōu)先級)的值,即把zui高就緒任務(wù)優(yōu)先級設(shè)置為新的當前任務(wù)優(yōu)先級。
3)將原任務(wù)TCB的*個成員(指向棧頂?shù)闹羔?OSTCB-StkPtr)的值修改為當前SP寄存器的值,以便再次返回。
4)獲取zui高優(yōu)先級的任務(wù)控制塊中*個成員(指向堆棧棧頂指針*OSTCBStkPtr)的值并將其保存到SP寄存器中。
5)將OSTCBCur的值修改為新就緒zui高優(yōu)先級任務(wù)的任務(wù)控制塊地址。
6)將新任務(wù)的PC地址、通用寄存器數(shù)據(jù)、CPU狀態(tài)出棧,開始執(zhí)行新的任務(wù)。
因為任務(wù)切換是將當前任務(wù)的基本信息保存起來(入任務(wù)棧),并加載新任務(wù)的基本信息(出棧),而這些信息很大一部分都被存儲在CPU的寄存器中,因此根據(jù)處理器的不同,此函數(shù)在實現(xiàn)上略有差異,一般都采用匯編語言實現(xiàn)。
3.2編寫設(shè)備驅(qū)動程序
設(shè)備驅(qū)動程序主要包括以太網(wǎng)和CAN軟件包,以太網(wǎng)驅(qū)動主要是初始化LPC2478內(nèi)部以太網(wǎng)模塊的一些重要的寄存器如MAC配置寄存器、MAC地址寄存器、命令寄存器、狀態(tài)寄存器、中斷狀態(tài)寄存器等等。以太網(wǎng)模塊內(nèi)部采用DMA方式讀取數(shù)據(jù),分別使用接收、發(fā)送描述符數(shù)組來表示接收和發(fā)送的數(shù)據(jù)塊。以太網(wǎng)模塊發(fā)送和接受數(shù)據(jù)的流程如圖2所示。
CAN的初始化包括初始化時鐘分頻寄存器,同時選擇能支持擴展幀的PeliCAN模式,設(shè)置接收中斷,采用中斷來接收數(shù)據(jù),設(shè)置總線時序寄存器、輸出控制寄存器等。初始化CAN流程圖如圖3所示。
3.3嵌入式TCP/IP協(xié)議棧的實現(xiàn)方法
嵌入式TCP/IP協(xié)議棧同樣由套接字來實現(xiàn),主要包括IP、ARP、ICMP、TCP、UDP協(xié)議等等。TCP/IP模型結(jié)構(gòu)分為4層,由上到下分別是:應用層、運輸層、網(wǎng)絡(luò)層、物理和數(shù)據(jù)鏈路層。數(shù)據(jù)從應用層發(fā)出,經(jīng)過套接字封裝,傳輸至數(shù)據(jù)鏈路層,交由以太網(wǎng)發(fā)送模塊處理。同樣的,以太網(wǎng)接收模塊收到的數(shù)據(jù),經(jīng)過解包,zui終交由應用層接收??紤]到系統(tǒng)實時性,我們采用UDP傳輸協(xié)議進行數(shù)據(jù)和命令的傳送。編寫UDP通信的任務(wù)時分為服務(wù)器方式和客戶機方式兩種,服務(wù)器方式是先接收到數(shù)據(jù)再進行處理,而客戶機則是先發(fā)生數(shù)據(jù),然后等待回應處理。UDP進程的流程如圖4所示。
數(shù)據(jù)報的接收是通過一個任務(wù)來進行的。該任務(wù)優(yōu)先級較高,可以通過時問片來觸發(fā),也可以通過中斷來觸發(fā)。Rec_Packet()函數(shù)是底層的驅(qū)動程序函數(shù),它在接收時調(diào)用了Rec_Ethemet_Packed()函數(shù)進行以太網(wǎng)層處理,而Rec_Ethemet_Packed()函數(shù)又調(diào)用了IP_PROCESS()函數(shù)。IP層的處理由IP_PROESS()函數(shù)執(zhí)行,它將UDP報通過消息隊列交給UDP處理任務(wù)去執(zhí)行。
數(shù)據(jù)報的發(fā)送與數(shù)據(jù)報的接收是一個相反的過程,是由上層協(xié)議函數(shù)調(diào)用下層協(xié)議函數(shù)來進行的。上層UDP處理函數(shù)或Socket接口函數(shù)都是通過調(diào)用Send_Ip_Frame()函數(shù)來發(fā)送IP報的,而Send_Ip_Frame()函數(shù)則調(diào)用Send_Ip_To_LLC()函數(shù)來處理IP地址對應MAC地址的事情,然后Send_Ip_To_LLC()再調(diào)用Send_Ethemet_Frame()函數(shù),把對應的MAC地址寫入發(fā)送區(qū),zui后調(diào)用驅(qū)動程序的發(fā)送函數(shù)Send_Packet()。
4、關(guān)鍵部位實驗驗證
設(shè)備節(jié)點樣機如圖5所示,它帶有一個DS18B20數(shù)字溫度傳感器,實時將溫度數(shù)據(jù)通過CAN傳輸至上位機,再通過局域網(wǎng)傳至主控計算機;具有多路I/O接口(可外接繼電器),能接收上位機命令改變I/O口的輸出。上位機使用ARM核心板外擴通信接口作為實驗板,主控機使用路由器接入,控制界面由VC++編寫。實驗時將IP地址設(shè)為一固定的私有IP,網(wǎng)關(guān)IP設(shè)為內(nèi)置交換機的TP-LINK路由器IP,設(shè)置好路由器工作方式后即可運行。以溫度采集與繼電器控制為例,驗證了主控機對設(shè)備節(jié)點的監(jiān)控和管理功能,表明該方案技術(shù)切實可行。
5、結(jié)束語
提出了一種實時性較高、實用性較強的樓宇自動化控制系統(tǒng)解決方案,并對關(guān)鍵技術(shù)進行了驗證。系統(tǒng)技術(shù)成熟,易于維護和擴展,可以將建筑內(nèi)各種機電設(shè)備的信息進行分析、歸類、處理、判斷,對各系統(tǒng)設(shè)備進行集中監(jiān)控和管理,使各下屬設(shè)備協(xié)調(diào)有序的工作,并及時處理故障。