ns2 leach bug

转摘于http://blog.163.com/lt_lvtao/blog/static/43846410200984119913/?fromdm&fromSearch&isFromSearchEngine=yes

1、能量消耗的问题.LEACH协议运行完后,有个记录节点能量的文件,最后节点的总消耗超过了我们最初设定的2J能量,这个是因为checkalive过程中对死亡的节点只是设置标志,移出信道,但并没有终止其发送数据(数据发送不出,但能量继续消耗).解决方法就是:对死亡节点的处理代码最后加一句 $self  GoToSleep就可以了,虽然加这个不"正规",但意思到了,就是要死亡节点停止所有的活动就可以了.

Application/LEACH instproc checkAlive {} {
  global ns_ chan opt node_
  $self instvar alive_ TDMAschedule_
  $self instvar begin_idle_ begin_sleep_
  # Check the alive status of the node.  If the node has run out of
  # energy, it no longer functions in the network.
  set ISalive [[[$self node] set netif_(0)] set alive_]
  if {$alive_ == 1} {
    if {$ISalive == 0} {
      puts "Node [$self nodeID] is DEAD!!!!"
      $chan removeif [[$self node] set netif_(0)]
      set alive_ 0
      set opt(nn_) [expr $opt(nn_) - 1]
      if {$opt(rcapp) == "LEACH-C/StatClustering" && \
          [$self isClusterHead?]} {
        foreach element $TDMAschedule_ {
          if {$element != [$self nodeID]} {
            puts "Node $element is effectively DEAD!!!!"
            $chan removeif [$node_($element) set netif_(0)]
            [$node_($element) set netif_(0)] set alive_ 0
            [$node_($element) set rca_app_] set alive_ 0
            set opt(nn_) [expr $opt(nn_) - 1]
          }
        }
      }
      
      #To solove the Energy consumed > Totle Energy bug
   $self GoToSleep
    } else {
      $ns_ at [expr [$ns_ now] + 0.1] "$self checkAlive"
      if {$begin_idle_ >= $begin_sleep_} {
        set idle_energy [expr $opt(Pidle) * [expr [$ns_ now] - $begin_idle_]]
        [$self getER] remove $idle_energy
        set begin_idle_ [$ns_ now]
      } else {
        set sleep_energy [expr $opt(Psleep) * [expr [$ns_ now] - $begin_sleep_]]
        [$self getER] remove $sleep_energy
        set begin_sleep_ [$ns_ now]
      }
    }
  }
  if {$opt(nn_) < $opt(num_clusters)} "sens_finish"
}

2、新版本不兼容旧版本的一些参数,在*.out文件中会出现发送时的一些错误.解决方法:将NS-LAECH.TCL文件中第654行的dst_换成dst_addr就可以了.

Application/LEACH instproc send_now {mac_dst link_dst type msg \
                                          data_size dist code} {
    [$self agent] set packetMsg_ $type
    [$self agent] set dst_addr_ $mac_dst
    [$self agent] sendmsg $data_size $msg $mac_dst $link_dst $dist $code
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值