Omnet++:子模块嵌套太深

Omnet++: Submodule nesting too deep

我有一个包含复合模块的网络。一个子模块应该创建 x 次,由参数 numberOfBuildings 定义。即,建筑物子模块。

在 .ned 文件中,我将默认值设置为 1,但在 .ini 文件中,该值随后被 11 覆盖。

Network.ned

network Network
{
        utility: Utility {
            @display("p=71,117");
        }
        energyDistrict: EnergyDistrict {
            @display("p=272,117");
        }
        supplier: Supplier {
            @display("p=272,23");
        }

    connections allowunconnected:

        utility.outElectricty --> energyDistrict.inCityElectrictyGrid;
        utility.outGas --> energyDistrict.inCityGasGrid;
        utility.outWater --> energyDistrict.inCityWaterGrid;
        supplier.outFuelOil --> energyDistrict.inSupplierFuelOil;
}

module EnergyDistrict extends Network
{
    //Here the parameter of the number of buildings is defined.
    parameters:
        int numberOfBuildings = default(1);
        int numberDistributionBuildings = default(1);

    gates:
        input inCityElectrictyGrid;
        input inCityGasGrid;
        input inCityWaterGrid;
        input inSupplierFuelOil;

        output outCityElectricityGrid;
        output outCityGasGrid;
        output outWaterGrid;
        output outSupplierFuelOil; 

    submodules:
        electricalDistributionBoxDistrict: ElectricalDistributionBoxDistrict {
            @display("p=119,192");
        }
        waterDistributionDistrict: WaterDistributionDistrict {
            @display("p=311,192");
        }
        gasDistributionDistrict: GasDistributionDistrict {
            @display("p=474,192");
        }
        fuelOilTransporter: FuelOilTransporter {
            @display("p=618,192");
        }
        buildings[numberOfBuildings]: Buildings {
            @display("p=272,273");
        } 

           connections allowunconnected:
                //The connection of electricity, gas and water city grid to the various buildings.
        //Connection Electricity City Grid
        energyDistrict.outCityElectricityGrid --> electricalDistributionBoxDistrict.inElectricityCityGridDistributionBox;
        energyDistrict.outCityGasGrid --> gasDistributionDistrict.inGasCityGridDistributionBox;
        energyDistrict.outWaterGrid --> waterDistributionDistrict.inWaterCityGridDistributionBox;
        energyDistrict.outSupplierFuelOil --> fuelOilTransporter.inFuelOilSupplier; 

                for i=0..numberDistributionBuildings-1{
            electricalDistributionBoxDistrict.outCityElectricityGridDistributionBox[i] --> buildings[i].inElectricityCityGridBuilding[i];

            //Connection Gas City Grid
            gasDistributionDistrict.outCityGasGridDistributionBox[i] --> buildings[i].inGasCityGridBuidling[i];

            //Connection Water City Grid
            waterDistributionDistrict.outCityWaterGridDistributionBox[i] --> buildings[i].inWaterCityGridBuilding[i];

            //Connection to Supplier for Fuel Oil
            fuelOilTransporter.outFuelOilTransporter[i] --> buildings[i].inSupplierFuelOilBuilding[i];

        }

        module Buildings extends EnergyDistrict
{
    //The parameter of a building consists of the buildingID, which type of building it is, the number of accommodated units (living unit and business premise)
    //and wether the building has installed a solar system on the roof.
    parameters:
        int buildingID = default(1);
        string typeOfBuilding = default("Gas Heater");
        int numberOfUnits = default(1);
        bool installedSolarSystem = default(false);
        .....
}

omnetpp.ini:

[Config EnergyDistrict]
Network.energyDistrict.numberOfBuildings = 11

如果我 运行 然后网络作为 Omnet++ 模拟我得到以下错误。

Error: Submodule nesting too deep (71) (potential infinite recursion?) -- in module (omnetpp::cModule)
Network.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict.energyDistrict (id=550), during network setup

看起来是能源区而不是建筑子模块被无限创建了。

有人可以帮我解决这个问题吗?

这显然是一个无限递归。你有一个 Network 其中包含一个 energyDistrict 子模块,但是 EnergyDistrict 的类型本身扩展了 Network 所以它也包含一个 energyDistrict 子模块,等等...... .

为什么 module EnergyDistrict extends Network ???