首先我在网络中添加了一个类似 RSU 的单元作为中央控制单元 我在 TraciDemo11p 和 TraciDemoRSU11p 中设置计时器来发送消息
void TraCIDemo11p::handleMessage(cMessage* msg) {
if (msg->isSelfMessage()) {
TraCIDemo11pMessage* wsm = new TraCIDemo11pMessage();
populateWSM(wsm);
std::string arrayAsString;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arrayAsString += std::to_string(mij[i][j]) + " ";
}
arrayAsString.pop_back();
arrayAsString += "\n";
}
std::string newWSM_str = arrayAsString;
wsm->setAMessage(newWSM_str.data());
wsm->setDemoData(mobility->getRoadId().c_str());
wsm->setSenderAddress(myId);
sendDown(wsm);
scheduleAt(simTime() + 53, msg);
}
else {
DemoBaseApplLayer::handleMessage(msg);
}
}
tyvoid TraCIDemoRSU11p::handleMessage(cMessage* msg)
{
if (msg->isSelfMessage()) {
TraCIDemo11pMessage* wsm = new TraCIDemo11pMessage();
populateWSM(wsm);
wsm->setAMessage(RSUsavedAMessage.data());
wsm->setSenderAddress(myId);
sendDown(wsm);
scheduleAt(simTime() + 250, msg);
}
else {
DemoBaseApplLayer::handleMessage(msg);
}
}
当车辆数量小于等于20时代码可以正常运行。当我将车辆数量调整为30时出现以下错误,我该如何纠正错误
<!> TraCI server reported status 255 executing command 0xc4 ("Edge '' is not known."). -- in module (veins::TraCIDemo11p) RSUExampleScenario.node[31].appl (id=207), at t=250.000244822538s, event #49654
希望您能告诉我错误发生在哪里以及如何修复,谢谢
如果您在 Veins 中使用 Erlangen 示例,则会出现错误,因为 CV 从 RSU 接收到意外消息。在 erlangen 静脉代码中,RSU 正在重新广播一条包含演示数据的消息,其中包括 CV 应重新路由到的边缘(请参阅 VEINs 文档 以了解此示例的工作原理)。但是,您的新消息不包含此边缘,导致 CV 尝试解析空消息或不正确的消息。要解决此问题,请确保您的消息包含 CV 可以处理的正确边缘信息,或者更改 CV 的 onWSM 函数中的逻辑,以便它不会尝试解析并重新路由到边缘。