Home > NED, OMNeT++ > OMNet++ 中的 NED 语言学习(3)

OMNet++ 中的 NED 语言学习(3)

本节内容是复合模块,即 Compound modules。

一个复合模块可以拥有gates和参数,但是并没有C++代码与之关联。如果想要为一个复合模块添加代码,可以将代码封装为一个简单模块,然后以子模块的方式来添加到复合模块中。

一个复合模块的声明可以包含若干部分,它们都是可选的:

module Host
{
         types: // 在这里定义内部类型,如模块和信道类型等,仅在本地使用
                   ...
         parameters:
                   ...
         gates:
                   ...
         submodules: // 子模块,可以创建子模块向量,子模块的类型可以来自参数
                   ...
         connections:// 可以通过循环,条件等创建连接,连接的行为可以通过将信道与连接联系来定义,信道的类型也可以来自参数
                   ...
}

复合模块可以通过继承来扩展,继承时不仅可以加入参数和gates,还可以加入新的子模块和新的连接,但是不能对子模块或连接进行“de-inherit”,或者修改所继承的模块或类型。

下面的例子展示了将普通的协议组装为一个无线的主机的”stub”,并通过subclassing添加用户代理。

module WirelessHostBase
{
         gates:
                   input radioIn;
         submodules:
                   tcp: TCP;
                   ip: IP;
                   wlan: Ieee80211;
         connections:
                   tcp.ipOut --> ip.tcpIn;
                   tcp.ipIn <-- ip.tcpOut;
                   ip.nicOut++ --> wlan.ipIn;
                   ip.nicIn++ <-- wlan.ipOut;
                   wlan.radioIn <-- radioIn;
}
module WirelessUser extends WirelessHostBase
{
         submodules:
                   webAgent: WebAgent;
         connections:
                   webAgent.tcpOut --> tcp.appIn++;
                   webAgent.tcpIn <-- tcp.appOut++;
}

WirelessUser复合模块可以进一步骤扩展,例如添加一个Ethernet port:

module DesktopUser extends WirelessUser
{
         gates:
                   inout ethg;
         submodules:
                   eth: EthernetNic;
         connections:
                   ip.nicOut++ --> eth.ipIn;
                   ip.nicIn++ <-- eth.ipOut;
                   eth.phy <--> ethg;
}

Related posts:

  1. OMNet++ 中的 NED 语言学习(1)
  2. OMNet++ 中的 NED 语言学习(2)
  3. OMNet++ 中的 NED 语言学习(4)
  4. OMNet++ 10 分钟教程
Categories: NED, OMNeT++ Tags:
  1. No comments yet.
  1. No trackbacks yet.