在网络 ned 文件中访问模块类型的参数
Accessing a module type's parameters within a network ned file
假设我在 Client.ned
中定义了以下简单模块:
simple Client
{
parameters:
volatile int xServerCoord = 1;
volatile int yServerCoord = 2;
}
还假设我们在 Network.ned
中定义了以下网络:
network Traditional
{
parameters:
volatile int xDiff = intuniform(-20,20);
volatile int yDiff = intuniform(-20,20);
submodules:
client: Client {
parameters:
xCoord = xServerCoord + xDiff;
yCoord = yServerCoord + yDiff;
@display("p=$xCoord,$yCoord");
};
}
当我尝试 运行 模拟时,出现以下错误:
Cannot evaluate parameter 'xCoord': (omnetpp::cModule)Traditional: Unknown parameter 'xServerCoord' -- during network initialization
我可以读取 Network.ned
中的 xServerCoord
和 yServerCoord
参数吗?
谢谢。
NED中参数的定义需要指明类型,例如:
parameters:
int xServerCoord;
int yServerCoord;
可以在NED中给参数赋值,例如:
parameters:
int xServerCoord = 1;
但是应该注意这个值以后不能修改,因为根据 OMNeT++ 手册:
A non-default value assigned from NED cannot be overwritten later in NED or from ini files; it becomes “hardcoded” as far as ini files and NED usage are concerned. In contrast, default values are possible to overwrite.
更好的解决方案是分配default value,例如:
parameters:
int xServerCoord = default(1);
要使用其他模块的参数,必须在参数名称之前使用模块名称。
因此网络定义可能如下所示:
network Traditional
{
parameters:
volatile int xDiff = intuniform(-20,20);
volatile int yDiff = intuniform(-20,20);
submodules:
client: Client {
parameters:
client.xServerCoord = client.xServerCoord + xDiff;
client.yServerCoord = client.yServerCoord + yDiff;
};
}
假设我在 Client.ned
中定义了以下简单模块:
simple Client
{
parameters:
volatile int xServerCoord = 1;
volatile int yServerCoord = 2;
}
还假设我们在 Network.ned
中定义了以下网络:
network Traditional
{
parameters:
volatile int xDiff = intuniform(-20,20);
volatile int yDiff = intuniform(-20,20);
submodules:
client: Client {
parameters:
xCoord = xServerCoord + xDiff;
yCoord = yServerCoord + yDiff;
@display("p=$xCoord,$yCoord");
};
}
当我尝试 运行 模拟时,出现以下错误:
Cannot evaluate parameter 'xCoord': (omnetpp::cModule)Traditional: Unknown parameter 'xServerCoord' -- during network initialization
我可以读取 Network.ned
中的 xServerCoord
和 yServerCoord
参数吗?
谢谢。
NED中参数的定义需要指明类型,例如:
parameters:
int xServerCoord;
int yServerCoord;
可以在NED中给参数赋值,例如:
parameters:
int xServerCoord = 1;
但是应该注意这个值以后不能修改,因为根据 OMNeT++ 手册:
A non-default value assigned from NED cannot be overwritten later in NED or from ini files; it becomes “hardcoded” as far as ini files and NED usage are concerned. In contrast, default values are possible to overwrite.
更好的解决方案是分配default value,例如:
parameters:
int xServerCoord = default(1);
要使用其他模块的参数,必须在参数名称之前使用模块名称。
因此网络定义可能如下所示:
network Traditional
{
parameters:
volatile int xDiff = intuniform(-20,20);
volatile int yDiff = intuniform(-20,20);
submodules:
client: Client {
parameters:
client.xServerCoord = client.xServerCoord + xDiff;
client.yServerCoord = client.yServerCoord + yDiff;
};
}