Tải bản đầy đủ (.pdf) (82 trang)

Giới thiệu về omnet++ và các vấn đề liên quan

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.41 MB, 82 trang )

OMNet++


Tran
g
1






1. GIỚI THIỆU



1.1.

OMNeT++



gì?

OMNeT++

l
à

viế
t



t

t

của

cụm

t


Objective

Modular

Network

Testbed

in

C++.
OMNeT++

l
à

mộ
t


ứng

dụng

cung

cấp

cho

ngườ
i

sử

dụng


i

trường

để

ti
ến

hành




phỏng

hoạ
t

động

của

mạng.

Mục

đích

ch
í
nh

của

ứng

dụng

l
à




phỏng

hoạ
t

động

mạng

thông

ti
n,

tuy

nh
i
ên

do


nh

phổ

cập




linh

hoạ
t

của

nó,

OMNeT++

còn

được

sử

dụng

trong

nhiều

l
ĩnh

vực


khác

như



phỏng

các

hệ

thống

thông

tin

phức

t
ạp,

các
mạng

k
i
ểu


hàng

đợ
i

(queueing

networks)

hay

các

kiến

t
rúc

phần

cứng


OMNeT++

cung

cấp


sẵn

các

thành

phần

t
ương

ứng

vớ
i

các



hình

thực

t
ế.

Các
thành


phần

này

(còn

được

gọ
i



các

modu
l
e)

được

l
ập

trình

theo

ngôn


ngữ

C++,

sau

đó

được

t
ập

hợp

l

i

thành

những

thành

phần

hay

những




hình

l
ớn

hơn

bằng

mộ
t

ngôn

ngữ

bậc

cao

(NED).

OMNeT++

hỗ

trợ


giao

d
i
ện

đồ

hoạ,

t
ương

ứng

vớ
i

các


hình

cấu

t
rúc

của




đồng

t
hờ
i

phần

nhân



phỏng

(simu
l
ation

kernel)



các
module

của


OMNeT++

cũng

rấ
t

dễ

dàng

nhúng

vào

trong

các

ứng

dụng

khác.




1.2.


Các

thành

phần

chính

của

OMNeT++




Thư

viện

phần

nhân



phỏng

(simulat
i
on


kerne
l
)




Trình

biên

dịch

cho

ngôn

ngữ



t


hình

trạng

(topology


description

language)

-

NED

(nedc)




Trình

biên

t
ập

đồ

hoạ

(graphical

ne
t
work


editor)

cho

các

fi
l
e

NED

(GNED)




Giao

diện

đồ

hoạ

thực

h
i

ện



phỏng,

các

li
ên

kế
t

bên

trong

các

file

thực

hiện


phỏng

(Tkenv)





Giao

diện

dòng

l
ệnh

t
hực

hiện



phỏng

(Cmdenv)




Công

cụ


(giao

diện

đồ

hoạ)

vẽ

đồ

thị

kế
t

quả

vec
t
or



đầu

ra


(Plove)




Công

cụ

(giao

diện

đồ

hoạ)



t


kế
t

quả



hướng




đầu

ra

(Scalars)




Công

cụ

tài

li
ệu

hoá

các



hình





Các

ti
ện

ích

khác




Các

t
à
i

li
ệu

hướng

dẫn,

các

v

í

dụ



phỏng




1.3.

Ứng

dụng


OMNeT++

l
à

mộ
t

công

cụ




phỏng

các

hoạ
t

động

mạng

bằng

các

module

được

th
i
ế
t

kế

hướng


đố
i

t
ượng.

OMNeT++

thường

được

sử

dụng

trong

các

ứng

dụng

chủ

yếu
như
:







hình

hoạ
t

động

của

các

mạng

thông

tin

OMNet++


Tran
g
2









hình

giao

thức






hình

hoá

các

mạng

k
i
ểu

hàng


đợ
i






h
ì
nh

hoá

các

hệ

thống

đa

bộ

vi

xử




(mu
lti
processer)

hoặc

các

hệ

thống
phần

cứng

theo



h
ì
nh

phân

tán

khác


(distribu
t
ed

hardware

systems)




Đánh

giá

kiến

trúc

phần

cứng




Đánh

giá


hiệu

quả

hoạ
t

động

của

các

hệ

thống

phức

t
ạp




1.4.



hình


trong

OMNeT++


Mộ
t



hình

t
rong

OMNeT++

bao

gồm

các

module

l
ồng

nhau




cấu

t
rúc

phân

cấp.
Độ

sâu

của

của

các

module

l
ồng

nhau

l
à


không

giớ
i

hạn,

đ
i
ều

này

cho

phép

ngườ
i

sử
dụng



t
hể

biểu


diễn

các

cấu

t
rúc

l
ogic

của

các

hệ

thống

trong

t
hực

t
ế

bằng


các

cấu
trúc



hình.

Các

module

trao

đổ
i

thông

ti
n

vớ
i

nhau

thông


qua

việc

gử
i

các

message
(message).

Các

message

này



t
hể



cấu

trúc


phức

t
ạp

tuỳ

ý.

Các

module



thể

gử
i
các

message

này

t
heo

hai


cách,

mộ
t

l
à

gử
i

trực

ti
ếp

t

i

địa

chỉ

nhận,

ha
i




gử
i

đ
i

t
heo
mộ
t

đường

dẫn

được

định

sẵn,

thông

qua

các

cổng




các

kế
t

nối.


Các

module



thể



các

tham

số

của

riêng


nó.

Các

tham

số

này



thể

được

sử

dụng

để

chỉnh

sửa

các

thuộc


tính

của

modu
l
e



để

biểu

diễn

cho

topo
l
ogy

của



hình.


Các


module



mức

thấp

nhấ
t

trong

cấu

trúc

phân

cấp

đóng

gói

các

thuộc


tính.

Các
module

này

được

co
i

l
à

các

module

đơn

giản,



chúng

được

l

ập

trình

trong

ngôn

ngữ
C++

bằng

cách

sử

dụng

các

thư

viện



phỏng.

OMNet++



Tran
g
3







2. TỔNG QUAN



2.1.

Khái

niệm



hình

hoá


OMNeT++


cung

cấp

cho

ngườ
i

sử

dụng

những

công

cụ

hiệu

quả

để



t



cấu

trúc
của

các

hệ

thống

thực

t
ế.


Các

modu
l
e

l
ồng

nhau




cấu

trúc

phân

cấp


Các

modu
l
e



các

đố
i

t
ượng

cụ

thể


của

các

k
i
ểu

module


Các

modu
l
e

trao

đổ
i

thông

tin

bằng

các


message

qua

các

kênh


Các

tham

số

của

module

li
nh

hoạ
t


Ngôn

ngữ




t


topology


2.1.1.

Cấu

trúc

phân

cấp

của

các

module


Mộ
t




hình

trong

OMNeT++

chứa

các

modu
l
e

l
ồng

nhau



cấu

trúc

phân

cấp,

trao

đổ
i

thông

tin

vớ
i

nhau

bằng

cách

gử
i

các

message.

Mỗ
i



h
ì

nh

này

thường

b
i
ểu

d
i
ễn
cho

mộ
t

hệ

thống

mạng.

Modu
l
e

mức


cao

nhấ
t

trong

cấu

trúc

phân

cấp

được

gọ
i

l
à
module

hệ

thống.

Module


này



thể

chứa

các

module

con,

các

module

con

cũng


thể

chứa

các

module


con

của

riêng

nó.

Độ

sâu

phân

cấp

đố
i

vớ
i

các

module



không

giớ
i

hạn,

đ
i
ều

này

cho

phép

ngườ
i

sử

dụng



t
hể

dễ

dàng


biểu

diễn

mộ
t

cấu

t
rúc

l
ogic
của

mộ
t

hệ

thống

trong

thực

t
ế


bằng

cấu

trúc

phân

cấp

của

OMNeT++.


Cấu

trúc

của



h
ì
nh




thể

được



t


bằng

ngôn

ngữ

NED

của

OMNeT++




module

hệ

thống


module

đơn

g
i
ản



module

kế
t

hợp










Hình

I-2.1


-

Các

module

đơn

g
i
ản



kết

hợp


Các

modu
l
e



thể

chứa


nhiều

modu
l
e

con



được

gọ
i



module

kế
t

hợp.

Các
module

đơn


g
i
ản



các

module



cấp

thấp

nhấ
t

trong

cấu

trúc

phân

cấp.

Các


module
đơn

giản

chứa

các

thuậ
t

toán

của



hình.

Ngườ
i

sử

dụng

triển


khai

các

module

đơn
giản

bằng

ngôn

ngữ

C++,

sử

dụng

các

t


viện




phỏng

của

OMNeT++.


2.1.2.

Kiểu

module


Tấ
t

cả

các

module





đơn

g

i
ản

hay

phức

t
ạp

đều



các

đố
i

t
ượng

cụ

thể

của

các
kiểu


module.

Trong

khi



t


các



hình,

ngườ
i

sử

dụng

định

nghĩa

ra


các

k
i
ểu

OMNet++


Tran
g
4




module;

các

đố
i

t
ượng

cụ

thể


của

các

kiểu

module

này

được

sử

dụng

như

các

thành

phần

của

các

kiểu


module

phức

t
ạp

hơn.

Cuố
i

cùng,

ngườ
i

sử

dụng

t
ạo

module

hệ
thống


như

mộ
t

đố
i

t
ượng

cụ

thể

của

k
i
ểu

module

đã

được

định

nghĩa


trước

đó,

t

t

cả
các

module

của

mạng

đều



module

con

(hoặc




con

của

module

con)

của

module

hệ
thống.


Kh
i

mộ
t

kiểu

module

được

sử


dụng

như

mộ
t

khố
i

dựng

sẵn

(building

block),

sẽ

không
thể

phân

biệ
t

đó




mộ
t

module

đơn

g
i
ản

hay

phức

t
ạp.

Đ
i
ều

này

cho

phép


ngườ
i

sử
dụng



t
hể

t
ách

các

module

đơn

giản

ra

thành

nhiều

module


đơn

giản

được

nhúng
trong

mộ
t

module

kế
t

hợp,



ngược

l

i



thể


t
ập

hợp

các

chức

năng

của

mộ
t

