gpt4 book ai didi

Omnet++简单无线节点

转载 作者:行者123 更新时间:2023-12-05 07:39:51 31 4
gpt4 key购买 nike

我正在尝试为 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() 节点模块它应该有一个属性名称 networkNode 用于模块中的 WirelessC.interfaceTable .... durint 网络初始化

编辑: 我添加了 networknode 作为参数,现在我得到了 Module not found on path '.mobility' defined by par WirelessC.hostA.wlan[0].radio.antenna.Mobilitymodule in module inte::物理层:网络初始化期间的各向同性天线

最佳答案

我想向您介绍 INET 的无线教程:https://omnetpp.org/doc/inet/api-current/tutorials/wireless/

它正是从您的问题开始的。唯一剩下的就是用一个完全不使用协议(protocol)的主机替换标准的 UDP 主机,甚至可以实现您自己的协议(protocol)。教程中解释了整个无线部分。

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

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

关于Omnet++简单无线节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46814610/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com