在我的默认静脉场景(示例中的那个)中,我的车上需要第二个天线。在Car.ned
中,我输入了以下代码(从连接块进行复制和粘贴):
nic2.upperLayerOut --> appl2.lowerLayerIn;
nic2.upperLayerIn <-- appl2.lowerLayerOut;
nic2.upperControlOut --> appl2.lowerControlIn;
nic2.upperControlIn <-- appl2.lowerControlOut;
veinsradioIn2 --> nic2.radioIn;
现在我的节点上有两个天线(它们可以工作!)。但是我如何决定谁发送和谁接收?通过这种方式,我只是改变了网络的拓扑结构,但我无法处理通信!我需要达到这种情况:节点 - >节点(第一天线)和节点 - > RSU(第二天线)。我想我应该在TraCIDemo11p.cc
和TraCIDemoRSU11p.cc
工作,但代码是巨大的,我很容易迷路。最终的目标是确保这两个天线使用不同的协议,但目前我使用相同的协议并使用前面提到的这两个不同的通道。
答案 0 :(得分:1)
对你的问题给出一个简明的答案有点困难,因为它有多个组件,但这里有一些你应该看的重要事项:
首先:现在,你所做的是指定一辆带有两个网络接口(nic
和nic2
)和两个独立应用程序(appl
和{{ 1}})。我认为,根据你的描述,这不是你想要的。我建议您的第一步是创建一个连接到两个网络接口的应用程序接口。这意味着创建相应的appl2
文件。您可以使用.ned
作为示例。确保将应用程序对象./veins/modules/application/traci/TraCIDemo11p.ned
(在appl
中)定义为Car.ned
文件,并按照您描述的方式连接这两者。然后,您将从应用程序到两个网络接口有8个频道(我称之为.ned
,appl.nic1LayerIn
,appl.nic1ControlIn
等等。
之后,您将需要编写逻辑来决定特定消息是应该转到一个网络接口还是另一个网络接口,并将该代码放入应用程序的源代码中。要与不同的网络接口通信,您只需使用相应的通道即可。要了解这是如何工作的,您需要稍微深入研究静脉源代码:与通道交互的代码不是直接在appl.nic2LayerIn
源中,而是在某个超类中的某处 - (我认为这是TraCIDemo11p
,但我并非100%肯定。您可以修改这些文件以使用多个天线,也可以创建新的源文件 - 但我不确定哪个是较少的代码。
要记住的另一件事是,您还需要在BaseWaveApplLayer
中提供相应的设置(omnetpp.ini
,类似于*.**.nic2...
)。我不确定在相同位置使用两个天线会产生什么样的静脉(这可能会导致一些奇怪的效果),但我也不记得天线位置的指定位置。