網(wǎng)絡(luò)模型:無(wú)線傳感器網(wǎng)絡(luò),所有節(jié)點(diǎn)初始化時(shí)廣播hello包。
節(jié)點(diǎn)模型:在OPNET自帶的wlan_station_adv節(jié)點(diǎn)模型基礎(chǔ)上進(jìn)行改進(jìn),添加route模塊。屬性設(shè)置如下,wlan_mac_intf.destination_address <- broadcast,wlan_mac.Address <- Auto Assigned。
仿真結(jié)果:執(zhí)行仿真運(yùn)行無(wú)錯(cuò)誤,想觀察統(tǒng)計(jì)結(jié)果時(shí)發(fā)現(xiàn)沒有結(jié)果可顯示,這說(shuō)明目的端接收不到數(shù)據(jù)包;當(dāng)把destination_address改為Random或者固定地址后,仿真運(yùn)行無(wú)錯(cuò),也有統(tǒng)計(jì)結(jié)果顯示,但是仍有一定量的數(shù)據(jù)包丟失。

調(diào)試糾錯(cuò):
初步認(rèn)定錯(cuò)誤發(fā)生在在wlan_mac模塊中,進(jìn)一步跟蹤調(diào)試發(fā)現(xiàn),丟失數(shù)據(jù)報(bào)的原因在于執(zhí)行wlan_physical_layer_data_arrival函數(shù)時(shí),在if ((wlan_flags->rcvd_bad_packet == OPC_BOOLINT_ENABLED) || (accept == OPC_FALSE) ||(wlan_flags->collided_packet == OPC_BOOLINT_ENABLED))判斷處進(jìn)入內(nèi)部代碼段并最終執(zhí)行了op_pk_destroy函數(shù),說(shuō)明該數(shù)據(jù)包因?yàn)樵谀康亩伺c其他數(shù)據(jù)包沖突而導(dǎo)致丟失。仔細(xì)分析上述原因后,猛然發(fā)現(xiàn),之所以broadcast模式下全部數(shù)據(jù)包均丟失,是因?yàn)閟ource模塊中的Packet Interarrival Time設(shè)置為constant類型,所有節(jié)點(diǎn)均在同一時(shí)間發(fā)包,導(dǎo)致所有數(shù)據(jù)包沖突;而random模式下沖突較少的原因是因?yàn)閿?shù)據(jù)包不是廣播形式發(fā)送,同一目的端同時(shí)接受多個(gè)數(shù)據(jù)包的概率減小了,故只有一定幾率下才會(huì)沖突。

修正方法:
將Packet Interarrival Time設(shè)置為exponenetial類型即可,錯(cuò)開各節(jié)點(diǎn)的發(fā)包時(shí)間。