ns-leach.tcl 分析3

原创 2012年03月24日 17:04:10

当簇头发出了一个ADV类型的包时,其他的节点会接收这个包,并会将发送这个包的簇头的节点号按顺序先后记录在clusterChoices_中,还会计算每个簇头到接收节点的距离并记录在clusterDist_中。这样可以方便每个节点选簇的时候进行比较。具体的实现在在ns-leach.tcl中的recvADV_CH函数中。

findBestCluster

  if [$self isClusterHead?] {
    # If node is CH, determine code and create a TDMA schedule.
    set dist_ $opt(max_dist)
    set currentCH_ $nodeID
    set myADVnum_ [[$self mac] set myADVnum_] 
    # There are opt(spreading) - 1 codes available b/c need 1 code 
    # for communication with the base station.
    set numCodesAvail [expr 2 * $opt(spreading) - 1]
    set ClusterCode [expr int(fmod($myADVnum_, $numCodesAvail)) + 1]
    $ns_ at [expr $now_ + $opt(ra_adv_total) + $opt(ra_join)] \
        "$self createSchedule"
  }

    如果这个节点是簇头节点,设置为当前的簇头,

    set numCodesAvail [expr 2 * $opt(spreading) - 1]
    set ClusterCode [expr int(fmod($myADVnum_, $numCodesAvail)) + 1]这两句没看懂

在一个随机时间后调用createSchedule,节点根据自己收到的clusterChoices,选择最近的簇头作为簇头节点。选择好簇头节点就informClusterHead。发送完数据就进入休眠状态。

Application/LEACH instproc createSchedule {} {


  global ns_ opt ADV_SCH MAC_BROADCAST BYTES_ID 
 
  $self instvar clusterNodes_ TDMAschedule_ 
  $self instvar dist_ code_ now_ beginningE_


  set numNodes [llength $clusterNodes_]
  set chID [$self nodeID]
  if {$numNodes == 0} {
    set xmitOrder ""
    puts "Warning!  There are no nodes in this cluster ($chID)!"
    $self SendMyDataToBS
  } else {
    # Set the TDMA schedule and send it to all nodes in the cluster.
    set xmitOrder $clusterNodes_
    set msg [list $xmitOrder]
    set spreading_factor $opt(spreading)
    set datasize [expr $spreading_factor * $BYTES_ID * [llength $xmitOrder]]
    pp "$chID sending TDMA schedule: $xmitOrder at time [$ns_ now]"
    pp "Packet size is $datasize."
    set mac_dst $MAC_BROADCAST
    set link_dst $chID
    $self send $mac_dst $link_dst $ADV_SCH $msg $datasize $dist_ $code_
  }


  set TDMAschedule_ $xmitOrder
  set outf [open $opt(dirname)/TDMAschedule.$now_.txt a]
  puts $outf "$chID\t$TDMAschedule_"
  close $outf


  set outf [open $opt(dirname)/startup.energy a]
  puts $outf "[$ns_ now]\t$chID\t[expr $beginningE_ - [[$self getER] query]] "
  close $outf

}

recvADV_SCH给没个节点一个时间间隙发送数据

  set frame_time_ [expr [expr 5 + [llength [join $order]]] * $opt(ss_slot_time)]
  set xmitTime_ [expr $opt(ss_slot_time) * $ind]
  set end_frm_time_ [expr $frame_time_ - $xmitTime_]
  set xmitat [expr [$ns_ now] + $xmitTime_]
  pp "$nodeID scheduled to transmit at $xmitat.  It is now [$ns_ now]."
  if {[expr $xmitat + $end_frm_time_] < \
      [expr $next_change_time_ - 10 * $opt(ss_slot_time)]} {
    $ns_ at $xmitat "$self sendData"

具体实现方法看不太懂。



ns-leach.tcl 分析2

在start中调用下面这个方法。 Application/LEACH instproc decideClusterHead {} {   global ns_ chan opt node_...

NS2运行LEACH,tcl文件的bug调试

在上一篇文章中,我发布了一个mit.tar.gz的

NS2.27上安装和分析leach协议

/***************************************************************************************************...

ns2相关学习——TCL脚本编写(3)

在这里我们将学习动态网络的建立 1、建立拓扑 当节点很多的时候,我们可以使用循环的方式来建立拓扑。 for {set i 0} {$i < 7} {incr i} { set n($i) [$n...
  • ljm1995
  • ljm1995
  • 2017年03月22日 14:47
  • 485

Linux下对NS2项目的仿真分析全过程代码(从tcl脚本-awk文本处理-gnuplot)

1、编写 tcl 脚本文件,得到 out.tr 以及 out.nam 文件;out.tr文件存储的是仿真得到的数据运行代码:创建tcl文件:touch example.tcl (example为文件名...

leach 分析3

对前面两个脚本进行分析后,已经创建好节点和设置好节点的初始能量,将opt(nn_)-1个节点设置为普通节点,而将opt(nn_)设置为bs。 现在对ns-ranode.tcl进行分析。好了我们现在就...

Fedora14+NS-2.34+Leach

首先在Linux上安装NS2-2.34,下载mit.tar.gz包 直接在2.34中安装leach的话,会把原来的相关文件给覆盖,这样2.34上以前添加的的协议将不能运行,所以这种方法行不通。为了解决...

【转】leach协议在NS2.33上的安装

【转】leach协议在NS2.33上的安装 收藏 转自:http://julysaquarius.blogbus.com/logs/56634215.html当初装leach的时候,装了好几遍,网上搜...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ns-leach.tcl 分析3
举报原因:
原因补充:

(最多只允许输入30个字)