Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Omnet++ 如何通过omnetpp.ini中的显示字符串更改模块位置?_Omnet++ - Fatal编程技术网

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

Omnet++ 如何通过omnetpp.ini中的显示字符串更改模块位置?,omnet++,Omnet++,我有一个由几个模块组成的网络,其中一个模块使用stationambility作为移动模块。最简单的例子: network World { submodules: station1: station { @display("p=800,800;is=vl"); } } 与 站是一个外部模块,我可能不会对其应用更改 现在,我想通过更改omnetpp.ini来更改此模块的位置,这样我就可以轻松地将station1从一个运行移动到另一个运行 我尝试将其参数化,如所示:

我有一个由几个模块组成的网络,其中一个模块使用
stationambility
作为移动模块。最简单的例子:

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

是一个外部模块,我可能不会对其应用更改

现在,我想通过更改
omnetpp.ini
来更改此模块的位置,这样我就可以轻松地将
station1
从一个运行移动到另一个运行

我尝试将其参数化,如所示:

所以我可以在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).
模块(inet::StationaryMobility)场景中出现错误。网络初始化期间,station1.mobility(id=28):初始化后,移动位置不是一个有限的数字(x=-nan,y=-nan,z=-nan)。
不幸的是,我既找不到生成的显示字符串,也没有找到直接操纵
StationaryMobility
的方法


我怎样才能从
omnetpp.ini
中更改
站1
的位置?

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

首先查看一下
StationaryMobility.ned
,找出模块具有哪些参数,以便您可以稍后在
omnetpp.ini
中对其进行编辑

最重要的参数是:

  • 双首字母X
  • 双首字母缩写
  • 双首字母Z
  • bool initFromDisplayString
最后一个(
initFromDisplayString
)基于
displayString
(特别是
@display(“p=x,y;”)中的
p
参数)启用位置参数的初始设置

如果要替换显示字符串参数,则需要将X和Y位置定义为双参数,如下所示。但是您忘记定义参数类型
double
,因此OMNeT不知道1600是什么(在本例中)

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

回到实际的
平稳移动
模型。 您可以直接在
omnetpp.ini
文件中设置初始位置,而不是使用
displayString
,如下所示:

**.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中进行。

非常感谢!我不敢相信我错过了这些选择。到现在为止,一定已经看了太久的代码了。不过我想不必为禁区操心。由于您的提示,我可以查找到,如果没有初始化,则约束是无限的,这对我来说是合适的。
<!> 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).
**.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