嚴(yán)錫君,劉旭東
(河海大學(xué)計(jì)算機(jī)與信息學(xué)院,南京 211000)
隨著無線傳感器網(wǎng)絡(luò)的技術(shù)發(fā)展和應(yīng)用,線型無線傳感器網(wǎng)絡(luò)和星型無線傳感器網(wǎng)絡(luò)作為常見的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),已在農(nóng)田監(jiān)測(cè)等工程中得到廣泛的應(yīng)用[1,2]。結(jié)合線型和星型結(jié)構(gòu)的多鏈型無線傳感器網(wǎng)絡(luò),具有通信方式簡單、數(shù)據(jù)傳輸鏈路少、路由相對(duì)固定等特點(diǎn),已得到國內(nèi)外學(xué)者的研究,具有廣闊的應(yīng)用前景和發(fā)展空間。
無線傳感器網(wǎng)絡(luò)通信協(xié)議的性能決定了整個(gè)網(wǎng)絡(luò)的性能,已從跨層協(xié)議發(fā)展到無分層協(xié)議。目前眾多學(xué)者研究的無分層協(xié)議,是一種適用于多種拓?fù)浣Y(jié)構(gòu)的通用協(xié)議,協(xié)議較為復(fù)雜,將這些協(xié)議應(yīng)用于實(shí)際網(wǎng)絡(luò),會(huì)產(chǎn)生不必要的能耗和時(shí)延。
因此,我們針對(duì)農(nóng)田檢測(cè)的實(shí)際應(yīng)用,提出一種多鏈型無線傳感器網(wǎng)絡(luò)無分層設(shè)計(jì)方法,實(shí)現(xiàn)從協(xié)議棧到功能模塊的轉(zhuǎn)變,將原來各層單獨(dú)實(shí)現(xiàn)的功能在一個(gè)整體框架里進(jìn)行聯(lián)合優(yōu)化[3],并可以進(jìn)行數(shù)據(jù)共享,減少數(shù)據(jù)計(jì)算和信息通信,根據(jù)不同的需求,對(duì)各功能模塊進(jìn)行優(yōu)化,以提高網(wǎng)絡(luò)整體性能。
針對(duì)多鏈型網(wǎng)絡(luò)無分層多跳路由、能耗和信息不均衡的特點(diǎn),采用以下網(wǎng)絡(luò)模型:
(1)采用多鏈?zhǔn)浇Y(jié)構(gòu)進(jìn)行部署網(wǎng)絡(luò),均衡節(jié)點(diǎn)能耗。
(2)匯聚節(jié)點(diǎn)位置固定,且能量不限。
(3)傳感器節(jié)點(diǎn)的初始能量相同,可沿本鏈或鄰鏈多跳路由,且發(fā)射功率可調(diào)。
網(wǎng)絡(luò)由多條鏈組成,每條鏈上傳感器之間通過多跳的方式將數(shù)據(jù)傳輸?shù)絽R聚節(jié)點(diǎn),為了避免最后一跳與匯聚節(jié)點(diǎn)的通信沖突,鏈與鏈之間在不同的時(shí)隙向匯聚節(jié)點(diǎn)發(fā)送數(shù)據(jù)。在某一條鏈路出現(xiàn)故障時(shí),匯聚節(jié)點(diǎn)在調(diào)度周期向傳感器節(jié)點(diǎn)發(fā)送命令幀,傳感器節(jié)點(diǎn)根據(jù)接收到的命令幀建立新的鏈路。匯聚節(jié)點(diǎn)采用粗粒度時(shí)間同步的方法對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行時(shí)間同步[4],傳感器節(jié)點(diǎn)采用周期性睡眠和監(jiān)聽機(jī)制,在屬于自己的時(shí)隙內(nèi)醒來、定時(shí)發(fā)送數(shù)據(jù),在上一跳節(jié)點(diǎn)的時(shí)隙內(nèi)接收數(shù)據(jù),其他時(shí)間處于睡眠狀態(tài)。RBP網(wǎng)絡(luò)通信結(jié)節(jié)點(diǎn)部署構(gòu)如圖1所示。
圖1 網(wǎng)絡(luò)節(jié)點(diǎn)部署結(jié)構(gòu)圖
在協(xié)議中,整個(gè)系統(tǒng)被分為若干個(gè)模塊,每個(gè)功能模塊有一個(gè)頭信息,包括功率、距離、節(jié)點(diǎn)狀態(tài)、剩余能量等信息,這些信息均被封裝在一個(gè)數(shù)據(jù)包內(nèi),所有的模塊均可對(duì)其進(jìn)行訪問,因此模塊和模塊之間實(shí)現(xiàn)了信息共享[5,6],完全打破了傳統(tǒng)的層的概念,真正實(shí)現(xiàn)了無線傳感器網(wǎng)絡(luò)無層協(xié)議的設(shè)計(jì)。
為了實(shí)現(xiàn)數(shù)據(jù)通信、節(jié)點(diǎn)同步和新節(jié)點(diǎn)加入等功能,首先定義3種數(shù)據(jù)幀結(jié)構(gòu):命令幀,數(shù)據(jù)幀和確認(rèn)幀。
1.2.1 命令幀
由sink節(jié)點(diǎn)發(fā)送,包括信標(biāo)幀、時(shí)隙重分配(SRF)幀、鏈路調(diào)度(LSF)幀。
(1)信標(biāo)幀。信標(biāo)幀是sink節(jié)點(diǎn)一個(gè)發(fā)送/接收周期的開始,sink節(jié)點(diǎn)通過廣播信標(biāo)幀實(shí)現(xiàn)時(shí)間同步。傳感器節(jié)點(diǎn)根據(jù)在每個(gè)時(shí)鐘周期內(nèi)接收到信標(biāo)幀的時(shí)間,進(jìn)行相應(yīng)的調(diào)整。信標(biāo)幀包括同步信標(biāo)幀、數(shù)據(jù)信標(biāo)幀和令牌信標(biāo)幀三類,同步信標(biāo)幀用于初始化階段全網(wǎng)的時(shí)間同步,數(shù)據(jù)信標(biāo)幀用于傳感器節(jié)點(diǎn)向匯聚節(jié)點(diǎn)發(fā)送數(shù)據(jù),令牌信標(biāo)幀用于發(fā)送數(shù)據(jù)的兩個(gè)傳感器之間的同步。
(2)SRF幀。當(dāng)新節(jié)點(diǎn)加入鏈路時(shí),為了避免鏈與鏈之間出現(xiàn)新的沖突,匯聚節(jié)點(diǎn)需要給每條鏈上新加入的節(jié)點(diǎn)發(fā)送SRF幀,節(jié)點(diǎn)在收到該幀后,根據(jù)鏈號(hào)和節(jié)點(diǎn)id取出相應(yīng)的時(shí)隙,以保證鏈路上數(shù)據(jù)能在正確的時(shí)隙開始傳輸。
(3)LSF幀。當(dāng)匯聚節(jié)點(diǎn)發(fā)現(xiàn)某個(gè)節(jié)點(diǎn)出現(xiàn)故障,匯聚節(jié)點(diǎn)首先獲取該節(jié)點(diǎn)的鏈號(hào)和節(jié)點(diǎn)id,然后針對(duì)故障鏈和鄰鏈,發(fā)送新的調(diào)度幀。
1.2.2 數(shù)據(jù)幀
數(shù)據(jù)幀由傳感器節(jié)點(diǎn)發(fā)送,經(jīng)前繼節(jié)點(diǎn)傳輸?shù)絽R聚節(jié)點(diǎn),數(shù)據(jù)幀分為數(shù)據(jù)發(fā)送(DSF)幀和新數(shù)據(jù)標(biāo)志(NDF)幀兩類。
(1)DSF幀。一幀完整的DSF幀包括幀類型、數(shù)據(jù)類型、節(jié)點(diǎn)地址、承載的數(shù)據(jù)。
(2)NDF幀。用于標(biāo)記當(dāng)前節(jié)點(diǎn)有無新數(shù)據(jù),傳感器節(jié)點(diǎn)根據(jù)NDF幀的數(shù)據(jù)標(biāo)志位獲取傳送的數(shù)據(jù)包數(shù),最終確定需要的時(shí)隙長度。
1.2.3 確認(rèn)幀
當(dāng)傳輸?shù)臄?shù)據(jù)到達(dá)匯聚節(jié)點(diǎn)時(shí),匯聚節(jié)點(diǎn)做出的應(yīng)答信息。根據(jù)數(shù)據(jù)類型,它分為正常數(shù)據(jù)確認(rèn)幀、低電警告確認(rèn)幀以及新節(jié)點(diǎn)加入確認(rèn)幀。
匯聚節(jié)點(diǎn)工作主要分為匯聚節(jié)點(diǎn)調(diào)度周期和傳感器節(jié)點(diǎn)時(shí)間同步周期。當(dāng)匯聚節(jié)點(diǎn)在規(guī)定的時(shí)刻未收到來自某傳感器節(jié)點(diǎn)發(fā)出的“心跳包”時(shí),則認(rèn)為該節(jié)點(diǎn)死亡,并獲取該節(jié)點(diǎn)的位置信息。當(dāng)出現(xiàn)以下情況時(shí),匯聚節(jié)點(diǎn)需要在調(diào)度周期內(nèi)進(jìn)行調(diào)度:
(1)當(dāng)檢測(cè)到傳感器節(jié)點(diǎn)發(fā)生故障時(shí),匯聚節(jié)點(diǎn)在此周期內(nèi)通過發(fā)送命令幀對(duì)故障節(jié)點(diǎn)的后繼節(jié)點(diǎn)進(jìn)行調(diào)度,保證鏈路能夠恢復(fù)數(shù)據(jù)傳輸;
(2)對(duì)上一周期已經(jīng)調(diào)度過的后繼節(jié)點(diǎn),在此調(diào)度周期內(nèi),匯聚節(jié)點(diǎn)發(fā)送新的命令幀,使之加入到鄰鏈,使左右鄰鏈輪流承擔(dān)故障鏈的數(shù)據(jù)傳輸,實(shí)現(xiàn)負(fù)載均衡;
(3)當(dāng)有新節(jié)點(diǎn)入網(wǎng)時(shí),匯聚節(jié)點(diǎn)會(huì)發(fā)送SRF幀對(duì)時(shí)隙進(jìn)行重新分配。
如果在調(diào)度周期內(nèi),傳感器節(jié)點(diǎn)在偵聽一段時(shí)間后,沒有收到任何命令幀,直接進(jìn)入休眠狀態(tài)。
當(dāng)出現(xiàn)以下情況時(shí),傳感器節(jié)點(diǎn)進(jìn)入時(shí)間同步周期:
(1)建立網(wǎng)絡(luò)時(shí),傳感器節(jié)點(diǎn)等待接收信標(biāo)幀,進(jìn)行全網(wǎng)時(shí)間同步;
(2)新節(jié)點(diǎn)加入時(shí)需要進(jìn)行時(shí)間同步;
(3)當(dāng)傳感器節(jié)點(diǎn)有新的數(shù)據(jù)發(fā)送時(shí),匯聚節(jié)點(diǎn)必須先對(duì)傳感器節(jié)點(diǎn)進(jìn)行同步。
采用粗粒度時(shí)間同步的方法進(jìn)行時(shí)間同步:匯聚節(jié)點(diǎn)廣播同步信標(biāo)幀,傳感器節(jié)點(diǎn)根據(jù)接收到的信標(biāo)幀的時(shí)刻進(jìn)行對(duì)時(shí)。假設(shè)每個(gè)傳感器節(jié)點(diǎn)內(nèi)部時(shí)鐘為,即傳感器節(jié)點(diǎn)每隔時(shí)間周期性的醒來接收信標(biāo)幀,整個(gè)同步周期為Tsyc,若某個(gè)傳感器節(jié)點(diǎn)在第一次醒來接收到信標(biāo)幀的時(shí)間為周期T′內(nèi)的時(shí)刻t1,如果傳感器節(jié)點(diǎn)第二次醒來在t1時(shí)刻正常接收到信標(biāo)幀,則在下次周期內(nèi)接收信標(biāo)幀的時(shí)間為仍為t。否則在下個(gè)周期T′內(nèi)接收信標(biāo)幀的時(shí)刻為t-Δt(Δt表示一個(gè)較小的時(shí)間間隔);網(wǎng)內(nèi)的傳感器節(jié)點(diǎn)通過周期性的醒來接收信標(biāo)幀進(jìn)行若干次的時(shí)間調(diào)整,最終達(dá)到時(shí)間同步的狀態(tài)。時(shí)間同步過程如圖2所示。
圖2 時(shí)間同步過程圖
網(wǎng)絡(luò)建立后,網(wǎng)絡(luò)所有節(jié)點(diǎn)初始化,包括功率控制信息表、周期性偵聽和睡眠時(shí)間、數(shù)據(jù)采集速率等。然后傳感器節(jié)點(diǎn)開始數(shù)據(jù)采集,采集完后進(jìn)入休眠狀態(tài),通過定時(shí)喚醒在某一時(shí)刻同時(shí)醒來,進(jìn)入周期性的偵聽狀態(tài),等待接收來自匯聚節(jié)點(diǎn)的信標(biāo)幀。傳感器節(jié)點(diǎn)具體工作流程如下。
(1)網(wǎng)絡(luò)初始化后,全網(wǎng)需要進(jìn)行一次時(shí)間同步,所有傳感器節(jié)點(diǎn)根據(jù)設(shè)定的內(nèi)部時(shí)鐘周期性的醒來接收信標(biāo)幀,如果某個(gè)時(shí)刻醒來沒有接收到信標(biāo)幀,在下次周期內(nèi)則進(jìn)行相應(yīng)的時(shí)間調(diào)整;
(2)全網(wǎng)時(shí)間同步后,傳感器節(jié)點(diǎn)進(jìn)入偵聽階段,從末端節(jié)點(diǎn)開始轉(zhuǎn)發(fā)NDF數(shù)據(jù)幀,如果傳感器節(jié)點(diǎn)有新數(shù)據(jù)產(chǎn)生,則將NDF中相應(yīng)的數(shù)據(jù)標(biāo)志置1;在NDF幀轉(zhuǎn)發(fā)過程中,每個(gè)節(jié)點(diǎn)根據(jù)數(shù)據(jù)標(biāo)志位計(jì)算在自己的時(shí)隙內(nèi)需要傳輸數(shù)據(jù)的時(shí)間。
(3)NDF轉(zhuǎn)發(fā)結(jié)束后,根據(jù)時(shí)隙部署,節(jié)點(diǎn)在相應(yīng)的時(shí)隙內(nèi)醒來,等待接收來自匯聚節(jié)點(diǎn)的NDS信標(biāo)幀,在接收到信標(biāo)幀后,處于偵聽狀態(tài)的節(jié)點(diǎn)進(jìn)行同步,并在延時(shí)一定時(shí)間后開始數(shù)據(jù)發(fā)送,如果節(jié)點(diǎn)數(shù)據(jù)標(biāo)志位為1,則進(jìn)行數(shù)據(jù)處理后向下一跳節(jié)點(diǎn)轉(zhuǎn)發(fā)數(shù)據(jù)包,直至匯聚節(jié)點(diǎn)。
(4)第一次數(shù)據(jù)發(fā)送完成后,傳感器節(jié)點(diǎn)直接進(jìn)入休眠狀態(tài),等待下一輪周期的到來。在下一輪周期的開始,傳感器節(jié)點(diǎn)醒來首先進(jìn)入調(diào)度周期,偵聽來自匯聚節(jié)點(diǎn)的命令幀,如果傳感器節(jié)點(diǎn)收到CLSF命令幀,則說明該鏈路出現(xiàn)故障,傳感器節(jié)點(diǎn)根據(jù)接收到的CLSF幀的鏈號(hào)建立臨時(shí)代理鏈路,恢復(fù)數(shù)據(jù)傳輸;如果傳感器節(jié)點(diǎn)收到NLSF命令幀,則說明鄰路故障,傳感器節(jié)點(diǎn)根據(jù)通過接收到的NLSF幀的鄰鏈號(hào)來調(diào)度數(shù)據(jù)傳輸,避免數(shù)據(jù)沖突;如果傳感器節(jié)點(diǎn)收到SRF命令幀,則說明有新節(jié)點(diǎn)入網(wǎng),傳感器節(jié)點(diǎn)根據(jù)接收到的SRF命令幀對(duì)時(shí)隙進(jìn)行重分配;
(5)調(diào)度周期結(jié)束后,如果需要時(shí)間同步,傳感器節(jié)點(diǎn)則等待接收信標(biāo)幀,進(jìn)行時(shí)間同步,然后從末端節(jié)點(diǎn)開始轉(zhuǎn)發(fā)NDF數(shù)據(jù)幀,最后根據(jù)部署的時(shí)隙進(jìn)行數(shù)據(jù)通信,如此循環(huán)下去,直到網(wǎng)絡(luò)生命周期結(jié)束。傳感器節(jié)點(diǎn)的具體工作流程如圖3所示。
圖3 傳感器節(jié)點(diǎn)工作流程圖
匯聚節(jié)點(diǎn)在初始化后,首先發(fā)送信標(biāo)幀進(jìn)行全網(wǎng)時(shí)間同步,然后等待接收來自傳感器節(jié)點(diǎn)的NDF幀;收到NDF數(shù)據(jù)幀后,廣播NDS信標(biāo)幀,同步相鄰的兩個(gè)傳感器節(jié)點(diǎn),并在收到新數(shù)據(jù)后,向第一跳節(jié)點(diǎn)發(fā)送一個(gè)確認(rèn)幀,同時(shí),對(duì)收到的數(shù)據(jù)進(jìn)行處理,上傳到管理節(jié)點(diǎn)。在開始下一個(gè)周期時(shí),匯聚節(jié)點(diǎn)首先進(jìn)入調(diào)度周期,發(fā)送命令幀進(jìn)行調(diào)度。如果有節(jié)點(diǎn)出現(xiàn)故障,則向故障節(jié)點(diǎn)的后繼節(jié)點(diǎn)發(fā)送CLSF幀,向故障鏈的鄰鏈發(fā)送NLSF幀,傳感器節(jié)點(diǎn)根據(jù)收到的命令幀進(jìn)行數(shù)據(jù)通信;如果有新節(jié)點(diǎn)入網(wǎng),匯聚節(jié)點(diǎn)發(fā)送SRF幀,更新總時(shí)隙數(shù),并進(jìn)行時(shí)隙重分配。調(diào)度周期結(jié)束后,進(jìn)入偵聽周期,該周期內(nèi)如果有新數(shù)據(jù)產(chǎn)生,匯聚節(jié)點(diǎn)發(fā)送NDF信標(biāo)幀,進(jìn)行全網(wǎng)時(shí)間同步,然后再進(jìn)入數(shù)據(jù)傳輸通信階段,如此循環(huán)。匯聚節(jié)點(diǎn)工作流程如圖4所示。
圖4 匯聚節(jié)點(diǎn)為工作流程圖
采用OMNET++仿真軟件[7],對(duì)協(xié)議的性能進(jìn)行研究并與XLP進(jìn)行比較,仿真參數(shù)的初始值如表1所示。
表1 OMNET++仿真參數(shù)初始值
數(shù)據(jù)時(shí)延是無線傳感器網(wǎng)絡(luò)性能的一個(gè)重要指標(biāo)。在鏈型網(wǎng)絡(luò)中,數(shù)據(jù)時(shí)延是隨著節(jié)點(diǎn)個(gè)數(shù)的增加而不斷累加的,因此節(jié)點(diǎn)個(gè)數(shù)越多,平均時(shí)延越大,鏈上不同節(jié)點(diǎn)數(shù)的網(wǎng)絡(luò)平均時(shí)延如圖5所示。從圖5中可看出,與XLP協(xié)議相比,RBP協(xié)議的平均時(shí)延都小,且鏈上8個(gè)節(jié)點(diǎn)到13個(gè)節(jié)點(diǎn)的時(shí)延幾乎沒有變化,這是由于鏈與鏈之間時(shí)隙復(fù)用的結(jié)果。
圖5 不同節(jié)點(diǎn)個(gè)數(shù)的網(wǎng)絡(luò)平均時(shí)延圖
RBP協(xié)議的時(shí)延除了和節(jié)點(diǎn)個(gè)數(shù)及監(jiān)測(cè)區(qū)域半徑有關(guān),還和鏈的條數(shù)有關(guān),不同鏈數(shù)的網(wǎng)絡(luò)平均時(shí)延如圖6所示。從圖6中可看出,RBP由于采用了時(shí)隙復(fù)用,因此隨著鏈的條數(shù)的增加,時(shí)延呈現(xiàn)緩慢增加的趨勢(shì),而XLP協(xié)議隨著鏈的條數(shù)的增加,時(shí)延線性迅速,因此RBP協(xié)議時(shí)延性能優(yōu)于XLP協(xié)議。
圖6 不同鏈數(shù)的網(wǎng)絡(luò)平均時(shí)延圖
為了分析不同的網(wǎng)絡(luò)傳感器節(jié)點(diǎn)個(gè)數(shù)與網(wǎng)絡(luò)總能耗的關(guān)系,取δ=2,傳感器節(jié)點(diǎn)個(gè)數(shù)為1~7個(gè),傳感器節(jié)點(diǎn)個(gè)數(shù)增加,數(shù)據(jù)轉(zhuǎn)發(fā)的跳數(shù)增加,能耗也隨之增加。兩種協(xié)議的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)相同,鏈上不同節(jié)點(diǎn)數(shù)的網(wǎng)絡(luò)能耗如圖7所示。
圖7 不同節(jié)點(diǎn)數(shù)的網(wǎng)絡(luò)能耗圖
最后,分析鏈的條數(shù)與網(wǎng)絡(luò)總能耗的關(guān)系,δ仍取0.2,監(jiān)測(cè)區(qū)域半徑為500 m,不同鏈數(shù)的網(wǎng)絡(luò)能耗如圖8所示。從圖8中可看出,RBP無層協(xié)議與XLP相比具有更小的能耗,提高了網(wǎng)絡(luò)的整體性能,延長了網(wǎng)絡(luò)生命周期。
根據(jù)傳感器節(jié)點(diǎn)的能耗模型,通過改變傳感器節(jié)點(diǎn)的工作方式來降低節(jié)點(diǎn)的功耗,進(jìn)而對(duì)傳感器節(jié)點(diǎn)無線通信能耗模型的擴(kuò)展,在鏈型結(jié)構(gòu)模型下,分析并仿真實(shí)現(xiàn)了多數(shù)據(jù)源負(fù)載時(shí),網(wǎng)絡(luò)的時(shí)延和能耗。通過對(duì)比分析,在無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)配置時(shí),提出能量高效可行的節(jié)點(diǎn)配置機(jī)制。在進(jìn)行傳感器節(jié)點(diǎn)規(guī)劃和部署時(shí),優(yōu)化了網(wǎng)絡(luò)中的能量消耗,顯著地延長了網(wǎng)絡(luò)的生命周期。
圖8 不同鏈數(shù)的網(wǎng)絡(luò)能耗圖