Omnet(INET)中运行时的节点创建或外观

时间:2015-04-30 11:16:32

标签: c++ omnet++ inet

我需要在运行时创建一个节点,其参数与其他节点类似。为此,我在ned文件中创建一个动态节点: -

host_send4: meshnode {
        parameters:
            @dynamic;
            @display("p=1000,535;r=200,green;i=device/smallrouter");
}

要在C ++文件中实现此节点,我添加以下代码: -

    cModuleType *meshnode1 = cModuleType::get("inet.networklayer.manetrouting.PASER.meshnode");
    cModule *mod = meshnode1->createScheduleInit("host_send4", this);
    cDisplayString& dispstr =  mod->getDisplayString();
    dispstr.parse("p=1000,535;r=200,green;i=device/smallrouter");

    mod->buildInside();
    mod->scheduleStart(simTime()+5*beaconInterval);

但我无法正确构建它。我想我需要任何一个例子。任何人都可以帮我指出在mixim或任何其他oment框架的INETMANET中的示例,其中已经实现了此功能。 谢谢你的帮助。

我还有静态创建节点,这将在以后的时间点出现在模拟中。是否有可能,并且在INET或其他OMNET框架中有任何运行时外观和节点消失的示例。

1 个答案:

答案 0 :(得分:2)

OMNeT ++用户手册有section专用于此。根据这一点,使用buildInside()时您不需要scheduleStart()createScheduleInit()

在Veins框架中可以看到如何执行此操作的示例 - 更准确地说,在TraCIScenarioManager中。对你来说重要的一点可能是:

cModule* parentmod = getParentModule();
if (!parentmod) error("Parent Module not found");

cModuleType* nodeType = cModuleType::get(type.c_str());
if (!nodeType) error("Module Type \"%s\" not found", type.c_str());

cModule* mod = nodeType->create(name.c_str(), parentmod, nodeVectorIndex, nodeVectorIndex);
mod->finalizeParameters();
mod->getDisplayString().parse(displayString.c_str());
mod->buildInside();
mod->scheduleStart(simTime() + updateInterval);