我想通过命令行参数创建拓扑。我在命令行参数中传递了节点号。这是我的命令
ns sat-wired2.tcl 30
这是tcl脚本片段
set var [lindex $argv 1]
for {set i 0} {$i < $var } {incr i} {
$ns duplex-link $n($i) $n([($i+1)]) 1Mb 2ms DropTail
}
$ns duplex-link $n($var) $n1 1Mb 10ms DropTail
这是我的输出
no such variable
while executing
"$ns duplex-link $n($var) $n1 1Mb 10ms DropTail"
(file "sat-wired2.tcl" line 109)
我在tcl和NS2中都是菜鸟。有人请帮助我。
答案 0 :(得分:2)
您的真正的问题是,在您写入变量之前,您无法从变量中读取(副作用$n(1)
与{{{}不同1}},当你看它时很明显)。如果您从未初始化变量,则无法从中读取变量。我不知道您希望在(图表中的节点)之间运行链接,但您需要先创建它们:
$n1
然后你似乎想要在一个循环中链接它们。哪个对我好。最好的方法是使用一个包含两个变量的循环(其中一个是“mod for {set i 0} {$i < $var} {incr i} {
set n($i) [$ns create-the node-here somehow...]
}
”):
$var
您可能应该保留这些链接的句柄,以便之后可以配置它们(以引入任何非统一的功能,例如不同的延迟)。也许就像这样:
for {set from 0; set to 1} {$from < $var} {incr from; set to [expr {($to+1) % $var}]} {
$ns duplex-link $n($from) $n($to) 1Mb 2ms DropTail
}
(不,我不知道/记得如何set var [lindex $argv 0]
for {set i 0} {$i < $var} {incr i} {
set n($i) [$ns create-the-node here somehow...]
}
for {set from 0; set to 1} {$from < $var} {incr from; set to [expr {($to+1) % $var}]} {
set link($from) [$ns duplex-link $n($from) $n($to) 1Mb 2ms DropTail]
}
$link(0) set-the-latency to 10ms
或create-the-node
。)