📄 tictoc12_note.txt
字号:
以前的仿真模型能够收集一些感兴趣的东西以使我们能够收集到一些状态。例如:你对一个消息到达终点前所经过的平均跳数感兴趣。
我们把每个消息的跳数记录到一个输出数组中(一个按照时间排列的序列对)。我们也计算均值、标准差、最大值、最小值,并在仿真结束后
把它们写到一个文件里面。
然后,我们使用离线工具去分析这个输出文件。
例如:
我们在类中添加输出数组对象(它将把数据记录到omnetpp.vec)和一个历史图表对象(histgram,它用来计算平均值和其他一些值)。
代码如下:
class Txc12 : public cSimpleModule
{
private:
long numSent;
long numReceived;
cLongHistogram hopCountStats;
cOutVector hopCountVector;
protected:
当一个消息到达目标节点时,我们更新这些状态。下列代码将被添加到handleMessage()中用来更新状态
hopCountVector.record(hopcount)
hopCountStats.collect(hopcount)
hopCountVectory.record()方法的调用将这些数据写进到omnetpp.vec中。当在规模的仿真或仿真时间进行的较长时,omnetpp.vec文件将
变得非常大。
为了对付这种情况,你可以在omnetpp.ini中禁止或允许数组,并且你也可以就你感兴趣的方面指定一个仿真时间间隔(在这个时间间隔以
外所获取的数据将被丢弃)。
当我们开始一个新的仿真时,现有的omnetpp.vec文件将被删除。
标量数据(scalar data)(在仿真中由histgram 对收集到的数据)必须在finish()函数中被手动的记录。finish()函数将仿真成功完成时
被调用。
在下面的代码中recordScalar()函数的调用把数据写到了omnetpp.sca中
void Txc12::finish()
{
// This function is called by OMNeT++ at the end of the simulation.
ev << "Sent: " << numSent << endl;
ev << "Received: " << numReceived << endl;
ev << "Hop count, min: " << hopCountStats.min() << endl;
ev << "Hop count, max: " << hopCountStats.max() << endl;
ev << "Hop count, mean: " << hopCountStats.mean() << endl;
ev << "Hop count, stddev: " << hopCountStats.stddev() << endl;
recordScalar("#sent", numSent);
recordScalar("#received", numReceived);
hopCountStats.recordScalar("hop count");
}
不向omnetpp.vec,omnetpp.sca在不同的仿真运行间将不会被删除。相反,新的数据被马上被添加到文件中。这一点使得你能从不同的仿真中
收集数据,然后集中对它们进行分析。
使用的不同的名字是可能(在omnetpp.ini中添加选项),以使不同的仿真被写到不同的文件中。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -