我在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"
如何解决这个问题?
谢谢
答案 0 :(得分:1)
似乎setdest
方法正在生成一条错误消息,其中包含空消息或实际参数作为消息(我无法分辨哪些消息)。你没有显示有问题的代码,所以解决 - 甚至猜测 - 问题是什么会非常困难。 (显而易见的事情 - 没有这样的对象,没有这样的方法,错误的参数数量 - 似乎不适用于此,至少按照我在Tcl错误消息中所期望的那样。)
但是,我建议尝试立即调用该方法而不是推迟它,至少看看是否能为您提供更好的错误跟踪。在模拟中稍后移动东西只会增加复杂性。