2015-08-14 55 views
1

我想熟悉Omnetpp,所以我正在做TicToc示例。但在那裏我發現了一個我不明白的問題:爲什麼limit的默認值不起作用?限制始終設置爲5,只有當我將其設置爲其他值時纔像我在Toc5中那樣。Omnetpp .ned參數文件默認值

這裏我的日誌從Txc5 ::初始化

Initializing module Tictoc5, stage 0 
Tictoc5.tic: Initializing module Tictoc5.tic, stage 0 
Tictoc5.tic: limit is 10 
Tictoc5.tic: tic's counter is set to 10 
Tictoc5.tic: Sending initial message 
Tictoc5.toc: Initializing module Tictoc5.toc, stage 0 
Tictoc5.toc: limit is 5 
Tictoc5.toc: toc's counter is set to 5 

在這裏你可以看到,抽動症的計數器設置爲10,這是確定的,但TOC的計數器是5 我不明白爲什麼它不設置爲20,就像我在int limit = default(20);

說我已經tictoc5.ned:

simple Txc5 
{ 
parameters: 
    bool sendMsgOnInit = default(false); 
    int limit = default(20); 
    @display("i=block/routing"); 
gates: 
    input in; 
    output out; 
} 

simple Tic5 extends Txc5 
{ 
parameters: 
    @display("i=,cyan"); 
    sendMsgOnInit = true; 
    limit = 10; 
} 

simple Toc5 extends Txc5 
{ 
parameters: 
    @display("i=,gold"); 
} 

network Tictoc5 
{ 
submodules: 
    tic: Tic5; 
    toc: Toc5; 

connections: 
    tic.out --> { delay = 100ms; } --> toc.in; 
    tic.in <-- { delay = 100ms; } <-- toc.out; 
} 

,我有txc5.cc

#include <string.h> 
#include <omnetpp.h> 


class Txc5 : public cSimpleModule 
{ 
private: 
    int counter; 

    protected: 
    virtual void initialize(); 
    virtual void handleMessage(cMessage *msg); 
}; 

Define_Module(Txc5); 

void Txc5::initialize() 
{ 
    counter = par("limit"); 
    EV << "limit is " << (int)par("limit") << " \n"; 
    EV << getName() << "'s counter is set to " << counter << "\n"; 
    if (par("sendMsgOnInit").boolValue() == true) 
    { 
     // The `ev' object works like `cout' in C++. 
     EV << "Sending initial message\n"; 
     cMessage *msg = new cMessage("tictocMsg"); 
     send(msg, "out"); 
    } 
} 

void Txc5::handleMessage(cMessage *msg) 
{ 
    counter--; 
    if(counter == 0) { 
     EV << getName() << "'s counter reached zero, deleting message \n"; 

    } else { 
     EV << getName() << "'s counter is " << counter << "\n"; 
     EV << "Received message `" << msg->getName() << "', sending it out again\n"; 
     send(msg, "out"); 
    } 
} 

回答

4

參數的默認值是從NED採取前提是在omnetpp.ini文件中查找該參數不匹配的條目(和參數不硬編碼 - 解釋後)。在omnetpp.iniTictoc5例如有以下項:
**.limit = 5
因此對於Toc5極限等於5
然而,在Tic5定義在NED行:
limit = 10
意味着限制參數的值被硬編碼 10.而且根據OMNeT++ Manual硬編碼參數:

  • 不能由值從omnetpp.ini覆蓋文件
  • 不再使用默認值