?? 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 + -