我正在尝试计算Veins-LTE中SimpleServerApp的端到端延迟,我无法得到任何结果,当我打开结果文件时,所有与延迟相关的统计数据都是0或NaN。 / p>
我查看了Tic-Toc教程并尝试做类似的事情,但这样我甚至没有得到统计数据:
在模块上:
delayVector.record(delay);
delayHist.collect(delay);
并且在调用finish()时:
delayHist.recordAs("delayFinish");
,其中
simtime_t delay;
cOutVector delayVector;
cLongHistogram delayHist;
然后我尝试从其他统计记录中复制该程序,但我认为在我的情况下不能使用,因为我想发送一个长的:
在NED文件中:
@signal[delay](type="long");
@statistic[delay](title="delay"; source="delay"; record=vector, stats, histogram);
在模块上:
emit(delay,delay); //where the first delay is the signal and the second one, the value.
这就是我计算延迟的方法:
在发送模块上:
msg->setSendingTime();
在接收模块上:
simtime_t delay = simTime() - msg->getSendingTime();
我很感激任何帮助!
答案 0 :(得分:8)
由于版本4.1
OMNeT ++使用信号机制引入了统计/指标收集和记录的概念。
简而言之,信号机制的工作原理如下:给定值附加到(类型的内置对象)信号,并将此信息记录到输出文件(作为标量或向量),以后可以对其进行分析为了推断某些行为。
如果你真的不明白这种机制是如何运作的,请务必先阅读OMNeT ++手册的以下部分:
一旦你了解了这个概念,你就会觉得在输出结果方面得到你想要的东西会更舒服。
就您的问题而言,如果您想使用SimpleServerApp
中的信令机制,您首先必须在{{1}中声明信号和相应的统计信息文件:
.ned
然后你需要在<{1}}中声明信号变量:
@signal[nameOfSignal](type="sameAsTypeOfVariable");
@statistic[nameOfStatistic](title="nameToAppearInTheOutputFile"; source="nameOfTheSourceOfThisStatistic"; record=typeOfStat1, typeOfStat2, typeOfStat2);
然后<{>>在.h
中的simsignal_t nameOfMetricSignal;
中注册信号,与initialize()
中用于信号的名称相同:
.cc
最后,你要做的就是 .ned
信号。也就是说,将值附加到信号并让它被重新记录。您希望这样做的位置取决于您的实施。
nameOfMetricSignal = registerSignal("nameOfSignal");
对于你来说就像是:
emit()
emit(nameOfMetricSignal, theVariableToBeAttached);
NED:
@signal[delay](type="float");
@statistic[delay](title="delay"; source="delay"; record=mean, sum, stats, vector);
.h
simsignal_t delaySignal;
.cc
delaySignal = registerSignal("delay");
如果您得到的.cc
或emit(delaySignal, delay);
可能会被错误的数字划分,则错误的信号类型与变量的类型相比。同时确保0
Nan
)