NS中提供了配置节点与流量颜色标识的方法,给一条流“上色”是经常用的方法,但是在无线仿真的时候不好用,经常出现只有fid=0的流上了颜色,经过仔细研究源代码,发现有下面一段,[cmu-trace.cc]
// A simple hack for scadds demo (fernandez's visit) -- Chalermek
int pkt_color = 0;
之后还有一些判断,好像是在802.15.4的情况下才有颜色,如果添上下面这段,颜色是都有了,但是很可能不太正确,期望有高手能解决。
hdr_ip* iph = hdr_ip::access(p);
pkt_color = iph -> fid_;
再说节点的颜色配置,可能很少有人用到。但是在无线环境下,尤其是节点会移动的情况下,把节点标记成不同的颜色,会大大提高可视化程度。NS给用户提供的节点配置颜色的方法定义在Ns-namsupp.tcl中,函数的声明为:
Node instproc color { color } {
$self instvar attr_ id_
set ns [Simulator instance]
if [$ns is-started] {
# color must be initialized
$ns puts-nam-config \
[eval list "n -t [format "%.15g" [$ns now]] -s $id_ -S COLOR -c $color -o $attr_(COLOR) -i $color -I $attr_(LCOLOR)"]
set attr_(COLOR) $color
set attr_(LCOLOR) $color
} else {
set attr_(COLOR) $color
set attr_(LCOLOR) $color
}
}
前几天我在配置脚本的时候想使用节点颜色,还有节点标签,所以我做了如下配置:
$node_(1) color red
$node_(1) label mobile_node
但是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} {
$self instvar addressType_
$self instvar energyModel_
if [info exists energyModel_] {
set nodeColor "green"
} else {
set nodeColor "black"
}
......
# Flat addressing
$self puts-nam-config "n -t * -s [$nodep id] \
-x [$nodep set X_] -y [$nodep set Y_] -Z [$nodep set Z_] -z $size \
-v circle -c $nodeColor"
}
}
注意看那个 if 结构,由于只有两种情况,开启了能量模型节点就是绿色的否则就是黑的,所以我们前面所做的配置都没有用了,于是乎,改之!将那个 if 结构的内容改成如下所示:
if [info exists energyModel_] {
set nodeColor "green"
} else {
# set nodeColor "black"
set tempcolor [$nodep set attr_(COLOR)]
if {$tempcolor == "green"} {
puts "Green is reserved for energy model, you may not set your node green..."
set tempcolor "black"
}
puts "Node color is set to $tempcolor"
set nodeColor $tempcolor
}
然后重新make (编译ns)一下,甚至不用重新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跑一遍,赏心悦目啊~
$node_ color black ---1
$ns_ at 30.0 "$node_ color red" ---2
第一行只是给节点增加了颜色属性 ,注意必须有,否则后面颜色的设置将不起作用
第二行是设置节点在30.0时颜色为 red,其中时间任意,但是必须大于0 :)
ns中用到的几种颜色:(其中yellow和gold不太容易分清,建议不要同时用)
red
yellow
blue
green
black
chocolate
brown
tan
gold
分享到:
相关推荐
无线网络中的隐藏节点问题源于无线通信的半双工特性,即一个设备在发送数据时无法同时接收数据。当两个无线设备A和B同时与另一设备C通信,但不能感知到对方的存在(因为它们之间没有直接的视线连接或信号覆盖),就...
压缩包中的文件“NS-2_DSR_FAQ.pdf”可能是DSR协议的详细指南或常见问题解答,为用户提供了DSR在NS-2中的使用方法和常见问题的解决方案。而“www.pudn.com.txt”可能是一个链接或者引用来源的文本文件,可能指向更多...
3. **基本概念**:涵盖网络节点、链路、事件驱动模型、时间调度等核心概念,这些都是理解NS2仿真的基础。 4. **脚本语言OTcl**:介绍OTcl语言,它是NS2的主要脚本语言,用于定义网络拓扑、配置协议参数和控制仿真...
在本实验"NS2仿真实验11"中,我们将探讨多媒体和无线网络通信中的TCP协议变体。实验主要基于NS-2(Network Simulator 2)这个强大的网络模拟工具进行,该工具广泛用于研究和教育领域,特别是对于网络协议的设计、...
NS2作为一款优秀的仿真软件,不仅支持IP网络的仿真,而且已被广泛应用于计算机网络的研究与设计之中。 #### 参考文献 1. 徐雷鸣. NS2与网络模拟[M]. 北京: 人民邮电出版社, 2003.6. 2. 朱军正. RedHat Linux ...
《NS2中的WSN无线传感器网络仿真:理论与实践》 无线传感器网络(Wireless Sensor Networks, WSN)是现代物联网技术中不可或缺的一部分,广泛应用于环境监测、军事侦察、健康监护等多个领域。NS2(Network ...
NS2(Network Simulator Version 2)是一款广泛使用的开源网络仿真软件,它允许用户在计算机上模拟复杂的网络环境,研究不同网络协议和设置的效果。本实验“NS2仿真实验7”主要关注的是多媒体和无线网络通信,通过...
### 无线组网实验——暴露隐藏节点 #### 实验背景 在无线网络环境中,由于无线信号的传播特性,经常会遇到暴露...此外,对于实验中观察到的一些特殊情况,还需要深入研究其根本原因,以便提出更为有效的解决方案。
在提供的“网络仿真器NS2的分析(含代码).pdf”文件中,可能包含了NS2的基本概念、使用方法、常见问题及解决策略,以及一些有价值的仿真代码示例。通过深入学习和实践这些内容,可以提高对NS2的理解和应用能力。
### OMNET++与NS2在无线传感器网络仿真中的比较研究 #### 一、引言 无线传感器网络(Wireless Sensor Networks, WSN)作为一种新型的网络形式,在环境监测、军事、医疗健康等领域展现出巨大的应用潜力。为了更好地...
综上,这个项目提供了利用PSO进行WSN节点部署仿真的源码,有助于理解和研究WSN部署策略,以及优化算法在解决实际工程问题中的应用。通过学习和分析,可以增强对WSN网络特性和优化算法的理解,并为未来的设计和研发...
NS2,全称为Network Simulator 2,是一款广泛用于网络研究的开源仿真工具,尤其在多媒体通信和无线网络领域。这个“NS2仿真实验--多媒体和无线网络通信 实验程序(1-19)”是一系列针对NS2的实验教程,涵盖了从基础...
- **编写脚本**:使用TCL语言编写NS-2仿真脚本,定义网络拓扑、节点属性、数据流等。 - **运行仿真**:通过NS-2命令行工具运行脚本,观察仿真结果。 - **结果分析**:利用NS-2提供的工具对仿真结果进行分析,提取...
在NS2(Network Simulator 2)中仿真IEEE 802.15.4协议是一项重要的任务,因为这种协议主要用于低功耗、短...通过这样的仿真,你可以获得对实际无线网络行为的洞察,并可能改进现有的通信策略或设计新的网络解决方案。