OMnet++ 初學者教程 第一節 入門
阿新 • • 發佈:2021-04-01
# 第1部分-入門
## 1.1模型
首先,讓我們從一個包含兩個節點的“network”開始。節點將做一些簡單的事情:一個是節點將建立一個數據包,而兩個節點將繼續來回傳遞相同的資料包。我們將節點稱為`tic`和`toc`。稍後,我們將逐步改進此模型,並在每個步驟中引入OMNeT ++功能。
這是您從頭開始實施首次模擬所採取的步驟。
## 1.2設定專案
通過輸入`omnetpp`終端來啟動OMNeT ++ IDE 。(我們假設您已經安裝了有效的OMNeT ++。如果沒有,請安裝最新版本,並根據需要諮詢_安裝指南_。)進入IDE後,從選單中選擇“_新建”->“ OMNeT ++專案_”。
![](https://cdn.nlark.com/yuque/0/2021/png/12898141/1617172644265-7563f10d-c9c9-4bfc-a8b1-222775bca5f4.png#align=left&display=inline&height=83&margin=%5Bobject%20Object%5D&originHeight=83&originWidth=542&size=0&status=done&style=none&width=542)
將出現一個嚮導對話方塊。輸入`tictoc`作為專案名稱,在詢問有關_專案_的初始內容時選擇“_Empty _Project”,然後單擊“_完成”_。你將在_Project Explorer中_看到一個空專案。(注意:某些OMNeT ++版本會`package.ned`在專案中生成檔案。我們現在不需要它:通過選擇檔案並單擊Delete刪除檔案。)
該專案將儲存屬於我們模擬的所有檔案。在我們的示例中,專案由一個目錄組成。對於較大的模擬,通常將專案的內容分類到`src/`和`simulations/`資料夾中,並一般將其放在這兩個子資料夾下。
Note 注意!
使用IDE完全是可選的。命令列也上可以使用OMNeT ++的幾乎所有功能(某些圖形密集型和互動式功能(如序列圖瀏覽和結果繪圖)除外)。可以使用任何文字編輯器來編輯模型原始檔,並且OMNeT ++提供了用於特殊任務的命令列工具,例如生成檔案,將訊息檔案轉換為C ++,結果檔案查詢和資料匯出等。要在沒有IDE的情況下繼續操作,只需建立一個目錄,然後使用您喜歡的文字編輯器在其中建立以下NED,C ++和ini檔案。
## 1.3新增NED檔案[¶](https://docs.omnetpp.org/tutorials/tictoc/part1/#13-adding-the-ned-file)
OMNeT ++使用NED檔案來**定義元件**並將它們組裝成更大的單元,例如網路。我們開始通過新增NED檔案來實現我們的模型。要將檔案新增到專案中,請在左側的_專案資源管理器_面板中右鍵單擊專案目錄 ,然後 從選單中選擇_NEW->網路描述檔案Network Description File(NED 網路描述檔案)_。提示您輸入檔名時輸入`tictoc1.ned`。
建立檔案後,可以在OMNeT ++ IDE的“_編輯器”區域_中編輯該檔案。OMNeT ++ IDE的NED編輯器有兩種模式:“_Design”_和“_Source”_。您可以使用**編輯器底部**的標籤在它們之間切換。在Design 模式下,可以使用滑鼠和右側的調色盤以圖形方式編輯拓撲。在_Source模式(原始碼模式)_下,可以直接編輯NED原始碼文字。在其中一種模式下所做的更改將立即反映在另一種模式下,因此您可以在編輯期間自由地在兩種模式之間切換,並選擇在更方便的任何一種模式下進行更改。(NED檔案是純文字檔案,因此您甚至可以使用外部文字編輯器來編輯它們,儘管您會錯過語法高亮顯示,內容輔助,交叉引用和其他IDE功能。(那就不用外部編輯器唄!))
切換到“_Source”_模式,然後輸入以下內容
```cpp
simple Txc1
{// 定義一個簡單模組
gates:
input in;
output out;
}
//
// Txc1的兩個例項(tic和toc)雙向連線
// Tic 和 toc 會互相傳送資訊
//
network Tictoc1
{//定義一個網路模組
submodules:
//網路模組由兩個子模組組成嗎,子模組的兩個組成部分tic,toc
tic: Txc1;
toc: Txc1;
connections:
// 子模組之間的連線,但相箭頭表示單向連結,{}中間定義連線的傳輸延時是100ms
tic.out --> { delay = 100ms; } --> toc.in;
tic.in <-- { delay = 100ms; } <-- toc.out;
}
```
完成後,切換回_Design_模式。您應該會看到類似以下內容的內容:
![](https://cdn.nlark.com/yuque/0/2021/png/12898141/1617172644338-73c8635b-1e60-4120-ba70-85fc03a0fdaa.png#align=left&display=inline&height=414&margin=%5Bobject%20Object%5D&originHeight=414&originWidth=435&size=0&status=done&style=none&width=435)
檔案中的第一個塊宣告`Txc1`為簡單模組型別。簡單模組在NED級別上是原子的(最小模組,不可被拆分了)。它們也是活動元件(意思是組成其他大模組的元件),其**行為**是用C++實現的。該宣告還說 `Txc1`有一個名為輸入的門`in`和一個名為的輸出門`out`。
第二個塊宣告`Tictoc1`作為network(網路)。`Tictoc1`是由兩個子模組組裝而成的,並且這兩個子模組`tic,``toc`都是`Txc1`的例項, `tic`的輸出門(gate)連線到`toc`的輸入門(gate),反之亦然。兩種方式都有100ms的傳播延遲。
筆記
您可以在《[OMNeT ++模擬手冊》中](https://doc.omnetpp.org/omnetpp/manual/index.html#cha:ned-lang)找到有關NED語言的詳細說明 。(也可以在`doc` OMNeT ++安裝目錄中找到該手冊。)
## 1.4新增C ++檔案
現在,我們需要在C ++中實現Txc1簡單模組的功能。`txc1.cc`通過從專案的上下文選單中選擇“_新建”->“原始檔_”(或從IDE主選單中選擇“_File”->“New”->“File ”)_來建立一個檔名(指定資料夾建立檔案,注意填寫字尾,不然預設建立.h檔案),然後輸入以下內容:
```cpp
#