NS中提供了配置节点与流量颜色标识的方法,给一条流“上色”是经常用的方法,但是在无线仿真的时候不好用,经常出现只有fid=0的流上了颜色,经过仔细研究源代码,发现有下面一段,[cmu-trace.cc] // A simple hack for scadds demo (fernandez's visit) -- Chalermek 之后还有一些判断,好像是在802.15.4的情况下才有颜色,如果添上下面这段,颜色是都有了,但是很可能不太正确,期望有高手能解决。 hdr_ip* iph = hdr_ip::access(p);
再说节点的颜色配置,可能很少有人用到。但是在无线环境下,尤其是节点会移动的情况下,把节点标记成不同的颜色,会大大提高可视化程度。NS给用户提供的节点配置颜色的方法定义在Ns-namsupp.tcl中,函数的声明为: Node instproc color { color } { set ns [Simulator instance] if [$ns is-started] { $ns puts-nam-config / 前几天我在配置脚本的时候想使用节点颜色,还有节点标签,所以我做了如下配置: $node_(1) color red 但是Nam播放中,节点仍然是黑色的,我又仔细看了函数声明,发现配置方法没错,可是为什么节点的颜色就是没变呢?进一步深入研究了NamTrace文件,我发现前面的若干行是用来初始化节点的位置、形状、颜色的: n -t * -s 1 -x 300 -y 200 -Z 0 -z 30 -v circle -c black 可以清楚的看见颜色的配置是黑色,可是我明明指定它为红色了!我要看看是哪里打印了这一行,一番搜索,找到了在Ns-lib.tcl中负责Node的Nam配置初始化函数: Simulator instproc initial_node_pos {nodep size} { if [info exists energyModel_] { 注意看那个 if 结构,由于只有两种情况,开启了能量模型节点就是绿色的否则就是黑的,所以我们前面所做的配置都没有用了,于是乎,改之!将那个 if 结构的内容改成如下所示: if [info exists energyModel_] { 然后重新make一下,甚至不用重新make,只要你把改过的Simulator instproc initial_node_pos 的声明与定义都写到你的TCL脚本的头部,这样你这个脚本中调用的函数就是你自定义的了。再重新运行一遍试试。检查一下NamTrace文件: n -t * -s 1 -x 300 -y 200 -Z 0 -z 30 -v circle -c red 好了,这次配置正确了,用Nam跑一遍,赏心悦目啊~ Trackback: http://blog.csdn.net/robin2046/archive/2007/07/26/1710478.aspx
按此方法设置节点颜色的出错原因(这一点可以参考:How to change nodes' color in NS2 Wireless Simulation) 1. 出错原因:没有把所有的节点都设置成别的颜色(指除了黑色的颜色) 注意其中2很重要。
摘自:http://www.baisi.net/viewthread.php?tid=64178&extra=&page=2 三: $node_ color black ---1 第二行是设置节点在30.0时颜色为 red,其中时间任意,但是必须大于0 :) ns中用到的几种颜色:(其中yellow和gold不太容易分清,建议不要同时用) red yellow blue green black chocolate brown tan gold |
转自:http://hi.baidu.com/jrwen0/blog/item/1f213cca1c9ded41f31fe755.html