2

我的模拟由一个移动节点和三个接入点组成,我想根据每个接入点检测移动节点的方向,我知道如何计算它,但是移动节点的位置会随时间变化......

我想在 1 秒前保存移动节点的最后位置..或每隔一秒定期检查一次,问题是放置我的代码以保证每秒执行一次的最佳位置....第二件事是哪个源代码文件最好声明全局变量?任何帮助高度赞赏...

4

2 回答 2

0

假设您使用的是 INET(您的问题中没有提到):

存储/计算节点速度的最佳位置就在移动模块内部,该模块已经有一个定期更新计时器,但为什么需要计算它呢?该IMobility接口已经有了getCurrentAngularPosition()getCurrentSpeed()因此您可以随时获取移动方向和节点速度的绝对值,就像您可以获取节点的位置一样。您应该检查您实际使用的移动模型是否实现了这些功能。如果没有,你应该在那里实现它们。

于 2015-08-28T09:06:26.150 回答
0

您可以利用每个节点为自己安排的定期消息。把它放在最后阶段initialize()就可以了。

您可以执行以下操作:

void initialize(int stage)
{
    if (stage == 3)
    {
        cMessage *pMsg = new cMessage("myPeriodicMessage");
        scheduleAt(simTime()+1.0, pMsg);
    }
}

然后在handleMessage()有:

void handleMessage(cMessage *msg)
{
    if (msg->isSelfMessage())
    {
       /* if you have different selfMessages, compare them like below, or use different message kinds and checks accordingly */
       if (strcmp("myPeriodicMessage", msg->getName())==0)
       {
            doPeriodicTaks();
            scheduleAt(simTime()+1.0, pMsg);
       }
    }
}

请注意,这样您将分别获得每个节点所需的信息。如果你想以集中的方式拥有它,你应该遵循@Rudi 的建议。

于 2015-08-28T10:44:36.193 回答