You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Omnet++、Veins与SUMO中自定义消息及日志显示问题咨询

自定义消息及事件日志显示实现指南

1. 先定义自定义消息类型

在Veins的src/veins/modules/messages目录下新建MyCustomMessage.msg文件,示例内容:

cplusplus {{
#include "veins/base/utils/Coord.h"
}}

message MyCustomMessage extends BaseFrame1609_4 {
    Coord senderPos; // 自定义字段:发送方位置
    string content; // 自定义字段:消息内容
}

Veins的构建系统会自动编译该文件,生成对应的C++类供代码调用。

2. 在应用模块中发送自定义消息

以TraCIDemo11p.cc为例(或你自己的应用模块),添加发送逻辑:

// 创建自定义消息实例
MyCustomMessage* customMsg = new MyCustomMessage("MyCustomBroadcast");
customMsg->setContent("RSU向节点发送的自定义消息");
customMsg->setSenderPos(myMobility->getCurrentPosition());

// 设置MAC层必要参数
customMsg->setRecipientAddress(LAddress::L2BROADCAST());
customMsg->setChannelNumber(static_cast<int>(Channel::CCH));

// 向下发送到MAC层
sendDown(customMsg);

3. 修改AirFrame日志显示逻辑

在src/veins/modules/phy/AirFrame11p.cc的info()方法中,添加自定义消息的识别与日志内容:

std::string AirFrame11p::info() const
{
    std::ostringstream os;
    os << AirFrame::info();

    // 判断封装的是否为自定义消息
    const MyCustomMessage* msg = dynamic_cast<const MyCustomMessage*>(getEncapsulatedPacket());
    if (msg) {
        os << ", 自定义消息内容: " << msg->getContent();
    }
    return os.str();
}

这样事件日志中就会显示自定义消息的具体内容。

4. 开启事件日志记录

在omnetpp.ini中添加配置:

**.record-eventlog = true
**.eventlog-file = "${resultdir}/${configname}-${runnumber}.elog"

思路补充

你关注airframe11p.cc的方向是对的,但遗漏了消息类型定义这一前置步骤——Veins的所有无线消息都需要先通过.msg文件定义,才能在AirFrame中被识别和处理。另外要注意消息的发送流程:应用层构造消息→传递到MAC层→封装为AirFrame→无线传输,整个链路的参数配置要完整。

内容的提问来源于stack exchange,提问作者Prarthana Prabhakaran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:50:49