module
kế
t

hợp

trong

mộ
t

module


đơn

g
i
ản



không

ảnh

hưởng

g
ì

đến

các

kiểu

module

đã
được

ngườ
i


sử

dụng

định

nghĩa.


Kiểu

module



thể

được

l
ưu

trữ

trong

mộ
t


file

riêng

rẽ.

Đ
i
ều

này

cho

phép

ngườ
i

sử

dụng



t
hể

nhóm


các

kiểu

module

l

i



t
ạo

ra

mộ
t

thư

viện

thành

phần


2.1.3.


Message,

cổng,

liên

kết


Các

modu
l
e

trao

đổ
i

thông

ti
n

bằng

việc


gử
i

các

message.

Trong

thực

t
ế,

message


dạng

khung

(frame)

hoặc



các

gói


ti
n

(packe
t
)

được

truyền

đ
i

t
rong

mạng.

Các
message



thể



cấu


t
rúc

phức

t
ạp

tuỳ

ý.

Các

module

đơn

giản



t
hể

gử
i

các

message

đ
i

mộ
t

cách

trực

ti
ếp

đến

vị

trí

nhận

hoặc

gử
i

đ
i


t
heo

mộ
t

đường

dẫn

định

sẵn
thông

qua

các

cổng



các

li
ên

kết.



“Thờ
i

gian



phỏng

địa

phương”

(local

simulation

ti
me)

của

mộ
t

module

t

ăng

lên
khi

module

nhận

được

mộ
t

message.

Message



thể

đến

t


mộ
t


module

khác

hoặc
đến

t


cùng

mộ
t

module

(message

của

chính

bản

thân

module

-


self-message

được
dùng

để

thực

hiện

bộ

định

t
hời).


Cổng

(gate)



các

giao


ti
ếp

vào

ra

của

module.

Message

được

gử
i

đ
i

qua

các

cổng

ra




được

nhận

vào

thông

qua

các

cổng

vào.


Mỗ
i

kế
t

nố
i

(connection)

hay


còn

gọ
i



li
ên

kế
t

(link)

được

t
ạo

bên

trong

mộ
t

mức
đơn


t
rong

cấu

trúc

phân

cấp

của

các

module:

bên

trong

mộ
t

module

kế
t


hợp,

mộ
t

kế
t
nố
i



t
hể

được

t
ạo

ra

g
i
ữa

các

cổng


t
ương

ứng

của

ha
i

module

con,

hoặc

giữa

cổng
của

module

con

vớ
i

cổng


của

module

kế
t

hợp.





module

cha

module

cha


S1

S2

S1

S2





module

con

kế
t

nố
i

vớ
i

nhau

module

con

kế
t

nố
i

vớ
i


module

cha



Hình

I-2.2

-

Các

kết

nố
i


Tương

ứng

vớ
i

cấu


t
rúc

phân

cấp

của

mộ
t



hình,

các

message

thường

di

chuyển
qua

mộ
t


l
oạ
t

các

kế
t

nố
i

vớ
i

đ
i
ểm

bắ
t

đầu



kế
t

thúc




các

module

đơn

giản.

Tập

các
kế
t

nố
i

đ
i

t


mộ
t

module


đơn

giản



đến

mộ
t

module

đơn

giản

được

gọ
i



route.

Các
module


kế
t

hợp

hoạ
t

động

giống

như

các

“cardboard

box”

trong



h
ì
nh,

“trong


suốt”
trong

việc

chuyển

ti
ếp

các

message

giữa

các

thành

phần

bên

trong



thế


giớ
i

bên
ngoà
i
.

OMNet++


Tran
g
5




2.1.4.



hình

truyền

gói

tin



Mộ
t

kế
t

nố
i



thể



ba

t
ham

số

đặc

trưng.

Những

tham


số

này

rấ
t

thuận

ti
ện

cho

các


h
ì
nh



phỏng

mạng

thông


tin

nhưng

không

hữu

dụng

l
ắm

cho

các

kiểu



hình
khác.

Ba

tham

số


này

bao

gồm:




Độ

trễ

đường

t
ruyền

(propagation

delay)

tính

bằng

s

-


giây.




Tỉ

số

l

i

bit,

được

tính

bằng

số

l
ỗi/bit.




Tỉ


số

dữ

li
ệu,

được

tính

bằng

số

bit/s.


Các

tham

số

này

l
à


t
uỳ

chọn.

Giá

t
rị

của

các

tham

số

này

l
à

khác

nhau

t
rên


t
ừng

kế
t
nối,

phụ

thuộc

vào

kiểu

của

li
ên

kế
t

(hay

còn

gọ
i


l
à

k
i
ểu

của

kênh

t
ruyền

-

channe
l
type).


Độ

trễ

đường

t
ruyền




t
ổng

thờ
i

gian

đến

của

message

bị

trễ

đ
i

khi

truyền

qua

kênh.



Tỉ

số

l

i

b
it

ảnh

hưởng

đến

quá

trình

truyền

message

qua

kênh.


Tỉ

số

này

l
à

xác

suấ
t
các

b
it

bị

truyền

sai.

Do

đó

xác


suấ
t

để

mộ
t

message

độ


i

n

b
it

truyền

đ
i

ch
í
nh


xác

là:


P(message

gử
i

đ
i

được

nhận

chính

xác)

=

(1

-

ber)n
trong


đó

ber

l
à

t


số

l

i

b
it



n

l
à

số

bit


của

message.

Các

message

truyền

đ
i

đều



mộ
t

cờ

l
ỗi,

cờ

này

sẽ


được

t
h
i
ế
t

l
ập

kh
i

việc

truyền
message



l
ỗi.


Tỉ

số


dữ

li
ệu

được

tính

theo

đơn

vị

bit/s,





được

sử

dụng

để



nh

thờ
i

gian

để
truyền

mộ
t

gói

tin.

Kh
i

t


số

này

được

sử


dụng,

quá

trình

gử
i

message

đ
i

trong


hình

sẽ

t
ương

ứng

vớ
i


v
i
ệc

truyền

bit

đầu

ti
ên



message

được

tính

l
à

đến


i

sau


kh
i
bên

nhận

đã

nhận

được

b
it

cuố
i

cùng.





A

B








Message

gử
i

đ
i
truyền

bị

trễ




Độ

trễ

đường

t
ruyền


t
A
t
B


Message

nhận

được






Hình

I-2.3

-

Truyền

message

OMNet++



Tran
g

6




2.1.5.

Tham

số


Các

module



thể

các

tham

số.Các

tham


số

này



thể

được

đặ
t

g
i
á

t
rị

trong

các

f
i
le

NED


hoặc

các

file

cấu

h
ì
nh

ompnetpp.ini.


Các

tham

số

này



t
hể

được


dùng

để

thay

đổ
i

các

thuộc

tính

của

các

module

đơn

g
i
ản
hoặc

dùng


để

biểu

d
i
ễn

cho

t
opo
l
ogy

của



h
ì
nh.


Các

tham

số




t
hể



k
i
ểu



chuỗi,

số

học,

giá

t
rị

logic

hoặc

cũng




t
hể

chứa

cây

dữ
li
ệu

XML

(XML

data

tree).

Các

biến

kiểu

số


trong

các

biểu

thức



thể

nhận

giá

trị

t

các

tham

số

khác,

gọ
i


hàm,

sử

dụng

các

biến

ngẫu

nhiên

t


các

nguồn

phân

tán

hoặc
nhận

giá


trị

trực

ti
ếp

được

nhập

vào

bở
i

ngườ
i

sử

dụng.


Các

tham

số




k
i
ểu

số



t
hể

được

dùng

để

cấu

h
ì
nh

topology

rấ
t


dễ

dàng.

Nằm

t
rong
các

module

kế
t

hợp,

các

tham

số

này



t
hể


được

dùng

để

chỉ

ra

số

module

con,

số
cổng

giao

ti
ếp



cách

các


kế
t

nố
i

nộ
i

bộ

được

t
ạo

ra.


2.1.6.

Phương

pháp



tả


topology


Ngườ
i

sử

dụng

dùng

ngôn

ngữ

NED

(Network

Descr
i
ption)

để



t



cấu

t
rúc

của

các


hình




2.2.

Lập

trình

thuật

toán


Các

modu

l
e

đơn

giản



thể

chứa

các

thuậ
t

toán

như

các

hàm

của

C++.


Sự

li
nh

hoạ
t



sức

mạnh

của

C++,

kế
t

hợp

vớ
i

các

thư


viện



phỏng

của

OMNeT++

t
ạo

đ
i
ều
kiện

dễ

dàng

cho

ngườ
i

sử

dụng.


Các

l
ập

trình

viên



phỏng



thể

chọn

l
ựa

v
i
ệc



t



theo

sự

kiện

hay

t
heo

ti
ến

t
rình,



thể

dễ

dàng

sử

dụng


những

khái

n
i
ệm

của

l
ập

trình

hướng

đố
i

t
ượng

(như

đa

hình,


kế

thừa)



thiế
t

kế

các

mẫu

thử

(pattern)

để

mở

rộng

chức

năng

của


quá

trình



phỏng.


Các

đố
i

t
ượng



phỏng

(message,

module,

queue )

được


thể

hiện

qua

các

l
ớp

của

C++.

Mộ
t

số

l
ớp



bản

trong

thư


viện



phỏng

của

OMNeT++
:




Module,

cổng,

li
ên

kết




Các

tham


số




Message




Các

l
ớp

Con
t
ainer

(mảng,

hàng

đợi )




Các


l
ớp

Da
t
a

Collection


Các

l
ớp

này



t
hể

được

sử

dụng

như


những

công

cụ

cho

phép

ngườ
i

sử

dụng



thể
duyệ
t

qua

t

t


cả

các

đố
i

t
ượng

khi

chạy

t
hử



hình

đồng

thờ
i

h
i
ển


thị

thông

tin

về
chúng

như

tên

của

đố
i

t
ượng,

tên

l
ớp,

các

biến


t
rạng

thái



nộ
i

dung

bên

trong.

Đặc
đ
i
ểm

này

cũng

cho

phép

t

ạo

ra

các



h
ì
nh



phỏng



giao

diện

đồ

hoạ

(GUI)

vớ
i

