代码之家  ›  专栏  ›  技术社区  ›  arandomuser

OMNeT发出复杂信号

  •  1
  • arandomuser  · 技术社区  · 10 年前

    我无法从OMNeT中的模块发出一些信号。特别是,我的一个模块有一组要发射的信号,类似于:

    simsignal_t* signalInputInterarrivalTime;
    ...
    signalInputInterarrivalTime = new simsignal_t[N];
    

    然后我 registerSignal 数组中具有不同名称的每个元素。 这种方法有效,但在我的.ned文件中,我必须使用尽可能多的 @statistic 行作为数组的最大大小。这当然不是最好的方法,因为既不是参数化的,也不是可读的。是否可以声明一个要发射的信号矢量,这更符合我的情况?

    1 回复  |  直到 10 年前
        1
  •  4
  •   Jerzy D.    10 年前

    是的,可以 dynamically create statistics 在里面 OMNeT++ .
    将这些行添加到您的 NED 文件:

    @signal[interarrivalTime*](type=simtime_t); // note an asterisk and the type of emitted values
    @statisticTemplate[interarrivalTimeTemplate](record=vector);
    

    然后在您的 C++ 类别:

    simsignal_t interarrivalTimeSignals[10];
    

    并创建多个统计信息实例:

    for (int i = 0; i < 10; ++i) {
        char signalName[32];
        sprintf(signalName, "interarrivalTime%d", i);
        simsignal_t signal = registerSignal(signalName);
        cProperty *statisticTemplate = getProperties()->get("statisticTemplate", "interarrivalTimeTemplate");
        getEnvir()->addResultRecorders(this, signal, signalName,  statisticTemplate);
        interarrivalTimeSignals[i] = signal;
    }
    

    使用示例:

    simtime_t delay = simTime() - msg->getSendingTime();
    emit(interarrivalTimeSignals[3], delay);
    

    请注意,发射值的类型必须与中声明的类型匹配 NED公司 .