---
# System prepended metadata

title: OMNet++
tags: [車載網路]

---

---
tags: 車載網路
---
# OMNet++

> [name=林群凱] [time=Wed, Aug 31, 2021 8:52 PM] [color=#6F6DE5]

## 簡介

### OMNet++ 是什麼

- 物件導向的模組化網路模擬離散事件的框架
- 通用架構
- 提供編寫的基礎和工具

### OMNet++ 可以做什麼？

OMNet++ 可以用於許多領域的問題：

- 建立有線或無線網路的模型
- 通訊協定的模型
- 隊列模型
- 多處理器和分散式硬體系統
- 驗證硬體架構
- 評估軟體系統各個層面的效能

### OMNet++ 的架構

#### Network Description File (.ned)

#### Network Configuration File (.ini)

#### Source File (.cc)

## 安裝

###### 參考： [OMNeT++ Installation Guide](https://doc.omnetpp.org/omnetpp/InstallGuide.pdf), [How To Set Up OMNet++ in Ubuntu 20+](https://www.youtube.com/watch?v=oBRrhuaMxGk), [HHow To Install Omnet++ In Ubuntu 18.04.1](https://medium.com/@computerscienceengineering/omnet-3fef4875f6fb)

###### 作業系統： Ubuntu 20.04

:::warning
:warning: 注意： 不同版本的安裝有些微差異
:::

### Version 5.6.2

#### 需要的套件

先更新

```bash=
sudo apt-get update
```

安裝套件

```bash=
sudo apt-get install build-essential gcc g++ bison flex perl \
     python python3 qt5-default libqt5opengl5-dev tcl-dev tk-dev \
     libxml2-dev zlib1g-dev default-jre doxygen graphviz libwebkitgtk-3.0-0
```

:::info
:bulb: 如果出現 `Package 'libwebkitgtk-3.0-0' has no installation candidate`

```bash=
sudo nano /etc/apt/sources.list
```

將 `deb http://cz.archive.ubuntu.com/ubuntu bionic main universe` 加到檔案中

```bash=
sudo apt-get update
```

再安裝一次
:::

安裝額外的套件
```bash=
sudo apt-get install openscenegraph-plugin-osgearth libosgearth-dev
sudo apt-get install openmpi-bin libopenmpi-dev
```

#### 下載與解壓縮

到 https://omnetpp.org/download/ 下載 OMNeT++ 5.6.2 的 Linux 版本壓縮檔。

將檔案解壓縮

```bash=
tar xvfz omnetpp-5.6.2-src-linux.tgz
```

會產生一個子資料夾 omnetpp-5.6.2 ，將其放至於你想放置的位置。


#### 建置

到資料夾中

```bash=
cd omnetpp-5.6.1
```

設定變數

```bash=
. setenv
```

增加環境變數

```bash=
vim ~/.bashrc
```
將 `export PATH=$HOME/omnetpp-5.6.2/bin:$PATH` 加到檔案中後，重啟終端機

:::info
:bulb: 如果是使用 zsh
```bash=
source setenv
vim ~/.zshrc
```
:::

設定 OMNet++

```bash=
./configure
```

執行 make

```bash=
make
```

#### 檢查是否成功

執行範例

```bash=
cd samples/dyna
./dyna
```

選擇 small，就能看到範例程式

![dyna](https://i.imgur.com/cV7iXyK.gif)

### Version 5.4.1

#### 需要的套件

先更新

```bash=
sudo apt-get update
```

安裝套件

```bash=
sudo apt-get install build-essential gcc g++ bison flex perl \python python3 qt5-default libqt5opengl5-dev tcl-dev tk-dev \libxml2-dev zlib1g-dev default-jre doxygen graphviz libwebkitgtk-1.0 openscenegraph-plugin-osgearth libosgearth-dev openmpi-bin libopenmpi-dev libpcap-dev gnome-color-chooser nemiver
```

:::info
:bulb: 如果出現 `Package 'libwebkitgtk-1.0' has no installation candidate`

```bash=
sudo nano /etc/apt/sources.list
```

將 `deb http://cz.archive.ubuntu.com/ubuntu bionic main universe` 加到檔案中

```bash=
sudo apt-get update
```

再安裝一次
也有可能需要改成 `libwebkitgtk-1.0-0`
:::

#### 下載與解壓縮

到 https://omnetpp.org/download/old 下載 OMNeT++ 5.4.1 的 Linux 版本壓縮檔。

將檔案解壓縮

```bash=
tar xvfz omnetpp-5.4.1-src-linux.tgz
```

會產生一個子資料夾 omnetpp-5.4.1 ，將其放至於你想放置的位置。


#### 建置

到資料夾中

```bash=
cd omnetpp-5.4.1
```

設定變數

```bash=
. setenv
```

增加環境變數

```bash=
vim ~/.bashrc
```
將 `export PATH=$HOME/omnetpp-5.4.1/bin:$PATH` 加到檔案中後，重啟終端機

:::info
:bulb: 如果是使用 zsh
```bash=
source setenv
vim ~/.zshrc
```
:::

設定 OMNet++

```bash=
./configure
```

執行 make

```bash=
make
```

:::info
:bulb: 如果在 OSG EARTH 編譯失敗，可以嘗試在設定時增加參數

```bash=
./configure WITH_OSGEARTH=no
```

在重複執行一次

###### 參考： [Unable to compile Omnet++ in Ubuntu 16.04 - make errors](https://askubuntu.com/questions/895193/unable-to-compile-omnet-in-ubuntu-16-04-make-errors)
:::

#### 檢查是否成功

執行範例

```bash=
cd samples/dyna
./dyna
```

選擇 small，就能看到範例程式

![dyna](https://i.imgur.com/cV7iXyK.gif)

### 問題處理

#### Unknown Log format character '<'

###### 參考： [Unknown Log format character '<'](https://stackoverflow.com/questions/61497015/unknown-log-format-character)

你可能有一個就的 .qtenvrc 在主目錄的根目錄中。 嘗試： 

```bash=
rm ~/.qtenvrc
```

.qtenvrc 包含 QTEnv 的各種全局初始化參數，包括提到的 logformat 參數。 

#### An error has occurred. See the log file

###### 參考： [Omnet++ 5.4.1 running error on Ubuntu 18.10](https://groups.google.com/g/omnetpp/c/t13qEhyyuqI)
- 方法一

在 `omnetpp-5.4.1/ide/configuration/config.ini` 中貼上

```
org.osgi.framework.system.packages = \
 javax.accessibility,\
 javax.activation,\
 javax.activity,\
 javax.crypto,\
 javax.crypto.interfaces,\
 javax.crypto.spec,\
 javax.imageio,\
 javax.imageio.event,\
 javax.imageio.metadata,\
 javax.imageio.plugins.bmp,\
 javax.imageio.plugins.jpeg,\
 javax.imageio.spi,\
 javax.imageio.stream,\
 javax.jws,\
 javax.jws.soap,\
 javax.lang.model,\
 javax.lang.model.element,\
 javax.lang.model.type,\
 javax.lang.model.util,\
 javax.management,\
 javax.management.loading,\
 javax.management.modelmbean,\
 javax.management.monitor,\
 javax.management.openmbean,\
 javax.management.relation,\
 javax.management.remote,\
 javax.management.remote.rmi,\
 javax.management.timer,\
 javax.naming,\
 javax.naming.directory,\
 javax.naming.event,\
 javax.naming.ldap,\
 javax.naming.spi,\
 javax.net,\
 javax.net.ssl,\
 javax.print,\
 javax.print.attribute,\
 javax.print.attribute.standard,\
 javax.print.event,\
 javax.rmi,\
 javax.rmi.CORBA,\
 javax.rmi.ssl,\
 javax.script,\
 javax.security.auth,\
 javax.security.auth.callback,\
 javax.security.auth.kerberos,\
 javax.security.auth.login,\
 javax.security.auth.spi,\
 javax.security.auth.x500,\
 javax.security.cert,\
 javax.security.sasl,\
 javax.sound.midi,\
 javax.sound.midi.spi,\
 javax.sound.sampled,\
 javax.sound.sampled.spi,\
 javax.sql,\
 javax.sql.rowset,\
 javax.sql.rowset.serial,\
 javax.sql.rowset.spi,\
 javax.swing,\
 javax.swing.border,\
 javax.swing.colorchooser,\
 javax.swing.event,\
 javax.swing.filechooser,\
 javax.swing.plaf,\
 javax.swing.plaf.basic,\
 javax.swing.plaf.metal,\
 javax.swing.plaf.multi,\
 javax.swing.plaf.nimbus,\
 javax.swing.plaf.synth,\
 javax.swing.table,\
 javax.swing.text,\
 javax.swing.text.html,\
 javax.swing.text.html.parser,\
 javax.swing.text.rtf,\
 javax.swing.tree,\
 javax.swing.undo,\
 javax.tools,\
 javax.xml,\
 javax.xml.bind,\
 javax.xml.bind.annotation,\
 javax.xml.bind.annotation.adapters,\
 javax.xml.bind.attachment,\
 javax.xml.bind.helpers,\
 javax.xml.bind.util,\
 javax.xml.crypto,\
 javax.xml.crypto.dom,\
 javax.xml.crypto.dsig,\
 javax.xml.crypto.dsig.dom,\
 javax.xml.crypto.dsig.keyinfo,\
 javax.xml.crypto.dsig.spec,\
 javax.xml.datatype,\
 javax.xml.namespace,\
 javax.xml.parsers,\
 javax.xml.soap,\
 javax.xml.stream,\
 javax.xml.stream.events,\
 javax.xml.stream.util,\
 javax.xml.transform,\
 javax.xml.transform.dom,\
 javax.xml.transform.sax,\
 javax.xml.transform.stax,\
 javax.xml.transform.stream,\
 javax.xml.validation,\
 javax.xml.ws,\
 javax.xml.ws.handler,\
 javax.xml.ws.handler.soap,\
 javax.xml.ws.http,\
 javax.xml.ws.soap,\
 javax.xml.ws.spi,\
 javax.xml.ws.spi.http,\
 javax.xml.ws.wsaddressing,\
 javax.xml.xpath,\
 org.ietf.jgss,\
 org.omg.CORBA,\
 org.omg.CORBA_2_3,\
 org.omg.CORBA_2_3.portable,\
 org.omg.CORBA.DynAnyPackage,\
 org.omg.CORBA.ORBPackage,\
 org.omg.CORBA.portable,\
 org.omg.CORBA.TypeCodePackage,\
 org.omg.CosNaming,\
 org.omg.CosNaming.NamingContextExtPackage,\
 org.omg.CosNaming.NamingContextPackage,\
 org.omg.Dynamic,\
 org.omg.DynamicAny,\
 org.omg.DynamicAny.DynAnyFactoryPackage,\
 org.omg.DynamicAny.DynAnyPackage,\
 org.omg.IOP,\
 org.omg.IOP.CodecFactoryPackage,\
 org.omg.IOP.CodecPackage,\
 org.omg.Messaging,\
 org.omg.PortableInterceptor,\
 org.omg.PortableInterceptor.ORBInitInfoPackage,\
 org.omg.PortableServer,\
 org.omg.PortableServer.CurrentPackage,\
 org.omg.PortableServer.POAManagerPackage,\
 org.omg.PortableServer.POAPackage,\
 org.omg.PortableServer.portable,\
 org.omg.PortableServer.ServantLocatorPackage,\
 org.omg.SendingContext,\
 org.omg.stub.java.rmi,\
 org.w3c.dom,\
 org.w3c.dom.bootstrap,\
 org.w3c.dom.css,\
 org.w3c.dom.events,\
 org.w3c.dom.html,\
 org.w3c.dom.ls,\
 org.w3c.dom.ranges,\
 org.w3c.dom.stylesheets,\
 org.w3c.dom.traversal,\
 org.w3c.dom.views,\
 org.w3c.dom.xpath,\
 org.xml.sax,\
 org.xml.sax.ext,\
 org.xml.sax.helpers
 ```
- 方法二
 ```
 downgrade your java package to 1.8
 ```
 