phần

cấu

trúc

bên

t
rong

được

che

đi.

OMNet++


Tran
g

7




2.3.


Sử

dụng

OMNeT++


2.3.1.

Xây

dựng



chạy

thử

các



hình



phỏng



Mộ
t



hình

OMNeT++

bao

gồm

những

phần

sau:




Ngôn

ngữ



t



topology

-

NED

(file



phần

mở

rộng

.ned):



t


cấu

trúc
của

module


vớ
i

các

tham

số,

các

cổng

Các

file

.ned



thể

được

v
i
ế
t


bằng

bấ
t

kỳ

bộ

soạn

t
hảo

hoặc

sử

dụng

chương

t
r
ì
nh

GNED




trong

OMNeT++.




Định

nghĩa

cấu

t
rúc

của

các

message

(các

file




phần

mở

rộng

.msg):

Ngườ
i

sử

dụng



thể

định

nghĩa

rấ
t

nh
i
ều


k
i
ểu

messsage



thêm

các

trường

dữ

li
ệu
cho

chúng.

OMNeT++

sẽ

dịch

những


định

nghĩa

này

sang

các

l
ớp

C++

đầy

đủ.






nguồn

của

các


module

đơn

g
i
ản.

Đây

l
à

các

f
il
e

C++

vớ
i

phần

mở

rộng




.h

hoặc

.cc.


Hệ

thống



phỏng

cung

cấp

cho

ta

các

thành

phần


sau
:




Phần

nhân



phỏng.

Phần

này

chứa

code

để

quản

l
ý


quá

trình



phỏng


các

thư

viện

l
ớp



phỏng.



được

viế
t

bằng


C++,

được

b
i
ên

dịch



được
đặ
t

cùng

dạng

vớ
i

các

file

thư


viện

(các

file



phần

mở

rộng



.a

hoặc

.lib).




Giao

diện

ngườ

i

sử

dụng.

Giao

d
i
ện

này

được

sử

dụng

khi

thực

h
i
ện

quá


trình


phỏng,

t
ạo

sự

dễ

dàng

cho

quá

trình

sửa

l
ỗi,

b
i
ểu

diễn


(demons
t
rat
i
on)
hoặc

khi

thực

hiện



phỏng

theo

t
ừng

khố
i

(batch

execu
ti

on

of

simu
l
ations).


mộ
t

vài

kiểu

giao

diện

t
rong

OMNeT++,

t

t

cả


đều

được

viế
t

bằng

C++,
được

biên

dịch



đặ
t

cùng

nhau

trong

các


thư

viện

(các

file



phần

mở

rộng



.a

hoặc

.lib).


Thực

h
i
ện




phỏng



phân

tích

kết

quả


Các

chương

t
r
ì
nh

thực

h
i
ện




phỏng

(the

simulation

executable)



các

chương

trình
độc

l
ập,

t
ức








thể

chạy

trên

các

máy

khác

không

cài

đặ
t

OMNeT++

hay

các

file



hình

t
ương

ứng.

Kh
i

chương

t
rình

khở
i

động,



bắ
t

đầu

đọc

file


cấu

h
ì
nh

(thông
thường

l
à

file

omnetpp.
i
n
i
).

File

này

chứa

các

thiế

t

l
ập

để

đ
i
ều

khiển

quá

t
rình


phỏng

thực

hiện,

các

b
i
ến


cho

các

tham

số

của



h
ì
nh

File

cấu

h
ì
nh

cũng



thể

được

sử

dụng

để

đ
i
ều

khiển

nh
i
ều

quá

trình



phỏng,

trong

trường


hợp

đơn

g
i
ản
nhấ
t



các

quá

t
rình



phỏng

này

sẽ

được

thực


hiện

l
ần

l
ượ
t

bở
i

mộ
t

chương

trình


phỏng

(simu
l
ation

program).



Đầu

ra

của

quá

trình



phỏng



các

file

dữ

li
ệu.

Các

file

này




thể



các

file

vector,
các

fi
l
e



hướng

hoặc

các

file

của


ngườ
i

sử

dụng.

OMNeT++

cung

cấp

mộ
t

công

cụ

đồ

hoạ

Plove

để

xem




vẽ

ra

nộ
i

dung

của

các

file

vector.

Tuy

nhiên

chúng

ta

cũng

nên


hiểu

rằng

khó





thể

xử



đầy

đủ

các

f
il
e

kế
t


quả



chỉ

dùng

riêng

OMNeT++
;

các

fi
l
e

này

đều

l
à

các

file




định

dạng

để



thể

đọc

được

bở
i

các


i

xử

l
ý

t

oán

học

của

các

chương

t
rình

như

Ma
tl
ab

hay

Octave,

hoặc



thể

được


đưa
vào

bảng

tính

của

các

chương

trình

như

OpenOff
i
ce

Ca
l
c,

Gnumer
i
c


hay

M
i
crosof
t
Excel.

Tẩ
t

cả

các

chương

t
r
ì
nh

này

đều



chức


năng

chuyên

dụng

t
rong

việc

phân

ch

số

hoá,

vẽ

biểu

d
i
ễn

(visualization)

vượ

t

qua

khả

năng

của

OMNeT++.


Các

file



hướng

cũng



t
hể

được


biểu

d
i
ễn

bằng

công

cụ

Scalar.





thể

vẽ

được
các

biểu

đồ,

các


đồ

thị

dựa

vào

t
ập

hợp

các

toạ

độ

(x,

y)





thể


xuấ
t

dữ

li
ệu

vào
clipboard

để



thể

sử

dụng

trong

các

chương

trình

khác


nhằm

đưa

những

phân

tích
chi

ti
ế
t

hơn.

OMNet++


Tran
g

8




Giao


diện

ngườ
i

sử

dụng


Mục

đích

chính

của

g
i
ao

diện

ngườ
i

sử


dụng



che

những

phần

phức

t
ạp

bên

t
rong
cấu

trúc

của

các



hình


đố
i

vớ
i

ngườ
i

sử

dụng,

dễ

dàng

đ
i
ều

kh
i
ển

quá

t
rình



phỏng,



cho

phép

ngườ
i

sử

dụng



khả

năng

t
hay

đổ
i

các


biến

hay

các

đố
i

t
ượng
bên

trong

của



h
ì
nh.

Đ
i
ều

này




rấ
t

quan

trọng

đố
i

vớ
i

pha

phát

t
r
i
ển



sửa

l


i
trong

dự

án.

G
i
ao

diện

đồ

hoạ

cũng



thể

được

sử

dụng

để


trình

diễn

hoạ
t

động

của


hình.


Cùng

mộ
t



h
ì
nh

ngườ
i


sử

dụng



t
hể

t
rên

nhiều

giao

diện

khác

nhau



không
cần

phả
i


thay

đổ
i



trong

các

file



hình.

Ngườ
i

sử

dụng



thể

kiểm


t
hử



sửa

l

i

rấ
t

dễ

dàng

qua

giao

diện

đồ

hoạ,

cuố
i


cùng



t
hể

chạy



dựa

t
rên

mộ
t

giao

diện

đơn
giản



nhanh


chóng



hỗ

trợ

thực

hiện

t
heo

khố
i

(batch

execution).


Các

thư

viện


thành

phần


Các

k
i
ểu

module



thể

được

l
ưu

t

i

những

vị


trí

độc

l
ập

vớ
i

chỗ



chúng

thực

sự
được

sử

dụng.

Đặc

đ
i
ểm


này

cung

cấp

cho

ngườ
i

sử

dụng

khả

nhóm

các

kiểu

module

l

i


vớ
i

nhau



t
ạo

ra

các

t


viện

thành

phần.


Các

chương

trình




phỏng

độc

l
ập


Các

chương

t
r
ì
nh

thực

h
i
ện

quá

trình




phỏng



thể

được

l
ưu

nh
i
ều

l
ần,

không

phụ

thuộc

vào

các




h
ì
nh,

sử

dụng

cùng

mộ
t

thiế
t

l
ập

cho

các

module

đơn

giản.


Ngườ
i

sử

dụng



thể

chỉ

ra

trong

file

cấu

h
ì
nh



hình

nào


sẽ

được

chạy.

Đ
i
ều

này

t
ạo

khả
năng

cho

ngườ
i

sử

dụng




thể

xây

dựng

những

chương

t
rình

t
hực

hiện

l
ớn

bao

gồm
nhiều

quá

tr
ì

nh



phỏng,



phân

phố
i



như

mộ
t

công

cụ



phỏng

độc


l
ập.

Khả
năng

linh

hoạ
t

của

ngôn

ngữ



t


topology

cũng

hỗ

trợ


cho

hướng

ti
ếp

cận

này.


2.3.2.

Hệ

thống

file


Sau

khi

cài

đặ
t


OMNe
t
++,

t


mục

omne
t
pp

t
rên

hệ

thống

máy

của

bạn

nên

chứa


các
thư

mục

con

dướ
i

đây.


Hệ

thống



phỏng:


omnetpp/

thư

mục

gốc


của

OMNeT++

bin/

các

công

cụ

trong

OMNeT++

(GNED,

nedtool )

include/

các

fi
l
e

header


cho



hình



phỏng
li
b
/

các

fi
l
e

thư

viện

bitmaps/

các

biểu

t

ượng

đồ

hoạ

doc/


các

file

hướng

dẫn,

readme


manua
l/

f
i
le

hướng

dẫn


dạng

HTML


ti
c
t
oc-tutor
i
a
l/

g
i

i

th
i
ệu

sử

dụng

OMNeT++



api
/

API

tham

ch
i
ếu

dạng

HTML


nedxm
l
-ap
i/

API

t
ham

ch
i
ếu


cho

t


viện

NEDXML


src
/



nguồn

của

tài

li
ệu

src/




nguồn


của

OMNeT++


nedc
/

nedtoo
l
,

trình

biên

dịch

message


sim
/

phần

nhân




phỏng

parsim
/

các

file

dành

cho

việc

thực

h
i
ện

phân

t
án
netbu
i
lder/


các

file

dành

cho

việc

đọc

động

các

f
il
e

NED

envir/



nguồn

cho


giao

d
i
ện

ngườ
i

sử

dụng
cmdenv
/

giao

d
i
ện

