计算 Veins-LTE 中 SimpleServerApp 的端到端延迟

Calculating end-to-end delay for SimpleServerApp in Veins-LTE

我正在尝试计算 Veins-LTE 中 SimpleServerApp 的端到端延迟,但无法获得任何结果,当我打开结果文件时,与延迟相关的所有统计数据均为 0 或 NaN .

我查看了 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();

如有任何帮助,我将不胜感激!

自版本 4.1 OMNeT++ 引入了 statistics/metrics 使用信号机制收集和记录的概念。

简而言之,信号机制的工作原理如下:将给定值附加到(类型的内置对象)信号,并将此信息记录到输出文件(作为标量或向量),稍后可以分析以推断某些行为。

如果您真的不了解此机制的工作原理,请务必先阅读 OMNeT++ 手册的以下部分:

  1. 4.15 Signal-Based Statistics Recording
  2. 12 Result Recording and Analysis

一旦您全神贯注于这些概念,就输出结果而言,您会更加自在地获得您想要的东西。


就您的问题而言,如果您想使用 SimpleServerApp 中的信号机制,您首先必须 声明信号和相应的统计数据 .ned 文件:

@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);


对你来说,应该是这样的:

  1. NED:

@signal[delay](type="float");

@statistic[delay](title="delay"; source="delay"; record=mean, sum, stats, vector);

  1. .h simsignal_t delaySignal;
  2. .cc delaySignal = registerSignal("delay");
  3. .cc emit(delaySignal, delay);

如果您得到 0Nan,这可能是由于除法错误的数字,与变量类型相比的信号类型错误。另外,请确保在 omnetpp.ini

中未关闭矢量和标量记录 (false)