为什么 radioIn 连接需要 "like IRadio" 来停止门未连接到兄弟错误?

Why is "like IRadio" required for radioIn connection to stop gate is not connected to sibling error?

我创建了一个简单的节点,它可以将内容传递到网络层 BroadcastRouting,然后再将它们转发回去。

我收到错误:Gate 'radioIn' is not connected to sibling or parent module. 我通过为输入门提供 属性 @directIn 并通过使物理层 <default("Ieee802154UwbIrRadio")> like IRadio 而不仅仅是 Ieee802154UwbIrRadio

来修复它

为什么要修复它? 我以为Ieee802154UwbIrRadio已经有了radioIn gate

module Node
{
    @display("bgl=8;bgb=97,315");
    gates:
        input radioIn @directIn;
    submodules:
        Physical: <default("Ieee802154UwbIrRadio")> like IRadio {
            @display("p=41,74");
        }
        Link: Ieee802154Mac {
            @display("p=41,169");
        }
        Net: BroadcastRouting {
            @display("p=41,248");
        }
    connections allowunconnected:
        radioIn --> Physical.radioIn;
        Physical.upperLayerOut --> Link.lowerLayerIn;
        Physical.upperLayerIn <-- Link.lowerLayerOut;
        Link.upperLayerOut --> Net.fromMac;
        Link.upperLayerIn <-- Net.toMac;
}

为了保持封装概念的工作,INET 的无线电基础设施(更准确地说是管理媒体本身的模块)期望您的 Node 模块有一个 radioIn 门。无线消息将使用 directSend() 呼叫传递到该门。现在因为这些门 没有 连接到外部的任何东西,而它们显然连接到 Physical 模块的门 OMNeT++ 抛出一个错误,因为这是一个典型的错误。这就是为什么你必须明确地用 @directIn 注释标记门,以禁用此验证检查。

事实上,该门连接(在内部)到 Physical.radioIn 门或 Ieee802154UwbIrRadio 有一个 radioIn 门只是一个实现细节。它应该重要,因为它在节点内部。