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

如何在OMNeT++中提取消息常量值并生成直方图统计结果

从OMNeT++自定义消息提取常量并生成直方图的实现方法

1 常量字段访问说明

你在.msg文件中定义的msgCLAS消息的固定值字段,会被OMNeT的消息编译器自动生成对应C类的静态常量,无需实例化消息即可直接调用,调用格式为消息类名::常量名,例如msgCLAS::Singclas即可直接获取数值2206。

2 模块头文件配置

在你的统计功能所属简单模块的头文件中,引入生成的消息头和OMNeT++统计工具,声明直方图对象:

#include <omnetpp.h>
#include "msgCLAS_m.h" // 消息编译器生成的头文件,名称与你的.msg文件名对应

using namespace omnetpp;

class YourStatModule : public cSimpleModule
{
  private:
    cHistogram clasValHist; // 直方图统计对象
  protected:
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
    virtual void finish() override;
};

3 统计逻辑实现

3.1 静态常量统计

如果你需要统计的是消息定义中所有预设常量的分布,直接在初始化函数中录入所有常量值即可:

void YourStatModule::initialize()
{
    clasValHist.setName("msgCLAS常量值分布");
    // 可根据你的常量范围配置分桶规则,也可以留空使用默认自动分桶
    clasValHist.setRange(0, 7000);
    clasValHist.setNumBins(20);

    // 录入所有需要统计的常量字段值
    clasValHist.collect(msgCLAS::Singclas);
    clasValHist.collect(msgCLAS::Singlial);
    clasValHist.collect(msgCLAS::Verifclas);
    clasValHist.collect(msgCLAS::Veriflial);
    clasValHist.collect(msgCLAS::Aggreclas);
    clasValHist.collect(msgCLAS::Aggrelial);
    clasValHist.collect(msgCLAS::Verifagclas);
    clasValHist.collect(msgCLAS::Verifaglial);
}

3.2 运行时消息字段统计

如果你需要统计仿真运行过程中,收到的msgCLAS实例对应字段的出现频率,在handleMessage中加入统计逻辑:

void YourStatModule::handleMessage(cMessage *msg)
{
    // 判断是否为目标消息类型
    msgCLAS *receivedMsg = dynamic_cast<msgCLAS*>(msg);
    if (receivedMsg) {
        // 按需统计对应字段的数值
        clasValHist.collect(receivedMsg->getSingclas());
        // 其他字段统计逻辑同理
    }
    // 消息后续处理逻辑(转发/删除等)
    send(msg, "outputPort");
}

4 结果输出与查看

在finish函数中调用记录接口,将统计结果写入仿真结果文件:

void YourStatModule::finish()
{
    clasValHist.record();
}

仿真运行结束后,打开生成的.sca标量结果文件,在OMNeT++自带的结果分析工具中,选中msgCLAS常量值分布统计项,切换为直方图视图即可展示统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:39:03