Omnet ++简单的无线节点

时间:2017-10-18 16:08:55

标签: omnet++

Iam尝试为MANET网络创建简单的无线节点,该节点可以向范围内的其他节点发送消息。在INET中实现的解决方案还包含其他层,如IP,传输,应用程序,我不需要。

我是omnet ++的新手,所以我有点挣扎。我正在考虑使用RadioIn输入创建自己的节点,但我不知道如何仅在范围通信中实现,我还需要节点移动性。

其他解决方案是仅使用INET框架中的Radiomedium,但我不知道该怎么做。

有人可以给我一些关于如何实现目标的乞丐提示吗?正如我所说,我只需要创建移动主机,它可以将定义的消息发送到范围内的所有其他主机。

编辑:我尝试使用IdealRadioMedium并创建我的简单模块并连接到它。这是NED文件。

import inet.physicallayer.common.packetlevel.Radio;
import inet.common.figures.DelegateSignalConfigurator;
import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator;
import inet.node.inet.INetworkNode;
import inet.node.inet.WirelessHost;
import inet.physicallayer.contract.packetlevel.IRadioMedium;
import inet.visualizer.integrated.IntegratedCanvasVisualizer;
import inet.linklayer.contract.IWirelessNic;
import inet.networklayer.common.InterfaceTable;

simple Txc1
{
    gates:
        input in;
        output out;
}

module Pokusny
{
    parameters:
       @display("i=device/wifilaptop");
       int numRadios = default(1);
       @networkNode;

    gates:
         input radioIn[numRadios] @directIn;

    submodules:
        mynode: Txc1;
        wlan[numRadios]: <default("Ieee80211Nic")> like IWirelessNic {
            parameters:
                @display("p=216,406,row,60;q=queue");
        }
        interfaceTable: InterfaceTable {
            parameters:
                @display("p=53,300;is=s");
        }
    connections allowunconnected:     
        for i=0..sizeof(radioIn)-1 {
            radioIn[i] --> { @display("m=s"); } --> wlan[i].radioIn;
            wlan[i].upperLayerOut -->  mynode.in;
            wlan[i].upperLayerIn <--  mynode.out;
        }
}

network WirelessC
{
    parameters:
        string hostType = default("WirelessHost");
        string mediumType = default("IdealRadioMedium");

        @display("bgb=650,500;bgg=100,1,grey95");
        @figure[title](type=label; pos=0,-1; anchor=sw; color=darkblue);

        @figure[rcvdPkText](type=indicatorText; pos=420,20; anchor=w; font=,20; textFormat="packets received: %g"; initialValue=0);
        @statistic[rcvdPk](source=hostB_rcvdPk; record=figure(count); targetFigure=rcvdPkText);
        @signal[hostB_rcvdPk];
        @delegatesignal[rcvdPk](source=hostB.udpApp[0].rcvdPk; target=hostB_rcvdPk);

    submodules:
        visualizer: IntegratedCanvasVisualizer {
            @display("p=580,125");
        }

        configurator: IPv4NetworkConfigurator {
            @display("p=580,200");
        }
        radioMedium: <mediumType> like IRadioMedium {
            @display("p=580,275");
        }
        //figureHelper: DelegateSignalConfigurator {
        //    @display("p=580,350");
        //}
        hostA: Pokusny {
            @display("p=50,325");
        }
        hostB: Pokusny {
            @display("p=450,325");
        }
}

Txc1.cc

class Txc1 : public cSimpleModule
{
  protected:
    // The following redefined virtual function holds the algorithm.
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
};
// The module class needs to be registered with OMNeT++
Define_Module(Txc1);

void Txc1::initialize()
{
        cMessage *msg = new cMessage("tictocMsg");
        send(msg, "out");
}
void Txc1::handleMessage(cMessage *msg)
{
    send(msg, "out"); // send out the message
}

和.ini文件

network = WirelessC
sim-time-limit = 25s


*.host*.wlan[0].typename = "IdealWirelessNic"
*.host*.wlan[0].mac.useAck = false
*.host*.wlan[0].mac.fullDuplex = false
*.host*.wlan[0].radio.transmitter.communicationRange = 500m
*.host*.wlan[0].radio.receiver.ignoreInterference = true

*.host*.**.bitrate = 1Mbps

当我运行模拟时,它会询问Interfacetable参数,我不知道该输入什么,因为我没有在遍历功能代码中找到它(我必须添加它,因为它抛出错误,如果它不是子模块则丢失)。现在我得到了

getCointainingNode()节点模块未找到它应该具有模块中的模块WirelessC.interfaceTable的属性名称networkNode .... durint网络初始化

编辑:我添加了networknode作为参数,现在我在路径上找不到模块&#39; .mobility&#39;由网络初始化期间模块inte :: physicallayer:IsotropicAntenna中的par WirelessC.hostA.wlan [0] .radio.antenna.Mobilitymodule定义

2 个答案:

答案 0 :(得分:0)

如果您打算进行无线通信和移动,INET仍将是最佳使用框架。

结帐the INET Wireless Tutorial。它基本上涵盖了构建具有无线通信的移动节点的小方案所需的所有步骤。

答案 1 :(得分:0)

我想指出INET的无线教程:https://omnetpp.org/doc/inet/api-current/tutorials/wireless/

它始于你的问题。唯一剩下的就是用一个没有协议的主机替换标准UDP主机,甚至可能实现自己的主机。整个无线部分在教程中进行了解释。

如果要检查所使用模块的源文件,则需要沿着依赖链向下走,因为每个复合NED模块(在某一点上)都包含用C ++实现的简单模块。 例如。负责分发信号的模块是IdealRadioMedium使用RadioMedium。现在您需要找到直接与此模块通信的Node实现。 从本教程中使用的WirelessHost开始,底层模块是 StandardHost - &gt; ApplicationLayerNodeBase - &gt; LinkLayerNodeBase后者是第一个使用实际实现的子模块的人。 使用的网络适配器在omnet.ini中配置*.host*.wlan[0].typename = "IdealWirelessNic"。此模块依赖于Radio

通过发现所有这些,您只需要查找Radio.cc发送给RadioMedium.cc的API调用,并找到负责发送数据的实际代码。 了解该继承链,您甚至可以在您认为合适的级别上使用自定义模块。例如,只需实现自己的LinklayerNodeBase模块。