http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html
在網上找到的一個講解omnet++的實例, 是4.0下面實現的. 我在4.2上試了試,可以用.照着做就能完成,有些小地方不同而已
Omnet++ 4.0 入門實例教程
根據http://omnest.com/webdemo/ide 上的實例,自己動手做了做。新版本的4.0 跟它視頻上
的版本有些差別,配圖說明一下我的操作過程,供大家一起學習。
現在開始。
首先,開發環境選擇simulation 的視圖,這是Omnet++開發的最優環境,在這個視圖下有好
多針對Omnet++的專有菜單項。打開過程:Windows->open perspective->simulation。
新建一個Omnet 的工程,取名為demo:File->New->Omnet++ Project
在本例中,我們模擬一個排隊網絡,該網絡應用到已經定義的queueinglib 工程里面的組件,
因此必須把它加入到我這個項目的依賴關系里面。所以,先把該項目打開,右鍵點擊
queueinglib->open project,然后編譯一下(這步十分重要,不然后面拖放網絡節點工具的時候
你會發現視頻用到的queue 等工具在你的視圖里沒有,就是因為你的queueinglib 沒有build)。
然我們在右鍵點擊demo->Properties->Project References 把queueinglib 選上。
接着我們要為我們的網絡編寫一個NED 文件,NED 語言主要是用來描述仿真模型結構的,
類似於NS2 環境下的TCL,都是用於描述網絡結構。右鍵點擊demo->New->Network
Descripition File,新建一個NED 文件,命名為demo.ned,content 選A new network
點finish 后就出現了NED 文件的可視化編輯界面。在Omnet4.0 里,我們可以在可視化的環
境下進行網絡環境的設置,生成NED 文件,同時也可以在代碼視圖下通過代碼完成設置。
我們來建立一個簡單的閉合排隊網絡,包含一個源節點和三個連接成環的排隊節點。
在右側的Submodules 里面找到相應的Queue 跟Source,拖到面板上即可,由於有多個Queue,
因此每拖出一個就按下F6 重命名。
然后我們把他們連接起來,用右上角的connection 工具。
queue2 到queue3 的連接我們通過代碼視圖來完成。點擊編輯界面的source 視圖。之前說的
是環路排隊網絡,因此最后一條應該是queue2 的out 連接queue3 的in。
切換回來就能夠看到已經連接好的視圖了。
在運行實例之前,我們要先配置下網絡環境。Omnet 的網絡配置文件是omnetpp.ini 文件,
名稱、擴展名都不能改。右鍵點擊demo 新建一個omnetpp.ini 文件,選擇Network 為demo,
finish。
進入ini 文件配置界面。同樣我們可以在視圖界面下設定,也可以切換到代碼界面下進行設
定。
要把沒有默認值的模型屬性進行定義。點擊右面的Add 按鈕,就會顯示未定義的屬性。
我們先來定義interArrivalTime 和numJobs。只選這兩個,然后點ok。interArrivalTime 設為0,
意思是所有job 立即添加到這個queuing network 中。我們計划在兩種情形下進行測試,一種
初始jobs 數30,一種是60。Ini 里通過語法${jobs=…}來實現這種設定。
然后我們設置所有queue 的serviceTime 屬性。
本實例模型要嘗試不同隊列的服務時間,是一個指數分布,且指數依次為1,2 和3,因此
我們設定serviceTime 的指數運行參數為exponential(${serviceMean=1..3 step 1}s)。(注意在{}
外添加時間單位s)。
然后指定在模擬運行時每個模擬要運行多久。
切換到代碼視圖可以看到我們的設置結果,記得保存。
現在,網絡結構文件NED 和網絡配置文件INI 都有了,下面我們來配置下demo 在Omnet4.0
的IDE 環境下運行的參數。
打開run configurations,新建一個新建一個new_configuration,修改如下所示位置。其中,.ini
文件必須選擇demo 下的那個omnetpp.ini。
確認沒問題后,點擊run。我們可以在下面的conclusion 視圖下看到運行的詳細情況。
運行結束后,在工程視圖的demo 文件夾下又多了一個文件夾result,里面生成了本次模擬
的結果文件。其中vec 和sca 文件是模擬的統計信息,elog 文件存儲了每個message 的發送
情況、文本信息等等,並且可以在序列圖中可視化。
我們下面來進行結果分析,首先要新建一個.anf 的分析文件。
Finish 之后,把左側result 文件夾里面所有的.sca、.vec 文件拖到Input files 區域里面。(本來
是應該能通過Wicards 自動添加進去的,不知道為什么我的不行。手動拖進去的…)
每個仿真運行時,它都會收到一個唯一的run ID,包含了配置、運行編號、數據/時間等信
息。在data 視圖里面,第一個表(by file and run)顯示了某個文件是運行哪個仿真產生的;第
二個表(by run and file)顯示了某個仿真運行產生了哪個文件。第三個表是邏輯運行關系。我
們做的仿真運行都屬於一個實驗,叫General—也就是ini 文件的基本配置,該名稱可以在ini
文件中更改。每個experience 里面都包含若干個測量,通常是一個同樣的仿真模型使用不同
參數運行得到的。每次測量都可以用不同的seeds 重復去做,從幾個replications 中來得到可
靠的統計結果。
我們再切換到Broswer Data 視圖里面,這個表格顯示.vec 文件所記錄的所有仿真的運行信息。
我們要看的是在運行時隊列長度的變化,因此在右側name 下拉條里選擇length,表格包含
的就是所有仿真的隊列長度變化。我們選擇run ID 為4 的仿真看下結果。
這只有3 條隊列變更的記錄,我們來把它們繪制到一個圖表當中, ctrl+A 全選這三條數據,
點擊工具欄上的Plot 按鈕即可。
生成的圖表如下所示。
現在我們改變坐標軸的大小,並改變畫圖的風格,改線為點。在圖上點右鍵選chart->Axes,
設置x、y 軸的范圍。
然后選擇line 選項卡,將其中的line type 改成Sample-Hold ,Symbol type 改成none
我們可以用“mean”函數來的到平滑曲線的圖表
我們可以把這個圖表保存下來,下次再運行這個demo 仿真的時候,該圖表可以自動重現。
在圖表上點右鍵選convert to dataset…名字如圖所示。
數據集頁面顯示了用與創建圖表和圖像的記錄(recipes??),它包含了適用於從上到下順序的
處理步驟。然后保存分析文件,該文件只存儲這些信息:哪些文件加載了,通過這些文件繪
制了什么數據集和圖表。
下面打開一個.elog 文件,來看下序列圖sequence chart。
在General-0.elog 文件中你可以看到最初的60 個信息被推入一個隊列中。
