在网络 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 中的 xServerCoordyServerCoord 参数吗?

谢谢。

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;

  };
}