OMNeT发出复杂的信号

时间:2016-06-04 19:58:17

标签: omnet++

我在OMNeT的模块中发出一些信号时遇到问题。特别是,我的一个模块有一个要发出的信号数组,如:

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

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

1 个答案:

答案 0 :(得分:2)

是的,可以在OMNeT++dynamically create statistics 将这些行添加到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中声明的类型匹配。