OMNeT 发出复杂信号

ara*_*ser 1 omnet++

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

simsignal_t* signalInputInterarrivalTime;
...
signalInputInterarrivalTime = new simsignal_t[N];
Run Code Online (Sandbox Code Playgroud)

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

Jer*_* D. 5

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

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

然后在你的班级中声明C++

simsignal_t interarrivalTimeSignals[10];
Run Code Online (Sandbox Code Playgroud)

并创建多个统计实例:

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;
}
Run Code Online (Sandbox Code Playgroud)

使用它的一个例子:

simtime_t delay = simTime() - msg->getSendingTime();
emit(interarrivalTimeSignals[3], delay);
Run Code Online (Sandbox Code Playgroud)

请注意,发出值的类型必须与 中声明的类型匹配NED