返回

为方便读者,本教材中连续四行及以上程序源码(脚本),本网站将直接提供,直接输入使用。

(1)第58页倒数第3行到61页倒数第6行实验完整代码:
nset val(chan)			Channel/WirelessChannel
set val(prop)           Propagation/TwoRayGround
set val(netif)          Phy/WirelessPhy/802_15_4
set val(mac)            Mac/802_15_4
set val(ifq)            Queue/DropTail/PriQueue
set val(ll)             LL
set val(ant)            Antenna/OmniAntenna
set val(ifqlen)         150
set val(nn)             7
set val(rp)             AODV
set val(x)				50
set val(y)				50
set appTime1            7.0
set appTime2            7.1
set appTime3            7.2
set stopTime            100

set ns_		[new Simulator]
set tracefd     [open star.tr w]
$ns_ trace-all $tracefd
set namtrace     [open star.nam w]
$ns_ namtrace-all-wireless $namtrace $val(x) $val(y)
#默认关闭,开启后其他wpanNam命令才能工作
Mac/802_15_4 wpanNam namStatus on
Mac/802_15_4 wpanCmd verbose on
#设置CSThresh_和RXThresh_阈值,传播模型为TwoRayGround
set dist(5m)  7.69113e-06
set dist(10m) 1.92278e-06
set dist(15m) 8.54570e-07
set dist(20m) 4.80696e-07
set dist(25m) 3.07645e-07
set dist(30m) 2.13643e-07
set dist(35m) 1.56962e-07
set dist(40m) 1.20174e-07
Phy/WirelessPhy set CSThresh_ $dist(15m)
Phy/WirelessPhy set RXThresh_ $dist(15m)
#创建拓扑和信道实例
set topo       [new Topography]
$topo load_flatgrid $val(x) $val(y)
set god_ [create-god $val(nn)]
set chan_1_ [new $val(chan)]
#配置节点, 务必在实例化节点前完成
$ns_ node-config -adhocRouting $val(rp) \
		-llType $val(ll) \
		-macType $val(mac) \
		-ifqType $val(ifq) \
		-ifqLen $val(ifqlen) \
		-antType $val(ant) \
		-propType $val(prop) \
		-phyType $val(netif) \
		-topoInstance $topo \
		-agentTrace ON \
		-routerTrace OFF \
		-macTrace ON \
		-movementTrace OFF \
		-channel $chan_1_

