概述
前面介绍了无线传感网络仿真框架mixim的安装以及新建工程。下面开始这个仿真工程的第一步,建立需要仿真的网络拓扑模型,也就是编写ned文件。
1.建立一个五十结点(node)组成的拓扑网络WSNRouting。
package wsntestn.simulations;
import org.mixim.base.modules.BaseNetwork;
import org.mixim.modules.node.Host802154_2400MHz;
//
// This example shows how to simulate wireless sensor networks.
// Three different routing protocols are considered, for different traffic
// types:
// convergecast, with Wiseroute;
// network-level broadcast, with flooding;
// and probabilistic broadcast.
//
network WSNRouting extends BaseNetwork
{
parameters:
int numHosts; // total number of hosts in the network
submodules:
node[numHosts]: Host802154_2400MHz {
parameters:
numHosts = numHosts;
@display("p=129,80;b=42,42,rect,yellow;i=device/wifilaptop");
}
connections allowunconnected:
}
对上面代码稍作解释。程序第一二行导入mixim框架中的模块,类似于java中的导包。
import org.mixim.base.modules.BaseNetwork
因为我们建立的这个网络是在mixim框架中的BaseNetWork所定义的网络基础上扩展而来的。
import org.mixim.modules.node.Host802154_2400MHz;
我们所定义的这50个结点(node)也不是自己完全自己编写的,是扩展自mixim中的Host802154_2400MHz结点。
network WSNRouting extends BaseNetwork
我们的无线传感网络WSNRouting扩展自BaseNetwork。
parameters:
int numHosts; // total number of hosts in the network
添加自定义参数numHosts,也就是node结点的个数。这个参数配置在仿真配置文件omnetpp.ini中。配置文件将在后面文章中介绍。
submodules:
node[numHosts]: Host802154_2400MHz {
parameters:
numHosts = numHosts;
@display("p=129,80;b=42,42,rect,yellow;i=device/wifilaptop");
网络中包含的子模块,为网络添加结点(node)。node扩展自Host802154_2400MHz结点。@display配置显示参数。
这是网络已经基本搭成。我们在IDE中通过design模式查看这个wsnrouting.ned文件:
我们发现,网络中除了我们自己定义的node以外,还有connectionManager模块和world模块。我们不难想到这两个模块一定是从mixim中的basenetwork中继承而来的。有必要对这两个模块进行了解。在mixim工程中查看相应代码。
先看connectionmanager
simple ConnectionManager like IConnectionManager
{
parameters:
// debug switch for core framework
bool coreDebug;
// send directly to the node or create separate gates for every connection
bool sendDirect;
// maximum sending power used for this network [mW]
double pMax @unit(mW);
// minimum signal attenuation threshold [dBm]
double sat @unit(dBm);
// minimum path loss coefficient
double alpha;
// minimum carrier frequency of the channel [Hz]
double carrierFrequency @unit(Hz);
// should the maximum interference distance be displayed for each node?
bool drawMaxIntfDist = default(false);
@display("i=abstract/multicast");
}
simple ConnectionManager like IConnectionManager
表明connectionmanager是一个simple模块。网络中的一切行为动作都是由这些simple模块背后的c++代码所定义。所以若想了解connectionmanager有哪些功能就要查看相应的c++代码,connectionmanager定义了结点之间连接相关的参数以及连接行为,下面的c++代码定义了结点(node)的无线通信距离。
{
double interfDistance;
//the minimum carrier frequency for this cell
double carrierFrequency = par("carrierFrequency").doubleValue();
//maximum transmission power possible
double pMax = par("pMax").doubleValue();
if (pMax <=0) {
error("Max transmission power is <=0!");
}
//minimum signal attenuation threshold
double sat = par("sat").doubleValue();
//minimum path loss coefficient
double alpha = par("alpha").doubleValue();
double waveLength = (BaseWorldUtility::speedOfLight / carrierFrequency);
//minimum power level to be able to physically receive a signal
double minReceivePower = pow(10.0, sat / 10.0);
interfDistance = pow(waveLength * waveLength * pMax
/ (16.0*M_PI*M_PI*minReceivePower),
1.0 / alpha);
ccEV << "max interference distance:" << interfDistance << endl;
return interfDistance;
}
最后
以上就是动听服饰为你收集整理的在omnet++上仿真无线传感网络2的全部内容,希望文章能够帮你解决在omnet++上仿真无线传感网络2所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复