OMNeT++的版本是4.0。以下是我的操作過程。
--
新建一個OMNeT++ Project,取名為「demo」。
這個範例,我們模擬一個排隊網路,此網路用到已經定義的queueinglib
project裡面的模組,因此必須把它加到我們這個project的依賴關係裡面。
所以,先打開這個項目,右鍵點擊queueinglib -> open project,然後編譯
一下「Build Project」。
然後右鍵點擊demo -> Properties -> Project References 把queueinglib打勾
接著我們要為這個網路寫一個NED(Network Description File)文件,NED語言
主要是用來描述模擬模型結構的,類似NS2環境下的TCL,都是用來描述網路
結構。右鍵點擊demo -> New -> Network Description File(ned),
新建一個NED文件,命名為demo.ned,content選擇 A new network。
點擊「Finish」後就出現NED文件的圖形化編輯介面。在這套模擬工具裡,
我們可以用圖形化介面來進行網路環境的設置,也可以用原始碼來設置。
我們要建立一個簡單的閉合排隊網路,包含一個來源節點,和三個排隊成環
的排隊節點。在右側的Submodule裡面找到相對應的Queue和Source,拖到
面板上即可,可以為這些節點重新命名,以便我們日後看到可以較快了解。
我們可以用圖形化介面來進行網路環境的設置,也可以用原始碼來設置。
我們要建立一個簡單的閉合排隊網路,包含一個來源節點,和三個排隊成環
的排隊節點。在右側的Submodule裡面找到相對應的Queue和Source,拖到
面板上即可,可以為這些節點重新命名,以便我們日後看到可以較快了解。
然後我們把它們連接起來,用右上角的connection工具。
queue2到queue3的連接我們用原始碼來完成。點擊編輯介面的source視窗。
之前說的是環路排隊網路,因此最後一條應該是queue2的out連接queue3
的in。
之前說的是環路排隊網路,因此最後一條應該是queue2的out連接queue3
的in。
切換回來就能夠看到已經連好的網路圖了。
在運行範例之前,我們要先配置網路環境,OMNeT++的網路配置文件是
omnetpp.ini文件,這個名稱是不能改的,切記。右鍵點擊demo新建一個
omnetpp.ini文件,選擇Network為demo,「Finish」。
omnetpp.ini文件,這個名稱是不能改的,切記。右鍵點擊demo新建一個
omnetpp.ini文件,選擇Network為demo,「Finish」。
進入ini文件配置介面,同樣的,我們可以在圖形化介面設定,也可以用原
始碼來設定。
要把沒有默認值的模型屬性進行定義。點擊右面的Add按鈕,就會顯示為定義
的屬性。
我們先定義interArrivalTime和numJobs。只選這兩個,然後點「OK」。
interArrivalTime設為「0」,意思是所有Job立即加到這個queueing network中。
我們計畫在兩種情形下進行測試,一種是初始jobs數30,一種是60。ini裡通過
語法${jobs=...}來實現這種設定。
然後我們設置所有queue的serviceTime屬性。
本範例模型要嘗試不同對列的服務時間,是一個指數分布,且指數依次為
1, 2和3,因此我們設定serviceTime的指數運行參數為
exponential(${serviceMean=1..3 step 1}s)。(注意在{}外添加時間單位s)。
然後指定在模擬運行時每個模擬要運行多久。
切換到原始碼可以看到我們的設置結果。
現在,網路結構文件NED和網路配置文件ini都有了 ,下面我們來配置demo
在OMNeT++的IDE環境下運行的參數。
打開run configurations,新建一個new_configuration,修改如下所示位置。
其中,.ini 文件必須選擇demo下的那個omnetpp.ini。
確認沒問題後,點擊「run」。我們可以在下面的Console視窗下看到運行的
詳細情況。
運行結束後。在專案視窗的demo文件夾下又多了一個文件夾result,裡面生成
了本次模擬的結果文件(蠻肥大的,79MB)。其中vec和sca文件是模擬的統計
信息,elog文件儲存了每個message的發送情況、文件信息等等,並且可以在
序列圖中圖形化。
我們下面來進行結果分析,首先要新建一個.anf的分析文件。
「Finish」之後,把左側result文件夾裡面所有的.sca、.vec文件拖到 Input files
區域裡面。
每個模擬運行時,它都會收到一個唯一的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條隊列變更的紀錄,我們來把他們繪製到一個圖表當中,全選這三條
數據,點擊工具欄上的Plot按鈕即可。
生成的圖表如下所示。
現在我們改變座標的大小,並改面畫圖的風格,改線為點。在圖上點右鍵選
chart -> Axes,設置x, y軸的範圍。
然後切換到 lines 頁面,將其中的line type改成Sample-Hold,Symbol type 改
成none。
我們可以用「mean」函數來平滑曲線的圖表。
我們可以把這個圖表保存下來,下次運行這個demo模擬的時候,該圖表可以
自動重現。在圖表上點右鍵選convert to dataset...名字如圖所示。
下面打開一個.elog文件,來看下序列圖sequence chart。
在General-0.elog文件中,你可以看到最初的60個信息被推入一個隊列中。
大概介紹到此。
--
在 omnetpp-4.0/doc 資料夾內還有許多關於使用OMNeT++的手冊和教學,
可以多多利用。
hi 你好 我用4.2.1
回覆刪除但是我一開 queueinglib裡面的file
他會跑出一堆bug的符號
不知道你有遇過這樣的情況嗎
無法辨識的符號嗎?
刪除我想你可能先看看它是不是有告訴你是哪邊出了問題。
您好:
回覆刪除我想請問一下,source module產生的job,可以設定inter arrival time,那麼產生的job是一個poisson distribution嗎?還是說這個source module內建就已經是poisson了?
謝謝您~