金 純,任 濤,王 曉
(1.重慶郵電大學通信與信息工程學院,重慶 400065;2.重慶廣播電視集團(總臺),重慶 400015)
伴隨著ZigBee技術在無線傳感器網(wǎng)絡的廣泛應用和TD-SCDMA在我國的蓬勃發(fā)展,控制中心如何利用TD-SCDMA網(wǎng)絡對ZigBee構(gòu)成的網(wǎng)絡進行遠程管理,控制感測環(huán)境中的各種傳感器裝置,逐漸成為該領域的一個重要課題。由于ZigBee和TD-SCDMA的協(xié)議不同,以至于數(shù)據(jù)在這兩個網(wǎng)絡之間無法進行透明傳輸。因此,設計了ZigBee/TDSCDMA網(wǎng)關用于解決上述問題,使得ZigBee節(jié)點采集的數(shù)據(jù)能夠通過TD-SCDMA網(wǎng)絡遠程及時地發(fā)送出去,同時監(jiān)控中心也可以向ZigBee節(jié)點發(fā)送控制命令。
網(wǎng)關是建立在傳輸層以上的協(xié)議轉(zhuǎn)換器,通常連接兩個或多個不同的網(wǎng)絡,每接收一種協(xié)議的數(shù)據(jù)包,利用用戶編寫的應用程序,在轉(zhuǎn)發(fā)之前,將該數(shù)據(jù)包轉(zhuǎn)換成另一種協(xié)議的格式,設計的網(wǎng)關協(xié)議模型如圖1所示[1]。
該網(wǎng)關采用ARM處理器作為網(wǎng)關的主系統(tǒng),CC2430以ZigBee協(xié)議為基礎,在網(wǎng)關與ZigBee路由節(jié)點和終端節(jié)點之間接收數(shù)據(jù)通信,TD-SCDMA模塊用于將ZigBee節(jié)點的數(shù)據(jù)發(fā)送到控制中心以及從控制中心接收命令,系統(tǒng)硬件的總體結(jié)構(gòu)如圖2所示[2]。
如圖所示,ZigBee/TD-SCDMA網(wǎng)關由若干硬件單元構(gòu)成。ARM處理器是ZigBee/TD-SCDMA網(wǎng)關的控制核心,ARM處理器(LPC2214)與ZigBee模塊(CC2430)通過串口相連,如圖3所示[3],ZigBee模塊通過射頻接口與天線相連,天線用于收發(fā)無線信號。RAM 通過地址數(shù)據(jù)總線與ARM處理器相連,F(xiàn)lash通過地址數(shù)據(jù)總線與ARM處理器相連,用于存儲數(shù)據(jù)信息。ARM處理器的另一端通過串口與TD-SCDMA模塊相連,同時,TD-SCDMA模塊連接TD-SCDMA天線,用于收發(fā)無線信號。ZigBee模塊與ZigBee節(jié)點通過無線方式通信;TD-SCDMA模塊與TD-SCDMA網(wǎng)絡通過無線方式通信。
圖3 CC2430與LPC2214關鍵引腳連接圖(截圖)
如圖3所示,ZigBee模塊與LPC2214通過串口進行數(shù)據(jù)的傳輸,其中ZigBee模塊與LPC2214通過RXD和TXD兩個引腳進行連接,由于LPC2214沒有RTS和CTS兩個引腳,所以在進行數(shù)據(jù)傳輸之前,要通過AT指令將ZigBee模塊設置成無流控的形式,然后就可以進行數(shù)據(jù)的傳輸。
圖2中,在網(wǎng)關內(nèi)部,當沒有ZigBee節(jié)點接入時,TD-SCDMA模塊與服務器斷開連接;當有ZigBee節(jié)點需要接入時,網(wǎng)關先建立ZigBee節(jié)點與ZigBee模塊之間的連接,再建立TD-SCDMA模塊與TD-SCDMA服務器之間的連接。
ZigBee模塊建立連接時,ZigBee節(jié)點先通過ZAO查詢網(wǎng)關的服務信息,再通過ZDO發(fā)出連接要求,APS負責上層應用程式物件與下層網(wǎng)絡層的協(xié)調(diào),NWK負責找尋并維護節(jié)點間的繞徑路線并傳送封裝包到目標節(jié)點[4]。TD-SCDMA模塊建立連接時,通過AT指令控制連接TD-SCDMA網(wǎng)絡(包括PHY層、MAC 層、RLC 層、PDCP層等),之后通過PPP協(xié)議與服務器進行連接,獲取IP地址等參數(shù)。
網(wǎng)關中的ZigBee模塊可以是兩種設備類型,協(xié)調(diào)器或路由器。在該網(wǎng)關中,ZigBee模塊設計為協(xié)調(diào)器。網(wǎng)關將提取ZigBee節(jié)點發(fā)送過來的有效數(shù)據(jù),將其使用TCP/IP封裝后再通過TD-SCDMA模塊發(fā)送到終端客戶;同時,網(wǎng)關也將提取終端客戶發(fā)送過來的通過TCP/IP協(xié)議封裝的有效數(shù)據(jù),將這些有效數(shù)據(jù)封裝到ZigBee協(xié)議中,然后通過 ZigBee模塊發(fā)送給 ZigBee節(jié)點。
網(wǎng)關實現(xiàn)TCP/IP協(xié)議客戶端及服務端兩種角色。做客戶端使用時,網(wǎng)關會利用TCP/IP協(xié)議主動連接預先定義的終端客戶的IP地址及端口號,完成Socket連接;作為服務端使用時,網(wǎng)關將通過TD-SCDMA模塊申請到的IP地址注冊到動態(tài)域名中,并且會在某個預定義的端口上進行Socket監(jiān)聽,這樣,終端客戶就可以通過動態(tài)域名知道網(wǎng)關的IP地址,并且連接到網(wǎng)關預定義的端口上,完成Socket連接。在客戶端或服務端的Socket連接完成之后,就可以在這個Socket與ZigBee協(xié)議之間轉(zhuǎn)發(fā)數(shù)據(jù)了。
ZigBee/TD-SCDMA網(wǎng)關的軟件設計主要包括兩個方面:CC2430和ARM處理器,下面詳細地介紹CC2430和ARM處理器的軟件設計。
CC2430的軟件設計主要依據(jù)于z-stack,它分別由ZigBee協(xié)議棧、ZigBee應用、硬件支持包組成。
CC2430在充當接收和發(fā)送器的時候,它只負責對數(shù)據(jù)進行接收和發(fā)送,而不對數(shù)據(jù)進行任何的處理。在網(wǎng)關中,CC2430充當協(xié)調(diào)器,主要負責將ZigBee節(jié)點的數(shù)據(jù)轉(zhuǎn)發(fā)到ARM處理器中,同時CC2430還要建立網(wǎng)絡和維護網(wǎng)絡。在對CC2430進行軟件設計的過程中,首先對硬件部分進行初始化,然后建立PAN標識符,廣播地址ID等,并且協(xié)調(diào)器會保持對網(wǎng)絡節(jié)點的監(jiān)控狀態(tài),當協(xié)調(diào)器接收到信號的時候,首先判斷這個信號是否來自于一個新節(jié)點,如果是一個新節(jié)點,并且要加入到網(wǎng)絡中,協(xié)調(diào)器會分配一個16位短地址到這個新節(jié)點中;如果不是,協(xié)調(diào)器就會將這個數(shù)據(jù)包(信號)通過UART引腳直接傳到ARM處理器中。協(xié)調(diào)器的流程圖如圖4所示[5]。
圖4 協(xié)調(diào)器接收數(shù)據(jù)流程圖
協(xié)調(diào)器在接收與發(fā)送數(shù)據(jù)之前,首先要與ZigBee節(jié)點組成ZigBee網(wǎng)絡,以便把ZigBee節(jié)點采集的數(shù)據(jù)匯聚起來,組建網(wǎng)絡是通過zg_aplFormNetwork()函數(shù)來完成的,在組成網(wǎng)絡之后,等待其他節(jié)點的加入。
網(wǎng)絡組建成之后,就要從ZigBee節(jié)點去接收信號,信號分為兩種:一種是要加入網(wǎng)絡的信號,一種是ZigBee節(jié)點采集的數(shù)據(jù)。當協(xié)調(diào)器監(jiān)測到信號時,協(xié)調(diào)器將接收到的原語傳輸?shù)骄W(wǎng)絡層,網(wǎng)絡層判斷該節(jié)點是否為已連接的設備,如果是,則通過串口發(fā)送數(shù)據(jù),否則,給要加入的設備分配短地址。
ARM處理器是實現(xiàn)ZigBee網(wǎng)絡與TD-SCDMA網(wǎng)絡的透明傳輸?shù)年P鍵系統(tǒng),將ZigBee協(xié)議轉(zhuǎn)換成TD-SCDMA協(xié)議,實現(xiàn)數(shù)據(jù)的遠距離傳輸,同時能夠?qū)D-SCDMA協(xié)議轉(zhuǎn)換成ZigBee協(xié)議,向ZigBee節(jié)點發(fā)送控制命令。
ARM處理器首先初始化硬件,然后打開中斷和接收數(shù)據(jù)包,并且對其分析和處理,流程圖如圖5所示[6]。
圖5 ARM處理器處理數(shù)據(jù)的流程圖
由于打開了中斷,所以處理器在處理數(shù)據(jù)的過程中有時會發(fā)生中斷或異常中斷,在進入中斷程序之前,必須保存當前所有的值,而后在進入到中斷處理程序中,首先處理器會將中斷標志位清零,然后對相關的寄存器進行一系列的設置,當處理完成后返回中斷節(jié)點處,繼續(xù)運行。
為了改進系統(tǒng)的實時性、增強實時性能和簡化系統(tǒng)的應用程序,移植μC/OS-Ⅱ嵌入式操作系統(tǒng)到LPC2214中,LPC2214的整個軟件模型如圖6所示[7]。
圖6 LPC2214軟件模型
LPC2214中的軟件模型主要包括2個任務和串口接收中斷的子程序,這2個主要任務就是zigbeetask()和td-scdmatask(),這兩個任務主要是對接收到的數(shù)據(jù)進行處理。當串口在中斷的子程序中接收完了所有的數(shù)據(jù),根據(jù)接收的方向,發(fā)送zigbeeqflag或td-scdmaqflag進行激活zigbeetask()或td-scdmatask()任務。
在這里,特別強調(diào)一點,當LPC2214串口接收到的數(shù)據(jù)長度大于LPC2214串口能夠接收到的最大數(shù)據(jù)長度時,為了便于用中斷方式接收處理,在串口初始化的函數(shù)中,應該同時打開接收數(shù)據(jù)(RDA)中斷和字符超時指示中斷(CTI)。
監(jiān)控中心與采集中心之間的數(shù)據(jù)交流是以幀的形式傳輸?shù)?。在通信的過程中,為了使雙方能夠?qū)邮盏降臄?shù)據(jù)進行及時的傳輸、解析,整個系統(tǒng)要應用確定的幀格式。
在煤礦定位系統(tǒng)中,為了確保數(shù)據(jù)能夠及時傳輸,網(wǎng)關需要設計通信協(xié)議的幀格式,包括采集中心發(fā)送的數(shù)據(jù)幀和監(jiān)控中心發(fā)送的命令幀,但由于數(shù)據(jù)幀和命令幀的數(shù)據(jù)長度不同,以及能夠使網(wǎng)關更迅速地處理數(shù)據(jù),命令幀和數(shù)據(jù)幀的幀結(jié)構(gòu)如表1所示[7]。
表1 數(shù)據(jù)幀和命令幀的幀結(jié)構(gòu) byte
ZigBee/TD-SCDMA網(wǎng)關主要實現(xiàn)ZigBee網(wǎng)絡與TD-SCDMA網(wǎng)絡的雙向傳輸,下面簡單地介紹從ZigBee往TD-SCDMA的傳輸過程。當ZigBee/TD-SCDMA網(wǎng)關從ZigBee節(jié)點中接收到數(shù)據(jù)時,ZigBee模塊將接收到的數(shù)據(jù)傳輸?shù)紸RM處理器,ARM處理器對接收到的數(shù)據(jù)進行處理,去掉ZigBee協(xié)議棧頭,提取有用的數(shù)據(jù)載荷,然后加上TD-SCDMA的協(xié)議棧頭,具體過程如下:去掉Zig-Bee PHY頭幀→去掉ZigBee MAC頭幀→去掉ZigBee NWK頭幀→添加TCP頭幀→添加TD-SCDMA IP頭幀→添加TD-SCDMA PPP頭幀→添加TD-SCDMA PDCP頭幀→添加TD-SCDMA RLC頭幀→添加TD-SCDMA MAC頭幀→添加TD-SCDMA PHY頭幀。從TD-SCDMA向Zig-Bee傳輸數(shù)據(jù)的處理過程相反[6],對ZigBee模塊傳送過來的數(shù)據(jù)處理流程圖如圖7所示。
圖7 對從ZigBee網(wǎng)絡發(fā)送的數(shù)據(jù)處理流程圖
由于從TD-SCDMA網(wǎng)絡發(fā)送過來的數(shù)據(jù)處理的原理與其相反。就不在此敘述。
ZigBee/TD-SCDMA網(wǎng)關內(nèi)部的分組轉(zhuǎn)換圖如圖8所示[1]。
圖8 網(wǎng)關內(nèi)部的分組轉(zhuǎn)換圖
本論文采用ZigBee模塊和TD-SCDMA模塊為基本的傳輸模塊,以LPC2214為核心設備,設計了無線傳感網(wǎng)絡網(wǎng)關,兼顧了ZigBee短距離無線通信和TD-SCDMA遠距離傳輸?shù)母髯詢?yōu)點。ZigBee/TD-SCDMA網(wǎng)關結(jié)合兩個網(wǎng)絡來完成數(shù)據(jù)的遠程傳輸,同時詳細地闡述了網(wǎng)關的硬件和軟件設計,使得網(wǎng)關能夠可靠地運行,能夠?qū)⑿枰獋鬏數(shù)臄?shù)據(jù)及時地傳送出去。
[1] HU Guozhen.Design and implementation of industrial wireless gateway based on ZigBee communication[C]//Proc.9th International Conference on Electronic Measurement & Instruments.[S.l.]:IEEE Press,2009:684-688.
[2] HE Hongjiang,YUE Zhuqiang,WANG Xiaojie.Design and realization of wireless sensor network gateway based on ZigBee and GPRS[C]//Proc.Second International Conference on Information and Computing Science.Manchester:IEEE Press,2009:196-199.
[3]申冬玲.基于ZigBee的無線通信模塊與串行存儲器接口方法的研究[J].佛山科學技術學院學報,2009,27(4):32-35.
[4] 王銳華,于全.淺析 ZigBee技術[J].電視技術,2004,28(6):33-35.
[5]于洋,張東偉,崔建軍.基于ZigBee技術的井下人員定位系統(tǒng)的設計[J].煤礦機械,2009,30(1):19-21.
[6]劉承龍,凌志浩 .基于AT91SAM260的ZigBee多功能網(wǎng)關設計[J].自動化儀表,2009,30(12):31-33.
[7] HE Zhiye,JIANG Peng.Design of wireless gateway based on ZigBee and GPRS technology[C]//Proc.International conference on computational intelligence and software engineering.Wuhan:IEEE Press,2009:1-4.