[บันทึก] การใช้คำสั่ง setdest ใน ns2 สำหรับโมบายโหนด

By | September 23, 2009

วันนี้นั่งลองทำการบ้านที่ 2 ในวิชา Wireless LAN ซึ่งมีการกำหนดให้โหนดเคลื่อนที่จากตำแหน่งปัจจุบันไปที่ตำแหน่ง (0,0)

หลังจากเขียน script tcl ตามเงื่อนไขที่กำหนดในโจทย์ และทดลองรัน ปรากฎว่า ผลลัพธ์ที่ได้ error ในบรรทัดที่สั่ง setdest ดังนี้

$ns_ at 5.0 “$node_(3) setdest 0.0 0.0 5.0”

ซึ่งเป็นบรรทดที่กำหนดให้ ณ เวลา 5 วินาที เคลื่อนย้ายจากตำแหน่งปัจจุบันไปที่ตำแหน่ง (0,0) ด้วยความเร็ว 5 เมตรต่อวินาที

ซึ่งผลลัพธ์ที่ได้จากตอนคำสั่งรันคือ

num_nodes is set 4
warning: Please use -channel as shown in tcl/ex/wireless-mitf.tcl
INITIALIZE THE LIST xListHead
Starting Simulation…
channel.cc:sendUp – Calc highestAntennaZ_ and distCST_
highestAntennaZ_ = 1.5,  distCST_ = 550.0
SORTING LISTS …DONE!
ns: _o50 setdest 0.0 0.0 5.0:
(_o50 cmd line 1)
invoked from within
“_o50 cmd setdest 0.0 0.0 5.0”
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 “_o50” line 2)
(SplitObject unknown line 2)
invoked from within
“_o50 setdest 0.0 0.0 5.0”

เป็นข้อผิดพลาดที่เกิดจากการ setdest ไปตำแหน่งที่ (0,0)

จากการทดลองเปลี่ยนเป็นค่าอื่นๆ ที่ไม่ใช่ (0,0) เช่น (0.0000001, 0.0000001) สามารถใช้งาน

เป็นที่สงสัยยิ่งนักว่า เกิดจากเหตุอันใด

หลังจากติดตามไปดูในไฟล์ที่อยู่ในห้อง ns-allinone-2.xx/ns-2.xx/common/mobilenode.cc

พบว่า คำสั่งที่อยู่ในฟังก์ชั่น set_destination() เป็นดังนี้

int
MobileNode::set_destination(double x, double y, double s)
{
assert(initialized());

if(x >= T_->upperX() || x <= T_->lowerX())
return -1;
if(y >= T_->upperY() || y <= T_->lowerY())
return -1;

update_position();    // figure out where we are now

destX_ = x;
destY_ = y;
speed_ = s;

จะเห็นได้ว่า บรรทัดในฟังก์ชั่นนี้จะตรวจสอบตำแหน่งปลายทางของโหนดก่อนทำงาน

ถ้าค่าของโหนดเป็นค่า ขอบบน/ขอบล่าง ของแกน X/Y นั้น ฟังก์ชั่นนี้จะส่งค่ากลับ -1

ซึ่งทำให้ TCL error

จึงสรุปได้ว่า

การกำหนดตำแหน่งปลายทางในการเคลี่อนโหนด ค่าพิกัดจะต้องไม่เป็นขอบบน/ขอบล่าง/ขอบซ้าย/ขอบขวา ของ MAP

ดีจังได้ความรู้เพิ่มขึ้นอีกแล้ว  😎

สืบหาเบาะแสจาก http://wenda.tianya.cn/wenda/thread?tid=035465fed91efee7

mobilenode.cc