首页 > 解决方案 > Omnet++:子模块嵌套太深

问题描述

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

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

联网

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);
        .....
}

omn​​etpp.ini:

[Config EnergyDistrict]
Network.energyDistrict.numberOfBuildings = 11

如果我将网络作为 Omnet++ Simulation 运行,则会出现以下错误。

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

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

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

标签: omnet++

解决方案


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

为什么module EnergyDistrict extends Network???


推荐阅读