автомобильный узел не может принимать короткие сообщения - PullRequest
1 голос
/ 02 мая 2019

У меня есть сценарий, который включает в себя один автомобильный узел и один узел RSU. машина посылает сообщение маяка каждые 1 с. когда RSU получает сообщение маяка, он должен ответить отправителю (автомобилю) коротким волнообразным сообщением.

Я создаю WSM, как только RSU получает BSM, и я устанавливаю идентификатор получателя в качестве идентификатора отправителя bsm (так как я хочу, чтобы RSU отправлял сообщение только определенному узлу). проблема в том, что wsm никогда не принимается автомобилем (функция onWSM никогда не вызывается).

вот код:

void RSUApp::onBSM(BasicSafetyMessage* bsm)
{
    /*this fn is called when rsu receives a beacon*/
    /*after receiving beacon, send the value of the current speed*/
    WaveShortMessage* msg= new WaveShortMessage("speed");
    msg->setSenderAddress(this->myId);
    msg->setWsmData(std::to_string(this->currentSpeed).c_str());
    int Id = bsm->getSenderAddress();
    populateWSM(msg,Id,0);
    sendDown(msg);
}

когда я заменяю идентификатор получателя на -1 (отправляю широковещательное сообщение вместо отправки на определенный узел), автомобильное приложение может без проблем обработать WSM.

populateWSM(msg,-1,0);

Я использую вены 4.7, и это содержимое ini-файла:

*.rsu[0].mobility.x = 500
*.rsu[0].mobility.y = 50
*.rsu[0].mobility.z = 3

*.rsu[*].applType = "iteration6.src.RSUApp"
*.rsu[*].appl.headerLength = 80 bit 
*.rsu[*].appl.sendBeacons = false
*.rsu[*].appl.dataOnSch = false

*.connectionManager.sendDirect = true
*.connectionManager.maxInterfDist = 2600m
*.connectionManager.drawMaxIntfDist = true

*.**.nic.mac1609_4.useServiceChannel = false
*.**.nic.mac1609_4.txPower = 20mW
*.**.nic.mac1609_4.bitrate = 6Mbps
*.**.nic.phy80211p.sensitivity = -89dBm 
*.**.nic.phy80211p.useThermalNoise = true
*.**.nic.phy80211p.thermalNoise = -110dBm  
*.**.nic.phy80211p.decider = xmldoc("config.xml")
*.**.nic.phy80211p.analogueModels = xmldoc("config.xml")
*.**.nic.phy80211p.usePropagationDelay = true

*.node[*].applType = "iteration6.src.carApp"
*.node[*].appl.headerLength = 80 bit
*.node[*].appl.sendBeacons = true
*.node[*].appl.dataOnSch = false
*.node[*].appl.beaconInterval = 1s

Может кто-нибудь помочь мне с этой проблемой?

1 Ответ

1 голос
/ 04 мая 2019

Похоже, вы используете неверный идентификатор для получателя. Вместо

int Id = bsm->getSenderModuleId();

лучше использовать

int Id = bsm->getSenderAddress();

Это должно сработать.

Для получения более подробной информации см. Следующие источники:

...