leach协议的nam过程实现!(转)

2024-04-04 23:08
文章标签 实现 协议 过程 leach nam

本文主要是介绍leach协议的nam过程实现!(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在网上搜了很久,很少有将leach协议的nam实现的。这里我将自己是怎么将leach协议的nam仿真的修改过程写出来。

1、在将wireless.tcl中加入一下一些代码:

# Initialize Global Variables
#
set ns_   [new Simulator]
set chan [new $opt(chan)]
set prop [new $opt(prop)]
set topo [new Topography]
#set tracefd [open $opt(tr) w]
set tracefd [open leach.tr w]
set namtrace [open leach.nam w]                  #nam文件名为leach.nam
$ns_ trace-all $tracefd
$ns_ namtrace-all-wireless $namtrace $opt(x) $opt(y)

 

#每个节点的跟踪设置

create-god $opt(nn)

$ns_ node-config -adhocRouting $opt(rp) /
      -llType $opt(ll) /
      -macType $opt(mac) /
      -ifqType $opt(ifq) /
      -ifqLen $opt(ifqlen) /
      -antType $opt(ant) /
      -propType $opt(prop) /
      -phyType $opt(netif) /
      -channel $opt(chan) /
       -topoInstance $topo /
      -agentTrace ON /
      -routerTrace ON /

      -macTrace ON /
      -wiredRouting OFF

 

#注意下面加载网络拓扑的代码一定要放在 initial_node_pos调用的前,否则出现下面很多人提到的问题,只显示BS节点,其实其它节点都已经显示了,但是位置都为(0,0),所以看不出来:

 

if { $opt(sc) == "" } {
    puts "*** NOTE: no scenario file specified."
        set opt(sc) "none"
} else {
    puts "Loading scenario file..."
    source $opt(sc)
    puts "Load complete..."
}

#有的wireless.tcl中可能没有上面这段,那就自己加入即可,其中的opt(sc)就是节点的拓扑图,通过genscen生成的那个文件.

 

#初始化节点的位置,如果不加这个,在nam仿真时会出现节点没有定义

for {set i 0} {$i<$opt(nn)} {incr i} {
$ns_ initial_node_pos $node_($i) 6
}

 

$ns_ at $opt(stop).0002 "puts/"NS EXITING.../";$ns_ halt"
$ns_ at $opt(stop).0001 "stop"

 

proc stop {} {

global ns_ tracefd namtrace
$ns_ flush-trace
close $tracefd
close $namtrace
exec nam leach.nam &
exit 0

}

这样wireless.tcl修改好了,其实这样已经可以实现leach协议的仿真,但是nam动画不好看

接下来我自己修改、添加了uamps.tcl和ns-leach.tcl,这样在仿真nam动画是可以标识出bsnode、簇头、同族节点

2、在uamps.tcl中添加一句:

      } else {
      puts "($opt(nn_) == BS)"
      set node_($id) [new MobileNode/ResourceAwareNode $BS_NODE]
      $node_($id) label "BS"
      $node_($id) label-color red
    }

这样bsnode在nam仿真时会在节点头顶出现一个红色的BS

3、在ns-leach.tcl文件中的createSchedule加入:

Application/LEACH instproc createSchedule {} {

global ns_ opt ADV_SCH MAC_BROADCAST BYTES_ID node_

$self instvar clusterNodes_ TDMAschedule_ rng_
$self instvar dist_ code_ now_ beginningE_


set colorarray(0) "red"
set colorarray(1) "yellow"
set colorarray(2) "blue"
set colorarray(3) "green"
set colorarray(4) "chocolate"
set colorarray(5) "brown"
set colorarray(6) "tan"
set colorarray(7) "blank"


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 c_a_ [expr int([$rng_ uniform 0 7])]
    $node_($chID) add-mark A $colorarray($c_a_) square    #簇头是用正方形框住的
    for {set i 0} {$i<$numNodes} {incr i} {
       set n [lindex $xmitOrder $i]
    $node_($n) add-mark A $colorarray($c_a_) hexagon    #同一族的颜色是用和簇头相同颜色的六变形框住的
    }
}

这样修改完成。

说明,由于颜色只有8中,所以有可能簇头会出现相同的颜色,这样不是很容易区分。这是一个不完美的地方。

 

转自:http://hi.baidu.com/zhaochuanbiao/blog/item/058e1729059cd9f0e7cd405b.html


这篇关于leach协议的nam过程实现!(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877050

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P