ngườ
i

dùng

dòng

l
ệnh


OMNet++


Tran
g

9




t
kenv/

g
i
ao

diện

ngườ
i

sử

dụng

dựa


trên

Tc
l
/tk

gned/

công

cụ

soạn

thảo

file

NED

plove/

công

cụ

vẽ




phân

tích

đầu

ra

dạng

vector
scalars/

công

cụ

vẽ



phân

tích

đầu

ra

dạng




hướng
nedxm
l/

thư

viện

NEDXML

utils/

các

ti
ện

ích

khác

tes
t/

bộ

kiểm


t
hử

lùi

core
/

bộ

kiểm

t
hử

lùi

cho

thư

viện



phỏng
distrib
/


bộ

kiểm

t
hử

lùi



Các

quá

trình



phỏng

mẫu

được

chứa

trong

thư


mục

samples

samples
/

thư

mục

chứa

các



hình



phỏng

mẫu
aloha/



hình


của

giao

thức

A
l
oha

cqn/

Closed

Queue

Network



Thư

mục

contrib

chứa

các


chương

tr
ì
nh



thể

kế
t

hợp

vớ
i

OMNeT++

contrib
/

octave
/

script

của


Octave

dùng

để

xử



kế
t

quả

emacs/

bộ

đánh

dấu



pháp

NED


cho

Emacs

Ngoài

ra

bạn

cũng



thể

tìm

t
hấy

các

thư

mục

khác

như


msvc
/
,

chứa

các

thành

phần

ch

hợp

cho

Microsoft

Visual

C++

OMNet++


Tran
g


10







3. NGÔN NGỮ NED



3.1

Tổng

quan

về

NED


NED

được

sử


dụng

để



t


t
opology

của

mộ
t



h
ì
nh

trong

OMNeT++.

NED

sử


dụng

phương

pháp



t


module

hoá.

Đ
i
ều

này



nghĩa

l
à

mộ

t

mạng



thể

được



t


như

mộ
t

t
ập

hợp

các



t



thành

phần

(các

kênh,

các

kiểu

module

đơn

giản

hay

kế
t
hợp).

Các

kênh,


các

kiểu

module

đơn

g
i
ản



kế
t

hợp

được

sử

dụng

để



t



mộ
t
mạng

nào

đó



thể

được

sử

dụng

l

i

khi



t



mộ
t

mạng

khác.


Các

file

chứa



t


mạng

t
hường



phần

mở


rộng



.ned.

Các

file

NED



thể

được
load

động

vào

các

chương

trình




phỏng,

hay



thể

được

dịch

sang

C++

bằng

bộ
biên

dịch

của

NED




được

li
ên

kế
t

bên

trong

các

chương

t
rình

thực

hiện.


3.1.1.

Các

thành


phần

của

ngôn

ngữ



tả

NED


Mộ
t

fi
l
e
l

NED

bao

gồm


các

phần

như

sau:




Các

chỉ

dẫn

i
mport




Khai

báo

các

kênh





Khai

báo

các

modu
l
e

đơn

g
i
ản



kế
t

hợp





Khai

báo

mạng


3.1.2.

Các

từ

khoá


Ngườ
i

sử

dụng

cần

phả
i

chú


ý

không

sử

dụng

những

t


khoá



sẵn

của

NED

để

đặ
t
tên

cho


các

đố
i

t
ượng

khác.

Các

t


khoá



bản

của

NED

bao

gồm:



i
mport

channel

endchannel

simple

endsimp
l
e

module

endmodule

error

delay

datarate
const

parameters

gates

submodules


connections

atesizes

i
f

for

do

endfor

network
endnetwork

nocheck

ref

ancestor

t
rue

false

li
ke


input

numeric

string

bool

char

xm
l
xm
l
doc


3.1.3.

Đặt

tên


Trong

NED

ngườ

i

sử

dụng



thể

đặ
t

tên

cho

các

module,

các

kênh,

các

module

con,

các

tham

số,

các

cổng,

các

thuộc


nh



hàm

chức

năng

của

kênh

Các


tên

này



thể
bao

gồm

các

chữ

cái

ti
ếng

Anh,

các

chữ

số




dấu

gạch

dướ
i

“_”.

Tên

luôn

được

đặ
t
bắ
t

đầu

bằng

chữ


i


hoặc

dấu

gạch

dướ
i
.

Trong

t
rường

hợp

muốn

đặ
t

tên

bắ
t

đầu
bằng


chữ

số,

bạn



thể

sử

dụng

t
hêm

mộ
t

dấu

gạch

dướ
i

đặ
t




đầu,



dụ

như

_3Com


Nếu

t
ên

bao

gồm

nhiều

t


nên

viế

t

hoa



đầu

mỗ
i

t


hoặc



thể

sử

dụng

dấu

gạch
dưới.

Tên


của

các

module,

kênh



mạng

nên

bắ
t

đầu

bằng

chữ

cái

in

hoa


còn

tên

của
tham

số,

cổng



các

module

con

nên

bắ
t

đầu

bằng

chữ



i

thường.


NED

l
à

mộ
t

ngôn

ngữ



phân

biệ
t

hoa

t
hường.


OMNet++


Tran
g

11




3.1.4.

Chú

thích


Các

dòng

chú

thích



thể


đặ
t



bấ
t



vị

trí

nào

trong

file

NED.

Tương

t


như



pháp

của

C++,

các

dòng

chú

th
í
ch

trong

NED

bắ
t

đầu

bằng

dấu

‘//’.



Chú

t
hích

trong

NED



thể

được

sử

dụng

trong

những

công

cụ

t

ạo

t
à
i

li
ệu

(documen
t
generator)

như

JavaDoc,

Doxygen




3.2.

Các

chỉ

dẫn


import


Từ

khoá

i
mport

được

sử

dụng

để

thêm

các

khai

báo

trong

các


file



t


khác.

Sau

kh
i

đã

import,

ngườ
i

sử

dụng



t
hể


sử

dụng

t

t

cả

các

thành

phần

đã

được

định

nghĩa
trong

file



t



đó.


Chú

ý

khi

thêm

mộ
t

file



t
ả,

chỉ



các

thông


tin

khai

báo

được

sử

dụng.

Cũng
t
ương

t


như

vậy

khi

mộ
t

fi

l
e

được

thêm

vào

không



nghĩa





sẽ

được

dịch

kh
i
file

chứa




được

dịch.

Ngườ
i

sử

dụng

sẽ

phả
i

dịch

t

t

cả

các

file


chứ

không

phả
i

chỉ



file



mức

cao

nhất.


Bạn



thể

xác


định

mộ
t

file

thêm

vào





hoặc

không

viế
t

phần

mở

rộng.



dụ
:

i
mport

“ethenet”;

//import

etherne
t
.ned


Bạn

cũng



thể

sử

dụng

đường

dẫn


trong

khi

sử

dụng

t


khoá

impor
t

hoặc

t

t

hơn


bạn

sử


dụng

trình

biên

dịch

của

NED

vớ
i

t
ham

số

-I

để

đặ
t

t
ên


cho

thư

mục

chứa

các
file



bạn

muốn

i
mport.




3.3.

Khai

báo

các


kênh


Mộ
t

định

nghĩa

kênh

được

dùng

để

xác

định

kiểu

kế
t

nối.


Tên

của

kênh



thể

được

sử

dụng

sau

đó

trong

file

để

t
ạo

các


liên

kế
t

vớ
i

các

tham

số

khác.


pháp
:

channel

Tên

kênh


//
endchannel


Ba

tham

số



thể

được

gán

giá

trị

t
rong

phần

thân

của

đoạn




khai

báo

kênh,

t

t

cả
các

tham

số

này

đều



các

tuỳ

chọn:


độ

trễ,

l

i



t
ốc

độ

dữ

li
ệu

(datarate).

Độ

trễ


thờ
i


gian

t
rễ

trên

đường

truyền

được


nh

bằng

giây.

Lỗ
i



t
ham

số


đặc

trưng

cho

xác
suấ
t

t
ruyền

sai

mộ
t

b
it

trên

đường

truyền.

Tốc


độ

dữ

li
ệu

l
à

tham

số

được


nh

bằng

độ
rộng

băng

thông

của


kênh

t
ruyền,

được

tính

bằng

b
it/
s



được

dùng

để


nh

thờ
i

gian

truyền

của

mộ
t


i

tin.

Các

thuộc

tính



thể

xuấ
t

hiện

theo

bấ

t

kỳ

thứ

t


nào

t
rong
khai

báo.


Giá

t
rị

của

các

t
ham


số

(thuộc

tính)

nên

l
à

các

hằng

số.


dụ
:

channe
l

LeasedLine


delay

0.0018


//

sec

OMNet++


Tran
g

12




error

1e-8

datarate

128000

//

bit/sec
endchannel





3.4.

Khai

báo

các

module

đơn

giản


Các

module

đơn

giản

l
à

các


khố
i

chương

trình

được

xây

dựng

sẵn

cho

các

module
khác

(có

thể



các


modu
l
e

kế
t

hợp).

Các

module

được

khai

báo

bằng

tên



theo

quy
ước


t
ên

của

các

module

này

được

đặ
t

t
ên

bắ
t

đầu

bằng

chữ

cái


in

hoa.


Các

modu
l
e

đơn

g
i
ản

được

khai

báo

thông

qua

các

cổng




các

tham

số.


pháp
:

s
i
mple

SimpleModuleName
parameters:

//
gates:

//
endsimp
l
e


3.4.1.


Các

tham

số

của

module

đơn

giản


Các

tham

số



các

biến

phụ


thuộc

vào

t
ừng



hình.

Tham

số

của

các

module

đơn
giản

được

sử

dụng


bở
i

các

hàm

(hay

còn

được

gọ
i



các

t
huậ
t

t
oán

của

module)


khai
báo

trong

chính

modu
l
e.

Theo

quy

ước

các

tham

số

sẽ

được

đặ
t


t
ên

bắ
t

đầu

bằng

chữ

i

t
hường.


Các

tham

số

được

khai

báo


bằng

cách

li

t



tên

sau

t


khoá

parameters.

Kiểu

của

các
tham

số




thể



kiểu

số

(numeric),

hằng

số