#实例化节点, 设置节点位置, 设置节点类型
for {set i 0} {$i < $val(nn) } {incr i} {
	set node_($i) [$ns_ node]	
	$node_($i) random-motion 0
}
$node_(0) set X_ 25
$node_(0) set Y_ 25
$node_(0) set Z_ 0
$node_(1) set X_ 20
$node_(1) set Y_ 16.34
$node_(1) set Z_ 0
$node_(2) set X_ 15
$node_(2) set Y_ 25
$node_(2) set Z_ 0
$node_(3) set X_ 20
$node_(3) set Y_ 33.66
$node_(3) set Z_ 0
$node_(4) set X_ 30
$node_(4) set Y_ 33.66
$node_(4) set Z_ 0
$node_(5) set X_ 35
$node_(5) set Y_ 25
$node_(5) set Z_ 0
$node_(6) set X_ 30
$node_(6) set Y_ 16.34
$node_(6) set Z_ 0
for {set i 0} {$i < $val(nn)} {incr i} {
	$ns_ initial_node_pos $node_($i) 3
}
#PAN协调器节点标签
$ns_ at 0.0	"$node_(0) NodeLabel PAN Coor"
#启动协调器, 默认beacon使能, BO和SO都为3
$ns_ at 0.0	"$node_(0) sscs startPANCoord"
#启动FFD节点, beacon关闭, BO和SO也为3
$ns_ at 0.5	"$node_(1) sscs startDevice 1 0"
$ns_ at 1.5	"$node_(2) sscs startDevice 1 0"
$ns_ at 2.5	"$node_(3) sscs startDevice 1 0"
$ns_ at 3.5	"$node_(4) sscs startDevice 1 0"
$ns_ at 4.5	"$node_(5) sscs startDevice 1 0"
$ns_ at 5.5	"$node_(6) sscs startDevice 1 0"
#流建立函数
proc ftptraffic { src dst starttime } {
   global ns_ node_
   set tcp($src) [new Agent/TCP]
   $tcp($src) set packetSize_ 50
   set sink($dst) [new Agent/TCPSink]
   $ns_ attach-agent $node_($src) $tcp($src)
   $ns_ attach-agent $node_($dst) $sink($dst)
   $ns_ connect $tcp($src) $sink($dst)
   set ftp($src) [new Application/FTP]
   $ftp($src) attach-agent $tcp($src)
   $ns_ at $starttime "$ftp($src) start"
}
ftptraffic 0 1 $appTime1
ftptraffic 0 3 $appTime3
#仿真结束处理
for {set i 0} {$i < $val(nn) } {incr i} {
    $ns_ at $stopTime "$node_($i) reset"
}
proc stop {} {
    global ns_ tracefd namtrace
    $ns_ flush-trace
    close $tracefd
	close $namtrace
}
$ns_ at $stopTime "stop"
$ns_ at $stopTime "$ns_ halt"
#开始仿真
$ns_ run
(2)第62页倒数第12行到66页第12行实验完整代码:
set val(chan)           Channel/WirelessChannel
set val(prop)           Propagation/TwoRayGround
set val(netif)          Phy/WirelessPhy/802_15_4
set val(mac)            Mac/802_15_4
set val(ifq)            Queue/DropTail/PriQueue
set val(ll)             LL
set val(ant)            Antenna/OmniAntenna
set val(ifqlen)         50
set val(nn)             11
set val(rp)             AODV
set val(x)				50
set val(y)				50

set appTime1         	8.3
set appTime2         	8.6
set stopTime            100

Mac/802_15_4 wpanCmd verbose on
Mac/802_15_4 wpanNam namStatus on

# Initialize Global Variables
set ns_			[new Simulator]
set tracefd     [open P2P.tr w]
$ns_ trace-all $tracefd
set namtrace     [open P2P.nam w]
$ns_ namtrace-all-wireless $namtrace $val(x) $val(y)

set dist(15m) 8.54570e-07
Phy/WirelessPhy set CSThresh_ $dist(15m)
Phy/WirelessPhy set RXThresh_ $dist(15m)

# set up topography object
set topo       [new Topography]
$topo load_flatgrid $val(x) $val(y)

# Create God
set god_ [create-god $val(nn)]

set chan_1_ [new $val(chan)]

# configure node

$ns_ node-config -adhocRouting $val(rp) \
		-llType $val(ll) \
		-macType $val(mac) \
		-ifqType $val(ifq) \
		-ifqLen $val(ifqlen) \
		-antType $val(ant) \
		-propType $val(prop) \
		-phyType $val(netif) \
		-topoInstance $topo \
		-agentTrace ON \
		-routerTrace OFF \
		-macTrace ON \
		-movementTrace OFF \
		-channel $chan_1_ 

