Как симулировать ограниченную емкость RSU в венах? - PullRequest
0 голосов
/ 12 января 2019

Мне нужно смоделировать сценарий с 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 обрабатывает оба, хотя он должен обрабатывать одно и отбрасывать другое.

Кто-нибудь может мне помочь с этим?

1 Ответ

0 голосов
/ 13 января 2019

В начале метода onBSM счетчик увеличивается, ваша логика выполняется и, наконец, счетчик уменьшается. Все эти шаги происходят сразу, то есть в один шаг симуляции. Вот почему вы не видите эффекта.

То, что вы, вероятно, хотите, - это определенное количество «сообщений», которые будут обрабатываться в определенный интервал времени (например, 500 мс). Как-то это может выглядеть (не проверено):

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

Переменная YOURINTERVAL будет временем, которое вы хотите считать интервалом для вашего capacity.

...