WSN中LEACH协议源码分析
分析(一)
首先对wireless.tcl进行分析,先对默认的脚本选项进行初始化:
set opt(chan)Channel/\VirelessChannel
set opt(prop) Propagatioii/TwoRayGround
set opt(netif)PhyAVirelessPhy
set opt(mac) Mac/802_l 1
set opt(ifq) Qucuc/DropTail/PriQueue
set opt(ll) LL
set opt(ant) Antenna/OmniAntenna
set opt(x) 0 。# X dimension of the topography
set opt(y) 0。# Y dimension of the topography
set opt(cp),H,
set opt(sc) N../mobility/scene/scen-670x670-50-600-20-2u。# scenario file set opt(ifqlen)50o # max packet in if
set opt(nn) 51。# number of nodes
set opt(secd) 0.0
set opt(stop) 10.0 o # simulation time
set opt(tr) out.tr。# trace file
set opt(rp) dsdv 。 # routing protocol script
set opt(lm) M on H。# log movement
在这个wireless.tcl中设置了一些全局变呈::
#
#Initialize Global Variables
#
set ns_ [new Simulator]
set chan [new $opt(chan)]
set prop [new $opt(prop)]
set topo [newTopography]
set tracefd [open Sopt(tr) w]
Stopo Ioad_flatgrid $opt(x) $opt(y)
Sprop topography Stopo
这些初始化将在后而的使用中用到,该文件最重要的是创建leach 17点:创建方法如下:
} elseif { [string compare Sopt(rp) M leach,,]==0} {
for {set i 0} {$i < $opt(nn) } {incr i} {
leach-create-mobile-node $i
}
如果路由协议是leach协议,则在Uamps.tcl中调用leach-create-mobile-node方法创建leach节点。将在第二小节讲如何创建leach节点。
for {set i 0} {$i < $opt(nn) } {incr i} {
$ns_ at $opt(stop).000000001 M Snode_($i) reset”。〃完成后,重宜右点的应用
}
$ns_ at Sopt(stop).00000001 M puts VNS EXITING..'”。$ns_ halt” if { $opt(sc) ==
} {
puts H *** NOTE: no scenario file specified/1
set opt(sc) u none°
)else {
puts ”Loading scenario file../* source Sopt(sc)
puts ”Load complete...,r }
ns 在什么时候结束simulation,并告诉ns 加载sc 场景文件。最后$ns_ run 则ns 就开始运 行了。
分析(-)
上节对wireless.tcl 进行了简要的分析,接下来对Uanips.tcl 脚本进行分析。 set
opKEfriss^amp) [expr [expr 1.1 * $opt(RXThrcsh) * 16 * $PI * $PI] /\
[expr $opt(bw) * Sopt(Gt) * $opt(Gr) * $1 * $1]]
# Etwo_ray_amp = RXThresh /(Rb Gt Gr ht A 2 hr A 2) set opt(Etwo_ray_amp) [expr 1.1 ♦ $opt(RXThresh)/\
[expr $opt(bw) * $opt(Gt) * $opt(Gr) ♦ \
$opt(ht) * $opt(ht) * $opt(ht) * $opt(ht)]] 50e-9 o #
Energy for radio circuitry
5e-9 o # Beamforming energy (J/bit) 0
o # Sensing energy (J/bit)
o # Threshold for power adaptation o # Idle power (W) a # Sleep power (W)
set initialized 0
set rng_ [new RNG]#用于产生随机数
首先往opt 数组里而添加一些变量,并对这些变量进行初化。opt(Psleep) , opt(Pidle),
opt(thresh_energy)^t ns-lcach.tcl 中使用到,这个是讣算单位时间空闲所消耗的能呈:和休眠所 消
耗的能量。
这个脚本主要是创建leach 节点:
if {Sinitialized = O} {
#remove old trace sensjnit
set initialized 1 )
# Remove old trace files.
catch H eval exec rm [glob -nocomplain Sopt(dirname)/TDMAschedule.*.txt]M catch H exec rm $opt(dirname)/$opt(filename).energy H catch "exec rm $opt(dirnaine)/$opt(fiIename).data° catch "exec rm $opt(dirnanie)/$opt(filename).alive H catch ”exec rm $opt(dirname)/startup.energy H catch "exec rm $opt(dirnaine)/init.energy°
set opt(EXcvr) set opt(e_bf) set opt(Esense)
set opt(thresh_energy) 0.00 set opt(Pidle) 0 set opt(Psleep)