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

OMNeT++中electricityConsumption无法生成.vec文件问题求助

排查OMNeT++仿真未生成.vec文件的问题

从你的代码和配置来看,有几个关键问题导致没有生成向量记录文件,我来逐一帮你分析:

1. INI配置错误(最关键)

你在.ini里写的:

**.electricityConsumption.result-recording-modes = -vector

这里的-vector是禁用向量记录的意思!OMNeT++的配置语法中,前缀-表示移除该记录模式,这行相当于直接关闭了向量输出,自然不会生成.vec文件。

修复方法:把这行改成启用向量记录:

**.electricityConsumption.result-recording-modes = vector,stats

如果你只需要向量记录,写vector即可,这样就能触发向量文件的生成。

2. 仿真异常终止导致记录不完整

在handleMessage的else分支中,你抛出了cRuntimeError:

else {
    throw cRuntimeError("self-message not delivered");
    cancelEvent(endTxEvent);
}

一旦counterSend超过4,仿真会直接崩溃终止,OMNeT++没有机会完成统计文件的写入流程。而且抛出异常后,后面的cancelEvent根本不会执行。

修复方法:移除异常抛出,改成正常终止事件调度:

else {
    cancelEvent(endTxEvent);
    EV_INFO << "All consumption values have been sent, stopping transmission events." << endl;
}

这样仿真会正常结束,统计系统能完整写入数据到文件。

3. 验证信号发射是否实际执行

虽然你的信号注册逻辑是正确的(registerSignal("electricityConsumption")和NED里的信号定义匹配),但可以添加日志确认emit语句是否被触发。比如在每个case的emit前后加输出:

// 以case 1为例
if(valEConsumption1 > 0.0){
    double electricityConsumption = valEConsumption1;
    EV_DEBUG << "Emitting electricityConsumption (case 1): " << electricityConsumption << endl;
    emit(electricityConsumptionSingnalId, electricityConsumption);
    send(EConsumptionRSFMessage->dup(), "outElectricityConsumptionRSF");
}else{
    double electricityConsumption = 0.0;
    EV_DEBUG << "Emitting electricityConsumption (case 1, zero): " << electricityConsumption << endl;
    emit(electricityConsumptionSingnalId, electricityConsumption);
}

运行仿真后查看日志,如果看不到这些输出,说明你的case分支没有被正确执行,可能是counterSend的逻辑有问题,或者XML参数加载失败。

4. 确认模块路径匹配

确保INI里的配置能正确作用到你的EConsumerRSF模块。如果你的模块在特定的子路径下(比如network命名空间对应的模块路径),可以把INI配置改成更明确的路径:

**.EConsumerRSF.electricityConsumption.result-recording-modes = vector,stats

避免全局匹配可能出现的路径不匹配问题。

额外检查点

  • 确认XML参数ElectricityConsumptionRSFLoadProfile正确加载:初始化代码里的EV << "Read value: " << valEConsumption << std::endl;应该输出读取到的数值,如果都是0,那emit的都是0,但即使是0也应该生成.vec文件,只是数据全为0。
  • 检查仿真输出目录:默认OMNeT++会把结果文件放在results文件夹下,确保你找对了位置,或者在INI里用output-dir = ./my_results指定自定义输出目录。

按照以上步骤修改后,应该就能正常生成.vec文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:03:14