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
中的值覆盖
文件
- 不再采用默认值
我正在尝试熟悉 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
中的值覆盖 文件 - 不再采用默认值