網頁

2011年10月7日 星期五

2011.10.07 OMNeT++ 一個簡單的範例

這個範例是根據http://omnest.com/webdemo/ide上所做的。

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,拖到

面板上即可,可以為這些節點重新命名,以便我們日後看到可以較快了解。

然後我們把它們連接起來,用右上角的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立即加到這個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++的手冊和教學,
 可以多多利用。

3 則留言:

  1. hi 你好 我用4.2.1
    但是我一開 queueinglib裡面的file
    他會跑出一堆bug的符號
    不知道你有遇過這樣的情況嗎

    回覆刪除
    回覆
    1. 無法辨識的符號嗎?
      我想你可能先看看它是不是有告訴你是哪邊出了問題。

      刪除
  2. 您好:

    我想請問一下,source module產生的job,可以設定inter arrival time,那麼產生的job是一個poisson distribution嗎?還是說這個source module內建就已經是poisson了?
    謝謝您~

    回覆刪除