在omnet++上仿真无线传感网络3

本文介绍Mixim框架下的host802154_2400Mhz节点结构,重点分析应用层(APPlayer)的工作原理,包括如何产生、发送数据包及其关键参数配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节中,网络中添加了50个node。这这node就是mixim框架中的host802154_2400Mhz结点。在design模式下,双击网络中的node结点,进入host802154_2400Mhz模块的design视图。



从图中可以看出,这是一个复合模块,它是由一些简单模块(simple module)组成。上图node包含了无线网络仿真所需的应用层、网络层、物理层以及电池等简单模块(simple module)。

module Host802154_2400MHz extends WirelessNodeBatteryPlusTran
{
    parameters:
        int numHosts; // total number of hosts in the network

        applicationType = default("SensorApplLayer");
        transportType   = default("Aggregation");
        nicType         = default("Nic802154_TI_CC2420");  //type of used nic
        arpType         = default("org.mixim.modules.netw.ArpHost");

        batteryStats.detail = default(false);
        batteryStats.timeSeries = default(false);

        battery.nominal = default(1000 mAh);
        battery.capacity = default(battery.nominal);
        battery.voltage = default(3 V);
        battery.resolution = default(60 s);
        battery.publishDelta = default(1);
        battery.publishTime = default(battery.resolution);
        battery.numDevices = default(1);
}


这一节主要分析一下最上层的应用层(APPlayer)。上图中appl图标代表的模块。
simple SensorApplLayer like IBaseApplLayer
{
    parameters:
        bool debug = default(false); // debug switch
        bool stats = default(true);   // stats generation switch
        bool trace = default(false);  // activates detailed logging (per source latencies and vector logging). stats must be true.
        bool broadcastPackets = default(false); // send packets in broadcast mode
        double nbPackets = default(0);
        int destAddr = default(0);
        string trafficType = default("periodic");  	// Can be one of: periodic, uniform or exponential
        double trafficParam @unit(s) = default(1 s);			// the mean time between two packets
        double initializationTime @unit(s) = default(1 min); // minimum time before generation of the first packet,一分钟之后才会产生第一个数据包
        int headerLength @unit(byte) = default(2 byte);
        bool notAffectedByHostState = default(true);
    gates:
        input lowerLayerIn; // from network layer
        input lowerControlIn;
        output lowerLayerOut; // to network layer
        output lowerControlOut;
}
应用层的主要任务是周期性地产生流量包,最终转发到sink结点上。这些功能由上面定义的simple模块实现。参数nbpackets代表产生数据包的个数,默认值为0,。参数destaddr代表数据包的目的地址,默认0。参数traffictype表示数据产生的周期类型,periodic值表示固定周期。参数headerlength代表数据包的大小,默认2字节。在仿真的时候这些参数可以在omnetpp.ini文件中从新赋值,仿真以omnetpp.ini文件为准。例如:

**.node[0].appl.nbPackets = 0
**.node[*].appl.nbPackets = 10 #产生10个数据包
**.node[*].appl.destAddr = 0   #目的结点0
**.node[*].appl.trafficType = "periodic" #产生数据包时间间隔固定为periodic
**.node[*].appl.trafficParam = 30 s  # each node sends 1 packet every 30 seconds 
**.node[*].appl.initializationTime = 30 s #30s后产生第一个数据包
**.node[*].appl.headerLength = 50 byte    #数据包大小50字节


下面是applayer层发送数据包的源码:

void SensorApplLayer::sendData() {
	ApplPkt *pkt = new ApplPkt("Data", DATA_MESSAGE);

	if(broadcastPackets) {
		pkt->setDestAddr(LAddress::L3BROADCAST);
	} else {
		pkt->setDestAddr(destAddr);
	}
	pkt->setSrcAddr(myAppAddr);
	pkt->setByteLength(headerLength);
	// set the control info to tell the network layer the layer 3 address
	NetwControlInfo::setControlInfo(pkt, pkt->getDestAddr());
	debugEV<< "Sending data packet!\n";
	sendDown(pkt);
	nbPacketsSent++;
	packet.setPacketSent(true);
	packet.setNbPacketsSent(1);
	packet.setNbPacketsReceived(0);
	packet.setHost(myAppAddr);
	emit(BaseLayer::catPacketSignal, &packet);
	sentPackets++;
	scheduleNextPacket();
}

	ApplPkt *pkt = new ApplPkt("Data", DATA_MESSAGE);

	if(broadcastPackets) {
		pkt->setDestAddr(LAddress::L3BROADCAST);
	} else {
		pkt->setDestAddr(destAddr);
	}
生成数据包以及设置数据包的目的地址。broadcastpackets在sensorapplayer.ned文件中定义为FALSE,destAddr定义为0,即0号node是sink结点。


