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

How to declare a set of parameters in omnetpp.ini

我有两种类型的主机: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}]"

虽然这个不正确。我有点不确定如何声明一个可以在 运行 期间迭代的变量,而不是每个 运行.

的值

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

所以首先,编写一个模式规则,然后是一个可以在该上下文中评估的值。当您指定该值时,您可以引用其他参数(在模块的上下文中可用)或者您可以引用其他额外的上下文信息,例如匹配的子模块的索引(如果它是向量的一部分)。还有其他函数可以访问等的父索引。

在这种情况下,我们有一个主机子模块向量,其中每个主机都包含一个应用程序子模块向量。 index 运算符将 return 当前上下文模块的索引(这是应用程序向量中的位置),但我们实际上需要应用程序向量的父级索引(这是主机向量).为此也有一个 NED 函数,称为 parentIndex()。所以解决方案看起来像这样:

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

有关详细信息,请参阅 https://doc.omnetpp.org/omnetpp/manual/#sec:ned-functions:category-ned