網絡模型:無線傳感器網絡,所有節點初始化時廣播hello包。
節點模型:在OPNET自帶的wlan_station_adv節點模型基礎上進行改進,添加route模塊。屬性設置如下,wlan_mac_intf.destination_address <- broadcast,wlan_mac.Address <- Auto Assigned。
仿真結果:執行仿真運行無錯誤,想觀察統計結果時發現沒有結果可顯示,這說明目的端接收不到數據包;當把destination_address改為Random或者固定地址后,仿真運行無錯,也有統計結果顯示,但是仍有一定量的數據包丟失。

調試糾錯:
初步認定錯誤發生在在wlan_mac模塊中,進一步跟蹤調試發現,丟失數據報的原因在于執行wlan_physical_layer_data_arrival函數時,在if ((wlan_flags->rcvd_bad_packet == OPC_BOOLINT_ENABLED) || (accept == OPC_FALSE) ||(wlan_flags->collided_packet == OPC_BOOLINT_ENABLED))判斷處進入內部代碼段并最終執行了op_pk_destroy函數,說明該數據包因為在目的端與其他數據包沖突而導致丟失。仔細分析上述原因后,猛然發現,之所以broadcast模式下全部數據包均丟失,是因為source模塊中的Packet Interarrival Time設置為constant類型,所有節點均在同一時間發包,導致所有數據包沖突;而random模式下沖突較少的原因是因為數據包不是廣播形式發送,同一目的端同時接受多個數據包的概率減小了,故只有一定幾率下才會沖突。

修正方法:
將Packet Interarrival Time設置為exponenetial類型即可,錯開各節點的發包時間。