(numeric

const

hay

viế
t

gọn

l
à


const),

giá

trị

log
i
c

(bool),

kiểu

chuỗ
i

(string)

hoặc

xml.

Khi

tham

số


không

khai

báo



kiểu

thì

mặc

định

k
i
ểu

của

tham

số

đó




numeric.


dụ
:

s
i
mple

TrafficGen
parameters:
interarrivalTime,
numOfMessages

:

const,
address

:

string;

gates:

//
endsimp
l
e


Các

tham

số



thể

được

gán

giá

trị

t


NED

(khi

các

module


được

sử

dụng

như

các
khố
i

dựng

sẵn

của

mộ
t

khố
i

kế
t

hợp

l

ớn

hơn)

hoặc

t


file

cấu

hình

omnetpp.ini.


Tham

số

ngẫu

nhiên



hằng


số

OMNet++


Tran
g

13




Các

tham

số



kiểu

số



thể

được


đặ
t

để

trả

về

mộ
t

giá

t
rị

ngẫu

nhiên

theo

dạng

phân

phố
i


đều

(un
i
formly

distributions)

hoặc

các

dạng

phân

phố
i

khác


Trong

đa

số

trường


hợp,

các

tham

số

thường

chỉ

nhận

g
i
á

trị

ngẫu

nhiên

khi

bắ
t


đầu
khở
i

gán,

sau

đó

giá

trị

này

được

giữ

nguyên.

Khi

đó

các

tham


số

này

phả
i

được

kha
i
báo



hằng

số

-

const.

Kha
i

báo

mộ
t


t
ham

số



cons
t

th
ì

giá

trị

của

tham

số

sẽ

được
xác

định


mộ
t

l
ần

duy

nhấ
t

kh
i

bắ
t

đầu

t
hực

h
i
ện



phỏng




sau

đó

giá

t
rị

đó

sẽ

được
co
i



hằng

số.

(Chú

ý


OMNeT++

khuyến

khích

việc

khai

báo

mọ
i

tham

số

l
à

const
trừ

những

t
rường


hợp

bạn

muốn

sử

dụng

chức

năng

t
ạo

số

ngẫu

nhiên).


Tham

số

XML



Đôi

khi

các

module

cần

đầu

vào



những

t
hông

tin

phức

t
ạp

hơn


khả

năng



t


của
các

tham

số,

khi

đó

bạn



thể

sử

dụng


mộ
t

f
i
le

cấu

hình

mở

rộng.

OMNeT++



thể
đọc



xử



các


file

này

thông

qua

mộ
t

tham

số

chứa

tên

của

file.


Từ

các

phiên


bản

3.0

trở

lên,

XML

được

co
i



mộ
t

dạng

chuẩn

cho

các

file


cấu

hình



OMNeT++

cũng


ch

hợp

sẵn

các

công

cụ

cho

phép

ngườ
i


sử

dụng



t
hể

làm

việc

được

vớ
i

các

file

XML.

OMNeT++

chứa

bộ


phân


ch



pháp

XML

(XML

parser),



khả

năng

đọc

các

file

DTD,


sử

dụng

bộ

nhớ

đệm

để

nhớ

các

file

(trong

t
rường

hợp
mộ
t

file

XML


được

tham

ch
i
ếu

t

i

nh
i
ều

module

t
h
ì



sẽ

cũng

chỉ


phả
i

l
oad

mộ
t

l
ần),
cung

cấp

cho

ngườ
i

sử

dụng

khả

năng

chọn


l
ọc

các

phần

trong

tài

li
ệu

thông

qua
XPa
t
h,

t
hể

hiện

nộ
i


dung

của

file

XML

thông

qua

DOM.


3.4.2.

Các

cổng

của

module

đơn

giản



Cổng



các

đ
i
ểm

kế
t

nố
i

của

module.

Đ
i
ểm

bắ
t

đầu




kế
t

thúc

mộ
t

kế
t

nố
i

g
i
ữa

ha
i
module

chính



các

cổng.


OMNeT++

hỗ

trợ

kiểu

kế
t

nố
i

mộ
t

chiều

(đơn

công)

do

đó




ha
i

loạ
i

cổng



cổng

vào



cổng

ra.

Các

message

được

gử
i

đ

i

t


cổng

ra



được

nhận

vào

t


cổng

vào.

Theo

quy

ước,


các

cổng

được

đặ
t

tên

bắ
t

đầu

bằng

chữ


i
thường.




đây

chúng


ta



khái

niệm

về

các

vector

cổng

trong

đó

mộ
t

vector

cổng

l
à


mộ
t

t
ập
hợp

bao

gồm

nhiều

cổng

đơn.


Cổng

được

kha
i

báo

bằng


cách

khai

báo

tên

sau

t


khoá

gates.

Cặp

dấu

[]

thể

hiện
mộ
t

vector


cổng.

Các

thành

phần

của

mộ
t

vector

cổng

được

đánh

số

bắ
t

đầu

t



0.




dụ
:


simple

NetworkInterface
parameters:

//

gates:


in:

fromPort,

fromH
i
gherLayer;
out:


toPort,

t
oHigherLayer
;
endsimp
l
e

simple

RoutingUnit
parameters:

//
gates:

in:

output[];

OMNet++


Tran
g

14





out:

input[];


endsimp
l
e


Kích

t
hước

của

mộ
t

vector

cổng



thể


được

xác

định

sau

do

đó

mỗ
i

đố
i

t
ượng

cụ

thể

của

mộ
t




h
ì
nh



thể



các

vector

cổng



k
í
ch

thước

khác

nhau.





3.5.

Khai

báo

module

kết

hợp


Module

kế
t

hợp



các

module




thể

chứa

mộ
t

hoặc

nh
i
ều

các

modu
l
e

con.

Bấ
t

kỳ
kiểu

module


nào

(đơn

g
i
ản

hay

kế
t

hợp)

đều



thể

được

dùng

như



mộ

t

module

con.
Cũng

g
i
ống

như

các

module

đơn

g
i
ản,

các

module

kế
t


hợp

cũng



các

cổng,

các
tham

số



chúng



t
hể

được

sử

dụng




bấ
t

kỳ

chỗ

nào



các

module

đơn

giản



thể

được

sử

dụng.



Hình

t
ượng

hoá

chúng

ta



t
hể

t
ưởng

t
ượng

các

module

kế
t


hợp

g
i
ống

như

các

hộp
bìa

cứng



chúng

ta



thể

giấu

phần




h
ì
nh



phỏng



các

cấu

t
rúc

phức

t
ạp
bên

trong

nó.

Không




các

hành

vi


ch

cực

(active

behaviour)

nào

liên

quan

đến

các
module

kế

t

hợp

-

chúng

chỉ

đơn

g
i
ản



mộ
t

nhóm

các

module

kế
t


hợp

t
rong

mộ
t
thành

phần

l
ớn

hơn

để



thể

được

sử

dụng

như


mộ
t



hình

hoặc

như

mộ
t

khố
i

dựng
sẵn

cho

các

modu
l
e

kế
t


hợp

khác.


Theo

quy

ước,

t
ên

của

các

module

(bao

gồm

cả

kiểu

module


kế
t

hợp)

đều

được

bắ
t

đầu

bằng

chữ

hoa.


Các

modu
l
e

con




thể

sử

dụng

các

tham

số

của

module

cha.

Các

module

con

này


thể


kế
t

nố
i

vớ
i

nhau

hoặc/và

kế
t

nố
i

vớ
i

module

kế
t

hợp


chứa

chúng.


Việc

kha
i

báo

các

module

kế
t

hợp

cũng

t
ương

t


như


khai

báo

các

module

đơn

g
i
ản.
Phần

khai

báo

cũng

bao

gồm

các

t



khoá

parameters



gates,

ngoà
i

ra



còn

sử
dụng

t
hêm

ha
i

t



khoá



submodules



connections.




pháp
:


modu
l
e

Tên_modu
l
e
parameters:

//
gates:

//

submodules:

//
connections
:

//
endmodule

Chú

ý

l
à

t

t

cả

các

kha
i

báo

trên


(parame
t
ers,

gates,

submodules,

connections)

chỉ


tuỳ

chọn.

OMNet++


Tran
g

15




3.5.1.


Các

tham

số



cổng

của

module

kết

hợp


Các

tham

số



cổng


của

module

kế
t

hợp

cũng

được

kha
i

báo



hoạ
t

động

t
ương

t



như

các

tham

số



cổng

của

các

module

đơn

g
i
ản.


Các

tham


số

của

module

kế
t

hợp



thể

được

sử

dụng

bở
i

các

module

con




thường

được

dùng

để

khở
i

t
ạo

g
i
á

t
rị

cho

các

tham

số


của

các

module

con.


Các

tham

số

cũng



thể

được

sử

dụng

để


xác

định

cấu

trúc

bên

t
rong

của

các

modu
l
e
kế
t

hợp:

số

các

module


con,

k
í
ch

t
hước

của

các

vec
t
or

cổng

mặ
t

khác

các

tham

số


này
cũng



thể

được

sử

dụng

để

xác

định

các

kế
t

nố
i

bên


t
rong

module

kế
t

hợp.


Các

tham

số

ảnh

hưởng

đến

cấu

trúc

bên

trong


của

module

nên

được

khai

báo



const

để

giá

trị

của

tham

số

không


thay

đổ
i

theo

các

l
ần

t
ruy

nhập.

Trá
i

l

i

nếu

các

tham


số
được

khai

báo

l
à

các

giá

trị

ngẫu

nhiên,

ngườ
i

sử

dụng




thể

sẽ



các

g
i
á

trị

khác
nhau

mỗ
i

l
ần

t
ham

số

được


truy

nhập

t
rong

quá

trình

xử



của

module

kế
t

hợp.




dụ
:



module

Rou
t
er
parameters:

packetsPerSecond

:

numeric,
bufferS
i
ze

:

numeric,
numOfPorts

:

cons
t;

gates:



in:

inputPort[];
out:

outputPort[];
submodules:

//

connections
:

//

endmodule


3.5.2.

Các

module

con


Các

module


con

được

khai

báo

sau

t


khoá

submodules.

Theo

quy

ước

các

modu
l
e
con


được

đặ
t

t
ên

bắ
t

