Отправлять периодически сообщение с TraCIDemo11p

С венами в примере TraCIDemo11p Я хочу добавить метод, который периодически отправляет (каждый 1 с) WMS
Вот что я модифицирую:

Я создал метод под названием "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 Я добавляю условие к полученным сообщениям:

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* с помощью == означает, что вы сравниваете адреса памяти, а не (как вы предполагаете), какой текст хранится там.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]