專利名稱:一種無(wú)線傳感器網(wǎng)絡(luò)的在線漸進(jìn)式程序更新方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種應(yīng)用于無(wú)線傳感器網(wǎng)絡(luò)的在線漸進(jìn)式程序更新方法,屬于無(wú)線傳感器網(wǎng)絡(luò)技術(shù)領(lǐng)域。
背景技術(shù):
無(wú)線傳感器網(wǎng)絡(luò)被稱為21世紀(jì)最具影響カ的新技術(shù)之一,具體采用低成本、低功 耗的嵌入式系統(tǒng)作為硬件基礎(chǔ),采用高能效、傳輸距離近、通信數(shù)據(jù)速率低的通信協(xié)議,以自組織和多跳的形式構(gòu)成無(wú)線通信網(wǎng)絡(luò)。無(wú)線傳感器網(wǎng)絡(luò)的ー個(gè)核心指標(biāo)是網(wǎng)絡(luò)的生存周期,即希望在一個(gè)較長(zhǎng)的時(shí)間內(nèi)網(wǎng)絡(luò)中的絕大多數(shù)節(jié)點(diǎn)能夠正常的工作,完成數(shù)據(jù)采集和傳遞的功能。無(wú)線傳感器網(wǎng)絡(luò)在運(yùn)行的過程中需要進(jìn)行程序更新,用來滿足功能升級(jí)、漏洞修復(fù)等常見的軟件維護(hù)需求,以及應(yīng)對(duì)網(wǎng)絡(luò)狀態(tài)改變的情況,如儲(chǔ)能減少、部分節(jié)點(diǎn)死亡、節(jié)點(diǎn)位置移動(dòng)等。采用在線更新的方式,利用無(wú)線通信連接進(jìn)行更新數(shù)據(jù)的傳遞,可以避免針對(duì)大量無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的手工操作,降低了維護(hù)代價(jià)。傳統(tǒng)的嵌入式系統(tǒng)的在線更新方式采用點(diǎn)對(duì)點(diǎn)無(wú)線通信獲取完整的程序映像文件來替換舊的程序,這種在線更新方式需要繁瑣地針對(duì)每個(gè)待更新的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)重復(fù)進(jìn)行,并且每次更新傳輸數(shù)據(jù)量大,消耗大量網(wǎng)絡(luò)通信資源并占用較長(zhǎng)的更新時(shí)間,容易導(dǎo)致無(wú)線傳感器網(wǎng)絡(luò)的運(yùn)行中斷。
發(fā)明內(nèi)容
一種無(wú)線傳感器網(wǎng)絡(luò)的在線漸進(jìn)式程序更新方法,其特征在于,依次含有以下步驟步驟(I)構(gòu)造無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)所述無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)是ー個(gè)至少包括嵌入式的處理器、存儲(chǔ)器、內(nèi)存和外部設(shè)備在內(nèi)的嵌入式系統(tǒng),所述存儲(chǔ)器根據(jù)存儲(chǔ)的內(nèi)容劃分為程序存儲(chǔ)空間和數(shù)據(jù)存儲(chǔ)空間,所述程序存儲(chǔ)空間根據(jù)所述無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的各項(xiàng)不同的功能分為若干個(gè)離散的功能模塊,每個(gè)所述功能模塊對(duì)應(yīng)于所述程序存儲(chǔ)空間的ー個(gè)映像文件,完整的程序至少包括更新輔助模塊、網(wǎng)絡(luò)路由模塊、能量收集管理模塊、傳感數(shù)據(jù)采集模塊以及定位算法模塊,所述更新輔助模塊在待更新節(jié)點(diǎn)接收到更新映像文件后,輔助完成所述無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的升級(jí)更新和重啟,所述待更新節(jié)點(diǎn)為所述無(wú)線傳感器網(wǎng)絡(luò)中需要更新的全部或某一類無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn),包括更新源節(jié)點(diǎn)在內(nèi)的全部的所述無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)都有唯一的序號(hào),所述更新是指漸進(jìn)式在線程序更新,毎次只更新其中的某個(gè)或某幾個(gè)功能模塊,更新的結(jié)果為程序存儲(chǔ)空間中的相應(yīng)的功能模塊被替換、刪除或添加,每個(gè)所述映像文件在所述程序存儲(chǔ)空間中的存儲(chǔ)結(jié)構(gòu)由索引部分和函數(shù)體部分構(gòu)成,所述函數(shù)體部分由若干個(gè)函數(shù)子模塊構(gòu)成,所述索引部分位于所述映像文件的起始位置,由各個(gè)所述函數(shù)子模塊的名稱和對(duì)應(yīng)的入口地址構(gòu)成,所述嵌入式的處理器通過調(diào)用所述功能模塊的函數(shù)子模塊來實(shí)現(xiàn)功能模塊的相應(yīng)的功能,所述調(diào)用是指所述嵌入式的處理器查詢所述功能模塊對(duì)應(yīng)的映像文件的索引部分,獲得所述函數(shù)子模塊的入口地址,并跳轉(zhuǎn)到所述入口地址執(zhí)行程序指令,所述數(shù)據(jù)存儲(chǔ)空間用于暫存更新映像文件,步驟(2)無(wú)線傳感器網(wǎng)絡(luò)執(zhí)行在線漸進(jìn)式程序更新,其步驟如下步驟(2. I)更新源節(jié)點(diǎn)向待更新的無(wú)線傳感器網(wǎng)絡(luò)以洪泛的方式發(fā)送更新開始 指令,包括更新目標(biāo)節(jié)點(diǎn)的類型標(biāo)識(shí)、更新功能模塊的名稱、更新版本信息,所述更新源節(jié)點(diǎn)是所述無(wú)線傳感器網(wǎng)絡(luò)中的匯集節(jié)點(diǎn),步驟(2. 2)所述待更新的無(wú)線傳感器網(wǎng)絡(luò)的各個(gè)節(jié)點(diǎn)分析接收到的更新開始指令,判斷更新目標(biāo)節(jié)點(diǎn)的類型標(biāo)識(shí)符合當(dāng)前無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的類型,且更新版本高于對(duì)應(yīng)的功能模塊的當(dāng)前版本,則當(dāng)前無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)成為所述待更新節(jié)點(diǎn),進(jìn)入監(jiān)聽和接收狀態(tài),步驟(2. 3)所述更新源節(jié)點(diǎn)把新版本的功能模塊的更新映像文件拆分為多個(gè)適合傳輸大小的更新數(shù)據(jù)包,包含有功能模塊名稱、數(shù)據(jù)包分拆序號(hào)、分包數(shù)據(jù)以及CRC校驗(yàn)信息,并按數(shù)據(jù)包分拆序號(hào)依次以洪泛方式發(fā)送到所述待更新的無(wú)線傳感器網(wǎng)絡(luò),步驟(2.4)所述待更新節(jié)點(diǎn)接收到所述更新源節(jié)點(diǎn)發(fā)送的更新數(shù)據(jù)包之后,把CRC校驗(yàn)正確的更新數(shù)據(jù)包按照數(shù)據(jù)包分拆序號(hào)重新組成更新映像文件,寫入所述數(shù)據(jù)存儲(chǔ)空間中,步驟(2. 5)所述待更新節(jié)點(diǎn)統(tǒng)計(jì)接收到的更新數(shù)據(jù)包的信息若有缺失的更新數(shù)據(jù)包,則點(diǎn)對(duì)點(diǎn)地向所述更新源節(jié)點(diǎn)發(fā)送缺包反饋信息,包括缺失包的數(shù)據(jù)包分拆序號(hào)和所述待更新節(jié)點(diǎn)的序號(hào),若更新映像文件接收成功,則點(diǎn)對(duì)點(diǎn)地向所述更新源節(jié)點(diǎn)發(fā)送成功反饋信息,包括所述待更新節(jié)點(diǎn)的序號(hào),所述缺失包是指數(shù)據(jù)包分拆序號(hào)丟失的更新數(shù)據(jù)包,CRC校驗(yàn)錯(cuò)誤的更新數(shù)據(jù)包和超過接收時(shí)間門檻尚未接收到的更新數(shù)據(jù)包中的任何ー種,所述接收時(shí)間門檻為5分鐘 50分鐘范圍內(nèi)的預(yù)設(shè)值,所述接收成功是指,收到序號(hào)連續(xù)的所有更新數(shù)據(jù)包并全部通過CRC校驗(yàn),步驟(2. 6)更新源節(jié)點(diǎn)動(dòng)態(tài)的接收并統(tǒng)計(jì)所述待更新節(jié)點(diǎn)的缺包反饋信息和成功反饋信息,新的缺包反饋信息會(huì)覆蓋待更新節(jié)點(diǎn)之前的缺包反饋信息,新的成功反饋信息會(huì)清零待更新節(jié)點(diǎn)之前的缺包反饋信息,所述更新源節(jié)點(diǎn)根據(jù)更新成功率和更新消耗的時(shí)間來決定缺包重發(fā)或者結(jié)束更新若更新成功率超過更新成功率門檻或者更新消耗的時(shí)間超過了更新時(shí)間門檻,則結(jié)束更新,所述更新源節(jié)點(diǎn)向所述無(wú)線傳感器網(wǎng)絡(luò)洪泛發(fā)送更新結(jié)束指令,否則所述更新源節(jié)點(diǎn)向所述無(wú)線傳感器網(wǎng)絡(luò)優(yōu)先重新洪泛發(fā)送缺包統(tǒng)計(jì)較多的更新數(shù)據(jù)包,所述更新成功率是指更新成功的待更新節(jié)點(diǎn)的數(shù)量與待更新節(jié)點(diǎn)的總數(shù)的比值,所述更新成功率門檻為80% 90%范圍內(nèi)的預(yù)設(shè)值,所述更新時(shí)間門檻為10分鐘 100分鐘范圍內(nèi)的預(yù)設(shè)值,
步驟(2. 7)更新映像文件接收成功的所述待更新節(jié)點(diǎn)接收到所述更新結(jié)束指令之后,調(diào)用所述更新輔助模塊把更新映像文件從所述數(shù)據(jù)存儲(chǔ)空間寫入到對(duì)應(yīng)的程序存儲(chǔ)空間,再進(jìn)行節(jié)點(diǎn)重啟,運(yùn)行新的程序版本,步驟(2. 8)對(duì)于更新失敗的所述待更新節(jié)點(diǎn)按步驟(2. I)到步驟(2. 7)的過程采取點(diǎn)對(duì)點(diǎn)的指令和更新數(shù)據(jù)包的傳輸方式進(jìn)行更新。本發(fā)明提出的應(yīng)用于無(wú)線傳感器網(wǎng)絡(luò)的在線漸進(jìn)式程序更新方法,其主要優(yōu)點(diǎn)是減少了更新數(shù)據(jù)量,提高了代碼重用性,減少更新過程對(duì)于網(wǎng)絡(luò)資源的消耗,降低更新失敗率,保證了無(wú)線傳感器網(wǎng)絡(luò)的正常無(wú)間斷運(yùn)行。本發(fā)明結(jié)合洪泛方式和點(diǎn)到點(diǎn)方式高效地 實(shí)現(xiàn)更新指令的下達(dá)和更新數(shù)據(jù)的傳遞,并且對(duì)無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的程序存儲(chǔ)空間采用離散的功能模塊劃分方式,通過本發(fā)明提供的映像文件的索引機(jī)制進(jìn)行函數(shù)子模塊調(diào)用。毎次進(jìn)行無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的更新只需替換、増加或者刪除程序存儲(chǔ)空間中的某個(gè)或者某幾個(gè)功能模塊,實(shí)現(xiàn)了程序的在線漸進(jìn)式更新。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I是無(wú)線傳感器網(wǎng)絡(luò)在線漸進(jìn)式程序更新場(chǎng)景;圖2是無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的程序存儲(chǔ)空間的功能模塊劃分方法;圖3是更新前后各功能模塊的映像文件在存儲(chǔ)器中變換示意圖;圖4是無(wú)線傳感網(wǎng)絡(luò)進(jìn)行在線漸進(jìn)式程序更新的流程原理圖;圖5是更新數(shù)據(jù)包格式示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明提出的在線漸進(jìn)式程序更新方法適用于無(wú)線傳感器網(wǎng)絡(luò),如圖I所示,無(wú)線傳感器網(wǎng)絡(luò)由ー個(gè)更新源節(jié)點(diǎn)和一定數(shù)量的普通節(jié)點(diǎn)構(gòu)成,更新源節(jié)點(diǎn)為無(wú)線傳感器網(wǎng)絡(luò)中的匯集節(jié)點(diǎn),匯集節(jié)點(diǎn)的主要功能是傳感數(shù)據(jù)的收集,并可以向整個(gè)無(wú)線傳感器網(wǎng)絡(luò)發(fā)送指令,在更新過程中,有更新需求的部分或全部普通節(jié)點(diǎn)成為待更新節(jié)點(diǎn)。無(wú)線傳感器網(wǎng)絡(luò)必須已經(jīng)實(shí)現(xiàn)了常規(guī)的網(wǎng)絡(luò)路由協(xié)議,能夠正確的實(shí)現(xiàn)洪泛方式和點(diǎn)到點(diǎn)方式的路由通信,包括更新源節(jié)點(diǎn)在內(nèi)的全部無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)都有唯一的序號(hào)。無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)是包括嵌入式的處理器、存儲(chǔ)器、內(nèi)存和外設(shè)在內(nèi)的嵌入式系統(tǒng),其中存儲(chǔ)器根據(jù)存儲(chǔ)的內(nèi)容分為程序存儲(chǔ)空間和數(shù)據(jù)存儲(chǔ)空間,處理器通過執(zhí)行程序存儲(chǔ)空間的程序指令運(yùn)行程序。
無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的程序存儲(chǔ)空間根據(jù)節(jié)點(diǎn)的各項(xiàng)不同的功能分為若干個(gè)離散的功能模塊,如圖2所示,每個(gè)功能模塊對(duì)應(yīng)于程序存儲(chǔ)空間中的ー個(gè)映像文件,單個(gè)映像文件本身占據(jù)ー塊連續(xù)的存儲(chǔ)空間,不同功能模塊的映像文件在存儲(chǔ)器中互相是不連續(xù)的,完整的程序由全部功能模塊構(gòu)成,包括但不限于更新輔助模塊、網(wǎng)絡(luò)路由模塊、能量收集管理模塊、傳感數(shù)據(jù)采集模塊、定位算法模塊。如圖2所示,每個(gè)功能模塊所對(duì)應(yīng)的映像文件在程序存儲(chǔ)空間中的存儲(chǔ)結(jié)構(gòu)由索引部分和函數(shù)體部分構(gòu)成,函數(shù)體部分由一系列函數(shù)子模塊構(gòu)成,函數(shù)子模塊是實(shí)現(xiàn)功能模塊所提供的具體功能的內(nèi)部函數(shù),以能量管理模塊為例,其函數(shù)子模塊包括電壓電流數(shù)據(jù)測(cè)量函數(shù)、節(jié)點(diǎn)休眠控制函數(shù)、電池充放電控制函數(shù)等,索引部分位于映像文件的起始位置,索引部分的內(nèi)容是各個(gè)函數(shù)子模塊的名稱和相應(yīng)的入口地址,用于處理器對(duì)各個(gè)函數(shù)子模塊的入口地址進(jìn)行查找,當(dāng)處理 進(jìn)行函數(shù)子模塊調(diào)用時(shí),通過查詢映像文件起始處的索引部分獲得函數(shù)子模塊的入口地址,然后直接跳轉(zhuǎn)到該入口地址讀取程序指令并執(zhí)行。無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)具有ー個(gè)固定的更新輔助模塊,用于輔助完成所述無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的升級(jí)更新,具體實(shí)現(xiàn)的功能包括映像文件的復(fù)制寫入、節(jié)點(diǎn)的重啟,如圖3所示,無(wú)線傳感器網(wǎng)絡(luò)啟動(dòng)在線更新過程后,待更新節(jié)點(diǎn)將更新映像文件下載至存儲(chǔ)器的數(shù)據(jù)存儲(chǔ)空間,然后調(diào)用更新輔助模塊將更新映像文件由數(shù)據(jù)存儲(chǔ)空間寫入到程序存儲(chǔ)空間,用更新映像文件覆蓋或替換原有的映像文件,或者對(duì)舊的映像文件進(jìn)行刪除,并在文件操作完成時(shí)進(jìn)行待更新節(jié)點(diǎn)的重啟,重啟后待更新節(jié)點(diǎn)運(yùn)行更新后的程序,這個(gè)過程對(duì)應(yīng)著圖4中的“文件更新覆蓋和節(jié)點(diǎn)重啟”部分。更新輔助模塊本身為固定模塊,不進(jìn)行在線更新,可以手工更新。結(jié)合圖4所示的流程圖,整個(gè)無(wú)線傳感器網(wǎng)絡(luò)的在線漸進(jìn)式更新的執(zhí)行過程包括以下步驟步驟(I)更新源節(jié)點(diǎn)向待更新的無(wú)線傳感器網(wǎng)絡(luò)以洪泛的方式發(fā)送更新開始指令,包括更新目標(biāo)節(jié)點(diǎn)的類型標(biāo)識(shí)、更新功能模塊的名稱、更新版本信息。所述更新目標(biāo)節(jié)點(diǎn)的類型標(biāo)識(shí)用來標(biāo)明網(wǎng)絡(luò)中需要更新的節(jié)點(diǎn)的類型。所述洪泛方式是無(wú)線傳感器網(wǎng)絡(luò)的一種簡(jiǎn)單通信方式,網(wǎng)絡(luò)中的節(jié)點(diǎn)接收到數(shù)據(jù)后立即將數(shù)據(jù)轉(zhuǎn)發(fā),不保證數(shù)據(jù)傳輸?shù)目煽啃?。步驟(2)待更新的無(wú)線傳感器網(wǎng)絡(luò)的各個(gè)節(jié)點(diǎn)分析接收到的更新開始指令信息,如果滿足更新判決條件,即更新目標(biāo)節(jié)點(diǎn)的類型標(biāo)識(shí)符合當(dāng)前無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的類型,且更新版本高于對(duì)應(yīng)的當(dāng)前功能模塊的版本,則成為待更新節(jié)點(diǎn),進(jìn)入監(jiān)聽和接收狀態(tài)。步驟(3)更新源節(jié)點(diǎn)將新版本的功能模塊的更新映像文件拆分為多個(gè)適合傳輸大小的更新數(shù)據(jù)包,包含了功能模塊名稱、數(shù)據(jù)包分拆序號(hào)、分包數(shù)據(jù)主體以及CRC校驗(yàn)信息,如圖5所示,并按數(shù)據(jù)包分拆序號(hào)依次以洪泛方式發(fā)送到待更新的無(wú)線傳感器網(wǎng)絡(luò)。所述數(shù)據(jù)包分拆序號(hào)為ー種編號(hào)方式,用于待更新節(jié)點(diǎn)確認(rèn)更新數(shù)據(jù)包分拆順序。步驟(4)待更新節(jié)點(diǎn)接收到更新源節(jié)點(diǎn)發(fā)送的更新數(shù)據(jù)包,對(duì)接收到的數(shù)據(jù)包進(jìn)行CRC校驗(yàn),校驗(yàn)通過后依照數(shù)據(jù)包分拆序號(hào)將更新數(shù)據(jù)包重新恢復(fù)組成更新映像文件,寫入到待更新節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)空間中。步驟(5)待更新節(jié)點(diǎn)統(tǒng)計(jì)接收到的更新數(shù)據(jù)包的信息如果有缺失的更新數(shù)據(jù)包,則向更新源節(jié)點(diǎn)發(fā)送缺包反饋;如果成功接收到完整的映像文件,則向更新源節(jié)點(diǎn)發(fā)送成功反饋。缺包情況包括以下情形接收到數(shù)據(jù)包分拆序號(hào)不連續(xù)的更新數(shù)據(jù)包,則丟失序號(hào)的相應(yīng)更新數(shù)據(jù)包為缺失包,CRC校驗(yàn)錯(cuò)誤的更新數(shù)據(jù)包為缺失包,超過預(yù)設(shè)的接收時(shí)間門檻(5分鐘 50分鐘)尚未接收到的更新數(shù)據(jù)包為缺失包;成功接收情況為待更新節(jié)點(diǎn)接收到序號(hào)連續(xù)的所有更新數(shù)據(jù)包并且全部通過CRC校驗(yàn)。所述缺包反饋和成功反饋利用無(wú)線傳感器網(wǎng)絡(luò)的點(diǎn)到點(diǎn)方式實(shí)現(xiàn),點(diǎn)對(duì)點(diǎn)方式利用無(wú)線傳感器網(wǎng)絡(luò)的網(wǎng)絡(luò)協(xié)議建立起來的可靠鏈接進(jìn)行數(shù)據(jù)的傳遞,缺包反饋的反饋信息包含缺失包的數(shù)據(jù)包分拆序號(hào)和待更新節(jié)點(diǎn)的序號(hào),成功反饋的反饋信息包含待更新節(jié)點(diǎn)的序號(hào)。步驟(7)更新源節(jié)點(diǎn)接收并統(tǒng)計(jì)待更新節(jié)點(diǎn)的缺包反饋和成功反饋,根據(jù)更新成功率和已經(jīng)更新的時(shí)間來決定缺包重發(fā)或者結(jié)束更新如果更新成功率超過預(yù)設(shè)的更新成功率門檻(80% 90% )或者更新時(shí)間超過了預(yù)設(shè)的更新時(shí)間門檻(10分鐘 100分鐘)則結(jié)束更新,缺包重發(fā)繼續(xù)采用洪泛的方式,優(yōu)先重發(fā)缺包統(tǒng)計(jì)較多的更新數(shù)據(jù)包。所述更新源節(jié)點(diǎn)對(duì)于缺包反饋和成功反饋的統(tǒng)計(jì)是ー個(gè)動(dòng)態(tài)的過程,待更新節(jié)點(diǎn)的新的缺包反饋信息會(huì)覆蓋該節(jié)點(diǎn)之前的缺包反饋信息,待更新節(jié)點(diǎn)新的成功反饋信息會(huì)清零該節(jié)點(diǎn)之前的缺包反饋信息,所述更新成功率是指更新成功的待更新節(jié)點(diǎn)的數(shù)量與待更新節(jié)點(diǎn)的總數(shù)的比值。步驟(8)更新源節(jié)點(diǎn)確定結(jié)束更新后向整個(gè)網(wǎng)絡(luò)洪泛發(fā)送更新結(jié)束指令,獲得完整更新映像文件的待更新節(jié)點(diǎn)接收到更新結(jié)束指令之后調(diào)用更新輔助模塊將更新映像文件寫入相應(yīng)的功能模塊在原程序存儲(chǔ)空間中的位置,如圖2所示,毎次更新某個(gè)或者某幾個(gè)功能模塊的映像文件,并保留原有程序存儲(chǔ)空間中無(wú)需更新的其他功能模塊,更新的結(jié)果為程序存儲(chǔ)空間的相應(yīng)功能模塊被替換、刪除、添加,文件操作完成之后更新輔助模塊進(jìn)行待更新節(jié)點(diǎn)的重啟,重啟后,待更新節(jié)點(diǎn)運(yùn)行更新之后的程序版本。步驟(9)對(duì)于更新失敗的剩余待更新節(jié)點(diǎn)采取點(diǎn)對(duì)點(diǎn)方式進(jìn)行單獨(dú)更新,點(diǎn)對(duì)點(diǎn)的更新過程按照上述步驟(I)到步驟(8)的過程采取點(diǎn)對(duì)點(diǎn)的指令和更新數(shù)據(jù)包的傳輸方式進(jìn)行更新,對(duì)于無(wú)法建立點(diǎn)到點(diǎn)通信連接的待更新節(jié)點(diǎn),采用手工方式進(jìn)行更新或者調(diào) 試修復(fù)。
權(quán)利要求
1. 一種無(wú)線傳感器網(wǎng)絡(luò)的在線漸進(jìn)式程序更新方法,其特征在于,依次含有以下步驟 步驟(I)構(gòu)造無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn) 所述無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)是ー個(gè)至少包括嵌入式的處理器、存儲(chǔ)器、內(nèi)存和外部設(shè)備在內(nèi)的嵌入式系統(tǒng),所述存儲(chǔ)器根據(jù)存儲(chǔ)的內(nèi)容劃分為程序存儲(chǔ)空間和數(shù)據(jù)存儲(chǔ)空間, 所述程序存儲(chǔ)空間根據(jù)所述無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的各項(xiàng)不同的功能分為若干個(gè)離散的功能模塊,每個(gè)所述功能模塊對(duì)應(yīng)于所述程序存儲(chǔ)空間的ー個(gè)映像文件,完整的程序至少包括更新輔助模塊、網(wǎng)絡(luò)路由模塊、能量收集管理模塊、傳感數(shù)據(jù)采集模塊以及定位算法模塊,所述更新輔助模塊在待更新節(jié)點(diǎn)接收到更新映像文件后,輔助完成所述無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的升級(jí)更新和重啟,所述待更新節(jié)點(diǎn)為所述無(wú)線傳感器網(wǎng)絡(luò)中需要更新的全部或某一類無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn),包括更新源節(jié)點(diǎn)在內(nèi)的全部的所述無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)都有唯一的序號(hào),所述更新是指漸進(jìn)式在線程序更新,毎次只更新其中的某個(gè)或某幾個(gè)功能模塊,更新的結(jié)果為程序存儲(chǔ)空間中的相應(yīng)的功能模塊被替換、刪除或添加, 每個(gè)所述映像文件在所述程序存儲(chǔ)空間中的存儲(chǔ)結(jié)構(gòu)由索引部分和函數(shù)體部分構(gòu)成,所述函數(shù)體部分由若干個(gè)函數(shù)子模塊構(gòu)成,所述索引部分位于所述映像文件的起始位置,由各個(gè)所述函數(shù)子模塊的名稱和對(duì)應(yīng)的入口地址構(gòu)成,所述嵌入式的處理器通過調(diào)用所述功能模塊的函數(shù)子模塊來實(shí)現(xiàn)功能模塊的相應(yīng)的功能,所述調(diào)用是指所述嵌入式的處理器查詢所述功能模塊對(duì)應(yīng)的映像文件的索引部分,獲得所述函數(shù)子模塊的入口地址,并跳轉(zhuǎn)到所述入口地址執(zhí)行程序指令, 所述數(shù)據(jù)存儲(chǔ)空間用于暫存更新映像文件, 步驟(2)無(wú)線傳感器網(wǎng)絡(luò)執(zhí)行在線漸進(jìn)式程序更新,其步驟如下 步驟(2. I)更新源節(jié)點(diǎn)向待更新的無(wú)線傳感器網(wǎng)絡(luò)以洪泛的方式發(fā)送更新開始指令,包括更新目標(biāo)節(jié)點(diǎn)的類型標(biāo)識(shí)、更新功能模塊的名稱、更新版本信息,所述更新源節(jié)點(diǎn)是所述無(wú)線傳感器網(wǎng)絡(luò)中的匯集節(jié)點(diǎn), 步驟(2. 2)所述待更新的無(wú)線傳感器網(wǎng)絡(luò)的各個(gè)節(jié)點(diǎn)分析接收到的更新開始指令,判斷更新目標(biāo)節(jié)點(diǎn)的類型標(biāo)識(shí)符合當(dāng)前無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的類型,且更新版本高于對(duì)應(yīng)的功能模塊的當(dāng)前版本,則當(dāng)前無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)成為所述待更新節(jié)點(diǎn),進(jìn)入監(jiān)聽和接收狀態(tài), 步驟(2. 3)所述更新源節(jié)點(diǎn)把新版本的功能模塊的更新映像文件拆分為多個(gè)適合傳輸大小的更新數(shù)據(jù)包,包含有功能模塊名稱、數(shù)據(jù)包分拆序號(hào)、分包數(shù)據(jù)以及CRC校驗(yàn)信息,并按數(shù)據(jù)包分拆序號(hào)依次以洪泛方式發(fā)送到所述待更新的無(wú)線傳感器網(wǎng)絡(luò), 步驟(2. 4)所述待更新節(jié)點(diǎn)接收到所述更新源節(jié)點(diǎn)發(fā)送的更新數(shù)據(jù)包之后,把CRC校驗(yàn)正確的更新數(shù)據(jù)包按照數(shù)據(jù)包分拆序號(hào)重新組成更新映像文件,寫入所述數(shù)據(jù)存儲(chǔ)空間中, 步驟(2. 5)所述待更新節(jié)點(diǎn)統(tǒng)計(jì)接收到的更新數(shù)據(jù)包的信息 若有缺失的更新數(shù)據(jù)包,則點(diǎn)對(duì)點(diǎn)地向所述更新源節(jié)點(diǎn)發(fā)送缺包反饋信息,包括缺失包的數(shù)據(jù)包分拆序號(hào)和所述待更新節(jié)點(diǎn)的序號(hào), 若更新映像文件接收成功,則點(diǎn)對(duì)點(diǎn)地向所述更新源節(jié)點(diǎn)發(fā)送成功反饋信息,包括所述待更新節(jié)點(diǎn)的序號(hào),所述缺失包是指數(shù)據(jù)包分拆序號(hào)丟失的更新數(shù)據(jù)包,CRC校驗(yàn)錯(cuò)誤的更新數(shù)據(jù)包和超過接收時(shí)間門檻尚未接收到的更新數(shù)據(jù)包中的任何ー種,所述接收時(shí)間門檻為5分鐘 50分鐘范圍內(nèi)的預(yù)設(shè)值, 所述接收成功是指,收到序號(hào)連續(xù)的所有更新數(shù)據(jù)包并全部通過CRC校驗(yàn), 步驟(2.6)更新源節(jié)點(diǎn)動(dòng)態(tài)的接收并統(tǒng)計(jì)所述待更新節(jié)點(diǎn)的缺包反饋信息和成功反饋信息,新的缺包反饋信息會(huì)覆蓋待更新節(jié)點(diǎn)之前的缺包反饋信息,新的成功反饋信息會(huì)清零待更新節(jié)點(diǎn)之前的缺包反饋信息, 所述更新源節(jié)點(diǎn)根據(jù)更新成功率和更新消耗的時(shí)間來決定缺包重發(fā)或者結(jié)束更新 若更新成功率超過更新成功率門檻或者更新消耗的時(shí)間超過了更新時(shí)間門檻,則結(jié)束更新,所述更新源節(jié)點(diǎn)向所述無(wú)線傳感器網(wǎng)絡(luò)洪泛發(fā)送更新結(jié)束指令,否則所述更新源 節(jié)點(diǎn)向所述無(wú)線傳感器網(wǎng)絡(luò)優(yōu)先重新洪泛發(fā)送缺包統(tǒng)計(jì)較多的更新數(shù)據(jù)包, 所述更新成功率是指更新成功的待更新節(jié)點(diǎn)的數(shù)量與待更新節(jié)點(diǎn)的總數(shù)的比值,所述更新成功率門檻為80% 90%范圍內(nèi)的預(yù)設(shè)值,所述更新時(shí)間門檻為10分鐘 100分鐘范圍內(nèi)的預(yù)設(shè)值, 步驟(2. 7)更新映像文件接收成功的所述待更新節(jié)點(diǎn)接收到所述更新結(jié)束指令之后,調(diào)用所述更新輔助模塊把更新映像文件從所述數(shù)據(jù)存儲(chǔ)空間寫入到對(duì)應(yīng)的程序存儲(chǔ)空間,再進(jìn)行節(jié)點(diǎn)重啟,運(yùn)行新的程序版本, 步驟(2. 8)對(duì)于更新失敗的所述待更新節(jié)點(diǎn)按步驟(2. I)到步驟(2. 7)的過程采取點(diǎn)對(duì)點(diǎn)的指令和更新數(shù)據(jù)包的傳輸方式進(jìn)行更新。
全文摘要
一種無(wú)線傳感器網(wǎng)絡(luò)的在線漸進(jìn)式程序更新方法,屬于無(wú)線傳感器網(wǎng)絡(luò)技術(shù)領(lǐng)域,其特征在于,對(duì)無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的程序存儲(chǔ)空間劃分成離散的功能模塊,設(shè)置了一個(gè)更新輔助模塊來刪除、替換、添加嵌入式節(jié)點(diǎn)需要更新的功能模塊,并以無(wú)線傳感器網(wǎng)絡(luò)中的匯集節(jié)點(diǎn)作為更新源節(jié)點(diǎn),以洪泛方式結(jié)合點(diǎn)到點(diǎn)方式高效實(shí)現(xiàn)更新指令的下達(dá)和更新數(shù)據(jù)的傳遞,從而實(shí)現(xiàn)程序的在線漸進(jìn)式更新,具有減少更新數(shù)據(jù)量,提高代碼重用性,減少更新過程對(duì)于網(wǎng)絡(luò)資源的消耗,降低更新失敗率的優(yōu)點(diǎn),保證了無(wú)線傳感器網(wǎng)絡(luò)的正常無(wú)間斷運(yùn)行。
文檔編號(hào)H04W88/18GK102665196SQ20121013518
公開日2012年9月12日 申請(qǐng)日期2012年4月28日 優(yōu)先權(quán)日2012年4月28日
發(fā)明者劉偉, 徐淑正, 李讓坤, 楊華中, 王鵬軍, 羅洪 申請(qǐng)人:清華大學(xué)