[心得] Ns2 MOVE SUMO一些错误讯息解决方案

楼主: kaibaemon (海马卫门)   2012-07-23 20:36:57
回首向来一路跌跌撞撞
终于将论文从无到有生出来
关于ns2的知识几乎得知于网络
花很多时间自己去搜寻而来
因此将笔记整理整理po上来以供各位参考
减少碰壁的时间
我使用ns2.34版本
模拟VANET
如有错误欢迎指正~~
问题一、让节点拥有广播的功能出现错误
Ns2.34有内建广播的功能
位置在apps资料夹里的pbc.cc
在tcl里面创造节点时并将agent添加到node上之后
要run tcl出现以下错误(蓝色字是原本tcl程式码)
(_o14 cmd line 1)
invoked from within
"_o14 cmd random-motion 0 #disable random motion"
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 "_o14" line 2)
(SplitObject unknown line 2)
invoked from within
"$node_($i) random-motion 0 #disable random motion"
("for" body line 4)
invoked from within
"for {set i 0} {$i < $val(nn)} {incr i} {
set ID_($i) $i
set node_($i) [$ns_ node]
$node_($i) random-motion 0 #disable random motion
$..."
(file "practice.tcl" line 106)
解决方法:
将程式码改成以下即可执行tcl档案了
for {set i 0} {$i < $val(nn)} {incr i} {
set ID_($i) $i
set node_($i) [$ns_ node]
$node_($i) set id_ $ID_($i)
$node_($i) set address_ $ID_($i)
$node_($i) nodeid $ID_($i)
set agent_($i) [new Agent/PBC]
$ns_ attach-agent $node_($i) $agent_($i)//将每个agent加到每个node上
$agent_($i) set Pt_ 2.0e-4
$agent_($i) set payloadSize 1000
$agent_($i) set modulationScheme 0
$agent_($i) PeriodicBroadcast OFF
$node_($i) random-motion 0; //要将牠放到for loop最后一行
}
问题二、(可承上问题)出现node is not defined错误讯息
问题一解决之后可以跑了但跑很慢
用nam秀出结果时候电脑也跑很慢
且一直出现 node is not defined
解决的方法:
在tcl里面加上
for {set i 0} {$i < $val(nn)} {incr i} {
$ns_ initial_node_pos $node_($i) 2
}//初始化nam节点的位置及大小
解决之后执行速度变快了
而且本来有些节点弧形的移动
变回直线移动样式了
原来是没有将节点位置初始化的关系
问题三、出现invalid command name "Agent/XXX" wile executing "Agent/XXX"
在ns2.34版添加新协定Agent/CLUSTER之后
在terminal执行ns practice.tcl
出现invalid command name "Agent/CLUSTER"
while executing
"Agent/CLUSTER"
解决方法:
../ns practice.tcl
再命令前加上 ../ 即可执行tcl档案
问题四、 Segmentation Fault错误讯息
Segmentation Fault错误讯息最常发生的原因是
指标所指的物件已经不存在了
后面code仍去使用不存在的物件
例如:
我曾经将event物件(Timeouthandler)用指标delete掉了
所以再次进入条件判断后event指向的物件已经不存在
因此出现segementation fault讯息
解决方法:
检查程式有没有将物件释放掉仍去使用他的状况
问题五、编译ns2程式时候,显示makefile.in is newer than makefile讯息
当要执行make编译程式的时候,终端机显示如下
makefile.in is newer than makefile
you need to re-run configure...
解决方法:
先修改makefile.in文件内容
接着修改makefile文件
也就是要两个文件补补丁上XXXX.o档案
(XXXX.o就是使用者自己写的XXXX.cc以及XXXX.h的程式码)
问题六、 修改agent接收tcl参数的个数出现global errorInfo讯息
原本tcl程式码是
$agent_($i) PeriodicBoradcast OFF
改成如下
$agent_($i) PeriodicBroadcast OFF 0
也就是说我本来丢三个参数给.cc
现在改丢四个参数给.cc
出现以下错误
global errorInfo
set savedInfo $errorInfo
error "error when calling class $cls: $args" $..."
解决方法:
原来是.cc的tcl command那边没有接收四个参数的条件判断
或者将接收四个参数的条件判断写在其他条件判断下了
也就是说我将if(argc == 4)写在if(argc == 3)里头了
因为漏掉大括号的关系
也因此tcl丢四个参数给.cc时候
.cc不会认识这四个参数
因此出现此问题好好检查大括号有没有漏掉或多写
或者是没有写if(argc == 4)
问题七、 floating point exception
解决方法:
1.对数的真数不可为零
2.除数不可为零
问题八、MOVE产生的移动剧本无法给SUMO执行
解决方法:
请注意MOVE与SUMO版本相容性
MOVE2.9版的无法与SUMO-0.11.X以及以前版本相容
我用MOVE 2.9版跟SUMO-0.12.3版
MOVE产生的移动剧本档可以给SUMO执行模拟
作者: tuner123 (健康的脚踝)   2012-01-29 18:41:00
感谢分享

Links booklink

Contact Us: admin [ a t ] ucptt.com