从 RSU 向 Veins 中的节点发送 ACK

Sending ACKs from RSU to Nodes in Veins

我正在尝试在收到消息时向节点发送 Ack。我能够获取帧 ID,但无法弄清楚如何在我的消息中包含此帧 ID 并广播它?任何指针?这会有所帮助。谢谢

更新:这是我正在尝试做的事情,当 RSU 在函数 BaseWaveApplLayer::handleLowerMsg 中收到消息时,我正在提取帧 ID 并发送 Ack。我面临的问题是在使用 sendDown 时,我收到错误消息,指出已经计划发送一个事件。如何正确安排消息?我正在使用 sendDown(msg)。

我没有得到正确的框架 ID,我使用了封装的框架 ID 但它给出了不同的值,我如何从 BasicSafetyMessage 或 cMessage 获取框架 ID?

代码:

void BaseWaveApplLayer::handleLowerMsg(cMessage* msg) {
WaveShortMessage* wsm = dynamic_cast<WaveShortMessage*>(msg);
ASSERT(wsm);
if (BasicSafetyMessage* bsm = dynamic_cast<BasicSafetyMessage*>(wsm)) {
    receivedBSMs++;
    onBSM(bsm);
    if(isBaseStation())
    {
        BasicSafetyMessage* Ack= new BasicSafetyMessage();
        populateWSM(Ack);
        Ack->setWsmData(getFrameId(bsm));
        EV<<" Sending Ack Frame ID"<<getFrameId(bsm);
        sendDown(Ack);
    }
    else
    {
        EV<<"Received FrameId"<<bsm->getWsmData();
        std::string str( bsm->getWsmData());
        int FrameId= std::atoi(str.c_str());
        checkIds(FrameId);
    }

}}

您需要创建一个新的消息类型,将 frameId 添加为参数以确认为参数。在接收器上,您可以将它的值与您发送的数据包进行比较。有关提示,请参阅 OMNeT++ user manual to find out how to create new messages. Also see