胡俁華,黃同成,李 平,曾文飛,段 頊
(1.邵陽學院 機械與能源工程學院,湖南 邵陽 422000;2.湘西南農(nóng)村信息化服務湖南省重點實驗室,湖南 邵陽 422000)
隨著物聯(lián)網(wǎng)技術(shù)和AI技術(shù)等日新月異的發(fā)展,智慧養(yǎng)老成為人們關(guān)注的熱點。智慧養(yǎng)老平臺和可穿戴監(jiān)測設備的發(fā)展非常迅猛,但是面世的絕大部分心電監(jiān)護設備還是采用目前常見的ZigBee、GSM、Wifi、藍牙等無線傳輸協(xié)議的模塊[1]。它們要么抗干擾能力弱,要么網(wǎng)絡傳輸能力差,要么面臨網(wǎng)絡協(xié)議轉(zhuǎn)換復雜等問題,這些無線傳輸模式都是承載于IPV4網(wǎng)絡下。IPv6 加WSN(WSN,wireless sensor networks)是目前的熱門研究方向[2]。工作組在2004年發(fā)起了一份新的網(wǎng)絡方案:6LoWPAN(IPv6 over Lo WPAN),實現(xiàn)了IPv6 和 IEEE802.15.4 網(wǎng)絡的無縫連接[3]。本文依據(jù)現(xiàn)有技術(shù)資料運用6LoWPAN技術(shù)架構(gòu)無線傳感網(wǎng)絡,并且在RPL網(wǎng)絡協(xié)議層面上提出了優(yōu)化方案,據(jù)此方案構(gòu)造的無線傳感網(wǎng)絡協(xié)議轉(zhuǎn)換更簡單、網(wǎng)絡穩(wěn)定可靠、構(gòu)建網(wǎng)絡拓撲更快速。
1)心電監(jiān)護無線傳感網(wǎng)絡需要具備完整的體系架構(gòu),包括底層數(shù)據(jù)采集傳感節(jié)點、傳輸節(jié)點。
2)基于6LoWPAN實現(xiàn)WSN與IPV6網(wǎng)絡互聯(lián),6LoWPAN邊界路由器需要具備IPV6網(wǎng)絡和IPV4網(wǎng)絡協(xié)議的轉(zhuǎn)換功能。
3)對RPL網(wǎng)絡協(xié)議層面進行優(yōu)化設計,保證無線傳感網(wǎng)絡的穩(wěn)定性與可靠性,保證時刻變化的無線傳感網(wǎng)絡建立新拓撲更為快速。
該無線傳感網(wǎng)絡系統(tǒng)由心電采集模塊、6LoWPAN邊界路由器(6LBR,6LoWPAM border router)兩部分組成。心電采集模塊中AD8232[4]數(shù)據(jù)處理單元將采獲取的心電信號經(jīng)過處理后發(fā)送給STC12C5A信號采集單元。處理好的心電信號通過6LoWPAN網(wǎng)絡傳輸至6LoWPAN邊界路由器。最后監(jiān)護終端獲取由邊界路由器傳輸至IPV6網(wǎng)絡的心電數(shù)據(jù),便于低功耗、長時間對病人生理參數(shù)進行采集[5]。傳感網(wǎng)絡整體架構(gòu)如圖1所示。
圖1 傳感網(wǎng)絡整體架構(gòu)
該傳感網(wǎng)絡硬件設計包括兩個部分:6LoWPAN心電采集節(jié)點以及6LoWPAN邊界路由器的設計。
6LoWPAN心電采集節(jié)點由采集模塊和傳輸模塊構(gòu)成,其中采集模塊包含電極、AD8232信號處理器、STC12C5A信號采集器。AD8232進行高通、低通濾波處理、信號放大[6];STC12C5A實現(xiàn)對放大器輸出的信號進行模數(shù)轉(zhuǎn)換,輸出形式采用UART的方式。選擇CC2530作為傳感網(wǎng)絡的傳輸模塊,CC2530使用射頻技術(shù)進行數(shù)據(jù)傳輸,搭載80C51內(nèi)核,配置8KB的RAM和256KB存儲器[7],其多種工作模式在設計之初就考慮了低功耗要求,處理和傳輸心電數(shù)據(jù)的成本低。
6LoWPAN邊界路由器負責將6LoWPAN無線傳感網(wǎng)絡和IPV6網(wǎng)絡連接起來,它要實現(xiàn)的功能有兩個:
1)作為RPL網(wǎng)絡的Root節(jié)點,對整個6LoWPAN網(wǎng)絡進行創(chuàng)建和控制。
2)作為6LoWPAN無線傳感網(wǎng)絡接入IPV6網(wǎng)絡的網(wǎng)關(guān),將心電采集節(jié)點獲取的數(shù)據(jù)傳輸至以太網(wǎng)。
邊緣路由器主要由CC2530模塊和ENC28J60以太網(wǎng)接口模塊[8]構(gòu)成,6LoWPAN邊界路由器如圖2所示。
圖2 6LoWPAN邊界路由器圖
CC2530是應用最廣泛的芯片之一,在本文中作為傳輸模塊的核心;本文的以太網(wǎng)模塊同樣選用的是最受廣泛應用的ENC28J60模塊。
ENC28J60模塊采用串行外設接口通信(SPI),任何控制器只要帶有SPI的以太網(wǎng)接口,就能與ENC28J60連接。ENC28J60采用了包過濾機制來完成對傳輸?shù)臄?shù)據(jù)包進行限制,并且內(nèi)部含有TX/RX緩沖器、MAC模塊、PHY模塊、DMA模塊。PHY 模塊實現(xiàn)信號的模數(shù)轉(zhuǎn)換;TX/RX 緩沖器是 8KB 的雙端口RAM,在 SPI 接口和 MAC 模塊起數(shù)據(jù)緩存的作用。使用時通過兩個引腳和SPI實現(xiàn)與主控制器的通信,傳輸速率可達10 Mb/s[9]。邊界路由器的6LoWPAN節(jié)點連接ENC28J60模塊組建成網(wǎng)絡,偵聽6LoWPAN和串口是否有數(shù)據(jù)。
在Contiki操作系統(tǒng)上開展軟件設計以滿足無線傳感網(wǎng)絡的協(xié)議轉(zhuǎn)換及數(shù)據(jù)傳輸。Contiki是為LLN (low power and lossy networks)開發(fā)的操作系統(tǒng)[10]。開發(fā)者已經(jīng)在Contiki中安裝了6LoWPAN和RPL路由協(xié)議,提供TCP/IP網(wǎng)絡協(xié)議支持,包括IPv6,可以直接運用相關(guān)代碼建立起傳感網(wǎng)絡,具有處理WSN數(shù)據(jù)幀和IPv6數(shù)據(jù)報文功能。
Cooja[11]是一款基于Contiki操作系統(tǒng)的仿真軟件[12],能夠在Contiki的驅(qū)動下實現(xiàn)輕量級運行。工作范圍很廣,可以模擬大集群或小規(guī)模的幾乎所有無線傳感網(wǎng)絡。而Cooja軟件最強大方便之處在于節(jié)點執(zhí)行模擬器的結(jié)果與將節(jié)點加載到固件中的結(jié)果基本相同。
6LoWPAN心電采集節(jié)點通電后,啟動Contiki系統(tǒng)開始初始化,配置參數(shù)。隨后偵聽邊界路由器的狀態(tài),若RF模塊收到來自邊界路由器發(fā)送來的數(shù)據(jù)包,進行報文重組、解壓縮處理后解析此數(shù)據(jù)包。解析后的指令信息一般分為兩種:監(jiān)測和控制。若為前者,則采集老年人心電信號并通過RF發(fā)送給6LoWPAN邊界路由器;若解析結(jié)果為后者,則執(zhí)行控制指令并將心電采集模塊的狀態(tài)信息發(fā)送給6LoWPAN邊界路由器。6LoWPAN心電采集節(jié)點軟件工作流程如圖3所示。
圖3 6LoWPAN心電采集節(jié)點軟件工作流程
6LoWPAN邊界路由器采用CC2530+ENC28J60實現(xiàn),軟件層面上使用時因ENC28J60 的 MAC 模塊遵循 IEEE802.3 標準(以太網(wǎng)標準),在數(shù)據(jù)傳輸過程中負責完成 SPI 格式和 IEEE802.3 MAC 數(shù)據(jù)幀格式[13]之間的轉(zhuǎn)換,隨后需要完成自身的 MAC 地址和 IPv4 地址之間的綁定。
6LoWPAN如果是接入純IPV6網(wǎng)絡中可以直接在網(wǎng)絡層進行數(shù)據(jù)轉(zhuǎn)發(fā),而不需要轉(zhuǎn)換協(xié)議,但由于目前IPV6網(wǎng)絡尚未大量運用,當下多是將6LoWPAN網(wǎng)絡接入IPV4網(wǎng)絡中,因此我們需要用到NAT64轉(zhuǎn)換技術(shù)實現(xiàn)6LoWPAN數(shù)據(jù)包和IPV4數(shù)據(jù)包的格式轉(zhuǎn)換,并將RPL網(wǎng)絡中的心電節(jié)點IPV6地址端口映射為ENC28J60以太網(wǎng)接口的IPV4地址端口,解決IPV4地址不夠用的問題[14]。NAT64協(xié)議轉(zhuǎn)換模型如圖4所示。
圖4 NAT64協(xié)議轉(zhuǎn)換模型圖
NAT64是一種網(wǎng)絡地址翻譯技術(shù),當終端節(jié)點訪問遠程IPv4 服務器時,邊界路由器啟動 IPv4 與 IPv6 協(xié)議轉(zhuǎn)換模塊NAT64,IPv6主機端發(fā)出封包,源IPv6地址被NAT64模塊映射成IPv4地址,同時IPv4主機對應返回的封包,NAT64模塊遍歷映射關(guān)系作出回應,這樣就完成了終端節(jié)點連接IPv4主機的工作。IPv6 數(shù)據(jù)報經(jīng)封裝后通過IPv4 的鏈路層傳送[15]實現(xiàn)數(shù)據(jù)的相互收發(fā)。
3.3.1 RPL路由協(xié)議與Trickle定時器
RPL(IPv6 routing protocolfor low power and lossy networks)路由協(xié)議[16]用于智能網(wǎng)絡,為受限設備通過有損鏈路而開發(fā)[17]。通過有向無環(huán)圖DODAG(destination oriented directed acyclic graph)[18]創(chuàng)建WSN,根據(jù)OF以及節(jié)點間相互傳遞信息來創(chuàng)建和維護。DODAG中包含DIO(DODAG information object)DODAG信息對象;DIS(DODAG information solicitation)DODAG信息請求;DAO(destination advertisement object)DODAG目的地通告[19]。
定時器管理機制是RPL協(xié)議的關(guān)鍵組成部分[20]。RPL路由協(xié)議中定時器基于Trickle算法來實現(xiàn)DIO控制報文管理,這是的一種低功耗有損網(wǎng)絡的自適應機制,適用于資源受到限制的環(huán)境。Trickle定時器要是在架構(gòu)新DODAG的途中查詢到網(wǎng)絡中存在閉合環(huán)路或有節(jié)點加入進來亦或是節(jié)點網(wǎng)絡丟失等都會判定為不一致現(xiàn)象[21],當網(wǎng)絡變得穩(wěn)定時,RPL消息數(shù)量會相應減少;當查詢到上面所提現(xiàn)象時,會重置Trickle定時器,加快DIO消息發(fā)送,達到網(wǎng)絡拓撲的重建目的。
Trickle算法中含有最小時隙間隔Imin(min interval)、最大時隙間隔Imax(max interval)、冗余常數(shù)K這3個參數(shù)以及當前的時隙間隔大小I、當前時間值t、冗余事件計數(shù)器C三個變量。Trickle算法簡述為以下步驟:1) 在[Imin,Imax]中的任意位置設置一個I的值,然后觸發(fā)第一個時隙工作;2)觸發(fā)第一個時隙后,在[I/2,I)]隨機選擇一個點為t,此時C=0。并且在I處停止時隙;3) 如果傳輸過程中1次一致性傳輸現(xiàn)象被Trickle 接收到,那么就使C相應遞增1(C+= 1);4) 在時間t,Trickle 自動檢測C的值,并判斷是否有C
3.3.2 Trickle算法的局限性
由于RPL網(wǎng)絡在設計的時候考慮到低功耗問題出于輕量級網(wǎng)絡思路限制了路由質(zhì)量。在DODAG建立和維護過程中會由于路由質(zhì)量原因無法體現(xiàn)節(jié)點拓撲“公平性”導致非最優(yōu)鏈路的產(chǎn)生,在這個問題中就牽涉到了Trickle算法。原始的 Trickle 算法中每個節(jié)點體現(xiàn)“公平性原則”即在可控條件下,定時發(fā)送請求信息來確認路由的可靠性,盡量使得節(jié)點在不同網(wǎng)絡情況下保有基本相同的發(fā)送概率。但由于有損網(wǎng)絡特性問題,網(wǎng)絡創(chuàng)建過程中時刻受到時間變化及節(jié)點加入或丟失情況影響而不停改變。
因此,原始Trickle算法的規(guī)定在現(xiàn)實中不能真正意義上實現(xiàn)保有同概率的機制,從而影響路由的可靠性和網(wǎng)絡性能。
3.3.3 Trickle優(yōu)化設計
針對原始Trickle的缺陷,我們需要針對此問題作出改進,Trickle 算法優(yōu)化部分代碼如下所示:
function Trickle-Initialization()
I= Imin, Imax= Imin*28, k = 3 //定義Trickle參數(shù)及冗余常數(shù)
a = 0 //新增變量a,記錄節(jié)點連續(xù)未發(fā)送DIO消息的時間間隔次數(shù)
function DIOIntervalBegins()
c = 0 //第一個時隙開始,c置0
timer = random(I/(2^(a+1) ), I ) //選擇當前時間值t
function ConsistentTransmissionReceived()
c = c+l //收到一致性傳輸則c自增1
function TimerExpires()
if (k ≥ c|a = = 2 ) then //判斷c與k的值并且若兩次未成功發(fā)送DIO消息
Transimit DIO //發(fā)送一次DIO消息
a =0 //a置0
else
a = a+1 //若c end if function DIOIntervalEnds() c = 0 //時隙結(jié)束,c置0 if InconsistentTransmissionReceived I = Imin a =0 //當收到不一致傳輸現(xiàn)象則置I=Imin else I = I × 2 if Imax≤ I then I = Imax//若Imax小于I,則置I為Imax end if end if 原Trickle算法代碼中每個節(jié)點受發(fā)送時間間隔設定影響,上輪未發(fā)送節(jié)點并不一定能在本輪被選中發(fā)送DIO消息,因此我們需要在Trickle中改變?yōu)榇藭r間間隔來獲取相對公平。值得注意的是,并不需要設置其提前于其他節(jié)點發(fā)送消息,這樣可以更多的減少對其他節(jié)點的影響。從而達到某個節(jié)點被抑制的次數(shù)越多,其下一輪被發(fā)送的概率就越大的目的。我們設定每個節(jié)點維護一個新增變量a,變量a記作未發(fā)送DIO消息事件,保存各個節(jié)點未發(fā)送的時間間隔次數(shù)。在DODAG創(chuàng)建拓撲時一個節(jié)點在當前時間值t未能成功發(fā)送 DIO 消息,a 事件值加一;相反,則將a事件值清空為0。每個節(jié)點獲取每輪不同的發(fā)送優(yōu)先級均通過維護自己的事件值來實現(xiàn)。另外區(qū)別于初始算法,a事件值還通過更改時間間隔的每一輪監(jiān)聽和分配節(jié)點的持續(xù)時間來實現(xiàn)優(yōu)先級。在上面Trickle 優(yōu)化方案里,每個時間間隔都與原算法不同。 偵聽和發(fā)送的兩個時間段不是均勻分布的,而是相對于變量以可變間隔設置。偵聽時間為(0,I/2^(a+1)),發(fā)送時間為(I/2^(a+1),I)。 我們同時規(guī)定,當某個節(jié)點連續(xù)兩個時間間隔都未能成功發(fā)送 DIO 消息(因為節(jié)點在兩次發(fā)送未果的情況下相比于其他節(jié)點有更高的發(fā)送優(yōu)先級,考慮到有可能未發(fā)送節(jié)點較多時萬一會出現(xiàn)此問題),則在第三個時間間隔內(nèi)傳送節(jié)點在某一隨機時刻t必須要發(fā)送DIO消息,隨后維護a值置為 0。后續(xù)通過仿真實驗與初始RPL網(wǎng)絡協(xié)議進行對比,以此來驗證該優(yōu)化方案的可行性。 本文的仿真實驗基于Ubuntu系統(tǒng),使用InstantContiki3.0作為開發(fā)環(huán)境,Contiki系統(tǒng)中已有相應的應用程序,在網(wǎng)絡層中我們使用的是RPL路由協(xié)議,因此設計此仿真實驗以驗證本文方案的網(wǎng)絡通信可行性。 運行InstantContiki3.0系統(tǒng)的Terminal終端,輸入以下命令打開cooja仿真器: cd contiki/tools/cooja/ ant run 打開Cooja后,在Cooja工作界面建立100 m*100 m的仿真環(huán)境,Trickle算法的參數(shù)設置為Imin=28ms,Imax=2(8+8)ms,冗余常數(shù)K=3。創(chuàng)建21個節(jié)點,內(nèi)部運行RPL+UDP協(xié)議,首先創(chuàng)建一個節(jié)點1選取sky mote類型,并修改Description作為RPL組網(wǎng)協(xié)議里的root節(jié)點,運行contiki/examples/ipv6/rpl-border-router/border-router.c程序,并選取另外20個節(jié)點分別編號2-21作為感知節(jié)點,在其內(nèi)部運行contiki/examples/er-rest-example/er-example-server.c程序。仿真環(huán)境如圖5所示。 圖5 仿真環(huán)境圖 節(jié)點1作為6LoWPAN邊界路由器節(jié)點向外發(fā)送DIO消息建立DODAG,鄰居節(jié)點若在root節(jié)點射頻周圍內(nèi)且偵聽到DIO消息會選擇加入到節(jié)點1的DODAG。鄰居節(jié)點以root節(jié)點1作為父節(jié)點,向節(jié)點1回復DAO消息表示自己已加入有向無環(huán)圖,而后鄰居節(jié)點向外發(fā)送DIO包。諸如此類,其他節(jié)點也各自尋找到父節(jié)點,并回復DAO包,加入DODAG。 4.2.1 驗證網(wǎng)絡連通性 在Cooja仿真界面可以查看到各個節(jié)點的路由信息,如圖7所示。因為此6LoWPAN網(wǎng)絡中的每個節(jié)點都是根據(jù)ContikiMAC地址自動生成的,因此所有的鄰居節(jié)點都是以“fe08”為開頭的ipv6地址。根據(jù)Cooja路由信息框中獲取的6LBR地址,直接打開InstantContiki3.0自帶瀏覽器輸入地址查詢即可。在InstantContiki3.0系統(tǒng)中還可以采用在Terminal窗口中輸入Ping6+IPv6地址的方式驗證網(wǎng)絡聯(lián)通性。Cooja界面各節(jié)點路由信息如圖6所示。 圖6 cooja界面各節(jié)點路由信息 查看路由信息可知,6LoWPAN邊界路由器已經(jīng)根據(jù)RPL路由協(xié)議和鄰居發(fā)現(xiàn)協(xié)議自動生成了6LoWPAN網(wǎng)絡,并且可以實現(xiàn)從外部網(wǎng)絡訪問6LoWPAN邊界路由器節(jié)點。仿真測試結(jié)果表明,該無線傳感網(wǎng)絡可以由RPL路由協(xié)議和鄰居發(fā)現(xiàn)協(xié)議生成6LoWPAN網(wǎng)絡,實現(xiàn)無線傳感網(wǎng)絡WSN和IPV6網(wǎng)絡的互聯(lián)互通,成功架構(gòu)了基于6LoWPAN的心電監(jiān)護初始無線傳感網(wǎng)絡。 4.2.2 Trickle算法優(yōu)化結(jié)果分析 為驗證Trickle算法優(yōu)化前后的RPL網(wǎng)絡性能,我們從以下兩個方向進行對比:業(yè)務報文的投遞成功率、網(wǎng)絡的平均鏈路質(zhì)量,如圖7(a)、圖7(b)、圖7(c)所示。 (a) 業(yè)務報文投遞成功率 (b) 節(jié)點到6LBR的平均鏈路質(zhì)量 (c) 節(jié)點平均能耗圖7 優(yōu)化前后對比圖 1)業(yè)務報文投遞成功率:在一個時間區(qū)間內(nèi),計算單位時間內(nèi)目的節(jié)點正確接收到的報文數(shù)和源節(jié)點發(fā)送的總報文數(shù)比率。 2)節(jié)點到6LBR的平均鏈路質(zhì)量:定義為仿真環(huán)境中節(jié)點到6LBR路徑上的平均鏈路度量值。 3)節(jié)點平均能耗:定義為仿真環(huán)境中各note節(jié)點隨時間變化的平均能耗。 優(yōu)化前后的仿真數(shù)據(jù)對比如圖7所示,從圖中可以看到從建立DODAG拓撲到趨于穩(wěn)定的過程中,經(jīng)過Trickle算法優(yōu)化后的方案在業(yè)務報文投遞成功率和節(jié)點到6LBR的平均鏈路質(zhì)量方面性能要明顯高于原始Trickle算法的RPL網(wǎng)絡,并且經(jīng)過優(yōu)化后的RPL網(wǎng)絡,節(jié)點到6LBR的平均能耗也比初始方案低。后隨著時間增長,網(wǎng)絡開始逐步穩(wěn)定,兩種方案的網(wǎng)絡性能指標差距也在逐步縮小,這是因為初始RPL網(wǎng)絡協(xié)議也逐步形成了更好更穩(wěn)定的網(wǎng)絡拓撲。因此,我們可以得出這樣的結(jié)論,在降低了節(jié)點平均能耗的基礎(chǔ)上,Trickle算法優(yōu)化后的RPL網(wǎng)絡協(xié)議在業(yè)務報文投遞成功率和網(wǎng)絡鏈路質(zhì)量上都有了明顯的提升,這對低功耗無線傳感網(wǎng)絡的拓撲頻繁變化更快形成新的DODAG的解決思路提供了更好的方案。 本文基于6LoWPAN技術(shù)設計了一種應用于心電監(jiān)護系統(tǒng)的無線傳感網(wǎng)絡,能夠?qū)崿F(xiàn)WSN監(jiān)護網(wǎng)絡與IPV6的的互聯(lián)互通,同時提供了一種基于Trickle算法優(yōu)化的RPL改進方案,借助仿真實驗驗證了該方案在提升網(wǎng)絡拓撲性能上的作用,能夠較于原RPL協(xié)議更快地形成DODAG拓撲,以及在降低了節(jié)點平均能耗時依然在改善無線傳感網(wǎng)絡業(yè)務報文投遞成功率和提升網(wǎng)絡鏈路質(zhì)量上具有良好作用。該無線傳感網(wǎng)絡的設計不僅保證了網(wǎng)絡傳輸?shù)姆€(wěn)定性,還提升了節(jié)點加入DODAG的速度,使得組網(wǎng)更加快速方便,為該無線傳感系統(tǒng)應用提供了更優(yōu)方案,具有一定的應用前景和現(xiàn)實意義。4 RPL路由仿真實驗
4.1 仿真環(huán)境設計
4.2 仿真結(jié)果驗證和分析
5 結(jié)束語