đầu

vớ
i

chữ

cái

thường.


Các

modu
l
e


con



thể



mộ
t

module

đơn

giản

hoặc

mộ
t

module

kế
t

hợp.

Trình


biên
dịch

NED

phả
i

biế
t

được

k
i
ểu

của

module

do

đó

các

module


con

phả
i

được

khai

báo
sớm

hơn

hoặc

được

i
mport

t


các

f
i
le


NED

khác.


Ngườ
i

sử

dụng

cũng



khả

năng

t
ạo

ra

các

vector

module


con



kích

thước

của
vector

này



thể

nhận

vào

t


giá

t
rị


của

mộ
t

tham

số.

Khi

khai

báo

các

module

con,
bạn

cần

phả
i

gán

g

i
á

trị

cho

các

tham

số

của

module



nếu

k
i
ểu

module

t
ương


ứng



sử

dụng

các

vector

cổng

t
h
ì

bạn

phả
i

xác

định

cho




mộ
t

k
í
ch

thước

cụ

thể.




dụ
:


module

Tên_Module_kết_hợp

//
submodules:

OMNet++



Tran
g

16




tên_module_con_1:

K
i
ểu_Module_1


parameters:


//
gatesizes
:

//


tên_module_con_2:

K
i

ểu_Module_2


parameters:


//
gatesizes
:

//
endmodule

Vector

modu
l
e


Vec
t
or

module



mộ
t


t
ập

hợp

(mộ
t

mảng)

các

module

con.

Kích

thước

của

vec
t
or


thể


được

b
i
ểu

diễn

bằng

mộ
t

b
i
ểu

thức

đặ
t

trong

cặp

dấu

ngoặc


vuông

‘[]’.

Biểu

t
hức
này



thể

tham

ch
i
ếu

đến

các

tham

số

của


module.

Giá

trị

0

cho

số

các

module

cũng
được

chấp

nhận.




dụ
:



module

CompoundModule
parameters:

s
i
ze:

cons
t;
submodules:
submod1
:

Node[3]

//


submod2
:

Node[size]


//


submod3

:

Node[2*size+1]


//
endmodule


3.5.3.

Tham

số

tên

kiểu

module

con


Việc

sử

dụng


tên

của

các

kiểu

module

như

các

t
ham

số

t
ạo

đ
i
ều

kiện

dễ


dàng

cho

sử
dụng

các

module

con.

Lấy

v
í

dụ,

cho

rằng

mục

đích

của


quá

trình



phỏng



so
sánh

sự

khác

nhau

g
i
ữa

các

thuậ
t

toán



m

đường.

Giả

sử

bạn

đã

l
ập

trình

các

thuậ
t
toán


m

đường

cần


thiế
t

như

các

module

đơn

giản

DistVecRou
ti
ngNode,
AntNetRouting1Node,

AntNetRou
ti
ng2Node,



Bạn

cũng

đã


t
ạo

ra

mộ
t

topology
mạng

như

mộ
t

module

kế
t

hợp

gọ
i



RountingTestNetwork


để

phục

vụ

cho

việc

đánh
giá

hoạ
t

động

của

các

thuậ
t

toán.

Hiện


t

i

RountingTestNetwork

đang

sử

dụng

thuậ
t
toán

Dis
t
VecRoutingNode

(tấ
t

cả

các

module

con


đều



k
i
ểu

này)



bạn

muốn



OMNet++


Tran
g

17





thể

chuyển

đổ
i

qua

l

i

mộ
t

cách

dễ

dàng

giữa

các

thuậ
t

t

oán

để

ti
ện

l

i

cho

việc

đánh

giá.


Để

thực

h
i
ện

đ
i

ều

này

t
a



t
hể

sử

dụng

thêm

mộ
t

biến



routingNodeType

cho
module


Rou
t
ingTestNetwork.

Đồng

thờ
i

bạn

cũng

kha
i

báo

cho

NED

các

modu
l
e

con
của


Rou
ti
ngTestNe
t
work

không



kiểu

cố

định,



k
i
ểu

của

các

module

này


được

l
à
giá

trị

của

biến

routingNodeType.

Kh
i

đó

mạng



phỏng

của

bạn




t
hể

dễ

dàng
thay

đổ
i

các

thuậ
t

t
oán



t
rên

thông

qua



g
i
á

trị

của

tham

số

như
“DistVectRoutingNode”,

“AntNetRouting1Node”

hoặc

“AntNetRouting2Node”.
Trong

trường

hợp

giá

trị


của

tham

số



sa
i

(chứa

tên

của

mộ
t

kiểu

không

t
ồn

t
ại)


quá
trình



phỏng

sẽ

bị

l

i

khi

bắ
t

đầu

chạy

-

module

type


definition

not

found

(khai

báo
kiểu

module

không

được


m

thấy).


Bên

trong

module


RoutingTestNetwork,

ta



thể

gán

giá

trị

cho

các

tham

số



ti
ến
hành

kế
t


nố
i

vớ
i

các

module

chứa

các

thuậ
t

toán


m

đường

t
ương

ứng.


Tuy

nhiên

để
t
ăng

tính

chính

xác,

đảm

bảo

t
ên

của

tham

số



cổng




bạn

sử

dụng



chính

xác,
NED

cần



sự

giúp

đỡ

t


bạn.


Bạn



thể

khai

báo

thêm

mộ
t

modu
l
e

(g
i


sử

tên


RoutingNode)




phả
i

đảm

bảo

chắc

chắn

rằng

t

t

cả

các

module



định


sử

dụng
thông

qua

tham

số

routingNodeType

đều



các

tham

số



các

cổng

giống


như

của
module

RoutingNode.




pháp
:


module

RoutingTes
t
Network
parameters:

routingNodeType:

string
;

//

should


hold

t
he

name


//

of

an

ex
i
sting

module

type
gates:

//

submodules:


node1

:

routingNodeType

like

Rou
t
ingNode;


node2
:

routingNodeType

like

Rou
t
ingNode;


//


connections

nocheck
:



node1.out0

>

node2.in0;


//
endmodule

Đoạn



này

nếu

nhìn

theo

góc

độ

của


ngôn

ngữ

C++

t
h
ì

RoutingNode

đóng

vai

trò
của

mộ
t

l
ớp



sở,

Dis

t
VecRoutingNode,

AntNe
t
Routing1Node



các

l
ớp

kế

thừa

t

l
ớp

RoutingNode.

Tham

số

routingNodeType


t
ương

ứng

vớ
i

con

t
rỏ

trỏ

t

i

l
ớp



sở.


Module


Rou
ti
ngNode

không

cần

được

thực

hiện

trong

C++

bở
i

không



đố
i

t
ượng


cụ
thể

nào

của



được

t
ạo

ra,



chỉ

đơn

thuần

được

dùng

để


kiểm

t
ra

tính

chính

xác

của
file

NED.

Mặ
t

khác,

các

module

thực

sự


sẽ

được

thay

thể

(ví

dụ

như
D
i
stVecRou
ti
ngNode,

AntNetRouting1Node, )

sẽ

không

cần

phả
i


khai

báo

t
rong

file
NED.

OMNet++


Tran
g

18




Từ

khoá

like

cho

phép


bạn

t
ạo

ra

mộ
t

họ

các

module

phục

vụ

cho

cùng

mộ
t

mục


đích,



cùng

g
i
ao

ti
ếp

g
i
ống

nhau

(có

cùng

các

tham

số




các

cổng)



sử

dụng

chúng
thay

thế

nhau

t
rong

file

NED.


3.5.4.

Gán


giá

trị

cho

các

tham

số

của

các

module

con




thể

gán

giá

trị


cho

các

tham

số

của

các

module

con

trong

phần

khai

báo
parameters

của

các


module

con.

Các

t
ham

số

của

module

con



thể

được

gán

giá

trị
như


các

hằng

số

hoặc



thể

sử

dụng

ngay

các

t
ham

số

của

module

kế

t

hợp

chứa

nó,
hoặc

cũng



khở
i

gán

bằng

mộ
t

biểu

thức.


Không


bắ
t

buộc

t

t

cả

các

t
ham

số

đều

phả
i

khở
i

gán

g
i

á

trị.

G
i
á

trị

của

t
ham

số



thể
nhận

trong

lúc

thực

h
i

ện

hoặc

nhận

t


file

cấu

h
ì
nh

hoặc

trong

t
rường

hợp

giá

trị


của
tham

số

không



trong

file

cấu

h
ì
nh,

quá

t
r
ì
nh



phỏng


sẽ

nhắc

bạn.

Tuy

nhiên

nếu
các

tham

số

để

trong

file

cấu

h
ì
nh,

sẽ


dễ

dàng

hơn

cho

v
i
ệc

sửa

chữa

giá

trị

của

các
tham

số.





dụ
:


module

CompoundModule
parameters:

param1
:

numeric,
param2
:

numeric,
useParam1
:

bool;
submodules:
submodule1
:

Node
parameters:

p1


=

10,


p2

=

param1+param2,


p3

=

useParam1==
t
rue

?

param1

:

param2
;



//
endmodule

Trong

khi



h
ì
nh

hoạ
t

động,

các

biểu

t
hức

gán

giá


t
rị

vẫn

được

tính

toán

nếu

các
tham

số

t
ương

ứng

được

gọ
i

đến.


Ngoà
i

ra

để

gọ
i

mộ
t

tham

số

của

module

con

t
a


thể

sử


dụng



pháp

như

sau
:

submodule.parametername

(hoặc
submodule[index].parame
t
ername).


Từ

khoá

input


Kh
i


mộ
t

t
ham

số

không

nhận

g
i
á

t
rị

trực

ti
ếp

trong

file

NED


hoặc

t
rong

file

cấu

h
ì
nh,
ngườ
i

sử

dụng

sẽ

được

nhắc

để

nhập

g

i
á

t
rị

cho

tham

số

khi

quá

trình



phỏng

bắ
t
đầu

thực

h
i

ện.

Tuy

nhiên

nếu

bạn

muốn

chủ

động

nhập

giá

t
rị

tham

số

khi

bắ

t

đầu

quá
trình



phỏng,

bạn



thể

sử

dụng

t


khoá

input.

Từ


khoá

inpu
t

cũng

