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