網(wǎng)絡模型:無線傳感器網(wǎng)絡,所有節(jié)點初始化時廣播hello包。
節(jié)點模型:在OPNET自帶的wlan_station_adv節(jié)點模型基礎上進行改進,添加route模塊。屬性設置如下,wlan_mac_intf.destination_address <- broadcast,wlan_mac.Address <- Auto Assigned。
仿真結(jié)果:執(zhí)行仿真運行無錯誤,想觀察統(tǒng)計結(jié)果時發(fā)現(xiàn)沒有結(jié)果可顯示,這說明目的端接收不到數(shù)據(jù)包;當把destination_address改為Random或者固定地址后,仿真運行無錯,也有統(tǒng)計結(jié)果顯示,但是仍有一定量的數(shù)據(jù)包丟失。
調(diào)試糾錯:
初步認定錯誤發(fā)生在在wlan_mac模塊中,進一步跟蹤調(diào)試發(fā)現(xiàn),丟失數(shù)據(jù)報的原因在于執(zhí)行wlan_physical_layer_data_arrival函數(shù)時,在if ((wlan_flags->rcvd_bad_packet == OPC_BOOLINT_ENABLED) || (accept == OPC_FALSE) ||(wlan_flags->collided_packet == OPC_BOOLINT_ENABLED))判斷處進入內(nèi)部代碼段并最終執(zhí)行了op_pk_destroy函數(shù),說明該數(shù)據(jù)包因為在目的端與其他數(shù)據(jù)包沖突而導致丟失。仔細分析上述原因后,猛然發(fā)現(xiàn),之所以broadcast模式下全部數(shù)據(jù)包均丟失,是因為source模塊中的Packet Interarrival Time設置為constant類型,所有節(jié)點均在同一時間發(fā)包,導致所有數(shù)據(jù)包沖突;而random模式下沖突較少的原因是因為數(shù)據(jù)包不是廣播形式發(fā)送,同一目的端同時接受多個數(shù)據(jù)包的概率減小了,故只有一定幾率下才會沖突。
修正方法:
將Packet Interarrival Time設置為exponenetial類型即可,錯開各節(jié)點的發(fā)包時間。