最近再NS2中仿真ZigBee协议时,再加入能量模型之后,发现所有的节点都变成绿色的,程序中对节点颜色的改变都不能起作用了,同时对节点添加标签时也不能加上去。在仔细观察了其源代码之后发现在P802_15_4mac.cc文件中的第919行void Mac802_15_4::recv(Packet *p, Handler *h)函数中有如下两行语句:
if (!Nam802_15_4::emStatus)
Nam802_15_4::emStatus = (netif_->node()->energy_model()?true:false);
正是这两句将emStatus赋值为false,使得在改变节点颜色时运行到文件p802_15_4nam.cc的321行:void Nam802_15_4::changeNodeColor(double atTime,const char *newColor,bool save)函数内的if (!Nam_Status) return;(326行)时直接返回,从而使对节点颜色的更改操作失败。同样对于节点其他属性的操作也是因为emStatus被赋值为了false而导致更改失败。
因此想要在能量模型中仍然能进行节点属性的更改,只需将前面说的P802_15_4mac.cc文件中的第919行void Mac802_15_4::recv(Packet *p, Handler *h)函数中如下两行语句注释掉:
/*
if (!Nam802_15_4::emStatus)
Nam802_15_4::emStatus = (netif_->node()->energy_model()?true:false);
*/
并保证在tcl文件中加入了Mac/802_15_4 wpanNam namStatus on,即将emStatus初值赋为true就可以了。