节点运动使用随机统一

时间:2014-03-04 11:28:27

标签: tcl ns2

我在NS-2中使用随机变量均匀从初始位置移动节点时遇到问题。我的节点位置应该在指定大小内,初始位置如下:

if {($i >= [expr 0 * $STA]) && ($i < [expr 3 * $STA])} {
    $posX_ set min_ [expr 1 / 2 * $R]
    $posX_ set max_ [expr 3 / 2 * $R]
} elseif {($i >= [expr 3 * $STA]) && ($i < [expr 7 * $STA])} {
    $posX_ set min_ [expr 2 * $R]
    $posX_ set max_ [expr 3 * $R]
}
$wl_node_($i) set X_ [$posX_ value]

if {($i >= [expr 7 * $STA]) && ($i < [expr 8 * $STA])} {
    $posY_ set min_ 0
    $posY_ set max_ [expr 2 * $h]
} elseif {(($i >= [expr 3 * $STA]) && ($i < [expr 4 * $STA])) || (($i >= [expr 12 * $STA]) && ($i < [expr 13 * $STA]))} {
    $posY_ set min_ $h
    $posY_ set max_ [expr 3 * $h]
}
$wl_node_($i) set Y_ [$posY_ value]

然后,我想使用下面的代码随机移动节点位置,但仍然使用$ posX_和$ posY_与初始位置相同

set val(x2) [$posX_ value]
set val(y2) [$posY_ value] 

$ns at 5.0 "$wl_node_($i) setdest $val(x2) $val(y2) 0.1"

但是当我跑步时,我收到了这个错误:

ns: _o9040 setdest 2.507944e+01 6.018404e+01 0.1: 
(_o9040 cmd line 1)
invoked from within
"_o9040 cmd setdest 2.507944e+01 6.018404e+01 0.1"
invoked from within
"catch "$self cmd $args" ret"
invoked from within
"if [catch "$self cmd $args" ret] {
set cls [$self info class]
global errorInfo
set savedInfo $errorInfo
error "error when calling class $cls: $args" $..."
(procedure "_o9040" line 2)
(SplitObject unknown line 2)
invoked from within
"_o9040 setdest 2.507944e+01 6.018404e+01 0.1"

如何解决这个问题?

谢谢

1 个答案:

答案 0 :(得分:1)

似乎setdest方法正在生成一条错误消息,其中包含空消息或实际参数作为消息(我无法分辨哪些消息)。你没有显示有问题的代码,所以解决 - 甚至猜测 - 问题是什么会非常困难。 (显而易见的事情 - 没有这样的对象,没有这样的方法,错误的参数数量 - 似乎不适用于此,至少按照我在Tcl错误消息中所期望的那样。)

但是,我建议尝试立即调用该方法而不是推迟它,至少看看是否能为您提供更好的错误跟踪。在模拟中稍后移动东西只会增加复杂性。