cho

phép

ngườ
i

sử

dụng



t
hể

th
i
ế
t

l
ập


thông

báo

nhập

giá

trị

hay

đặ
t

g
i
á

t
rị

mặc

định

cho

tham


số.


pháp
:

parameters:

OMNet++


Tran
g

19




numCPUs

=

input(10,

"Number

of


processors?"),

//
g
i
á

trị

mặc


//
định,

dấu

nhắc
processingTime

=

input(10ms),

//thông

báo

nhập


g
i
á

t
rị
cacheSize

=

input;


3.5.5.

Khai

báo

kích

thước

của

các

vector

cổng


của

module

con


Kích

t
hước

của

các

vector

cổng

được

khai

báo

bằng

t



khoá

gatesizes.

Kích

thước

này



thể

được

khai

báo

như

mộ
t

hằng

số,


mộ
t

t
ham

số

hay

mộ
t

biểu

thức.


dụ
:

simple

Node
gates:

in:

inputs[];

out:

outputs[];
endsimp
l
e



module

CompoundModule
parameters:

numPorts:

const;
submodules:
node1
:

Node
gatesizes
:

inputs[2],

outputs[2];
node2
:


Node
gatesizes
:

inputs[numPorts],

outputs[numPorts];


//
endmodule

gatesizes



không

bắ
t

buộc,

nếu

bạn

muốn


bỏ

qua

v
i
ệc

khai

báo

gatesizes

cho

vector
cổng



sẽ

được

đặ
t

bằng


0.

Mộ
t



do

để

bỏ

qua

v
i
ệc

gán

giá

t
rị

cho

ga
t

esizes

l
à

bạn

sẽ

sử

dụng

gate++

(“extend

gate

vector

with

a

new

gate”

-


vector

cổng

mở

rộng

vớ
i

mộ
t

cổng

mớ
i
).

gate++

sẽ

được

trình

bầy




hơn

trong

phần

Connection.


3.5.6.

Khai

báo

gatesizes



tham

số



điều


kiện


Kích

t
hước

của

vector

cổng



các

tham

số

trong

module

con

thường


được

kha
i

báo
kèm

thêm

đ
i
ều

kiện.




dụ
:


module

Chain


parameters:


count:

cons
t;

OMNet++


Tran
g

20




submodules:


node

:

Node

[count]


parameters:



position

=

"midd
l
e"
;
parameters

if

index==0
:
position

=

"beginn
i
ng"
;

parameters

if

index==coun
t

-1:


position

=

"end";


gatesizes
:


in[2],

out[2]
;


gatesizes

i
f

index==0

||

index==coun

t
-1:


in[1],

out[1]
;


connections
:


//
endmodule

Chú

ý

các

g
i
á

trị

mặc


định

nên

được

khai

báo

đầu

tiên

bở
i

v
ì

NED

sẽ

duyệ
t

t



trên
xuống

dưới,

nếu

gặp

đ
i
ều

k
i
ện

đúng

thì

các

giá

t
rị

t

ương

ứng

sẽ

được

chèn

vào

các

giá

trị

mặc

định

trước

đó.

Trong

trường


hợp

khai

báo

g
i
á

trị

mặc

định

cuố
i

cùng,

g
i
á

trị

mặc

định


sẽ



thể

chèn

vào

giá

t
rị

của

mộ
t

t
rường

hợp

đ
i
ều


kiện

đúng

trước

đó.


3.5.7.

Kết

nối


Các

kế
t

nố
i

chỉ

ra

cụ


thể

cách

các

cổng

của

module

kế
t

hợp

giao

ti
ếp

vớ
i

các

cổng
t
ương


ứng

của

module

con.


Kế
t

nố
i



thể

được

t
ạo

ra

giữa

ha

i

module

con

hoặc

giữa

module

con

vớ
i

module

cha
(module

kế
t

hợp)

trực

ti

ếp

chứa



(trong

mộ
t

số

ít

trường

hợp,

mộ
t

kế
t

nố
i

cũng



thể

được

t
ạo

ra

giữa

ha
i

cổng

của

cùng

mộ
t

module

kế
t

hợp).


Đ
i
ều

này



nghĩa

l
à
NED

không

cho

phép

mộ
t

kế
t

nố
i


đa

cấp

(kế
t

nố
i

giữa

ha
i

module

xa

nhau

t
rong

cấu
trúc

phân

cấp).


Hạn

chế

này

làm

t
ăng


nh

độc

l
ập



khả

năng

dùng

l


i

của

mỗ
i
module.

Ngoài

ra,

hướng

của

module

cũng

rấ
t

trong

quan

trọng

khi


t
ạo

kế
t

nố
i
.

Không
thể

t
ạo

mộ
t

kế
t

nố
i

giữa

hai


cổng

ra

hoặc

giữa

ha
i

cổng

vào

vớ
i

nhau.


NED

chỉ

hỗ

trợ

kiểu


kế
t

nố
i

một-mộ
t

do

đó

mộ
t

cổng

riêng

b
i

t

được

sử


dụng

chỉ

xuấ
t
hiện

mộ
t

l
ần

trong

mộ
t

kế
t

nối.

K
i
ểu

kế
t


nố
i

một-nhiều



nhiều-mộ
t

cũng



thể
được

t
ạo

ra

bằng

cách

sử

dụng


các

module

đơn

g
i
ản

t
rong

đó

các

luồng

message

được
nhân

đôi

hoặc

được


ghép

thêm

(dup
li
ca
t
e

message

or

merge

message

flows).


Các

kế
t

nố
i


được

li

t



sau

t


khoá

connect
i
ons



được

phân

tách

vớ
i


nhau

bằng

dấu
chấm

phẩy.




dụ
:


module

CompoundModule
parameters:

//

gates:

//

OMNet++



Tran
g

21




submodules:

//



connections
:


node1.outpu
t

>

node2.input;


node1.inpu
t

<


node2.output;


//
endmodule

Cổng

nguồn



thể



cổng

ra

của

các

module

con

hoặc


l
à

cổng

vào

của

modu
l
e

kế
t
hợp



cổng

đích



thể




cổng

vào

của

module

con

hay

cổng

ra

của

module

kế
t

hợp.

i

tên




t
hể

chỉ

theo

chiều

t


t
rái

qua

phả
i

hoặc

theo

chiều

ngược

l

ại.


Chú

thích

gate++

cho

phép

ngườ
i

sử

dụng



thể

mộ
t

vector

cổng


vớ
i

mộ
t

cổng

mới,


không

cần

phả
i

khai

báo

trong

gatesizes.





dụ
:


simple

Node
gates:

in:

in[];
out:

out[];
endsimp
l
e



module

Sma
l
lNet
submodules:
node
:


Node[6];
connections
:

node[0].ou
t
++

>

node[1].in++;
node[0].
i
n++

<

node[1].out++;
node[1].ou
t
++

>

node[2].in++;
node[1].
i
n++

<


node[2].out++;
node[1].ou
t
++

>

node[4].in++;
node[1].
i
n++

<

node[4].out++;
node[3].ou
t
++

>

node[4].in++;
node[3].
i
n++

<

node[4].out++;

node[4].ou
t
++

>

node[5].in++;
node[4].
i
n++

<

node[5].out++;
endmodule

Mộ
t

kế
t

nố
i:







thể



các

thuộc

tính

(độ

trễ,

t


số

bit

l
ỗi,

t
ốc

độ

truyền


dữ

li
ệu)

hoặc

sử

dụng

mộ
t

kênh

truyền

đã

được

đặ
t

t
ên.

OMNet++



Tran
g

22








thể

xuấ
t

h
i
ện

trong

mộ
t

vòng


l
ặp

(để

t
ạo

ra

nh
i
ều

kế
t

nối).






thể



đ
i

ều

kiện.


Kết

nố
i

đơn



kênh

truyền


Nếu

bạn

không

xác

định

mộ

t

kênh

truyền,

thì

kế
t

nố
i

sẽ

không



trễ



không



bit
l


i

kh
i

truyền.

Bạn



t
hể

xác

định

mộ
t

kênh

t
ruyền

thông

qua


tên.




dụ
:


node1.outGate

>

F
i
ber

>

node2.inGate;


Trong

trường

hợp

này


fi
l
e

NED

đã

phả
i



khai

báo

loạ
i

kênh

t
ruyền

trên.

Hoặc


ngườ
i

sử

dụng

cũng



t
hể

xác

định

trực

ti
ếp

mộ
t

kênh

truyền


qua

các

tham

số

đặc

trưng.


dụ
:

node1.outGate

>

error

1e-9

delay

0.001

>


node2.inGate;


Không

nhấ
t

định

phả
i

kha
i

báo

đầy

đủ

các

tham

số




các

tham

số



t
hể

được

kha
i
báo

theo

bấ
t

kỳ

thứ

t


nào.



Kết

nố
i

vòng

l
ặp


Nếu

module

con

hoặc

các

vector

cổng

được

sử


dụng,

NED

cho

phép

ngườ
i

sử

dụng



thể

t
ạo

ra

nh
i
ều

hơn


mộ
t

kế
t

nố
i

vớ
i

mộ
t

khai

báo.

Đó

được

gọ
i

l
à


mộ
t

đa

kế
t

nố
i
hay

mộ
t

kế
t

nố
i

vòng

l
ặp.


for

i=0 4


do


node1.outGate[i]

>

node2[i].inGate
endfor;

Mộ
t

đa

kế
t

nố
i

thực

chấ
t

l
à


mộ
t

t
ập

hợp

các

kế
t

nố
i

đơn

được

khai

báo

gọn

hơn

nhờ


câu

l
ệnh

vòng

l
ặp

for do endfor.




Hình

I-3.1

-

Đa

kết

nố
i


Các


kết

nố
i



đ
i
ều

kiện


Ngườ
i

sử

dụng



thể

sử

dụng


t


khoá

i
f

để

ràng

buộc

đ
i
ều

k
i
ện

khi

t
ạo

các

kế

t

nối.


dụ
:

for

i=0 n

do


node1.outGate[i]

>

node2[i].inGate

i
f

i
%2==0;


endfor;



Nocheck

OMNet++


Tran
g

23




Mặc

định,

NED

quy

định

t

t

cả


các

cổng

đều

phả
i

được

kế
t

nố
i

do

vậy

trong

nhiều

trường

hợp

v

i
ệc

kiểm

t
ra

này



thể

gây

nh
i
ều

ph
i
ền

phức.

Để

t


t

bỏ

chức

năng

này
bạn



thể

sử

dụng

t


khoá

nocheck.




3.6.


Khai

báo

mạng


Để

thực

sự

t
ạo

mộ
t



h
ì
nh



phỏng


chạy

được

th
ì

ngườ
i

sử

dụng

phả
i

khai

báo
mạng.

Việc

khai

báo

mạng


sẽ

t
ạo

ra

mộ
t



h
ì
nh



phỏng

như



mộ
t

đố
i


t
ượng

cụ
thể

của

mộ
t

kiểu

module

đã

định

nghĩa

trước

đó.

Kiểu

module




đây

thường



mộ
t
module

kế
t

hợp,

tuy

nhiên

cũng



thể

t
ạo

ra


mộ
t

mạng

chỉ



mộ
t

module

đơn

giản
độc

l
ập.




thể

khai


báo

nh
i
ều

mạng

t
rong

mộ
t

hoặc

nhiều

file

NED.

Chương

t
rình



phỏng


sử

dụng

các

file

NED

đó

sẽ



t
hể

chạy

bấ
t

cứ

mộ
t


mạng

nào.

Nếu

bạn

muốn

cụ

thể

mộ
t

mạng

nào

đó

được

t
hực

h
i

ện

bạn



thể

chỉ



trong

file

cấu

hình

(omnetpp.in
i
).


pháp

khai

báo


mạng

cũng

t
ương

t


như

khai

báo

các

module

con
:

network

wirelessLAN:

WirelessLAN



parameters:
numUsers=10,
httpTraffic=true,
ftpTraffic=
t
rue,

distanceFromHub=truncnormal(100,60)
;


endnetwork




đây

WirelessLAN



tên

của

mộ
t


kiểu

module

kế
t

hợp

đã

định

nghĩa

t


trước,

t
rong

đó



thể

chứa


các

k
i
ểu

module

kế
t

hợp

khác

như

WirelessHost,

WirelessHub

Mộ
t
cách

t


nh

i
ên,

chỉ

các

k
i
ểu

module

không



cổng

mớ
i



t
hể

được

dùng


t
rong

các
khai

báo

mạng.




3.7.

Các

biểu

thức


Các

b
i
ểu

thức


được

sử

dụng

trong

NED

được

viế
t

theo



pháp

của

C++.

Các

b
i

ểu
thức

dùng

các

toán

t


của

C++,



thể

sử

dụng

các

tham

số


theo

cả

ha
i

hình

thức
truyền

t
heo

tham

trị

hoặc

tham

b
i
ến,



t

hể

gọ
i

các

hàm

của

C++,

nhận

các

g
i
á

trị
ngẫu

nhiên

hoặc

yêu


cầu

nhập

t


ngườ
i

sử

dụng


Kh
i

mộ
t

tham

số

được

gán

trị


bằng

mộ
t

biểu

thức

thì

g
i
á

trị

biểu

thức

đó

chỉ

được

tính
mỗ

i

l
ần

tham

số

được

gọ
i

t

i

(trừ

kh
i

tham

số

được

khai


báo

const).

Đ
i
ều

này


nghĩa



mộ
t

module

đơn

giản

sử

dụng

mộ

t

t
ham

số

không

được

khai

báo

const

sẽ
nhận

được

các

giá

trị

khác


nhau

mỗ
i

l
ần

gọ
i

t
ham

số

trong

quá

trình



phỏng.

Các
biểu

thức


khác

(chứa

các

tham

số

được

khai

báo

const)

sẽ

chỉ

được


nh

mộ
t


l
ần.

Các
tham

số



kiểu

XML



t
hể

được

dùng

để

truy

nhập


vào

các

file

XML

hay

mộ
t

phần
nào

đó

của

các

file

này.

Tham

số


kiểu

XML



t
hể

được

gán

g
i
á

trị

bằng

toán

t

xmldoc().

OMNet++



Tran
g

24




3.7.1.

Hằng

số


Hằng

số

học


Hằng

số

học

t
hường




các

số

dạng

t
hập

phân

hoặc

các

số

thập

phân

vớ
i

dấu

phẩy


động.


Hằng

chuỗ
i



tự


Hằng

chuỗ
i



t


được

kha
i

báo


giữa

cặp

dấu

ngoặc

kép.


Hằng

thờ
i

gian


Để

sử

dụng

hằng

thờ
i


g
i
an

bạn

phả
i

sử

dụng

thêm

các

t


khoá

chỉ

đơn

vị

thờ

i

g
i
an.


dụ
:


parameters:

propagationDelay

=

560ms,

//

0.560

giây
connectionT
i
meou
t

=


6m

30s

500ms,

//

390.5

giây
recoveryIntvl

=

0.5h;

//

30

phút

Các

đơn

vị


thờ
i

g
i
an



thể

được

sử

dụng:




Đơn

vị

Ý

nghĩa


ns


nano

giây
us

m
i
cro

giây
ms

m
ili

g
i
ây

s

giây


m

phút

(60


g
i
ây)


h

g
i


(3600

giây)


d

ngày

(86400

giây)



3.7.2.

Tham


chiếu


Các

b
i
ểu

t
hức



thể

sử

dụng

các

tham

số

của

module


kế
t

hợp

t
rực

ti
ếp

chứa





của
các

module

đơn

giản

đã

được


khai

báo

trước

đó

trong

file

NED.




pháp
:

submod.param

hoặc

submod[
i
ndex].param.





hai

t


khoá



thể

được

sử

dụng

vớ
i

t
ên

của

t
ham


số
:

ancestor



ref.


ancestor



nghĩa

l
à

nếu

mộ
t

module

kế
t

hợp


không

chứa

mộ
t

tham

số

nào,

t
h
ì

tham

số

đó

sẽ

được


m


k
i
ếm

trong

các

module

cấp

cao

hơn

trong

cấu

trúc

phân

cấp.
ancestor

không


được

khuyến

khích

sử

dụng

bở
i





xâm

phạm

t

i

khái

niệm

đóng


OMNet++


Tran
g

25




gói

thông

ti
n

(encapsulation)





thể

chỉ

được


k
i
ểm

tra

trong

thờ
i

g
i
an

chạy.



chỉ

nên

được

sử

dụng


trong

mộ
t

số

ít

những

trường

hợp

thực

sự

cần

t
h
i
ết.


ref

l

ấy

g
i
á

t
rị

của

tham

số

bằng

phương

pháp

t
ham

ch
i
ếu,




nghĩa



v
i
ệc

thay

đổ
i

giá

trị

của

tham

số

trong

thờ
i

g
i

an

chạy

sẽ

gây

ảnh

hưởng

t

i

t

t

cả

các

module

tham
chiếu

t


i

tham

số

này.

Cũng

giống

như

ancestor,

ref

nên

được

sử

dụng

hạn

chế.


Mộ
t
trường

hợp



thể

sử

dụng

ref



khi

phả
i

đ
i
ều

chỉnh




h
ì
nh

trong

t
hờ
i

gian

chạy

để

m

đ
i
ều

k
i
ện

t


i

ưu.

Ngườ
i

sử

dụng



thể

khai

báo

mộ
t

tham

số



mức


cao

nhấ
t

của


h
ì
nh



đặ
t

các

module

khác

tham

ch
i
ếu

t


i

tham

số

này.

Kh
i

bạn

thay

đổ
i

tham

số

này

trong

thờ
i


g
i
an

chạy,



sẽ

ảnh

hưởng

t

i

toàn

bộ



hình.

Trong

mộ
t


số

trường

hợp

khác,

các

t
ham

số

được

tham

ch
i
ếu



t
hể

được


dùng

như

các

biến

trạng
thái

đố
i

vớ
i

các

module

bên

cạnh.


3.7.3.

Các


toán

tử


Các

toán

t


được

hỗ

trợ

t
rong

NED

cũng

t
ương

t



như

các

toán

t


trong

C/C++,

t
uy
nhiên

cũng



mộ
t

số

khác


biệ
t:


Dấu

^

được

dùng

cho

phép

tính

luỹ

thừa

(không

phả
i

l
à


phép

XOR

các

b
it

như

t
rong

C).


Dấu

#

được

sử

dụng

cho

phép


toán

logic

XOR

(tương

t


như

dấu

!=)



##

được

dùng
cho

phép

toán


bit

XOR.


Thứ

t


ưu

tiên

của

các

phép

toán

b
it

(&,

|,


#)



cao

nhấ
t

so

vớ
i

các

toán

t


quan

hệ

khác.


Tấ
t


cả

các

b
i
ến

trong

NED

đều



kiểu

doubles.

Đố
i

vớ
i

các

toán


t


bit,

kiểu

doubles
được

chuyển

thành

kiểu

unsigned

l
ong

bằng

hàm

chuyển

đổ
i




sẵn

của

C/C++

(type
cast),

sau

kh
i

phép

toán

được

t
hực

hiện

kế
t


quả

sẽ

được

chuyển

đổ
i

l

i

t
hành

k
i
ểu
doubles.

Tương

t


đố

i

vớ
i

các

toán

t


logic

&&,

||



##,

các

toán

hạng

sẽ


được
chuyển

sang

kiểu

bool

(type

cast)



sau

đó

kế
t

quả

sẽ

l

i


được

đổ
i

về

kiểu

doubles.
Đố
i

vớ
i

phép

chia

l
ấy

phần



(%),

toán


hạng

sẽ

được

chuyển

sang

kiểu

long.


Danh

sách

các

toán

t




t

hứ

t


ưu

tiên
:




Toán

t


Ý

nghĩa


-,

!,

~

dấu


âm,

phủ

định,

l
ấy

phần



của

b
it


^

phép

toán

luỹ

thừa



*,

/,

%

phép

nhân,

chia,

ch
i
a

l
ấy

phần




+,

-

phép


cộng,

trừ


<<,

>>

phép

dịch

b
it


&,

|,

#

phép

toán

b
it


and,

or,

xor


==

so

sánh

bằng


!=

so

sánh

khác

×