Omnetpp .ned 文件参数默认值

Omnetpp .ned file default value of parameter

我正在尝试熟悉 Omnetpp,所以我正在做 TicToc 示例。但是在那里我发现了一个我不明白的地方:为什么limit的默认值不起作用?限制总是设置为 5,只有当我将它设置为其他值时,就像我在 Toc5 中所做的那样。

这是我来自 Txc5::initialize

的日志
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

这里你可以看到,tic的计数器设置为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");
    }
}

参数的默认值取自 NED,前提是 omnetpp.ini 文件中没有与此参数匹配的条目(并且参数不是 硬编码 -稍后解释)。在 omnetpp.ini for Tictoc5 示例中,有以下条目:
**.limit = 5
因此对于 Toc5 限制等于 5.
但是,在 NED 行中 Tic5 的定义中:
limit = 10
意味着限制参数的值是 硬编码 到 10 .并且根据OMNeT++ Manualhardcoded参数:

  • 无法被 omnetpp.ini 中的值覆盖 文件
  • 不再采用默认值