2017-02-13 3 views
1

с венами в примере TraCIDemo11p я хочу добавить метод, который периодически посылать (каждый 1S) с WSM Вот то, что я изменить:Отправить периодически сообщение с TraCIDemo11p

Я создал метод, называемый "sendTrace", который подобен к одному в примере, но с данными WSM изменилось:

void TraCIDemo11p::sendTrace() { 


     t_channel channel = dataOnSch ? type_SCH : type_CCH; 
     WaveShortMessage* wsm = prepareWSM("data", dataLengthBits, channel, dataPriority, -1,2); 
     wsm->setWsmData(traceID.c_str()); 
     sendWSM(wsm); 
     EV << "Received message2 `" << wsm->getSenderModuleId() << "', sending it out again\n"; 
} 

в traCIDemo11p.h const std::string traceID ="trace";

в onData I добавить условие на полученные сообщения:

void TraCIDemo11p::onData(WaveShortMessage* wsm) { 

    if (wsm->getWsmData()== traceID.c_str()){ 
     infoWsm.push_back(wsm); 
     EV << "Received message3 `" << wsm->getSenderModuleId() << "', sending it out again\n"; 
    } 
    else{ 

findHost()->getDisplayString().updateWith("r=16,green"); 
annotations->scheduleErase(1, annotations->drawLine(wsm->getSenderPos(), mobility->getPositionAt(simTime()), "blue")); 

if (mobility->getRoadId()[0] != ':') traciVehicle->changeRoute(wsm->getWsmData(), 9999); 
if (!sentMessage) sendMessage(wsm->getWsmData()); 
EV << "Received message4`" << wsm->getSenderModuleId() << "', sending it out again\n"; 
    } 

}

На инициализации Посылаю первый след:

void TraCIDemo11p::initialize(int stage) { 
BaseWaveApplLayer::initialize(stage); 
if (stage == 0) { 
    ... 
    lastTraceAt = simTime(); 
    sendTrace(); 

} 

}

И в handleParkingUpdate я контролировать отправку других следов :

void TraCIDemo11p::handleParkingUpdate(cObject* obj) { 
isParking = mobility->getParkingState(); 
if (sendWhileParking == false) { 
    if (isParking == true) { 
     (FindModule<BaseConnectionManager*>::findGlobalModule())->unregisterNic(this->getParentModule()->getSubmodule("nic")); 
    } 
    else { 
     Coord pos = mobility->getCurrentPosition(); 
     (FindModule<BaseConnectionManager*>::findGlobalModule())->registerNic(this->getParentModule()->getSubmodule("nic"), (ChannelAccess*) this->getParentModule()->getSubmodule("nic")->getSubmodule("phy80211p"), &pos); 
    } 
} 

}

Затем во время работы у меня была эта ошибка!

<!> Error in module (TraCIDemo11p) RSUExampleScenario.node[0].appl (id=14) at event #54, t=3.100413031916: TraCI server reported error executing command 0xc4 ("Referenced edge 'trace' is not known.").. 

И я не могу определить источник этой проблемы, не могли бы вы мне помочь!

PS: Я знаю, что ошибка говорит о том, что граница «trace» не распознается, что означает, что условие, установленное в методе ondata, не работает! Итак, пожалуйста, скажите мне, как это исправить, или если есть другая проблема?

ответ

1

Попытка сравнения двух char* с использованием == означает, что вы сравниваете адреса памяти, а не (как вы предполагаете), какой текст там хранится.

Смежные вопросы