【问题标题】:how to show the result in omnet++ in specific round?如何在特定回合中以 omnet++ 显示结果?
【发布时间】:2016-08-05 05:20:07
【问题描述】:

我在 omnet++ (mixim) 中模拟无线传感器网络,我想分析特定回合的结果,如 500、1000、1500、2000、2500、3000、3500 和 4000。我编写代码如下,但它无法工作并在某些回合(例如 496,492 和 502)中显示结果。如何更改代码以显示我提到的特定 7 回合? 代码:

 int rr;
    rr=static_cast<SensorNode *>(this->getParentModule()->getParentModule()->getSubmodule("node",1)->getSubmodule("netwl"))->GetRound();

    if(abs(rr-500)<5 || abs(rr-1000)<5 || abs(rr-1500)<5 || abs(rr-2000)<5 || abs(rr-2500)<5 || abs(rr-3000)<5 || abs(rr-35000)<5 || abs(rr-4000)<5)
    {
            char ss1[30];
            sprintf(ss1,"Dead_CHs_Round_%d",rr);
            recordScalar(ss1,nDeadCH);

【问题讨论】:

    标签: nodes categories omnet++ wireless


    【解决方案1】:

    您的代码检查rr 与您的预期轮数之间的差异是否小于 5。例如

    rr = 496
    if ( abs(rr-500) < 5 || .....) {
        // your code
    }
    //--> abs(496 - 500) < 5 
    //--> abs(-4) < 5 
    //-->  4 < 5 --> true
    

    所以你的 if 子句对rr = 496 成立。 为避免这种情况,请删除 abs()&lt;5 并将其更改如下:

    if( rr == 500 || rr == 1000 || .....) {
        // your code
    }
    

    【讨论】:

    • 感谢您回答我的问题,我已经更改了代码,但结果它并没有显示我想要的整轮,它只显示了第 1000、2500 和 4000 轮的结果,我应该写什么来展示另一轮?
    • 我稍微编辑了我的答案。你可以发布你的if语句吗?所以我可以看看它。
    • int rr; rr=static_cast(this->getParentModule()->getParentModule()->getSubmodule("node",1)->getSubmodule("netwl"))->GetRound(); if(rr==500 || rr==1000 || rr==1500 || rr==2000 || rr==2500 || rr==3000 || rr==3500 || rr==4000)
    • 你确定rr变成了500吗?我认为这个 if 语句应该可以工作..
    • 我会在“bs.cc”文件的第 123 行写这部分。尽管“GetRound()”函数引用了文件“sensorNode.cc”中的轮数,但“rr”应该计数我在以下链接中插入了整个代码:ufile.io/3ff83
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2018-02-02
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多