【问题标题】:How to simulate limited RSU capacity in veins?如何模拟静脉中有限的 RSU 容量?
【发布时间】:2019-01-12 00:12:44
【问题描述】:

我必须使用处理能力有限的 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--;

}

似乎没用,我使用容量限制=1 进行了测试,我有 2 辆车同时发送消息。 RSU 处理两者,尽管它应该处理一个并丢弃另一个。

谁能帮我解决这个问题?

【问题讨论】:

    标签: omnet++ veins


    【解决方案1】:

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

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

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

    变量YOURINTERVAL 将是您希望将时间视为capacity 的时间间隔。

    【讨论】:

    • 似乎很好的答案。但我已经将其实现如下:每次收到消息时计数器都会增加。我已安排每 1 秒发送一条自我消息。收到后,计数器会重置。
    • 这应该也可以(如果操作正确的话),但是您的问题中没有提到这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多