如何通过omnetpp.ini中的显示字符串更改模块位置?

时间:2017-07-05 11:20:14

标签: omnet++

我有一个由多个模块组成的网络,其中一个模块使用StationaryMobility作为移动模块。最小的例子:

network World {
  submodules:
    station1: station {
      @display("p=800,800;is=vl");
    }
}

import inet.mobility.static.StationaryMobility;

module station {
  submodules:
    mobility: StationaryMobility
    { }
}

station是一个外国模块,我可能不会对其进行更改。

我现在想通过omnetpp.ini中的更改来更改此模块的位置,以便我可以轻松地从运行中移动station1

我尝试对其进行参数化,如https://omnetpp.org/doc/omnetpp/manual/#sec:graphics:displaystring-parameter-substitution

所示
network World {
  parameters:
    posX = 800;
    posY = 800;
  submodules:
    station1: station {
      @display("p=$posX,$posY;is=vl");
    }
}

所以我可以在omnetpp.ini中执行此操作:

*.posX = 1600
*.posY = 2400

但是StationaryMobility不喜欢它:

<!> Error in module (inet::StationaryMobility) scenario.station1.mobility (id=28) during network initialization: Mobility position is not a finite number after initialize (x=-nan,y=-nan,z=-nan).

不幸的是,我既没有找到生成的显示字符串,也没有找到直接操纵StationaryMobility的方法。

如何在station1

中更改omnetpp.ini的位置

1 个答案:

答案 0 :(得分:2)

我认为你在这里混合了两件事。 displayString可用于修改NED编辑器和GUI中模块的位置,但这不一定是INET使用的移动模型(如StationaryMobility)的位置。

首先查看StationaryMobility.ned,找出该模块的参数,以便以后编辑omnetpp.ini

最重要的参数是:

  • double initialX
  • double initialY
  • double initialZ
  • bool initFromDisplayString

最后一个(initFromDisplayString)根据displayString(特别是p中的@display("p=x,y;")参数)启用位置参数的初始设置。

如果要替换显示字符串参数,则需要将X和Y位置定义为双参数,就像its done in the manual一样。但是你忘了定义参数类型double,所以OMNeT不知道1600是什么(在这个例子中)。

posX文件中设置posY / omnetpp.ini变量也可能需要双星号,具体取决于您的NED结构:asterisk vs double asterisks

回到实际的StationaryMobility模型。 您可以直接在displayString文件中设置初始位置,而不是使用omnetpp.ini,就像这样:

**.constraintAreaMinX = 0m
**.constraintAreaMinY = 0m
**.constraintAreaMinZ = 0m
**.constraintAreaMaxX = 100m  # example value
**.constraintAreaMaxY = 100m  # example value
**.constraintAreaMaxZ = 0m
**.mobility.initFromDisplayString = false # ignore displayString positions
station1.mobility.initialX = 50m
station1.mobility.initialY = 50m

根据您的网络结构和模块层次结构,您需要调整station1.mobility.initialX的路径,或者您可以通过星号运算符来简化它。

然后在omnetpp.ini中可以使用依赖于运行的位置设置,不同运行的迭代等等。