2017-02-13 85 views
1

带脉我想补充一点,定期发送的方法(每1秒)一个WSM 这里是我的修改:的例子<code>TraCIDemo11p</code>发送周期性消息TraCIDemo11p

我创建了一个名为"sendTrace"方法类似到所述一个中的例子,但与WSM数据而改变:

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

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"; 
} 

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:我知道错误说边缘'跟踪'不被识别,这意味着在ondata方法中设置的条件不起作用! 那么请告诉我如何修复它,或者如果还有其他问题?

回答

1

尝试使用==比较两个char*意味着您正在比较内存地址,而不是(如您所设想的那样)在那里存储了哪些文本。