OMNeT 购买复杂信号

OMNeT emit complex signals

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

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

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

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

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

然后在你的C++class中声明:

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 中声明的类型相匹配。