【问题标题】:where is the best place to declare global variables, and checking something periodically?声明全局变量并定期检查的最佳位置在哪里?
【发布时间】:2015-08-29 03:03:10
【问题描述】:

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

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

【问题讨论】:

  • 关于你的第二个问题:你应该单独发布不相关的问题。

标签: omnet++ inet


【解决方案1】:

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

你可以做一些事情:

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 的建议。

【讨论】:

  • 你做了一件了不起的事,通过你的示例代码,我完全理解了周期性消息是如何工作的,在我无法估计它们是如何工作之前,顺便说一下我必须检查 Rudi 的建议,可能对我来说更容易,如果不是我会采取你的方式,它可以解决我的问题..再次感谢您的及时回复......
【解决方案2】:

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

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

【讨论】:

  • 感谢您的解释...您实际上指出了我想要的一件好事,是的,我必须检查已经有定期计时器的移动模块,但我的问题是我不想要速度,我想随时根据每个接入点检测移动节点的方向移动,因此getCurrentAngularPosition()返回什么?不知道返回值是根据什么的?!我试图在某个时间之前捕获节点的最后位置并获取当前位置,然后通过这两个点和第三个(AP)我可以根据该 AP 获取节点的方向。
  • 既然我在线,我会尽力回答你的问题。 @Rudi 如果我在某处误导,请纠正我。 getCurrentAngularPosition() 基于假设在整个场景中放置的全局坐标系返回节点的移动角度。如果您只寻找移动方向,那么来自getCurrentAngularPosition() 的信息就足够了。但同样,取决于您的用例。例如,如果您有两个节点在同一方向上平行移动,您可能无法区分两者。
  • 正如你上面提到的(getCurrentAngularPosition() 返回节点的移动角度,基于假设放置在整个场景中的全局坐标系),因为我认为它对我没有用,因为我有一个移动节点和三个接入点,我想分别根据每个 AP 知道 MN 的移动方向,例如可能 MN 对 AP1 的直接性较小,但反之亦然,在移动时对 AP2 的直接性更...因此,我认为如果有办法使用 getCurrentAngularPosition() 来做到这一点,那很好,否则我必须自己尝试去做。问候...
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
相关资源
最近更新 更多