for {set i 0} {$i < $val(nn) } {incr i} {
	set node_($i) [$ns_ node]	
	$node_($i) random-motion 0
}
$node_(0) set X_ 30
$node_(0) set Y_ 40
$node_(0) set Z_ 0.000000000000
$node_(1) set X_ 22
$node_(1) set Y_ 32
$node_(1) set Z_ 0.000000000000
$node_(2) set X_ 35
$node_(2) set Y_ 32
$node_(2) set Z_ 0.000000000000
$node_(3) set X_ 13.5
$node_(3) set Y_ 24
$node_(3) set Z_ 0.000000000000
$node_(4) set X_ 29
$node_(4) set Y_ 24
$node_(4) set Z_ 0.000000000000
$node_(5) set X_ 40
$node_(5) set Y_ 23
$node_(5) set Z_ 0.000000000000
$node_(6) set X_ 9
$node_(6) set Y_ 14
$node_(6) set Z_ 0.000000000000
$node_(7) set X_ 16.5
$node_(7) set Y_ 13
$node_(7) set Z_ 0.000000000000
$node_(8) set X_ 24
$node_(8) set Y_ 13
$node_(8) set Z_ 0.000000000000
$node_(9) set X_ 34
$node_(9) set Y_ 13.5
$node_(9) set Z_ 0.000000000000
$node_(10) set X_ 44
$node_(10) set Y_ 13
$node_(10) set Z_ 0.000000000000
$ns_ at 0.0	"$node_(0) NodeLabel PAN Coor"
$ns_ at 0.0	"$node_(0) sscs startPANCoord 1"
$ns_ at 0.5	"$node_(1) sscs startDevice 1 1 1"
$ns_ at 1.5	"$node_(2) sscs startDevice 1 1 1"
$ns_ at 2.5	"$node_(3) sscs startDevice 1 1 1"
$ns_ at 3.5	"$node_(4) sscs startDevice 1 1 1"
$ns_ at 4.5	"$node_(5) sscs startDevice 1 1 1"
$ns_ at 5.5	"$node_(6) sscs startDevice 0"
$ns_ at 5.8	"$node_(7) sscs startDevice 0"
$ns_ at 6.5	"$node_(8) sscs startDevice 0"
$ns_ at 6.8	"$node_(9) sscs startDevice 0"
$ns_ at 7.0	"$node_(10) sscs startDevice 0"
$ns_ at 6.0 "$node_(3) sscs stopBeacon"
$ns_ at 8.0 "$node_(3) sscs startBeacon"
$ns_ at 9.0 "$node_(5) sscs startBeacon 4 4"
$ns_ at 10.0 "$node_(4) sscs stopBeacon"
for {set i 0} {$i < $val(nn) } {incr i} {
	$ns_ initial_node_pos $node_($i) 2
}

proc ftptraffic { src dst starttime } {
   global ns_ node_
   set tcp($src) [new Agent/TCP]
   $tcp($src) set packetSize_ 50
   set sink($dst) [new Agent/TCPSink]
   $ns_ attach-agent $node_($src) $tcp($src)
   $ns_ attach-agent $node_($dst) $sink($dst)
   $ns_ connect $tcp($src) $sink($dst)
   set ftp($src) [new Application/FTP]
   $ftp($src) attach-agent $tcp($src)
   $ns_ at $starttime "$ftp($src) start"
}
ftptraffic 1 6 $appTime1
ftptraffic 4 10 $appTime2
$ns_ at $appTime1 "$node_(1) add-mark m1 blue circle"
#$ns_ at $stopTime "$node_(1) delete-mark m1"
$ns_ at $appTime1 "$node_(6) add-mark m2 blue circle"
$ns_ at $appTime2 "$node_(4) add-mark m3 green4 circle"
$ns_ at $appTime2 "$node_(10) add-mark m4 green4 circle"
Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
Mac/802_15_4 wpanNam FlowClr -p ARP -c green
Mac/802_15_4 wpanNam FlowClr -p MAC -c navy
Mac/802_15_4 wpanNam FlowClr -p tcp -s 1 -d 6 -c blue
Mac/802_15_4 wpanNam FlowClr -p ack -s 6 -d 1 -c blue
Mac/802_15_4 wpanNam FlowClr -p tcp -s 4 -d 10 -c green4
Mac/802_15_4 wpanNam FlowClr -p ack -s 10 -d 4 -c green4

proc stop {} {
    global ns_ tracefd namtrace
    $ns_ flush-trace
    close $tracefd
	close $namtrace
}
$ns_ at $stopTime "stop"
$ns_ at $stopTime "$ns_ halt"
for {set i 0} {$i < $val(nn) } {incr i} {
    $ns_ at $stopTime "$node_($i) reset";
}

puts "\nStarting Simulation..."
$ns_ run