sendDown(pkt);
将数据包向下发送到网络层

下面是周期性产生流量的方法:

void SensorApplLayer::scheduleNextPacket() {
	if (nbPackets > sentPackets && trafficType != 0) { // We must generate packets

		simtime_t waitTime = SIMTIME_ZERO;

		switch (trafficType) {
		case PERIODIC:
			waitTime = trafficParam;
			debugEV<< "Periodic traffic, waitTime=" << waitTime << endl;
			break;
		case UNIFORM:
			waitTime = uniform(0, trafficParam);
			debugEV << "Uniform traffic, waitTime=" << waitTime << endl;
			break;
		case EXPONENTIAL:
			waitTime = exponential(trafficParam);
			debugEV << "Exponential traffic, waitTime=" << waitTime << endl;
			break;
		case UNKNOWN:
		default:
			EV <<
			"Cannot generate requested traffic type (unimplemented or unknown)."

			<< endl;
			return; // don not schedule
			break;
		}
		debugEV << "Start timer for a new packet in " << waitTime << " seconds." <<
		endl;
		scheduleAt(simTime() + waitTime, delayTimer);
		debugEV << "...timer rescheduled." << endl;
	} else {
		debugEV << "All packets sent.\n";
	}
}

		switch (trafficType) {
		case PERIODIC:
			waitTime = trafficParam;
traffictype是流量类型。有四种可能,其中PERIODIC表示固定时间间隔,故产生流量的时间间隔waittime=固定值trafficparam。


目 录 第一章 无线传感器网络概述 6 概述 6 1.1 NS-2 6 1.2 OPNET 6 1.3 SensorSim 7 1.4 EmStar 7 1.5 GloMoSim 7 1.6 TOSSIM 7 1.7 PowerTOSSIM 8 第二章 OMNET++简介 9 概述 9 2.1 OMNeT++框架 9 2.1.1 OMNeT++组成 9 2.1.2 OMNeT++结构 10 2.2 OMNeT++的安装 11 2.3 OMNeT++语法 12 2.3.1 NED语言 12 2.3.1.1 NED总概述 12 2.3.1.2 Ned描述的组件 13 2.3.1.3函数 15 2.3.2 简单模块 17 2.3.2.1 OMNET++中离散事件 17 2.3.2.2 包传输模型 17 2.3.2.3定义简单模块 18 2.3.2.4 简单模块中的主要成员函数 20 2.3.3 消息 21 2.3.3.1 cMessage类 21 2.3.3.2 消息定义 21 2.3.3.3 消息的收发 22 2.3.4 模块参数、门及连接的访问 23 2.3.4.1消息参数的访问 23 2.3.4.2门和连接的访问 24 2.3.4.3门的传输状态 26 2.3.3.4连接的状态 26 2.4 仿真过程 27 2.5 配置文件omnetpp.ini 28 2.6 结果分析工具 29 2.6.1 矢量描绘工具Plove 29 2.6.2 标量工具Scalar 29 27、结束语 30 第三章 物理层仿真(信道) 32 3.1 UWB的基础知识 32 3.1.1 UWB信号的应用背景 32 3.1.2 UWB信号的定义 32 3.1.3 UWB的脉冲生成方式(高斯脉冲,非高斯脉冲) 34 3.1.4 UWB的调制方式 34 3.1.5 用功率控制多址接入方法来进行链路的建立控制 36 3.2 用OMNeT++对UWB进行仿真 37 3.2.1 算法仿真的概述 37 3.2.2 算法的具体流程 39 3.2.3 算法的主要代码 41 3.2.4 仿真结果分析 58 3.2.5 应用前景 58 参考文献 59 第四章 MAC层仿真 60 概述 60 4.1 无线传感器网络MAC层特性及分类 60 4.1.1 无线信道特性 60 4.1.2 MAC 设计特性分析 61 4.1.3 无线传感器网络典型MAC协议的分类 61 4.2 基于随机竞争的MAC协议 62 4.2.1 S-MAC协议[12] 62 4.2.2 T-MAC协议 64 4.2.3 AC-MAC协议 65 4.3 基于时分复用的MAC协议 65 4.3.1 D-MAC协议 65 4.3.2 TRAMA协议 66 4.3.3 AI-LMAC协议 66 4.4 其他类型的MAC协议 67 4.4.1 SMACS/EAR协议 67 4.4.2 基于CDMA技术的MAC协议 67 4.4.3 DCC-MAC 68 4.5 基于OMNeT++的MAC层协议仿真 69 4.5.1 S-MAC协议的仿真 69 4.5.2 S-MAC协议流程图 70 4.5.3 S-MAC协议的分析 71 4.6 小结 86 参考文献 86 第五章 网络层仿真 88 概述 88 5.1 无线传感器网络路由协议研究 88 5.1.1 无线传感器网络协议分类 88 5.1.2无线传感器网络中平面路由 90 5.1.3无线传感器网络中层次化路由 91 5.1.4 经典算法的OMNET仿真 93 5.2 无线传感器网络路由协议研究的发展趋势 104 5.3 无线传感器网络层路由协议与OMNET++仿真 104 5.3.1 无线传感器网络层路由与OMNET++仿真的基本概念[19] 104 5.3.1.1 传感器网络的体系结构 105 5.3.1.1.1 传感节点的物理结构 105 5.3.1.1.2 传感器网络的体系结构与网络模型 106 5.3.2 传感器网络层路由协议的基本概念 106 5.3.2.1 网络通信模式[28] 106 5.3.2.1.1 单播: 107 5.3.2.1.2 广播: 107 5.3.2.1.3 组播: 108 5.3.2.2传感器网络层设计[29] 108 5.3.3 OMNET++仿真软件的基本概念 109 5.4 无线传感器网络路由协议介绍 110 5.4.1 泛洪法(Flooding)[32] 111 5.4.2 定向扩散(Directed Diffusion:DD)[33] 112 5.4.3 LEACH( Energy Adaptive Clustering Hierarchy)[34] 113 5.5. OMNET++仿真实例 114 5.5.1 泛洪法 114 5.5.2 gossiping协议 119 5.6 本章总结 121 参考文献 121 第六章 应用层仿真 125 6.1 无线传感器网络节点定位 125 6.1.1 节点定位的基本概念 125 6.1.1.1 节点定位的定义 125 6.1.1.2 节点定位的重要性 126 6.1.2 节点定位的研究 126 6.1.2.1 测距方法 126 6.1.2.2 节点定位原理 127 6.1.2.3 节点定位算法分类 128 6.1.2.3.1 锚节点分类 128 6.1.2.3.2 计算方式分类 129 6.1.2.3.3 测距分类 130 6.1.2.3.4 节点移动性分类 130 6.1.2.4 节点定位性能评价[37] 130 6.1.3基于OMNET++的DV—Hop定位算法仿真 132 6.1.3.1 DV—Hop定位算法的基本思想 132 6.1.3.2 DV—Hop定位算法仿真 133 6.2 网络管理 141 6.2.1概叙 141 6.2.1.1 wsn网络管理的定义及范畴 142 6.2.1.2 wsn网络管理系统的分类 143 6.2.1.3 wsn网络管理系统的设计标准 144 6.2.2 wsn网络管理系统 145 6.2.2.1 能量管理系统 145 6.2.2.1.1 SenOs[5] 145 6.2.2.2 拓扑控制系统 146 6.2.2.2.1 TopDisc 算法 146 6.2.2.3 可调试、可配置、可编程系统 148 6.2.2.2.1 sympathy 系统[42] 148 6.2.2.2.2 Agilla系统[7] 149 6.2.3典型网络管理算法的Omnet 模拟 150 6.2.3.1 基于Wsn的一个简单拓扑查找算法算法模拟 150 6.2.4 结论 155 6.3 基于路由层安全协议的OMNeT++仿真 156 6.3.1 基础知识介绍 156 6.3.1.1无线传感器网络安全性的重要性和必要性 156 6.3.1.2 无线传感器网络的安全目标 156 6.3.1.3无线传感器网络中的路由协议概述 157 6.3.1.4无线传感器网络路由协议的攻击方法 157 6.3.1.5无线传感器网络中经典路由协议安全性分析 160 6.3.1.6 安全路由技术分析 162 6.3.1.6.1 密钥管理技术[20, 23, 24, 25] 162 6.3.1.6.2 安全路由协议 162 6.3.2 在OMNeT++ 中的仿真 163 6.3.3 总结 172 参考文献 172 第七章 实例(无线传感器网络移动节点定位仿真) 179 概述 179 7.1 移动定位算法介绍 179 7.1.1 室内移动节点定位算法 179 7.1.1.1 Active Badge系统 180 7.1.1.2 RADAR系统 180 7.1.1.3 Cricket系统 180 7.1.2 室外移动节点定位算法 181 7.1.2.1 基于静态定位的移动定位算法 181 7.1.2.2 纯移动定位算法 182 7.2 移动定位算法的OMNeT++仿真 183 7.2.1 MCL(Monte Carlo Localization)定位算法简介 183 7.2.2 MCL(Monte Carlo Localization)的OMNeT++仿真 185 7.2.2.1 建立网络拓扑 185 7.2.2.2 编码阶段 190 7.3.总结和发展趋势 195 参考文献 195
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值