我在OMNeT的模块中发出一些信号时遇到问题。特别是,我的一个模块有一个要发出的信号数组,如:
simsignal_t* signalInputInterarrivalTime;
...
signalInputInterarrivalTime = new simsignal_t[N];
然后我registerSignal
数组中的每个元素都有不同的名称。
这种方式有效,但是在我的.ned文件中,我必须使用尽可能多的@statistic
行作为数组的最大大小。这当然不是最好的方式,既不是参数也不是参数。是否可以声明要发射的信号矢量,哪种情况更适合我的情况?
答案 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
中声明的类型匹配。