如何在omnetpp.ini中声明一组参数

时间:2019-03-28 13:13:33

标签: omnet++ inet

我有两种类型的主机:wirelessHostA[0..N]wirelessHostB[0..N]。我想声明每个主机wirelessHostA[0..N]来向各自的wirelessHostB[0..N]发送消息。示例:A[0] sends to B[0]A[10] sends to B[10]。表达方面,我有这样的东西:

*.wirelessHostA[0..${N}].app[ * ].destAddresses = "wirelessHostB[0..${N}]"

尽管这是不正确的。我不确定如何声明一个可以在运行期间迭代的变量,而不是每次运行的值。

1 个答案:

答案 0 :(得分:1)

您不应将INI文件中的行视为分配,可以在其中创建诸如循环等的过程结构。而应将它们视为模式匹配规则。当模块需要参数时,它将从头开始逐行扫描INI文件,并尝试将第一部分(即=之前的部分)与当前模块路径匹配。如果匹配,则将第二部分分配给参数。如果不是,则继续INI文件中的下一行。

因此,首先编写模式规则,然后编写可以在该上下文中求值的值。指定值时,可以引用其他参数(在模块的上下文中可用),也可以引用其他额外的上下文信息,例如匹配子模块的索引(如果它是向量的一部分)。还有其他功能可以访问etc的父级索引。

在这种情况下,我们有一个主机的子模块矢量,其中每个主机都包含一个应用程序的子模块矢量。 index运算符将返回当前上下文模块的索引(这是应用程序向量中的位置),但实际上我们需要应用程序向量的父项(它是宿主向量)的索引。也有一个NED函数,称为parentIndex()。因此解决方案如下所示:

*.wirelessHostA[*].app[*].destAddresses = "wirelessHostB[" + string(parentIndex()) + "]"

有关更多信息,请参见https://doc.omnetpp.org/omnetpp/manual/#sec:ned-functions:category-ned