如何模拟有限的RSU静脉容量?

时间:2019-01-12 00:12:44

标签: omnet++ veins

我必须用处理能力有限的RSU模拟场景。它只能在一个时间单位(例如1秒)内处理有限数量的消息。

我试图在RSU应用程序中设置一个计数器。每次RSU接收到一条消息后,计数器就会增加,处理完之后,计数器会减少。这是我所做的:

void RSUApp::onBSM(BasicSafetyMessage* bsm)
{
    if(msgCount >= capacity)
    {
        //drop msg
        this->getParentModule()->bubble("capacity limit");
        return;
    }

    msgCount++;

    //process message here

     msgCount--;

}

这似乎没用,我使用了limit = 1进行了测试,并且有2辆车同时发送消息。尽管RSU应该处理一个然后丢弃另一个,但RSU都会处理。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

onBSM方法的开头,计数器递增,您的逻辑被执行,最后计数器递减。所有这些步骤都同时发生,这意味着在仿真的一个步骤中。 这就是为什么您看不到效果的原因。

您可能希望在一定的时间间隔(例如500毫秒)内处理一定数量的“消息”。它可能看起来像这样(未经测试):

if (simTime() <= intervalEnd && msgCount >= capacity)
{
    this->getParentModule()->bubble("capacity limit");
    return;
} else if (simTime() > intervalEnd) {
   intervalEnd = simTime() + YOURINTERVAL;
   msgCount = 0;
}
......

变量YOURINTERVAL是您想将其作为capacity的时间间隔的时间。