專利名稱:一種無(wú)線傳感器網(wǎng)絡(luò)模擬器及其節(jié)點(diǎn)事件處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及無(wú)線傳感器網(wǎng)絡(luò)模擬器技術(shù)領(lǐng)域,特別是一種無(wú)線傳感器網(wǎng)絡(luò) 模擬器及其節(jié)點(diǎn)事件處理方法。
背景技術(shù):
網(wǎng)絡(luò)模擬是測(cè)試和評(píng)價(jià)網(wǎng)絡(luò)協(xié)議性能的重要手段,現(xiàn)有的網(wǎng)絡(luò)模擬器(或 稱網(wǎng)絡(luò)仿真平臺(tái))大都是為有線網(wǎng)絡(luò)或傳統(tǒng)的無(wú)線網(wǎng)絡(luò)而建立的。 一般地,對(duì) 于有線網(wǎng)絡(luò),由于它有足夠的帶寬容量和可靠的通信鏈路,研究人員在測(cè)試分 析和評(píng)價(jià)有線網(wǎng)絡(luò)的性能時(shí), 一般不考慮網(wǎng)絡(luò)規(guī)模對(duì)通信質(zhì)量的影響,而只要 考慮網(wǎng)絡(luò)流量對(duì)網(wǎng)絡(luò)性能的影響,所以一般只需以少數(shù)節(jié)點(diǎn)組成的典型網(wǎng)絡(luò)為 目標(biāo)進(jìn)行測(cè)試分析和評(píng)價(jià)有線網(wǎng)絡(luò)的性能。
對(duì)于傳統(tǒng)的無(wú)線網(wǎng)絡(luò),不管是采用帶基站的結(jié)構(gòu),還是無(wú)基站的自組織結(jié) 構(gòu), 一般網(wǎng)絡(luò)中的節(jié)點(diǎn)數(shù)量都十分有限,所以在評(píng)價(jià)和測(cè)試這類網(wǎng)絡(luò)的性能時(shí), 需要考慮的網(wǎng)絡(luò)規(guī)模也不是很大。因此,無(wú)論是有線網(wǎng)絡(luò)還是傳統(tǒng)的無(wú)線網(wǎng)絡(luò), 目前都可以用現(xiàn)有的網(wǎng)絡(luò)模擬器來(lái)進(jìn)行有效的測(cè)試和評(píng)價(jià)。
但是,由于現(xiàn)有的網(wǎng)絡(luò)模擬器大都是基于離散事件驅(qū)動(dòng)和串行處理的架構(gòu) 而建立的,隨著網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大,模擬實(shí)驗(yàn)的運(yùn)行時(shí)間會(huì)越來(lái)越長(zhǎng),同時(shí), 隨著網(wǎng)絡(luò)中節(jié)點(diǎn)數(shù)量的增加,模擬器中的事件數(shù)量也會(huì)快速增加,從而造成運(yùn) 算數(shù)量和運(yùn)行時(shí)間的快速增加。
無(wú)線傳感器網(wǎng)絡(luò)是當(dāng)前國(guó)際上備受關(guān)注的、由多學(xué)科高度交叉的新興前沿 研究熱點(diǎn)領(lǐng)域。無(wú)線傳感器網(wǎng)絡(luò)綜合了傳感器技術(shù)、嵌入式計(jì)算技術(shù)、現(xiàn)代網(wǎng) 絡(luò)及無(wú)線通信技術(shù)、分布式信息處理技術(shù)等,其能夠通過(guò)各類集成化的微型傳 感器協(xié)作地實(shí)時(shí)監(jiān)測(cè)、感知和采集各種環(huán)境或監(jiān)測(cè)對(duì)象的信息,通過(guò)嵌入式系 統(tǒng)對(duì)信息進(jìn)行處理,并通過(guò)隨機(jī)自組織無(wú)線通信網(wǎng)絡(luò)以多跳中繼方式將所感知 的信息傳送到用戶終端,從而真正實(shí)現(xiàn)"無(wú)處不在的計(jì)算"理念。無(wú)線傳感器 網(wǎng)絡(luò)的研究采用系統(tǒng)發(fā)展模式,因而必須將現(xiàn)代的先進(jìn)微電子技術(shù)、微細(xì)加工
技術(shù)、系統(tǒng)SOC (system-on-chip)芯片設(shè)計(jì)技術(shù)、納米材料與技術(shù)、現(xiàn)代信 息通訊技術(shù)、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)等融合,以實(shí)現(xiàn)其微型化、集成化、多功能化及 系統(tǒng)化、網(wǎng)絡(luò)化,特別是實(shí)現(xiàn)傳感器網(wǎng)絡(luò)特有的超低功耗系統(tǒng)設(shè)計(jì)。無(wú)線傳感 器網(wǎng)絡(luò)具有十分廣闊的應(yīng)用前景,在軍事國(guó)防、工農(nóng)業(yè)、城市管理、生物醫(yī)療、 環(huán)境監(jiān)測(cè)、搶險(xiǎn)救災(zāi)、防恐反恐、危險(xiǎn)區(qū)域遠(yuǎn)程控制等許多領(lǐng)域都有重要的科 研價(jià)值和巨大實(shí)用價(jià)值,已經(jīng)引起了世界許多國(guó)家軍界、學(xué)術(shù)界和工業(yè)界的高 度重視,并成為進(jìn)入2000年以來(lái)公認(rèn)的新興前沿?zé)狳c(diǎn)研究領(lǐng)域,被認(rèn)為是將 對(duì)二十一世紀(jì)產(chǎn)生巨大影響力的技術(shù)之一。
無(wú)線傳感器網(wǎng)絡(luò)技術(shù),是一種由大量節(jié)點(diǎn)組成的、同時(shí)具有感知和通信功 能的、采用自組織方式進(jìn)行通信的新一代無(wú)線網(wǎng)絡(luò)技術(shù)。其由部署在監(jiān)測(cè)區(qū)域 內(nèi)的大量的廉價(jià)微型傳感器節(jié)點(diǎn)組成,通過(guò)無(wú)線通信方式形成一個(gè)多跳的自組 織的網(wǎng)絡(luò)系統(tǒng),其目的是感知、采集和處理網(wǎng)絡(luò)覆蓋的地理區(qū)域中感知對(duì)象的 信息,并發(fā)布給觀察者。無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)具有數(shù)據(jù)采集和處理、無(wú)線通信、 協(xié)同合作等功能,可以隨機(jī)或者特定地布置在目標(biāo)環(huán)境中,能夠獲取被監(jiān)測(cè)區(qū) 域中的信息并相互協(xié)同完成特定的任務(wù)。傳感器節(jié)點(diǎn)由電源、感知部件、嵌入 式處理器、存儲(chǔ)器、通信部件和軟件等幾部分構(gòu)成。
現(xiàn)有的無(wú)線傳感器網(wǎng)絡(luò)的發(fā)展日新月異,各種網(wǎng)絡(luò)方案和協(xié)議日趨復(fù)雜, 網(wǎng)絡(luò)規(guī)模日趨龐大,對(duì)于無(wú)線傳感器網(wǎng)絡(luò)的研究人員而言,掌握無(wú)線傳感器網(wǎng) 絡(luò)的仿真模擬的重要性是不言而喻的。
無(wú)線傳感器網(wǎng)絡(luò)模擬器,也稱無(wú)線傳感器網(wǎng)絡(luò)仿真平臺(tái),或者WSN仿真 平臺(tái),是指能夠在一個(gè)可控制的環(huán)境里研究無(wú)線傳感器網(wǎng)絡(luò)的應(yīng)用,包括操作 系統(tǒng)和網(wǎng)絡(luò)協(xié)議棧,能夠模擬仿真數(shù)量眾多的節(jié)點(diǎn),能夠觀察由不可預(yù)測(cè)的干 擾和噪聲引起的難以琢磨的節(jié)點(diǎn)間的相互作用,獲取節(jié)點(diǎn)間詳細(xì)的細(xì)節(jié),從而 提高節(jié)點(diǎn)投放后的網(wǎng)絡(luò)成功率,減少投放后的網(wǎng)絡(luò)維護(hù)工作的一種模擬仿真平 臺(tái)。現(xiàn)有技術(shù)中的無(wú)線傳感器網(wǎng)絡(luò)使用的模擬器系統(tǒng)主要有NS-2、 TOSSIM、 OPNET、 OMNET+十等等。
不同于傳統(tǒng)的無(wú)線網(wǎng)絡(luò)(一般以局域網(wǎng)的形式存在,規(guī)模通常比較小), 無(wú)線傳感器網(wǎng)絡(luò)一般是以大規(guī)模的末端網(wǎng)絡(luò)的形式存在,其規(guī)模往往較大,但 是,現(xiàn)有的模擬器都不能很好地采取有效的方法,在增加無(wú)線傳感器網(wǎng)絡(luò)中的 模擬節(jié)點(diǎn)數(shù)量的同時(shí),又能使其中的事件數(shù)量不至于增加的太多,這樣會(huì)造成
傳感器網(wǎng)絡(luò)模擬器中的查找運(yùn)算數(shù)量過(guò)大,從而使得傳感器網(wǎng)絡(luò)模擬器的運(yùn)算 負(fù)擔(dān)過(guò)大,進(jìn)而造成傳感器網(wǎng)絡(luò)模擬器的運(yùn)算速度降低,規(guī)模無(wú)法擴(kuò)大。
發(fā)明內(nèi)容
本發(fā)明的目的在于,提出一種無(wú)線傳感器網(wǎng)絡(luò)模擬器及其節(jié)點(diǎn)事件處理方 法。其每個(gè)節(jié)點(diǎn)在事件處理程序中,不但可以修改自身的狀態(tài),還可以更新與 本事件相關(guān)的所有其它節(jié)點(diǎn)的狀態(tài),從而減少了模擬器中的事件數(shù)量,提高了 基于離散事件驅(qū)動(dòng)架構(gòu)建立的傳感器網(wǎng)絡(luò)模擬器的規(guī)模和執(zhí)行速度。
為了實(shí)現(xiàn)所述目的,本發(fā)明提出了一種無(wú)線傳感器網(wǎng)絡(luò)模擬器,包括節(jié)點(diǎn) 模塊,所述節(jié)點(diǎn)模塊包括鏈表模塊,用于在模擬器運(yùn)行時(shí),在節(jié)點(diǎn)的事件處理 程序中,根據(jù)鏈表數(shù)據(jù)結(jié)構(gòu),在鏈表中査找節(jié)點(diǎn),修改和更新節(jié)點(diǎn)的狀態(tài),并 對(duì)其相鄰節(jié)點(diǎn)操作。
較佳的,所述鏈表數(shù)據(jù)結(jié)構(gòu)為多維有序鏈表、有序堆結(jié)構(gòu)鏈表、有序二叉
樹(shù)鏈表、B+樹(shù)鏈表、HASH表鏈表中的一種或者一種以上的組合。
較佳的,所述節(jié)點(diǎn)模塊,還包括初始化模塊,用于在模擬器的初始化階段, 先創(chuàng)建所有節(jié)點(diǎn)實(shí)例,然后根據(jù)實(shí)驗(yàn)場(chǎng)景的配置,依次設(shè)置各節(jié)點(diǎn)的標(biāo)號(hào)和位 置信息,最后將節(jié)點(diǎn)分別以多個(gè)節(jié)點(diǎn)的關(guān)鍵字按序插入到鏈表模塊的多個(gè)鏈表 中。
較佳的,所述節(jié)點(diǎn)的關(guān)鍵字是指以節(jié)點(diǎn)的標(biāo)號(hào)、X軸坐標(biāo)和Y軸坐標(biāo)為 關(guān)鍵字。
較佳的,所述鏈表模塊包括查找子模塊,用于根據(jù)鏈表數(shù)據(jù)結(jié)構(gòu),采用以 節(jié)點(diǎn)標(biāo)號(hào)為關(guān)鍵字的快速査找方法在數(shù)據(jù)結(jié)構(gòu)中查找節(jié)點(diǎn),然后通過(guò)該節(jié)點(diǎn)所 包含的指針,并直接獲得與該節(jié)點(diǎn)相連或相鄰的節(jié)點(diǎn)。
較佳的,所述快速査找方法依照所述鏈表數(shù)據(jù)結(jié)構(gòu),分別采用兩分查找算 法、二叉排序樹(shù)法、B+樹(shù)法、HASH算法。
較佳的,所述鏈表數(shù)據(jù)結(jié)構(gòu)包括三組指針,其中,第一組指針為序號(hào)指針, 用于指向該節(jié)點(diǎn)在以節(jié)點(diǎn)標(biāo)號(hào)為序排列形成的鏈表中的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn); 第二組指針為第一坐標(biāo)指針,用于指向該節(jié)點(diǎn)在以節(jié)點(diǎn)的X軸坐標(biāo)為序排列 形成的鏈表中的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn);第三組指針為第二坐標(biāo)指針,用于指向 該節(jié)點(diǎn)在以節(jié)點(diǎn)的Y軸坐標(biāo)為序排列形成的鏈表中的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)。
為了實(shí)現(xiàn)所述目的,本發(fā)明還提出了一種無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件 處理方法,包括下列步驟
步驟A,在模擬器的初始化階段,先創(chuàng)建所有節(jié)點(diǎn)實(shí)例,然后根據(jù)實(shí)驗(yàn)場(chǎng) 景的配置,依次設(shè)置各節(jié)點(diǎn)的標(biāo)號(hào)和位置信息,最后將節(jié)點(diǎn)分別以多個(gè)節(jié)點(diǎn)的 關(guān)鍵字按序插入到多個(gè)鏈表中;
步驟B,在模擬器運(yùn)行時(shí),在節(jié)點(diǎn)的事件處理程序中,根據(jù)鏈表數(shù)據(jù)結(jié)構(gòu), 在鏈表中查找節(jié)點(diǎn),修改和更新節(jié)點(diǎn)的狀態(tài),并對(duì)其相鄰節(jié)點(diǎn)操作。
較佳的,所述步驟B可以包括下列步驟
步驟B1,以節(jié)點(diǎn)標(biāo)號(hào)為關(guān)鍵字,査找到一目標(biāo)節(jié)點(diǎn);
步驟B2,查找到位于該目標(biāo)節(jié)點(diǎn)兩邊的以節(jié)點(diǎn)的X軸坐標(biāo)為序排列的前 驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn),若該節(jié)點(diǎn)的X軸坐標(biāo)與目標(biāo)節(jié)點(diǎn)的X軸坐標(biāo)之差的絕對(duì)
值小于或等于一預(yù)定距離,則轉(zhuǎn)入步驟B3;否則,轉(zhuǎn)入步驟B5;
步驟B3,計(jì)算所述目標(biāo)節(jié)點(diǎn)與該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)之間的 歐氏距離;
如果計(jì)算結(jié)果小于或等于所述預(yù)定距離,則轉(zhuǎn)入歩驟B4;
否則,轉(zhuǎn)入步驟B2,繼續(xù)査找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前驅(qū) 節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn);
步驟B4,標(biāo)記該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)為處于相應(yīng)的范圍內(nèi), 并轉(zhuǎn)入步驟B2,繼續(xù)査找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后 續(xù)節(jié)點(diǎn);
步驟B5,結(jié)束所有步驟。
較佳的,在所述步驟B3中,若在步驟B2中査找的為目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié) 點(diǎn),則繼續(xù)査找該節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn);若在步驟B2中査找的為目標(biāo)節(jié)點(diǎn)的后繼 節(jié)點(diǎn),則繼續(xù)查找該節(jié)點(diǎn)的后繼節(jié)點(diǎn)。
較佳的,在所述步驟B4中,若在步驟B2中查找的為目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié) 點(diǎn),則繼續(xù)査找該節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn);若在步驟B2中査找的為目標(biāo)節(jié)點(diǎn)的后繼 節(jié)點(diǎn),則繼續(xù)查找該節(jié)點(diǎn)的后繼節(jié)點(diǎn)。
較佳的,所述步驟B2還包括下列步驟
步驟B21,當(dāng)該節(jié)點(diǎn)的X軸坐標(biāo)與目標(biāo)節(jié)點(diǎn)的X軸坐標(biāo)之差的絕對(duì)值小 于或等于所述預(yù)定距離時(shí),如果所述目標(biāo)節(jié)點(diǎn)的Y軸坐標(biāo)與該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的Y軸坐標(biāo)之差的絕對(duì)值小于或等于所述預(yù)定距離,則轉(zhuǎn) 入步驟B3;
否則,轉(zhuǎn)入步驟B2,繼續(xù)査找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前驅(qū) 節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn)。
較佳的,在所述步驟B21中,若在歩驟B2中査找的為目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié) 點(diǎn),則繼續(xù)査找該節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn);若在步驟B2中査找的為目標(biāo)節(jié)點(diǎn)的后繼 節(jié)點(diǎn),則繼續(xù)査找該節(jié)點(diǎn)的后繼節(jié)點(diǎn)。
較佳的,所述步驟B可以包括下列歩驟 步驟B1',以節(jié)點(diǎn)標(biāo)號(hào)為關(guān)鍵字,査找到一目標(biāo)節(jié)點(diǎn); 步驟B2',査找到位于該目標(biāo)節(jié)點(diǎn)兩邊的以節(jié)點(diǎn)的Y軸坐標(biāo)為序排列的 前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn),若該節(jié)點(diǎn)的Y軸坐標(biāo)與目標(biāo)節(jié)點(diǎn)的Y軸坐標(biāo)之差的絕 對(duì)值小于或等于一預(yù)定距離,則轉(zhuǎn)入步驟B3';否則,轉(zhuǎn)入步驟B5';
步驟B3',計(jì)算所述目標(biāo)節(jié)點(diǎn)與該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)之間 的歐氏距離;
如果計(jì)算結(jié)果小于或等于所述預(yù)定距離,則轉(zhuǎn)入步驟B4';
否則,轉(zhuǎn)入步驟B2',繼續(xù)査找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前
驅(qū)節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn);
步驟B4',標(biāo)記該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)為處于相應(yīng)的范圍內(nèi), 并轉(zhuǎn)入步驟B2',繼續(xù)査找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或 后續(xù)節(jié)點(diǎn);
步驟B5',結(jié)束所有步驟。
較佳的,所述步驟B2'還包括下列步驟
步驟B21',當(dāng)該節(jié)點(diǎn)的Y軸坐標(biāo)與目標(biāo)節(jié)點(diǎn)的Y軸坐標(biāo)之差的絕對(duì)值 小于或等于所述預(yù)定距離時(shí),如果所述目標(biāo)節(jié)點(diǎn)的X軸坐標(biāo)與該目標(biāo)節(jié)點(diǎn)的 前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的X軸坐標(biāo)之差的絕對(duì)值小于或等于所述預(yù)定距離,則 轉(zhuǎn)入步驟B3';
否則,轉(zhuǎn)入步驟B2',繼續(xù)查找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前 驅(qū)節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn)。
較佳的,在所述步驟B21'中,若在步驟B2'中査找的為目標(biāo)節(jié)點(diǎn)的前 驅(qū)節(jié)點(diǎn),則繼續(xù)査找該節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn);若在步驟B2'中查找的為目標(biāo)節(jié)點(diǎn)
的后繼節(jié)點(diǎn),則繼續(xù)査找該節(jié)點(diǎn)的后繼節(jié)點(diǎn)。
本發(fā)明提出的無(wú)線傳感器網(wǎng)絡(luò)模擬器及其節(jié)點(diǎn)事件處理方法具有以下有 益效果(1)不需要改變模擬器的架構(gòu),即在現(xiàn)有的基于離散事件驅(qū)動(dòng)的模 擬器中,只要對(duì)節(jié)點(diǎn)的結(jié)構(gòu)和初始化過(guò)程稍加擴(kuò)充,就可以實(shí)現(xiàn)本發(fā)明提出的 方法,因此具有普遍的適用性;(2)根據(jù)節(jié)點(diǎn)密度的不同,可以將模擬器中
的事件數(shù)減少一半左右,因此可以將模擬的運(yùn)行速度提高一倍左右;(3)減
少模擬器中的事件數(shù),不僅可以提高運(yùn)行速度,還可以降低內(nèi)存資源的消耗, 從而可以支持更大規(guī)模網(wǎng)絡(luò)的模擬實(shí)驗(yàn)。
以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述,但不作為對(duì)本發(fā)明的 限定。
圖1所示為本發(fā)明實(shí)施例中的無(wú)線傳感器模擬器的結(jié)構(gòu)圖2所示為本發(fā)明中第一實(shí)施例的流程圖3所示為本發(fā)明中節(jié)點(diǎn)的結(jié)構(gòu)定義;
圖4所示為本發(fā)明中多維有序鏈表的示意圖5所示為本發(fā)明中第二實(shí)施例的流程圖。
具體實(shí)施例方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí) 施例,對(duì)本發(fā)明的一種無(wú)線傳感器網(wǎng)絡(luò)模擬器及其節(jié)點(diǎn)事件處理方法進(jìn)行進(jìn)一 步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不 用于限定本發(fā)明。
本發(fā)明實(shí)施例中的無(wú)線傳感器網(wǎng)絡(luò)模擬器及其節(jié)點(diǎn)事件處理方法,是以面
向?qū)ο蟮?,基于離散事件驅(qū)動(dòng)的網(wǎng)絡(luò)環(huán)境模擬器NS-2為例而進(jìn)行說(shuō)明的,但 本發(fā)明的中的模擬器并不限于適用于NS-2模擬器,其可以適用于基于離散事 件驅(qū)動(dòng)的無(wú)線傳感器網(wǎng)絡(luò)模擬器,包括TOSSIM、 OPNET、 OMNET++等等無(wú) 線傳感器網(wǎng)絡(luò)模擬器。
NS-2是美國(guó)DARPA支持的項(xiàng)目VINT (the Virtual InterNet Tested)中的 基礎(chǔ)和核心部分。由USI/ISI, Xerox PARC, LBNL和UC Berkeley這些美國(guó)大
學(xué)和實(shí)驗(yàn)室合作研究開(kāi)發(fā),其目的在于建立一個(gè)網(wǎng)絡(luò)仿真平臺(tái),為網(wǎng)絡(luò)研究人 員提供一系列的仿真工具,從而實(shí)現(xiàn)新的網(wǎng)絡(luò)協(xié)議的設(shè)計(jì)和實(shí)現(xiàn)。
NS-2是面向?qū)ο蟮模陔x散事件驅(qū)動(dòng)的網(wǎng)絡(luò)環(huán)境模擬器。它實(shí)現(xiàn)了多
種網(wǎng)絡(luò)協(xié)議的模擬,如網(wǎng)絡(luò)協(xié)議TCP、 UDP,流量源行為,如FTP、 Telnet、 Web、 CBR、 VBR;實(shí)現(xiàn)了 DropTail、 RED、 CBQ等幾種路由器隊(duì)列管理機(jī) 制以及Dijkstra,動(dòng)態(tài)路由、靜態(tài)路由、組播路由等路由算法。此外,NS-2還支 持組播協(xié)議SRM及部分MAC層協(xié)議。
在NS-2模擬過(guò)程中,整個(gè)模擬過(guò)程提供了一系列對(duì)模擬進(jìn)行配置的接口 , 其中包括選擇事件調(diào)度器(event scheduler)。
事件調(diào)度器是模擬器的調(diào)度中心,用于處理分組(packet)的延遲和充當(dāng) 定時(shí)器,從所有事件中選擇發(fā)生時(shí)刻最早的事件執(zhí)行,把該事件執(zhí)行完畢,然 后從剩余的所有事件中選擇發(fā)生時(shí)刻最早的事件執(zhí)行,如此反復(fù)執(zhí)行。
進(jìn)行模擬通常要首先創(chuàng)建一個(gè)Simulator類的實(shí)例對(duì)象,并調(diào)用該對(duì)象的 一系列方法來(lái)創(chuàng)建節(jié)點(diǎn)(Node)、拓?fù)?Topology)等模擬所必需的對(duì)象,形 成模擬器。
如圖1所示,為本發(fā)明實(shí)施例中的無(wú)線傳感器模擬器的結(jié)構(gòu)圖。無(wú)線傳感 器模擬器10,包括節(jié)點(diǎn)(Node)模塊11,鏈路(Link)模塊12、分組(Packet) 模塊13、代理(Agent)模塊14、流量發(fā)生器(traffic generator) 15和應(yīng)用模 擬器(simulated application) 16。
節(jié)點(diǎn)模塊11用于表示無(wú)線傳感器的端節(jié)點(diǎn)和路由器,包括地址分類器 111、端口分類器112、多播分類器113和復(fù)制器114等模擬組件。
鏈路模塊12用于連接網(wǎng)絡(luò)節(jié)點(diǎn),所有的鏈路都是以隊(duì)列的形式來(lái)管理分 組的到達(dá)、離開(kāi)和丟棄。包括DelayLink121、 Queues 122和TTLChcker 123等 連接器(Connector)。其中,DelayLink構(gòu)造鏈路帶寬和延遲特征;Queues 構(gòu)造和模擬與該鏈路相連的路由器的輸出緩沖;TTLChcker對(duì)該鏈路的數(shù)據(jù)包 的TTL字段減1操作,并丟棄TTL值為0的數(shù)據(jù)包。
分組模塊13是對(duì)象間交互的基本單元。由一系列分組頭131和一個(gè)可選 的數(shù)據(jù)空間132組成。分組頭的結(jié)構(gòu)在Simulator對(duì)象創(chuàng)建時(shí)就被初始化了, 同時(shí),每個(gè)分組頭131相對(duì)于分組的起始地址的偏移量也被記錄下來(lái),提供給 用戶來(lái)存取各個(gè)頭部所包含的信息。
代理模塊14用于代表了網(wǎng)絡(luò)層分組的起點(diǎn)和終點(diǎn),并被用于實(shí)現(xiàn)如TCP
和UDP等網(wǎng)絡(luò)協(xié)議。
流量發(fā)生器15、應(yīng)用模擬器16是構(gòu)建在運(yùn)輸層代理之上,其中,流量發(fā)
生器15用于模擬應(yīng)用程序產(chǎn)生網(wǎng)絡(luò)通信量,包括以下四類(1)
EXPOO—Traffic、 (2) POO—Traffic、 (3) CBR—Traffic, (4) TafficTrace, 它們一般用在UDP代理之上;應(yīng)用模擬器16有FTP, Telnet, —般用在TCP 代理之上。
本發(fā)明的核心思想是將模擬器中的所有節(jié)點(diǎn)組織成一個(gè)集中式的列表,通 過(guò)該列表可以獲取任何一個(gè)節(jié)點(diǎn)的信息。該列表的結(jié)構(gòu)決定了操作節(jié)點(diǎn)的方 式,利用這種集中式的列表可以大幅度提高傳感器網(wǎng)絡(luò)模擬器的執(zhí)行規(guī)模和速 度。為此,本發(fā)明的實(shí)施例中運(yùn)用了一種多維有序鏈表,或者有序堆結(jié)構(gòu),或 者有序二叉樹(shù),或者B+樹(shù),或者HASH表樹(shù)等結(jié)構(gòu)的節(jié)點(diǎn)組織結(jié)構(gòu),該結(jié)構(gòu) 以標(biāo)號(hào)(ID) 、 X軸坐標(biāo)和Y軸坐標(biāo)為關(guān)鍵字將節(jié)點(diǎn)組織成三個(gè)有序鏈表。
本發(fā)明實(shí)施例中的無(wú)線傳感器模擬器IO,所述節(jié)點(diǎn)模塊ll中,還包括鏈 表模塊115,用于在模擬器運(yùn)行時(shí),在節(jié)點(diǎn)的事件處理程序中,通過(guò)鏈表數(shù)據(jù) 結(jié)構(gòu),在鏈表中査找節(jié)點(diǎn),修改和更新節(jié)點(diǎn)的狀態(tài),并對(duì)其相鄰節(jié)點(diǎn)進(jìn)行操作。
本發(fā)明實(shí)施例中的無(wú)線傳感器模擬器10,采用以節(jié)點(diǎn)標(biāo)號(hào)為關(guān)鍵字的快 速査找算法在有序鏈表中査找到該節(jié)點(diǎn),然后通過(guò)該節(jié)點(diǎn)所包含的指針,直接 獲得與該節(jié)點(diǎn)相連或相鄰的節(jié)點(diǎn),并對(duì)這些節(jié)點(diǎn)進(jìn)行操作,而不需要產(chǎn)生新的 事件和再次檢索有序鏈表,從而減少了模擬器中的事件數(shù)量,提高了模擬器的 規(guī)模和運(yùn)行速度。
所述快速査找算法根據(jù)組織節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)的不同,可以采用不同的快速 査找算法,如兩分査找算法(兩分法)、二叉排序樹(shù)法、B+樹(shù)法、HASH等 算法。
本發(fā)明實(shí)施例的鏈表模塊115,在設(shè)置節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)中,除了包含表示 節(jié)點(diǎn)狀態(tài)和相關(guān)信息(如節(jié)點(diǎn)位置、物理層協(xié)議、數(shù)據(jù)鏈路層協(xié)議、網(wǎng)絡(luò)層協(xié) 議、傳輸層協(xié)議和應(yīng)用層協(xié)議)的字段外,還包括三組指針,其中,第一組指 針為序號(hào)指針,用于指向該節(jié)點(diǎn)在以節(jié)點(diǎn)標(biāo)號(hào)(ID)為序排列形成的鏈表中的 前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn);第二組指針為第一坐標(biāo)指針,用于指向該節(jié)點(diǎn)在以節(jié)點(diǎn) 的X軸坐標(biāo)為序排列形成的鏈表中的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn);第三組指針為第二坐標(biāo)指針,用于指向該節(jié)點(diǎn)在以節(jié)點(diǎn)的Y軸坐標(biāo)為序排列形成的鏈表中的 前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)。通過(guò)節(jié)點(diǎn)的X軸坐標(biāo)和Y軸坐標(biāo),可以確定節(jié)點(diǎn)在二 維平面中的具體位置,因此,通過(guò)不同節(jié)點(diǎn)的X軸坐標(biāo)和Y軸坐標(biāo),可以確 定節(jié)點(diǎn)間的距離,將此距離同無(wú)線廣播的距離進(jìn)行比較,即可確定一節(jié)點(diǎn)是不 是目標(biāo)節(jié)點(diǎn)的相鄰節(jié)點(diǎn)。其中,無(wú)線信道的廣播距離,即無(wú)線廣播的距離,一 般設(shè)置在無(wú)線信道模塊中。
所述節(jié)點(diǎn)模塊ll,還包括初始化模塊116,用于在模擬器的初始化階段,
先創(chuàng)建所有節(jié)點(diǎn)實(shí)例,而后根據(jù)實(shí)驗(yàn)場(chǎng)景的配置,依次設(shè)置各節(jié)點(diǎn)的標(biāo)號(hào)和位
置信息,最后將節(jié)點(diǎn)分別以節(jié)點(diǎn)的標(biāo)號(hào)、X軸坐標(biāo)和Y軸坐標(biāo)為關(guān)鍵字按序 插入到鏈表模塊的三個(gè)鏈表中。
較佳地,所述鏈表模塊115包括查找子模塊1151,用于根據(jù)鏈表數(shù)據(jù)結(jié) 構(gòu),采用以節(jié)點(diǎn)標(biāo)號(hào)為關(guān)鍵字的快速査找算法在鏈表中查找節(jié)點(diǎn),然后通過(guò)該 節(jié)點(diǎn)所包含的指針,直接獲得與該節(jié)點(diǎn)相連或相鄰的節(jié)點(diǎn)。
本發(fā)明的無(wú)線傳感器模擬器10中,初始化模塊116在模擬器的初始化階 段,先創(chuàng)建所有節(jié)點(diǎn)實(shí)例,然后根據(jù)實(shí)驗(yàn)場(chǎng)景的配置,依次設(shè)置各節(jié)點(diǎn)的標(biāo)號(hào) (ID)和位置(坐標(biāo))等信息,最后將節(jié)點(diǎn)分別以節(jié)點(diǎn)的標(biāo)號(hào)(ID) 、 X軸坐 標(biāo)和Y軸坐標(biāo)為關(guān)鍵字按序插入到鏈表模塊的三個(gè)鏈表中。這樣,初始化完 成后的節(jié)點(diǎn)被組織成一個(gè)多維的有序鏈表,該多維有序鏈表將模擬器中的所有 節(jié)點(diǎn)分別以標(biāo)號(hào)(ID) 、 X軸坐標(biāo)和Y軸坐標(biāo)為序進(jìn)行了排列。
當(dāng)模擬器運(yùn)行時(shí),在節(jié)點(diǎn)的事件的處理程序中,鏈表模塊115中的査找子 模塊1151通過(guò)鏈表不僅可以修改和更新本節(jié)點(diǎn)的狀態(tài),還可以實(shí)現(xiàn)對(duì)其相鄰 節(jié)點(diǎn)的操作。首先,采用以節(jié)點(diǎn)標(biāo)號(hào)為關(guān)鍵字的快速查找算法在鏈表中查找到 該節(jié)點(diǎn),然后,通過(guò)該節(jié)點(diǎn)所包含的指針,直接獲得與該節(jié)點(diǎn)其相連或相鄰節(jié) 點(diǎn),鏈表模塊115對(duì)這些節(jié)點(diǎn)進(jìn)行操作,而不需要產(chǎn)生新的事件和再次檢索有 序鏈表,從而減少了模擬器中的事件數(shù)量,提高了模擬器的規(guī)模和運(yùn)行速度。
下面以一實(shí)施例詳細(xì)說(shuō)明本發(fā)明的無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理 方法,在該實(shí)施例中,所進(jìn)行的操作為更新所有距節(jié)點(diǎn)i的傳播距離在L以內(nèi) 的節(jié)點(diǎn)的狀態(tài),如圖2所示,本發(fā)明實(shí)施例的無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件 處理方法,包括以下步驟
步驟S110,對(duì)一傳感器網(wǎng)絡(luò)模擬器進(jìn)行初始化。在模擬器的初始化階段,
首先,創(chuàng)建所有節(jié)點(diǎn)實(shí)例,而后,根據(jù)實(shí)驗(yàn)場(chǎng)景的配置,依次設(shè)置各節(jié)點(diǎn)的標(biāo) 號(hào)和位置信息,最后,將節(jié)點(diǎn)分別以節(jié)點(diǎn)的標(biāo)號(hào)、X軸坐標(biāo)和Y軸坐標(biāo)為關(guān) 鍵字按序插入到鏈表模塊的三個(gè)鏈表中。
在初始化的過(guò)程中,依次創(chuàng)建各個(gè)節(jié)點(diǎn),并根據(jù)實(shí)驗(yàn)場(chǎng)景的配置,在設(shè)置 完節(jié)點(diǎn)的標(biāo)號(hào)(ID)和位置(坐標(biāo))等信息后,將節(jié)點(diǎn)分別按照標(biāo)號(hào)(ID)、
X軸坐標(biāo)和Y軸坐標(biāo)的順序插入到三個(gè)鏈表中。其中,從節(jié)點(diǎn)的組織結(jié)構(gòu)來(lái)
看,每個(gè)節(jié)點(diǎn)包含三組指針。
如圖3所示,此為本發(fā)明中節(jié)點(diǎn)的結(jié)構(gòu)定義,其中,第一組指針為序號(hào)指 針,用于指向該節(jié)點(diǎn)在以節(jié)點(diǎn)標(biāo)號(hào)(ID)為序排列形成的鏈表中的前驅(qū)節(jié)點(diǎn)和 后繼節(jié)點(diǎn),表示為preNodeByID和nextNodeByID;
第二組指針為第一坐標(biāo)指針,用于指向該節(jié)點(diǎn)在以節(jié)點(diǎn)的X軸坐標(biāo)為序 排列形成的鏈表中的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn),表示為preNodeByX和 nextNodeByX^
第三組指針為第二坐標(biāo)指針,用于指向該節(jié)點(diǎn)在以節(jié)點(diǎn)的Y軸坐標(biāo)為序 排列形成的鏈表中的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn),表示為preNodeByY和 nextNodeByY。
這三組指針?lè)謩e表示了該節(jié)點(diǎn)在各個(gè)有序鏈表中的位置。
當(dāng)各個(gè)節(jié)點(diǎn)實(shí)例被依次創(chuàng)建,初始化完成之后,就形成了如圖4中所示那 樣的多維有序鏈表的結(jié)構(gòu)。
作為一種可實(shí)施的方式,圖4所示的節(jié)點(diǎn)結(jié)構(gòu)比較特殊,N個(gè)節(jié)點(diǎn)正好 按節(jié)點(diǎn)的標(biāo)號(hào)順序依次排列,所以每個(gè)節(jié)點(diǎn)中的三組指針具有相同的值。在一 般的情況下,這三組指針不具有這樣的規(guī)則性。
步驟S120,在模擬器運(yùn)行時(shí),在節(jié)點(diǎn)的事件處理程序中,根據(jù)多維有序 鏈表,在有序鏈表中查找節(jié)點(diǎn),修改和更新節(jié)點(diǎn)的狀態(tài),并對(duì)其相鄰節(jié)點(diǎn)的操 作。
步驟S120具體包括下列步驟
步驟S121,在模擬器運(yùn)行時(shí),在節(jié)點(diǎn)的事件處理程序中,根據(jù)多維有序 鏈表,以節(jié)點(diǎn)標(biāo)號(hào)(ID)為關(guān)鍵字,采用快速査找算法在多維有序鏈表中査找 到目標(biāo)節(jié)點(diǎn)i;
步驟S122,沿著節(jié)點(diǎn)i中包含的preNodeByX指針和nextNodeByX指針,
查找到位于節(jié)點(diǎn)i兩邊的節(jié)點(diǎn)i的以節(jié)點(diǎn)的X軸坐標(biāo)為序排列形成的鏈表中的 前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j;
步驟S123,如果節(jié)點(diǎn)i的X軸坐標(biāo)與該節(jié)點(diǎn)i的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j的 X軸坐標(biāo)之差的絕對(duì)值小于或等于節(jié)點(diǎn)i的傳播距離L,則轉(zhuǎn)入步驟S124;否
則,轉(zhuǎn)入步驟S127;
步驟S124,如果節(jié)點(diǎn)i的Y軸坐標(biāo)與該節(jié)i的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j的Y 軸坐標(biāo)之差的絕對(duì)值小于或等于節(jié)點(diǎn)i的傳播距離L,則轉(zhuǎn)入步驟S125;否則, 轉(zhuǎn)入步驟S122,即繼續(xù)沿著preNodeByX指針和nextNodeByX指針查找節(jié)點(diǎn) j的前驅(qū)節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn),其中,若節(jié)點(diǎn)j為節(jié)點(diǎn)i的前驅(qū)節(jié)點(diǎn),則繼續(xù)査找節(jié) 點(diǎn)j的前驅(qū)節(jié)點(diǎn),若節(jié)點(diǎn)j為節(jié)點(diǎn)i的后繼節(jié)點(diǎn),則繼續(xù)査找節(jié)點(diǎn)j的后繼節(jié)點(diǎn);
步驟S125,計(jì)算節(jié)點(diǎn)i與該節(jié)i的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j之間的歐氏距離;
如果計(jì)算結(jié)果小于或等于節(jié)點(diǎn)i的傳播距離L,則轉(zhuǎn)入步驟S126;否則,轉(zhuǎn)入 步驟S122,即繼續(xù)沿著preNodeByX指針和nextNodeByX指針查找節(jié)點(diǎn)j的 前驅(qū)節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn),其中,若節(jié)點(diǎn)j為節(jié)點(diǎn)i的前驅(qū)節(jié)點(diǎn),則繼續(xù)査找節(jié)點(diǎn) j的前驅(qū)節(jié)點(diǎn),若節(jié)點(diǎn)j為節(jié)點(diǎn)i的后繼節(jié)點(diǎn),則繼續(xù)査找節(jié)點(diǎn)j的后繼節(jié)點(diǎn);
其中,歐氏距離為(i: (Xi-Yi) 2) 1/2,即兩項(xiàng)間的差是每個(gè)變量值差的 平方和再平方根,目的是計(jì)算其間的整體距離即不相似性。
步驟S126,更新該節(jié)i的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j的狀態(tài),并轉(zhuǎn)入步驟S122, 即繼續(xù)沿著preNodeByX指針和nextNodeByX指針査找節(jié)點(diǎn)j的前驅(qū)節(jié)點(diǎn)或后 續(xù)節(jié)點(diǎn),其中,若節(jié)點(diǎn)j為節(jié)點(diǎn)i的前驅(qū)節(jié)點(diǎn),則繼續(xù)査找節(jié)點(diǎn)j的前驅(qū)節(jié)點(diǎn), 若節(jié)點(diǎn)j為節(jié)點(diǎn)i的后繼節(jié)點(diǎn),則繼續(xù)査找節(jié)點(diǎn)j的后繼節(jié)點(diǎn)。
步驟S127,結(jié)束更新所有距節(jié)點(diǎn)i的傳播距離在L以內(nèi)的節(jié)點(diǎn)的狀態(tài)的 事件處理過(guò)程。
作為另一種可實(shí)施的方式,在本發(fā)明實(shí)施例中,步驟S122也可以為沿 著節(jié)點(diǎn)i中包含的preNodeByY指針和nextNodeByY指針,查找到位于節(jié)點(diǎn)i 兩邊的節(jié)點(diǎn)i的以節(jié)點(diǎn)的Y軸坐標(biāo)為序排列形成的鏈表中的前驅(qū)節(jié)點(diǎn)或后繼節(jié) 點(diǎn)j。
此時(shí),步驟S123和步驟S124也需要進(jìn)行相應(yīng)的修改。 艮口,在步驟S123中,先計(jì)算節(jié)點(diǎn)i的Y軸坐標(biāo)與該節(jié)i的前驅(qū)節(jié)點(diǎn)或后 繼節(jié)點(diǎn)j的Y軸坐標(biāo)之差的絕對(duì)值,若該絕對(duì)值小于或等于節(jié)點(diǎn)i的傳播距離 L,則轉(zhuǎn)入步驟S124,否則,轉(zhuǎn)入歩驟S127。
在步驟S124中,計(jì)算節(jié)點(diǎn)i的X軸坐標(biāo)與該節(jié)i的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j 的X軸坐標(biāo)之差的絕對(duì)值,若該絕對(duì)值小于或等于節(jié)點(diǎn)i的傳播距離L,則轉(zhuǎn) 入步驟S125,否則,轉(zhuǎn)入步驟S122。
從所述步驟中可以看出,在模擬器的運(yùn)行階段,通過(guò)已經(jīng)建立的多維有序 鏈表,不僅可以修改本節(jié)點(diǎn)的狀態(tài),還可以實(shí)現(xiàn)對(duì)其相鄰節(jié)點(diǎn)的操作。就本實(shí) 施例而言,不用計(jì)算節(jié)點(diǎn)i到所有其它節(jié)點(diǎn)間的距離,就可以快速査找到位于 節(jié)點(diǎn)i的傳播范圍L內(nèi)的所有節(jié)點(diǎn),并更新這些節(jié)點(diǎn)的狀態(tài),避免了產(chǎn)生新的
事件,從而提高了模擬器的規(guī)模和執(zhí)行速度。
作為本發(fā)明無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法的又一種實(shí)施方式,
如圖5所示,所進(jìn)行的操作與本發(fā)明的第一實(shí)施例相同,即更新所有距節(jié)點(diǎn)i 的傳播距離在L以內(nèi)的節(jié)點(diǎn)的狀態(tài),只是在執(zhí)行步驟中存在差別,即在模擬器 運(yùn)行時(shí),在節(jié)點(diǎn)的事件處理程序中,根據(jù)多維有序鏈表,在有序鏈表中查找節(jié) 點(diǎn),修改和更新節(jié)點(diǎn)的狀態(tài),并對(duì)其相鄰節(jié)點(diǎn)的操作的過(guò)程中,具體包括下列 步驟
步驟S221,以節(jié)點(diǎn)標(biāo)號(hào)(ID)為關(guān)鍵字,采用快速査找算法在多維有序
鏈表中查找到目標(biāo)節(jié)點(diǎn)i;
步驟S222,沿著節(jié)點(diǎn)i中包含的preNodeByX指針和nextNodeByX指針,
查找到位于節(jié)點(diǎn)i兩邊的節(jié)點(diǎn)i的"以節(jié)點(diǎn)的X軸坐標(biāo)為序排列形成的鏈表" 中的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j;
步驟S223,如果節(jié)點(diǎn)i的X軸坐標(biāo)與該節(jié)點(diǎn)i的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j的 X軸坐標(biāo)之差的絕對(duì)值小于或等于節(jié)點(diǎn)i的傳播距離L,則轉(zhuǎn)入步驟S224;否 則,轉(zhuǎn)入步驟S226;
步驟S224,計(jì)算節(jié)點(diǎn)i與該節(jié)i的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j之間的歐氏距離, 如果計(jì)算結(jié)果小于或等于節(jié)點(diǎn)i的傳播距離L,則轉(zhuǎn)入步驟S225;否則,轉(zhuǎn)入 步驟S222,即繼續(xù)沿著preNodeByX指針和nextNodeByX指針査找節(jié)點(diǎn)j的 前驅(qū)節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn),其中,若節(jié)點(diǎn)j為節(jié)點(diǎn)i的前驅(qū)節(jié)點(diǎn),則繼續(xù)查找節(jié)點(diǎn) j的前驅(qū)節(jié)點(diǎn),若節(jié)點(diǎn)j為節(jié)點(diǎn)i的后繼節(jié)點(diǎn),則繼續(xù)査找節(jié)點(diǎn)j的后繼節(jié)點(diǎn);
步驟S225,更新該節(jié)i的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j的狀態(tài),并轉(zhuǎn)入步驟S222, 即繼續(xù)沿著preNodeByX指針和nextNodeByX指針査找節(jié)點(diǎn)j的前驅(qū)節(jié)點(diǎn)或后
續(xù)節(jié)點(diǎn),其中,若節(jié)點(diǎn)j為節(jié)點(diǎn)i的前驅(qū)節(jié)點(diǎn),則繼續(xù)査找節(jié)點(diǎn)j的前驅(qū)節(jié)點(diǎn), 若節(jié)點(diǎn)j為節(jié)點(diǎn)i的后繼節(jié)點(diǎn),則繼續(xù)査找節(jié)點(diǎn)j的后繼節(jié)點(diǎn)。
步驟S226,結(jié)束更新所有距節(jié)點(diǎn)i的傳播距離在L以內(nèi)的節(jié)點(diǎn)的狀態(tài)的 事件處理過(guò)程。
作為本實(shí)施例的另一種可實(shí)施的方式,在本實(shí)施例中,歩驟S222也可為 沿著節(jié)點(diǎn)i中包含的preNodeByY指針和nextNodeByY指針,査找到位于節(jié)點(diǎn) i兩邊的節(jié)點(diǎn)i的以節(jié)點(diǎn)的Y軸坐標(biāo)為序排列形成的鏈表中的前驅(qū)節(jié)點(diǎn)或后繼 節(jié)點(diǎn)j。
此時(shí),步驟S223也需要進(jìn)行相應(yīng)的修改,即在步驟S223中,計(jì)算節(jié)點(diǎn)i 的Y軸坐標(biāo)與該節(jié)i的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)j的Y軸坐標(biāo)之差的絕對(duì)值,若該 絕對(duì)值小于或等于節(jié)點(diǎn)i的傳播距離L,則轉(zhuǎn)入步驟S224,否則,轉(zhuǎn)入步驟 S226。
本發(fā)明的無(wú)線傳感器網(wǎng)絡(luò)模擬器及其節(jié)點(diǎn)事件處理方法,不需要改變模擬 器的架構(gòu),在現(xiàn)有的基于離散事件驅(qū)動(dòng)的模擬器中,只要對(duì)節(jié)點(diǎn)的結(jié)構(gòu)和初始 化過(guò)程稍加擴(kuò)充,就可以實(shí)現(xiàn)本發(fā)明提出的方法,因此具有普遍的適用性;同 時(shí)根據(jù)節(jié)點(diǎn)密度的不同,可以將模擬器中的事件數(shù)減少一半左右,因此可以將 模擬的運(yùn)行速度提高一倍左右;而且,其減少模擬器中的事件數(shù),不僅可以提 高運(yùn)行速度,還可以降低內(nèi)存資源的消耗,從而可以支持更大規(guī)模網(wǎng)絡(luò)的模擬 實(shí)驗(yàn)。
以上對(duì)本發(fā)明的目的、技術(shù)方案以及有益效果進(jìn)行了詳細(xì)的說(shuō)明,所應(yīng)理 解的是,上述內(nèi)容僅為本發(fā)明的具體實(shí)施例而已,并不用于限制本發(fā)明的保護(hù) 范圍。本發(fā)明保護(hù)范圍應(yīng)當(dāng)以權(quán)利要求書(shū)所述為限定,凡在本發(fā)明的精神與原 則之內(nèi),對(duì)本發(fā)明權(quán)利要求技術(shù)方案所做的任何修改、等同替換以及改進(jìn)等, 均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種無(wú)線傳感器網(wǎng)絡(luò)模擬器,包括節(jié)點(diǎn)模塊,其特征在于,所述節(jié)點(diǎn)模塊包括鏈表模塊,用于在模擬器運(yùn)行時(shí),在節(jié)點(diǎn)的事件處理程序中,根據(jù)鏈表數(shù)據(jù)結(jié)構(gòu),在鏈表中查找節(jié)點(diǎn),修改和更新節(jié)點(diǎn)的狀態(tài),并對(duì)其相鄰節(jié)點(diǎn)操作。
2、 根據(jù)權(quán)利要求1所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器,其特征在于,所述鏈 表數(shù)據(jù)結(jié)構(gòu)為多維有序鏈表、有序堆結(jié)構(gòu)鏈表、有序二叉樹(shù)鏈表、B+樹(shù)鏈表、 HASH表鏈表中的一種或者一種以上的組合。
3、 根據(jù)權(quán)利要求2所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器,其特征在于,所述節(jié) 點(diǎn)模塊,還包括初始化模塊,用于在模擬器的初始化階段,先創(chuàng)建所有節(jié)點(diǎn)實(shí) 例,然后根據(jù)實(shí)驗(yàn)場(chǎng)景的配置,依次設(shè)置各節(jié)點(diǎn)的標(biāo)號(hào)和位置信息,最后將節(jié) 點(diǎn)分別以多個(gè)節(jié)點(diǎn)的關(guān)鍵字按序插入到鏈表模塊的多個(gè)鏈表中。
4、 根據(jù)權(quán)利要求3所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器,其特征在于,所述節(jié) 點(diǎn)的關(guān)鍵字是指以節(jié)點(diǎn)的標(biāo)號(hào)、X軸坐標(biāo)和Y軸坐標(biāo)為關(guān)鍵字。
5、 根據(jù)權(quán)利要求1至4任一項(xiàng)所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器,其特征在 于,所述鏈表模塊包括查找子模塊,用于根據(jù)鏈表數(shù)據(jù)結(jié)構(gòu),采用以節(jié)點(diǎn)標(biāo)號(hào) 為關(guān)鍵字的快速査找方法在數(shù)據(jù)結(jié)構(gòu)中査找節(jié)點(diǎn),然后通過(guò)該節(jié)點(diǎn)所包含的指 針,并直接獲得與該節(jié)點(diǎn)相連或相鄰的節(jié)點(diǎn)。
6、 根據(jù)權(quán)利要求5所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器,其特征在于,所述快 速査找方法依照所述鏈表數(shù)據(jù)結(jié)構(gòu),分別采用兩分査找算法、二叉排序樹(shù)法、 B+樹(shù)法、HASH算法。
7、 根據(jù)權(quán)利要求4所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器,其特征在于,所述鏈 表數(shù)據(jù)結(jié)構(gòu)包括三組指針,其中,第一組指針為序號(hào)指針,用于指向該節(jié)點(diǎn)在 以節(jié)點(diǎn)標(biāo)號(hào)為序排列形成的鏈表中的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn);第二組指針為第一 坐標(biāo)指針,用于指向該節(jié)點(diǎn)在以節(jié)點(diǎn)的X軸坐標(biāo)為序排列形成的鏈表中的前 驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn);第三組指針為第二坐標(biāo)指針,用于指向該節(jié)點(diǎn)在以節(jié)點(diǎn)的 Y軸坐標(biāo)為序排列形成的鏈表中的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)。
8、 一種無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法,其特征在于,包括下 列步驟 歩驟A,在模擬器的初始化階段,先創(chuàng)建所有節(jié)點(diǎn)實(shí)例,然后根據(jù)實(shí)驗(yàn)場(chǎng) 景的配置,依次設(shè)置各節(jié)點(diǎn)的標(biāo)號(hào)和位置信息,最后將節(jié)點(diǎn)分別以多個(gè)節(jié)點(diǎn)的關(guān)鍵字按序插入到多個(gè)鏈表中;步驟B,在模擬器運(yùn)行時(shí),在節(jié)點(diǎn)的事件處理程序中,根據(jù)鏈表數(shù)據(jù)結(jié)構(gòu), 在鏈表中查找節(jié)點(diǎn),修改和更新節(jié)點(diǎn)的狀態(tài),并對(duì)其相鄰節(jié)點(diǎn)操作。
9、 根據(jù)權(quán)利要求8所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法,其 特征在于,所述步驟B包括下列步驟步驟B1,以節(jié)點(diǎn)標(biāo)號(hào)為關(guān)鍵字,查找到一目標(biāo)節(jié)點(diǎn);步驟B2,査找到位于該目標(biāo)節(jié)點(diǎn)兩邊的以節(jié)點(diǎn)的X軸坐標(biāo)為序排列的前 驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn),若該節(jié)點(diǎn)的X軸坐標(biāo)與目標(biāo)節(jié)點(diǎn)的X軸坐標(biāo)之差的絕對(duì) 值小于或等于一預(yù)定距離,則轉(zhuǎn)入步驟B3;否則,轉(zhuǎn)入步驟B5;步驟B3,計(jì)算所述目標(biāo)節(jié)點(diǎn)與該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)之間的 歐氏距離;如果計(jì)算結(jié)果小于或等于所述預(yù)定距離,則轉(zhuǎn)入步驟B4; 否則,轉(zhuǎn)入步驟B2,繼續(xù)査找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前驅(qū) 節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn);步驟B4,標(biāo)記該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)為處于相應(yīng)的范圍內(nèi), 并轉(zhuǎn)入步驟B2,繼續(xù)査找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后 續(xù)節(jié)點(diǎn);步驟B5,結(jié)束所有步驟。
10、 根據(jù)權(quán)利要求9所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法,其 特征在于,在所述步驟B3中若在步驟B2中査找的為目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),則繼續(xù)査找該節(jié)點(diǎn)的前驅(qū) 節(jié)點(diǎn);若在步驟B2中査找的為目標(biāo)節(jié)點(diǎn)的后繼節(jié)點(diǎn),則繼續(xù)査找該節(jié)點(diǎn)的后 繼節(jié)點(diǎn)。
11、 根據(jù)權(quán)利要求9所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法,其 特征在于,在所述步驟B4中若在步驟B2中査找的為目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),則繼續(xù)查找該節(jié)點(diǎn)的前驅(qū) 節(jié)點(diǎn);若在步驟B2中査找的為目標(biāo)節(jié)點(diǎn)的后繼節(jié)點(diǎn),則繼續(xù)査找該節(jié)點(diǎn)的后 繼節(jié)點(diǎn)。
12、 根據(jù)權(quán)利要求9所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法,其 特征在于,所述步驟B2還包括下列歩驟步驟B21,當(dāng)該節(jié)點(diǎn)的X軸坐標(biāo)與目標(biāo)節(jié)點(diǎn)的X軸坐標(biāo)之差的絕對(duì)值小 于或等于所述預(yù)定距離時(shí),如果所述目標(biāo)節(jié)點(diǎn)的Y軸坐標(biāo)與該目標(biāo)節(jié)點(diǎn)的前 驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的Y軸坐標(biāo)之差的絕對(duì)值小于或等于所述預(yù)定距離,則轉(zhuǎn) 入步驟B3;否則,轉(zhuǎn)入步驟B2,繼續(xù)査找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前驅(qū) 節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn)。
13、 根據(jù)權(quán)利要求12所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法, 其特征在于,在所述步驟B21中若在步驟B2中査找的為目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),則繼續(xù)查找該節(jié)點(diǎn)的前驅(qū) 節(jié)點(diǎn);若在步驟B2中査找的為目標(biāo)節(jié)點(diǎn)的后繼節(jié)點(diǎn),則繼續(xù)查找該節(jié)點(diǎn)的后 繼節(jié)點(diǎn)。
14、 根據(jù)權(quán)利要求8所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法,其 特征在于,所述步驟B包括下列步驟步驟B1',以節(jié)點(diǎn)標(biāo)號(hào)為關(guān)鍵字,査找到一目標(biāo)節(jié)點(diǎn); 步驟B2',査找到位于該目標(biāo)節(jié)點(diǎn)兩邊的以節(jié)點(diǎn)的Y軸坐標(biāo)為序排列的 前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn),若該節(jié)點(diǎn)的Y軸坐標(biāo)與目標(biāo)節(jié)點(diǎn)的Y軸坐標(biāo)之差的絕 對(duì)值小于或等于一預(yù)定距離,則轉(zhuǎn)入步驟B3,;否則,轉(zhuǎn)入步驟B5';步驟B3',計(jì)算所述目標(biāo)節(jié)點(diǎn)與該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)之間 的歐氏距離;如果計(jì)算結(jié)果小于或等于所述預(yù)定距離,則轉(zhuǎn)入步驟B4';否則,轉(zhuǎn)入步驟B2',繼續(xù)查找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前 驅(qū)節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn);步驟B4',標(biāo)記該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)為處于相應(yīng)的范圍內(nèi), 并轉(zhuǎn)入步驟B2',繼續(xù)查找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或 后續(xù)節(jié)點(diǎn);步驟B5',結(jié)束所有步驟。
15、 根據(jù)權(quán)利要求14所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法, 其特征在于,所述步驟B2'還包括下列步驟 步驟B21',當(dāng)該節(jié)點(diǎn)的Y軸坐標(biāo)與目標(biāo)節(jié)點(diǎn)的Y軸坐標(biāo)之差的絕對(duì)值 小于或等于所述預(yù)定距離時(shí),如果所述目標(biāo)節(jié)點(diǎn)的X軸坐標(biāo)與該目標(biāo)節(jié)點(diǎn)的 前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的X軸坐標(biāo)之差的絕對(duì)值小于或等于所述預(yù)定距離,則 轉(zhuǎn)入歩驟B3';否則,轉(zhuǎn)入步驟B2',繼續(xù)査找該目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或后繼節(jié)點(diǎn)的前 驅(qū)節(jié)點(diǎn)或后續(xù)節(jié)點(diǎn)。
16、根據(jù)權(quán)利要求15所述的無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法, 其特征在于,在所述步驟B21'中若在步驟B2'中査找的為目標(biāo)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),則繼續(xù)査找該節(jié)點(diǎn)的前 驅(qū)節(jié)點(diǎn);若在步驟B2'中查找的為目標(biāo)節(jié)點(diǎn)的后繼節(jié)點(diǎn),則繼續(xù)查找該節(jié)點(diǎn) 的后繼節(jié)點(diǎn)。
全文摘要
本發(fā)明涉及一種無(wú)線傳感器網(wǎng)絡(luò)模擬器及其節(jié)點(diǎn)事件處理方法,所述無(wú)線傳感器網(wǎng)絡(luò)模擬器,包括節(jié)點(diǎn)模塊,所述節(jié)點(diǎn)模塊包括鏈表模塊,用于在模擬器運(yùn)行時(shí),在節(jié)點(diǎn)的事件處理程序中,根據(jù)鏈表數(shù)據(jù)結(jié)構(gòu),在數(shù)據(jù)結(jié)構(gòu)中查找節(jié)點(diǎn),修改和更新節(jié)點(diǎn)的狀態(tài),并對(duì)其相鄰節(jié)點(diǎn)的操作。所述無(wú)線傳感器網(wǎng)絡(luò)模擬器節(jié)點(diǎn)事件處理方法,包括下列步驟在模擬器的初始化階段,創(chuàng)建所有節(jié)點(diǎn)實(shí)例,根據(jù)實(shí)驗(yàn)場(chǎng)景的配置,依次設(shè)置各節(jié)點(diǎn)的標(biāo)號(hào)和位置信息,最后將節(jié)點(diǎn)分別以多個(gè)節(jié)點(diǎn)的關(guān)鍵字按序插入到多個(gè)鏈表中;在模擬器運(yùn)行時(shí),在節(jié)點(diǎn)的事件處理程序中,根據(jù)鏈表數(shù)據(jù)結(jié)構(gòu),在鏈表中查找節(jié)點(diǎn),修改和更新節(jié)點(diǎn)的狀態(tài),并對(duì)其相鄰節(jié)點(diǎn)的操作。
文檔編號(hào)H04L12/26GK101374083SQ20071012058
公開(kāi)日2009年2月25日 申請(qǐng)日期2007年8月21日 優(yōu)先權(quán)日2007年8月21日
發(fā)明者莉 崔, 陳海明, 黃長(zhǎng)城 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所