我有两种类型的主机: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}]"
尽管这是不正确的。我不确定如何声明一个可以在运行期间迭代的变量,而不是每次运行的值。
答案 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。