ns2 leach bug

转载 2012年03月24日 14:11:23

转摘于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
}

leach协议在NS2.34上的安装移植

在开始安装leach前,最好先备份下ns。这是一个好习惯。 首先先下载LEACH协议源码2.27,然后在LEACH协议源码2.27中找到mit.tar.gz. 在ns中的ns-2.35目录下新建一个文...
  • tianshide851049708
  • tianshide851049708
  • 2014年03月02日 18:22
  • 1262

Ubuntu14.04下NS2.35安装,以及LEACH协议安装

mit2.35完美版资源
  • lcpk0411
  • lcpk0411
  • 2014年11月02日 03:36
  • 2353

ns2下LEACH协议的一个简单仿真测试

默认分类 2010-09-1621:30:33 阅读74 评论0   字号:大中小 订阅 安装好了LEACH协议,运行./test后生成许多文件,结果文档在mit/leach_sims文件夹下,分别为...
  • tianshide851049708
  • tianshide851049708
  • 2014年03月02日 22:55
  • 993

ns2下leach和leach-c协议不同基站位置仿真比较

二、探究leach和leach-c基站位置对无线传感器网络性能的影响 1.基站位置bs_x=50,bs_y=175,簇首个数num_clusters=4 2.基站位置bs_x=0,bs_y=0,簇...
  • bbs375
  • bbs375
  • 2016年07月23日 16:57
  • 600

LEACH协议代码的两个BUG

1、能量消耗的问题.LEACH协议运行完后,有个记录节点能量的文件,最后节点的总消耗超过了我们最初设定的2J能量,这个是因为checkalive过程中对死亡的节点只是设置标志,移出信道,但并没有终止其...
  • xinxiuz
  • xinxiuz
  • 2010年03月10日 14:33
  • 1567

UBuntu 12.10 + NS2.34下leach协议添加

在NS2.34下添加leach协议花了太多时间,总结了各路大神发的帖子,终于安装成功了,特此分享,希望各位少走弯路。 NS2.34安装准备工作 sudo apt-g...
  • fusionzhang
  • fusionzhang
  • 2014年06月25日 16:09
  • 401

LEACH&LEACH-C 仿真分析(2)

转自 王子 空间 http://272387537.qzone.qq.com/        网上太多介绍LEACH仿真的步骤,也出现了很多LEACH和LEACH-C的节点死亡趋势图的对比!把LEAC...
  • xinxiuz
  • xinxiuz
  • 2010年03月10日 14:22
  • 2524

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

在上一篇文章中,我发布了一个mit.tar.gz的
  • lcpk0411
  • lcpk0411
  • 2014年11月03日 14:56
  • 1539

NS2中的Scheduler,Handler和Event之间的关系

首先是Scheduler,Handler和Event类的关系。             在NS2中,事件(Event)是基本的调度单元...
  • wuxuguang123
  • wuxuguang123
  • 2012年05月26日 17:22
  • 3091

柯志亨老师-- NS2 教學手冊

感谢柯志亨老师! NS2 教學手冊 ( NS2 Learning Guide) [快速連結區] My works  中文影音教學區  Q&A for my works  My ...
  • hzw05103020
  • hzw05103020
  • 2016年04月24日 15:29
  • 4333
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ns2 leach bug
举报原因:
原因补充:

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