【问题标题】:Position of INET sink node defined by $ParameterName is not updated$ParameterName 定义的 INET sink 节点的位置未更新
【发布时间】:2021-08-05 15:44:49
【问题描述】:

我如下搭建了一个无线传感器网络。(强调sink节点定义)

import  inet.physicallayer.wireless.apsk.packetlevel.ApskScalarRadioMedium;                                          
import inet.node.inet.SensorNode;
network SensorNetwork
{      
int numNodes = default(15);   
string interfaceTableModule = default("interfaceTable");    
int areaX @unit(m) = 500m;             
int areaY @unit(m) = 500m;            
int sinkX @unit(m) = int (this.areaX*(0.5));                
int sinkY @unit(m) = this.areaY;                
@display("bgb=$areaX,$areaY;bgu=m");

submodules:
    sink: SensorNode {
      @display("i=device/antennatower;p=$sinkX,$sinkY");
    }

    node[numNodes]: SensorNode;

    radioMedium: ApskScalarRadioMedium {
        @display("p=45,79");
    }
}

我想强调水槽位置由参数给出的事实。当我运行项目时,去查看与 sink 节点的移动子模块相关的详细信息,我发现最后一个位置坐标是(lastPosition (Coord) (0, 0, 0) m),而它应该是网络中 sink 节点的当前坐标。 当我删除参数并从@display("p=500,500;i=device/antennatower"); 为X 和Y 提供数值时,位置很好地更新为(lastPosition (Coord) (500, 500, 0) m)。

如何解决?

非常感谢您的建议。

提前致谢。

【问题讨论】:

  • 您使用的是哪个版本的 omnet?
  • 嗨@Rudi。我正在使用 omnetpp-6.0pre11

标签: omnet++ inet


【解决方案1】:

当我尝试重现此内容时(我使用的是 omnetpp-pre13 开发分支 + inet 4.4 开发分支),我收到错误消息:

Mobility position is not a finite number after initialize (x=-nan,y=-nan,z=-nan) -- in module (inet::StationaryMobility)

但是,您可以通过 .INI 文件中的移动模块(initialX、initialY、initialZ 参数)指定节点位置,我认为这是预期的方式。您也可以使用变量作为那里的位置。

【讨论】:

  • 嗨@adamgeorge309。我需要在我的 C++ 代码中改变接收节点的位置,这就是为什么我更喜欢以参数方式定义它的原因。但是,我已经按照您的建议通过 constraintAreaMinX , constraintAreaMaxX ....parameters 定义节点位置
  • 如果您需要在 C++ 代码中更改位置,则可以通过为与位置相关的代码创建移动模型来完成。
  • 另外,我认为 NED 变量参数应该仍然可以工作,所以它最终可能会得到修复。
  • 是的,NED 变量是固定的,我可以使用它。只有网络中的更新没有完成。例如,当我使用 DataLinkVisualizer 在service 级别查看活动时,箭头仍然指向坐标点(0,0,0)m,而我的接收器节点在网络中占据另一个位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 2013-09-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多