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

前面介绍了无线传感网络仿真框架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文件:

在omnet++上仿真无线传感网络2_第1张图片

我们发现,网络中除了我们自己定义的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)