Tài liệu OMNet++
OMNet++
1. GIỚI THIỆU
1.1. OMNeT++ là gì?
OMNeT++
l
à viết t
à mộ ứng dụng cung cấp cho ngườ
động của mạng. Mục đích ch
ắ
t
của cụm
t
ừ Objective Modular Network Testbed in C++.
sử dụng mô trường để tiến hành mô
nh của ứng dụng à mô phỏng hoạ động
của nó, OMNeT++ còn được
ạp, các
OMNeT++
l
t
i
i
phỏng hoạ
mạng thông tin, tuy nh
sử dụng trong nhiều
mạng k ểu hàng đợ
t
í
l
t
iên do tính phổ cập và linh hoạt
l
ĩnh vực khác như mô phỏng các hệ thống thông tin phức
t
i
i
(queueing networks) hay các kiến rúc phần cứng...
t
OMNeT++ cung cấp sẵn các thành phần
thành phần này (còn được gọ là các modu
đó được ập hợp thành những thành phần hay những mô hình
ngôn ngữ bậc cao (NED). OMNeT++ hỗ trợ giao d ện đồ hoạ, ương ứng vớ
hình cấu rúc của nó đồng hờ phần nhân mô phỏng (simu ation kernel) và các
module của OMNeT++ cũng rấ dễ dàng nhúng vào trong các ứng dụng khác.
t
l
ương ứng vớ các mô hình thực
e) được ập trình theo ngôn ngữ C++, sau
ớn hơn bằng mộ
các mô
i
tế. Các
i
l
t
l
ạ
i
l
t
i
t
i
t
t
i
l
t
1.2. Các thành phần chính của OMNeT++
•
•
Thư viện phần nhân mô phỏng (simulat
i
on kerne
l)
Trình biên dịch cho ngôn ngữ mô
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
le NED (GNED)
Giao diện đồ hoạ thực h
mô phỏng (Tkenv)
i
ện mô phỏng, các liên kế bên trong các file thực hiện
t
•
•
•
•
•
•
Giao diện dòng
Công cụ (giao diện đồ hoạ) vẽ đồ thị kế
Công cụ (giao diện đồ hoạ) mô ả kế quả vô hướng ở đầu ra (Scalars)
l
ệnh
t
hực hiện mô phỏng (Cmdenv)
t
quả vec or ở đầu ra (Plove)
t
t
t
Công cụ tài liệu hoá các mô hình
Các tiện ích khác
Các tài liệu hướng dẫn, các ví dụ mô phỏng...
1.3. Ứng dụng
OMNeT++
là một công cụ mô phỏng các hoạt động mạng bằng các module được thiết
kế hướng đối tượng. OMNeT++ thường được sử dụng trong các ứng dụng chủ yếu
như
:
•
Mô hình hoạt động của các mạng thông tin
Trang 1
OMNet++
•
•
•
Mô hình giao thức
Mô hình hoá các mạng k
Mô h nh hoá các hệ thống đa bộ vi xử lý (multiprocesser) hoặc các hệ thống
phần cứng theo mô h nh phân tán khác (distribu ed hardware systems)
Đánh giá kiến trúc phần cứng
Đánh giá hiệu quả hoạ động của các hệ thống phức
i
ểu hàng đợi
ì
ì
t
•
•
t
tạp...
1.4. Mô hình trong OMNeT++
Mộ
Độ sâu của của các module
dụng có hể biểu diễn các cấu
trúc mô hình. Các module trao đổ
(message). Các message này có hể có cấu trúc phức
các message này heo hai cách, một là gử trực tiếp
mộ
t
mô hình
t
rong OMNeT++ bao gồm các module
ồng nhau à không giớ
rúc ogic của các hệ thống trong
thông tin vớ nhau thông qua việc gửi
l
ồng nhau có cấu
hạn, đ ều này cho phép ngườ
hực ế bằng các cấu
các message
t
rúc phân cấp.
l
l
i
i
i
sử
t
t
l
t
t
i
i
t
t
ạp tuỳ ý. Các module có thể gử
i
t
i
tớ
i
địa chỉ nhận, ha
nối.
i
là gử
i
đ
i theo
t
đường dẫn được định sẵn, thông qua các cổng và các kế
t
Các module có thể có các tham số của riêng nó. Các tham số này có thể được sử dụng
để chỉnh sửa các thuộc tính của modu e và để biểu diễn cho topo ogy của mô hình.
l
l
Các module ở mức thấp nhấ trong cấu trúc phân cấp đóng gói các thuộc tính. Các
t
module này được coi là các module đơn giản, và chúng được
C++ bằng cách sử dụng các thư viện mô phỏng.
l
ập trình trong ngôn ngữ
Trang 2
OMNet++
2. TỔNG QUAN
2.1. Khái niệm mô hình hoá
OMNeT++ cung cấp cho ngườ
của các hệ thống thực ế.
i sử dụng những công cụ hiệu quả để mô tả cấu trúc
t
Các modu
Các modu
Các modu
l
l
l
e
l
ồng nhau có cấu trúc phân cấp
e là các đối tượng cụ thể của các k
e trao đổ thông tin bằng các message qua các kênh
i
ểu module
i
Các tham số của module linh hoạ
Ngôn ngữ mô ả topology
t
t
2.1.1. Cấu trúc phân cấp của các module
Mộ
đổ
cho mộ
module hệ thống. Module này có thể chứa các module con, các module con cũng có
thể chứa các module con của riêng nó. Độ sâu phân cấp đố vớ các module là không
giớ hạn, đ ều này cho phép ngườ sử dụng có hể dễ dàng biểu diễn mộ cấu rúc ogic
của mộ hệ thống trong thực ế bằng cấu trúc phân cấp của OMNeT++.
t
mô hình trong OMNeT++ chứa các modu
thông tin vớ nhau bằng cách gử các message. Mỗ
hệ thống mạng. Modu e mức cao nhấ trong cấu trúc phân cấp được gọi l
l
e
l
ồng nhau có cấu trúc phân cấp, trao
i
i
i
i
mô h nh này thường b ểu d ễn
ì
i
i
t
l
t
à
i
i
i
i
i
t
t
t
l
t
t
Cấu trúc của mô h
ình có thể được mô tả bằng ngôn ngữ NED của OMNeT++
module hệ thống
module kế
module đơn giản
t
hợp
Hình I-2.1 - Các module đơn g
e có thể chứa nhiều modu e con và được gọ
module đơn g ản là các module có cấp thấp nhấ trong cấu trúc phân cấp. Các module
đơn giản chứa các thuậ toán của mô hình. Ngườ sử dụng triển khai các module đơn
hư viện mô phỏng của OMNeT++.
iản và kết hợp
Các modu
l
l
i
là module kết hợp. Các
i
t
t
i
giản bằng ngôn ngữ C++, sử dụng các
t
2.1.2. Kiểu module
Tấ
t
cả các module dù là đơn g
i
ản hay phức
t
ạp đều là các đối tượng cụ thể của các
sử dụng định nghĩa ra các k ểu
kiểu module. Trong khi mô
t
ả các mô hình, ngườ
i
i
Trang 3
OMNet++
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ộ đối tượng cụ thể của k
t
i
ểu module đã được định nghĩa trước đó, tất
cả
các module của mạng đều là module con (hoặc là con của module con) của module hệ
thống.
Kh
i
mộ
t
kiểu module được sử dụng như mộ
đó là mộ module đơn g ản hay phức
ách các module đơn giản ra thành nhiều module đơn giản được nhúng
module kế hợp, và ngược có thể ập hợp các chức năng của mộ module
module đơn g ản mà không ảnh hưởng g đến các kiểu module đã
sử dụng định nghĩa.
t
khố
i
dựng sẵn (building block), sẽ không
thể phân biệ
dụng có
trong mộ
t
t
t
i
t
ạp. Đ ều này cho phép ngườ sử
i
i
t
t
hể
t
l
ạ
i
t
t
kế
t
hợp trong mộ
t
i
ì
được ngườ
i
Kiểu module có thể được ưu trữ trong mộ
l
t
file riêng rẽ. Đ
iều này cho phép người sử
dụng có hể nhóm các kiểu module và ạo ra một
t
l
ạ
i
t
thư viện thành phần
2.1.3. Message, cổng, liên kết
Các modu
dạng khung (frame) hoặc là các gói tin (packe
message có thể có cấu rúc phức ạp tuỳ ý. Các module đơn giản có
message đ mộ cách trực tiếp đến vị trí nhận hoặc gử i theo mộ đường dẫn định sẵn
thông qua các cổng và các liên kết.
l
e trao đổ
i
thông tin bằng việc gử
i
các message. Trong thực
) được truyền đi trong mạng. Các
hể gử các
tế, message có
t
t
t
t
i
i
t
i
đ
t
“Thờ gian mô phỏng địa phương” (local simulation time) của mộ
khi module nhận được mộ message. Message có thể đến ừ mộ module khác hoặc
đến ừ cùng mộ module (message của chính bản thân module - self-message được
dùng để thực hiện bộ định hời).
i
t module tăng lên
t
t
t
t
t
t
Cổng (gate) là các giao tiếp vào ra của module. Message được gử
và được nhận vào thông qua các cổng vào.
i đi qua các cổng ra
Mỗ
đơn
nố
của module con vớ
i
kế
t
nố
i
(connection) hay còn gọ
i
là liên kế
t
(link) được
t
ạo bên trong mộ
t
mức
kế
trong 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
t
i
có
t
hể được
t
ạo ra g
i
ữa các cổng
t
ương ứng của ha
hợp.
i
module con, hoặc giữa cổng
i
cổng của module kế
t
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ố
rúc phân cấp của mộ mô hình, các message thường di chuyển
nố vớ ểm bắ đầu và kế thúc là các module đơn giản. Tập các
module đơn giản và đến mộ module đơn giản được gọ là route. Các
hợp hoạ động giống như các “cardboard box” trong mô 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 và thế giớ bên
ngoà
i
Tương ứng vớ
qua một loạ các kế
kế nố i từ mộ
module kế
i
cấu
t
t
t
t
i
i
đi
t
t
t
i
đ
t
t
i
t
t
ì
i
i
.
Trang 4
OMNet++
2.1.4. Mô hình truyền gói tin
Mộ
mô h
khác. Ba tham số này bao gồm:
t
kế
t
nố
i
có thể có ba
t
ham số đặc trưng. Những tham số này rấ
t thuận tiện cho các
ì
nh mô phỏng mạng thông tin nhưng không hữu dụng
lắm cho các kiểu mô hình
•
•
•
Độ trễ đường
Tỉ số bit, được tính bằng số
Tỉ số dữ liệu, được tính bằng số bit/s.
uỳ chọn. Giá rị của các tham số này
(hay còn gọi là k ểu của kênh t
t
ruyền (propagation delay) tính bằng s - giây.
l
ỗ
i
l
ỗi/bit.
Các tham số này
nối, phụ thuộc vào kiểu của liên kế
là
t
t
là khác nhau
t
rên
t
ừng kế
t
l
t
i
ruyền - channe
type).
Độ trễ đường
t
ruyền là
t
ổng thờ
i
gian đến của message bị trễ đ
i
khi truyền qua kênh.
à xác suấ
ch nh xác
Tỉ số it ảnh hưởng đến quá trình truyền message qua kênh. Tỉ số này
l
ỗ
i
b
l
i
t
các bit bị truyền sai. Do đó xác suấ
t
để mộ
t
message độ dà
i
n bit truyền đ
í
là:
P(message gử
trong đó ber ỉ số
Các message truyền đ
message có ỗi.
Tỉ số dữ liệu được tính theo đơn vị bit/s, và nó được sử dụng để tính thờ
truyền mộ gói tin. Khi tỉ số này được sử dụng, quá trình gử message đ trong mô
hình sẽ ương ứng vớ ệc truyền bit đầu tiên và message được tính à đến nơ sau kh
i
đ
i
được nhận chính xác) = (1 - ber)n
it và n à số bit của message.
đều có mộ cờ ỗi, cờ này sẽ được
l
à
t
l
ỗi
b
l
i
t
l
thiết lập khi việc truyền
l
i
gian để
t
i
i
t
i
v
i
l
i
i
bên nhận đã nhận được bit cuối cùng.
A
B
tA
tB
Message gử
i đi
truyền bị trễ
Độ trễ đường truyền
Message nhận được
Hình I-2.3 - Truyền message
Trang 5
OMNet++
2.1.5. Tham số
Các module có thể các tham số.Các tham số này có thể được đặt giá trị trong các file
NED hoặc các file cấu h
ì
nh ompnetpp.ini.
hể được dùng để thay đổ
ễn cho opo ogy của mô h
ểu là chuỗi, số học, giá
liệu XML (XML data tree). Các biến kiểu số trong các biểu thức có thể nhận giá trị
các tham số khác, gọ hàm, sử dụng các biến ngẫu nhiên ừ các nguồn phân tán hoặc
nhận giá trị trực tiếp được nhập vào bở ngườ sử dụng.
Các tham số có k ểu số có hể được dùng để cấu h nh topology rấ
các module kế hợp, các tham số này có hể được dùng để chỉ ra số module con, số
cổng giao tiếp và cách các kế nố nộ bộ được ạo ra.
Các tham số này có
hoặc dùng để biểu d
t
i
i
các thuộc tính của các module đơn g
ình.
iản
t
l
Các tham số có
t
hể có k
i
trị logic hoặc cũng có thể chứa cây dữ
t
ừ
i
t
i
i
i
t
ì
t dễ dàng. Nằm trong
t
t
t
i
i
t
2.1.6. Phương pháp mô tả topology
Người sử dụng dùng ngôn ngữ NED (Network Description) để mô tả cấu trúc của các
mô hình
2.2. Lập trình thuật toán
Các modu
và sức mạnh của C++, kế
kiện dễ dàng cho ngườ sử dụng. Các
ả theo sự kiện hay heo tiến rình, có thể dễ dàng sử dụng những khái n
l
e đơn giản có thể chứa các thuậ
hợp vớ các thư viện mô phỏng của OMNeT++
ập trình viên mô phỏng có thể chọn ựa v
ệm của
kế các mẫu thử (pattern) để mở
t
toán như các hàm của C++. Sự linh hoạ
ạo đ ều
ệc mô
ập
t
t
i
t
i
i
l
l
i
i
t
t
t
l
trình hướng đối tượng (như đa hình, kế thừa) và thiế
rộng chức năng của quá trình mô phỏng.
t
Các đối tượng mô phỏng (message, module, queue...) được thể hiện qua các
C++. Mộ số ớp cơ bản trong thư viện mô phỏng của OMNeT++
lớp của
t
l
:
•
•
•
•
•
Module, cổng, liên kết...
Các tham số
Message
Các
l
ớp Con
ớp Da a Collection
hể được sử dụng như những công cụ cho phép ngườ
cả các đối tượng khi chạy hử mô hình đồng thờ ển thị thông tin về
chúng như tên của đối tượng, tên ớp, các biến rạng thái và nộ dung bên trong. Đặc
ểm này cũng cho phép ạo ra các mô h
phần cấu trúc bên rong được che đi.
tainer (mảng, hàng đợi...)
Các
l
t
Các
l
ớp này có
qua
t
i sử dụng có thể
duyệ
t
t
ấ
t
t
i hi
i
l
t
đ
i
t
ì
nh mô phỏng có giao diện đồ hoạ (GUI) với
t
Trang 6
OMNet++
2.3. Sử dụng OMNeT++
2.3.1. Xây dựng và chạy thử các mô hình mô phỏng
Một mô hình OMNeT++ bao gồm những phần sau:
•
Ngôn ngữ mô
của module vớ
t
i
ả topology - NED (file có phần mở rộng .ned): mô
các tham số, các cổng... Các file .ned có thể được v
nh GNED có trong OMNeT++.
tả cấu trúc
i
ế
t
bằng bấ
t
kỳ bộ soạn
thảo hoặc sử dụng chương
tr
ì
•
•
Định nghĩa cấu
t
rúc của các message (các file có phần mở rộng .msg): Ngườ
sử dụng có thể định nghĩa rấ nh ều k
cho chúng. OMNeT++ sẽ dịch những định nghĩa này sang các
i
t
i
iểu messsage và thêm các trường dữ liệu
l
ớp C++ đầy đủ.
Mã nguồn của các module đơn g
là .h hoặc .cc.
iản. Đây là các file C++ với phần mở rộng
Hệ thống mô phỏng cung cấp cho ta các thành phần sau
:
•
Phần nhân mô phỏng. Phần này chứa code để quản
các thư viện ớp mô phỏng. Nó được viế bằng C++, được b
đặ cùng dạng vớ các file thư viện (các file có phần mở rộng là .a hoặc .lib).
l
ý quá trình mô phỏng và
l
t
i
ên dịch và được
t
i
•
Giao diện ngườ
mô phỏng,
hoặc khi thực hiện mô phỏng theo
Có mộ vài kiểu giao diện rong OMNeT++,
cùng nhau trong các thư viện (các file có phần mở rộng
i
sử dụng. Giao d
i
ện này được sử dụng khi thực h
ỗi, b ểu diễn (demons
(batch execution of simu ations).
cả đều được viế bằng C++,
i
ện quá trình
t
ạo sự dễ dàng cho quá trình sửa
ừng khố
l
i
t
rat on)
i
t
i
l
t
t
t
ấ
t
t
được biên dịch và đặ
là .a hoặc .lib).
t
Thực h
i
ện mô phỏng và phân tích kết quả
nh thực h ện mô phỏng (the simulation executable) là các chương trình
ức là nó có thể chạy trên các máy khác không cài đặ OMNeT++ hay các file
ương ứng. Kh chương rình khở động, nó bắ đầu đọc file cấu h nh (thông
à file omnetpp. ). File này chứa các thiết lập để đ ều khiển quá rình mô
phỏng thực hiện, các b ến cho các tham số của mô h nh... File cấu h nh cũng có thể
được sử dụng để đ ều khiển nh ều quá trình mô phỏng, trong trường hợp đơn g ản
chương trình
Các chương
độc ập,
mô hình
thường
tr
ì
i
l
t
t
l
t
i
i
t
i
t
ì
n
i
i
t
i
ì
ì
i
i
i
nhấ
t
là các quá
trình mô phỏng này sẽ được thực hiện lần lượt bởi một
mô phỏng (simu
lation program).
Đầu ra của quá trình mô phỏng là các file dữ liệu. Các file này có thể là các file vector,
các fi e vô hướng hoặc các file của ngườ sử dụng. OMNeT++ cung cấp mộ công cụ
đồ hoạ Plove để xem và vẽ ra nộ dung của các file vector. Tuy nhiên chúng ta cũng
nên hiểu rằng khó mà có thể xử lý đầy đủ các file kế quả mà chỉ dùng riêng
OMNeT++ các fi e này đều à các file có định dạng để có thể đọc được bở các gó
xử oán học của các chương rình như Matlab hay Octave, hoặc có thể được đưa
vào bảng tính của các chương trình như OpenOff ce Ca c, Gnumer c hay M crosof
Excel. Tẩ cả các chương nh này đều có chức năng chuyên dụng rong việc phân
tích số hoá, vẽ biểu d ễn (visualization) vượ qua khả năng của OMNeT++.
l
i
t
i
t
;
l
l
i
i
l
ý
t
t
i
l
i
i
t
t
tr
ì
t
i
t
Các file vô hướng cũng có hể được biểu d ễn bằng công cụ Scalar. Nó có thể vẽ được
các biểu đồ, các đồ thị dựa vào ập hợp các toạ độ (x, y) và có thể xuấ dữ liệu vào
clipboard để có thể sử dụng trong các chương trình khác nhằm đưa những phân tích
chi ti hơn.
t
i
t
t
ế
t
Trang 7
OMNet++
Giao diện ngườ
i
sử dụng
ao diện ngườ
cấu trúc của các mô hình đố vớ ngườ
phỏng, và cho phép ngườ sử dụng có khả năng
bên trong của mô h nh. Đ ều này là rấ quan trọng đố
ao diện đồ hoạ cũng có thể được sử dụng để trình diễn hoạt
Mục đích chính của g
i
i
sử dụng là che những phần phức
sử dụng, dễ dàng đ ều kh ển quá
hay đổ các biến hay các đối tượng
vớ pha phát ển và sửa
động của
t
ạp bên
trong
i
i
i
i
i
trình mô
i
i
t
i
ì
t
i
i
tr
i
lỗi
trong dự án. G
i
mô hình.
Cùng mộ
cần phả thay đổ
rấ dễ dàng qua giao diện đồ hoạ, cuố
t
mô h
ì
i
nh ngườ
gì trong các file mô hình. Ngườ
cùng có hể chạy nó dựa
heo khố (batch execution).
i
sử dụng có
t
hể
t
rên nhiều giao diện khác nhau mà không
sử dụng có thể kiểm hử và sửa
rên mộ giao diện đơn
i
i
t
lỗi
t
i
t
t
t
giản và nhanh chóng có hỗ trợ thực hiện
t
i
Các thư viện thành phần
Các k
được sử dụng. Đặc đ
vớ nhau và ạo ra các t
i
ểu module có thể được
ểm này cung cấp cho ngườ
hư viện thành phần.
l
ưu
t
ạ
i
những vị trí độc
lập với chỗ mà chúng thực sự
i
i
sử dụng khả nhóm các kiểu module
l
ạ
i
i
t
Các chương trình mô phỏng độc
Các chương nh thực h ện quá trình mô phỏng có thể được
thuộc vào các mô h nh, sử dụng cùng mộ thiết lập cho các module đơn giản. Ngườ
sử dụng có thể chỉ ra trong file cấu h nh mô hình nào sẽ được chạy. Đ ều này ạo khả
năng cho ngườ sử dụng có thể xây dựng những chương rình hực hiện ớn bao gồm
nhiều quá tr nh mô phỏng, và phân phố nó như mộ công cụ mô phỏng độc ập. Khả
năng linh hoạ của ngôn ngữ mô ả topology cũng hỗ trợ cho hướng tiếp cận này.
lập
tr
ì
i
lưu nhiều lần, không phụ
ì
t
i
ì
i
t
i
t
t
l
ì
i
t
l
t
t
2.3.2. Hệ thống file
Sau khi cài đặ
thư mục con dướ
t
OMNe
đây.
t++, thư mục omnetpp trên hệ thống máy của bạn nên chứa các
i
Hệ thống mô phỏng:
omnetpp/
bin/
thư mục gốc của OMNeT++
các công cụ trong OMNeT++ (GNED, nedtool...)
include/
lib/
các fi
các fi
l
l
e header cho mô hình mô phỏng
e thư viện
bitmaps/
doc/
các biểu
các file hướng dẫn, readme...
le hướng dẫn dạng HTML
th ệu sử dụng OMNeT++
API tham ch
API ham ch
tượng đồ hoạ
manual/
ti
api
nedxm
fi
c
t
/
oc-tutor
i
a
l/
g
i
ớ
i
i
i
i
ếu dạng HTML
ếu cho hư viện NEDXML
l
-api/
t
t
src
/
mã nguồn của tài liệu
mã nguồn của OMNeT++
nedtoo , trình biên dịch message
src/
nedc
sim
/
l
/
phần nhân mô phỏng
parsim
/
các file dành cho việc thực hiện phân tán
netbu lder/
i
các file dành cho việc đọc động các file NED
mã nguồn cho giao d ện ngườ sử dụng
giao d ện ngườ dùng dòng ệnh
envir/
cmdenv
i
i
/
i
i
l
Trang 8
OMNet++
t
kenv/
g
i
ao diện ngườ
i sử dụng dựa trên Tcl/tk
gned/
công cụ soạn thảo file NED
plove/
scalars/
nedxml/
utils/
công cụ vẽ và phân tích đầu ra dạng vector
công cụ vẽ và phân tích đầu ra dạng vô hướng
thư viện NEDXML
các tiện ích khác...
test/
bộ kiểm
bộ kiểm
bộ kiểm
t
t
t
hử lùi
core
distrib
...
/
hử lùi cho thư viện mô phỏng
hử lùi
/
Các quá trình mô phỏng mẫu được chứa trong thư mục samples
samples thư mục chứa các mô hình mô phỏng mẫu
/
aloha/
mô hình của giao thức Aloha
cqn/
Closed Queue Network
...
Thư mục contrib chứa các chương trình có thể kết hợp với OMNeT++
contrib
/
octave
emacs/
Ngoài ra bạn cũng có thể tìm
tích hợp cho Microsoft Visual C++...
/
script của Octave dùng để xử lý kế
bộ đánh dấu cú pháp NED cho Emacs
t quả
t
hấy các thư mục khác như msvc
/
, chứa các thành phần
Trang 9
OMNet++
3. NGÔN NGỮ NED
3.1 Tổng quan về NED
NED được sử dụng để mô
dụng phương pháp mô ả module hoá. Đ
ả như một tập hợp các mô ả thành phần (các kênh, các kiểu module đơn giản hay kế
hợp). Các kênh, các kiểu module đơn g
mạng nào đó có thể được sử dụng khi mô
t
ả
t
opology của mộ
t
mô h
ì
nh trong OMNeT++. NED sử
t
i
ều này có nghĩa
l
à mộ mạng có thể được mô
t
t
t
t
t
iản và kế hợp được sử dụng để mô
t
tả mộ
l
ạ
i
t
ả một mạng khác.
Các file chứa mô ả mạng
t
thường có phần mở rộng là .ned. Các file NED có thể được
load động vào các chương trình mô phỏng, hay có thể được dịch sang C++ bằng bộ
biên dịch của NED và được liên kế
t
bên trong các chương
trình thực hiện.
3.1.1. Các thành phần của ngôn ngữ mô tả NED
Mộ
t
fil
el
NED bao gồm các phần như sau:
•
Các chỉ dẫn mport
i
•
•
•
Khai báo các kênh
Khai báo các modu
Khai báo mạng
l
e đơn giản và kết hợp
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á có sẵn của NED để đặt
tên cho các đối tượng khác. Các
t
ừ khoá cơ bản của NED bao gồm:
e module endmodule error delay datarate
f for do endfor network
i
mport channel endchannel simple endsimp
const parameters gates submodules connections atesizes
endnetwork nocheck ref ancestor rue false like input numeric string bool char xm
xm doc
l
i
t
l
l
3.1.3. Đặt tên
Trong NED người sử dụng có 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 tính và hàm chức năng của kênh... Các tên này có thể
bao gồm các chữ cái tiếng Anh, các chữ số và dấu gạch dướ “_”. Tên luôn được đặ
bắ đầu bằng chữ cá hoặc dấu gạch dướ . Trong rường hợp muốn đặ tên bắ đầu
hêm mộ dấu gạch dướ đặ ở đầu, ví dụ như
i
t
t
i
i
t
t
t
bằng chữ số, bạn có thể sử dụng
t
t
i
t
_3Com...
Nếu
dưới. Tên của các module, kênh và mạng nên bắ
tham số, cổng và các module con nên bắ đầu bằng chữ cá
t
ên bao gồm nhiều
t
ừ nên viế
t
hoa ở đầu mỗi từ hoặc có thể sử dụng dấu gạch
đầu bằng chữ cái in hoa còn tên của
thường.
t
t
i
NED à mộ ngôn ngữ có phân biệ hoa hường.
l
t
t
t
Trang 10
OMNet++
3.1.4. Chú thích
Các dòng chú thích có thể đặ
pháp của C++, các dòng chú th
t
í
ở bấ
ch trong NED bắt
t
kì vị trí nào trong file NED. Tương
đầu bằng dấu ‘//’.
tự như cú
Chú
t
hích trong NED có thể được sử dụng trong những công cụ ạo tài liệu (document
t
generator) như JavaDoc, Doxygen
3.2. Các chỉ dẫn import
Từ khoá
đã import, ngườ
trong file mô ả đó.
i
mport được sử dụng để thêm các khai báo trong các file mô
tả khác. Sau khi
i
sử dụng có hể sử dụng cả các thành phần đã được định nghĩa
t
tất
t
Chú ý khi thêm mộ
t
file mô
fi e được thêm vào không có nghĩa là nó sẽ được dịch kh
sử dụng sẽ phả dịch cả các file chứ không phả chỉ
tả, chỉ có các thông tin khai báo được sử dụng. Cũng
t
ương ự như vậy khi mộ
t
t
l
i
file chứa nó được dịch. Ngườ
là file ở mức cao nhất.
i
i
t
ấ
t
i
Bạn có thể xác định mộ
Ví dụ
mport “ethenet”;
Bạn cũng có thể sử dụng đường dẫn trong khi sử dụng
bạn sử dụng trình biên dịch của NED với tham số -I để đặt tên cho thư mục chứa các
file mà bạn muốn mport.
t file thêm vào mà có hoặc không viết phần mở rộng.
:
i
//import ethernet.ned
t
ừ khoá import hoặc tốt hơn là
i
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 có thể được
sử dụng sau đó trong file để
t
ạo các liên kế vớ các tham số khác.
t
i
Cú pháp
:
channel Tên kênh
//...
endchannel
Ba tham số có thể được gán giá trị
các tham số này đều là các tuỳ chọn: độ trễ,
thờ gian rễ trên đường truyền được tính bằng giây. Lỗ
suất truyền sai mộ it trên đường truyền. Tốc độ dữ liệu
rộng băng thông của kênh ruyền, được tính bằng bit/s và được dùng để tính thờ
tin. Các thuộc tính có thể xuấ hiện theo bấ kỳ thứ ự nào t
t
rong phần thân của đoạn mã khai báo kênh,
và ốc độ dữ liệu (datarate). Độ trễ là
là ham số đặc trưng cho xác
à tham số được tính bằng độ
tất cả
l
ỗ
i
t
i
t
i
t
t
b
l
t
i
gian
rong
truyền của mộ
t
gó
i
t
t
t
khai báo.
Giá
Ví dụ
channe
delay 0.0018 // sec
t
rị của các
tham số (thuộc tính) nên là các hằng số.
:
l
LeasedLine
Trang 11
OMNet++
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
khác (có thể là các modu
ước ên của các module này được đặt tên bắ
l
à các khố
e kế hợp). Các module được khai báo bằng tên và theo quy
đầu bằng chữ cái in hoa.
i chương trình được xây dựng sẵn cho các module
l
t
t
t
Các modu e đơn g ản được khai báo thông qua các cổng và các tham số.
Cú pháp
mple SimpleModuleName
l
i
:
s
i
parameters:
//...
gates:
//...
endsimple
3.4.1. Các tham số của module đơn giản
Các tham số là các biến phụ thuộc vào
giản được sử dụng bở các hàm (hay còn được gọ
e. Theo quy ước các tham số sẽ được đặt tên bắt
t
ừng mô hình. Tham số của các module đơn
là các huật toán của module) khai
đầu bằng chữ
i
i
t
báo trong chính modu
l
cái thường.
Các tham số được khai báo bằng cách li
tham số có thể là kiểu số (numeric), hằng số (numeric const hay viế
trị log c (bool), kiểu chuỗ (string) hoặc xml. Khi tham số không khai báo rõ kiểu thì
mặc định k ểu của tham số đó là numeric.
ệ
t
kê tên sau
từ khoá parameters. Kiểu của các
t
gọn à const), giá
l
i
i
i
Ví dụ
:
s
i
mple TrafficGen
parameters:
interarrivalTime,
numOfMessages
:
const,
address
gates: //...
endsimp
Các tham số có thể được gán giá trị
khố dựng sẵn của mộ khố kế hợp
: string;
l
e
t
ừ NED (khi các module được sử dụng như các
i
t
i
t
l
ớn hơn) hoặc ừ file cấu hình omnetpp.ini.
t
Tham số ngẫu nhiên và hằng số
Trang 12
OMNet++
Các tham số có kiểu số có thể được đặ
t
để trả về mộ
t
giá
trị ngẫu nhiên theo dạng
phân phố
Trong đa số trường hợp, các tham số thường chỉ nhận g
khở
i đều (uniformly distributions) hoặc các dạng phân phối khác
i
á trị ngẫu nhiên khi bắ
gán, sau đó giá trị này được giữ nguyên. Khi đó các tham số này phả được kha
báo là hằng số - const. Kha báo một tham số là cons th giá trị của tham số sẽ được
xác định một lần duy nhấ kh bắ đầu hực h ện mô phỏng và sau đó giá rị đó sẽ được
co là hằng số. (Chú ý OMNeT++ khuyến khích việc khai báo mọ tham số à const
trừ những ạo số ngẫu nhiên).
t đầu
i
i
i
i
t
ì
t
i
t
t
i
t
i
i
l
trường hợp bạn muốn sử dụng chức năng
t
Tham số XML
Đôi khi các module cần đầu vào là những
thông tin phức tạp hơn khả năng mô tả của
các tham số, khi đó bạn có thể sử dụng mộ
t file cấu hình mở rộng. OMNeT++ có thể
đọc và xử lý các file này thông qua mộ tham số chứa tên của file.
t
Từ các phiên bản 3.0 trở lên, XML được co là mộ dạng chuẩn cho các file cấu hình
và OMNeT++ cũng tích hợp sẵn các công cụ cho phép ngườ sử dụng có hể làm việc
được vớ các file XML. OMNeT++ chứa bộ phân tích cú pháp XML (XML parser),
có khả năng đọc các file DTD, sử dụng bộ nhớ đệm để nhớ các file (trong rường hợp
mộ file XML được tham ch ếu nh ều module nó sẽ cũng chỉ phải load một lần),
cung cấp cho ngườ sử dụng khả năng chọn ọc các phần trong tài liệu thông qua
XPa h, hể hiện nộ dung của file XML thông qua DOM.
i
t
i
t
i
t
t
i
t
ớ
i
i
thì
i
l
t
t
i
3.4.2. Các cổng của module đơn giản
Cổng là các đ
module chính là các cổng. OMNeT++ hỗ trợ kiểu kế
có ha loạ cổng là cổng vào và cổng ra. Các message được gử
ừ cổng vào. Theo quy ước, các cổng được đặ tên bắ
i
ểm kế
t
nố
i
của module. Đ
i
ểm bắ
t
đầu và kế
t
thúc mộ
chiều (đơn công) do đó
i từ cổng ra và được
đầu bằng chữ cái
t kết nối giữa hai
t
nố mộ
i
t
i
i
t
i đ
nhận vào
thường.
t
t
Ở đây chúng ta có khái niệm về các vector cổng trong đó mộ
hợp bao gồm nhiều cổng đơn.
t vector cổng là một tập
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
đầu ừ 0.
mộ vector cổng. Các thành phần của mộ
t
t
vector cổng được đánh số bắ
t
t
Ví dụ
:
simple NetworkInterface
parameters: //...
gates:
in: fromPort, fromH
out: toPort, oHigherLayer
endsimp
igherLayer;
t
;
l
e
simple RoutingUnit
parameters: //...
gates:
in: output[];
Trang 13
OMNet++
out: input[];
endsimp
Kích hước của mộ
của mộ mô h nh có thể có các vector cổng có kí
le
t
t
vector cổng có thể được xác định sau do đó mỗ
ch thước khác nhau.
i đối tượng cụ thể
t
ì
3.5. Khai báo module kết hợp
Module kế
kiểu module nào (đơn g
Cũng g ống như các module đơn g
t
hợp là các module có thể chứa mộ
ản hay kế hợp) đều có thể được dùng như là mộ
ản, các module kế hợp cũng có các cổng, các
hể được sử dụng ở bấ kỳ chỗ nào mà các module đơn giản có
t
hoặc nh
i
ều các modu
l
e con. Bấ
t kỳ
i
t
t
module con.
i
i
t
tham số và chúng có
thể được sử dụng.
t
t
Hình
bìa cứng mà chúng ta có thể giấu phần mô h
bên trong nó. Không có các hành vi tích cực (active behaviour) nào liên quan đến các
t
ượng hoá chúng ta có
thể
t
ưởng
t
ượng các module kế
t
hợp g
iống như các hộp
ì
nh mô phỏng và các cấu
t
rúc phức ạp
t
module kế
thành phần
sẵn cho các modu
t
hợp - chúng chỉ đơn g
ớn hơn để có thể được sử dụng như mộ
e kế hợp khác.
i
ản là mộ
t
nhóm các module kế
t
hợp
t
rong mộ
t
l
t
mô hình hoặc như mộ
t
khố
i
dựng
l
t
Theo quy ước, ên của các module (bao gồm cả kiểu module kế
đầu bằng chữ hoa.
Các modu e con có thể sử dụng các tham số của module cha. Các module con này có
thể kế nố vớ nhau hoặc/và kế nố vớ module kế hợp chứa chúng.
Việc kha báo các module kế hợp cũng ương ự như khai báo các module đơn g
Phần khai báo cũng bao gồm các ừ khoá parameters và gates, ngoà
dụng hêm hai từ khoá là submodules và connections.
Cú pháp
modu e Tên_modu
t
t hợp) đều được bắt
l
t
i
i
t
i
i
t
i
t
t
t
i
ản.
t
i ra nó còn sử
t
:
l
le
parameters:
//...
gates:
//...
submodules:
//...
connections
//...
:
endmodule
Chú ý
là tất cả các khai báo trên (parameters, gates, submodules, connections) chỉ là
tuỳ chọn.
Trang 14
OMNet++
3.5.1. Các tham số và cổng của module kết hợp
Các tham số và cổng của module kế
t
hợp cũng được kha
i
báo và hoạ
t động tương tự
như các tham số và cổng của các module đơn g
i
ản.
Các tham số của module kế hợp có thể được sử dụng bở
được dùng để khởi tạo g rị cho các tham số của các module con.
Các tham số cũng có thể được sử dụng để xác định cấu trúc bên rong của các modu
kế hợp: số các module con, k ch hước của các vec or cổng mặ khác các tham số này
cũng có thể được sử dụng để xác định các kế nố bên rong module kế 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 là const
để giá trị của tham số không thay đổ theo các ần ruy nhập. Trái l nếu các tham số
à các giá trị ngẫu nhiên, ngườ sử dụng có thể sẽ có các g á trị khác
rong quá trình xử lý của module kế hợp.
t
i các module con và thường
iá t
t
le
t
í
t
t
t
t
i
t
t
i
l
t
ại
được khai báo
nhau mỗi lần
l
i
i
t
ham số được truy nhập
t
t
Ví dụ
:
module Rou
parameters:
ter
packetsPerSecond
bufferS ze numeric,
const;
: numeric,
i
:
numOfPorts
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 module
con được đặt tên bắ
Các modu e con có thể là mộ
dịch NED phả biế được k ểu của module do đó các module con phả
sớm hơn hoặc được mport ừ các f le NED khác.
Ngườ sử dụng cũng có khả năng ạo ra các vector module con và kích thước của
vector này có thể nhận vào ừ giá rị của mộ tham số. Khi khai báo các module con,
bạn cần phả gán g á trị cho các tham số của module và nếu k ểu module ương ứng có
sử dụng các vector cổng bạn phả xác định cho nó mộ ch thước cụ thể.
Ví dụ
t
đầu vớ
i
chữ cái thường.
l
t
module đơn giản hoặc mộ
t
module kế
t
hợp. Trình biên
i được khai báo
i
t
i
i
t
i
i
t
t
t
t
i
i
i
t
th
ì
i
t kí
:
module Tên_Module_kết_hợp
//...
submodules:
Trang 15
OMNet++
tên_module_con_1: K
parameters:
//...
i
i
ểu_Module_1
ểu_Module_2
gatesizes
//...
:
tên_module_con_2: K
parameters:
//...
gatesizes
//...
:
endmodule
Vector module
Vec
thể được b
này có thể tham ch
được chấp nhận.
t
or module là một tập hợp (mộ
ểu diễn bằng mộ ểu thức đặ
ếu đến các tham số của module. Giá trị 0 cho số các module cũng
t
mảng) các module con. Kích thước của vec
t
or có
i
t
b
i
t
trong cặp dấu ngoặc vuông ‘[]’. Biểu
thức
i
Ví dụ
:
module CompoundModule
parameters:
s
ize: const;
submodules:
submod1
//...
:
:
:
Node[3]
submod2
//...
Node[size]
Node[2*size+1]
submod3
//...
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 tham số tạo điều kiện dễ dàng cho sử
dụng các module con. Lấy v
sánh sự khác nhau g ữa các thuậ
toán tìm đường cần thiế như các module đơn giản DistVecRoutingNode,
AntNetRouting1Node, AntNetRouting2Node, ... Bạn cũng đã ạo ra mộ topology
mạng như mộ module kế hợp gọ là RountingTestNetwork để phục vụ cho việc đánh
giá hoạ động của các thuậ toán. Hiện RountingTestNetwork đang sử dụng thuậ
toán Dis VecRoutingNode (tấ cả các module con đều có k ểu này) và bạn muốn có
í
dụ, cho rằng mục đích của quá trình mô phỏng là so
i
t
toán tìm đường. Giả sử bạn đã ập trình các thuậ
l
t
t
t
t
t
t
i
t
t
t
ạ
i
t
t
t
i
Trang 16
OMNet++
thể chuyển đổ
i
qua
l
ạ
i
mộ
t
cách dễ dàng giữa các thuật toán để tiện
l
ợ
i
cho việc đánh
giá.
Để thực h
module Rou
của RoutingTestNe
giá trị của biến routingNodeType. Kh
thay đổ các thuật toán ở rên thông qua g
“DistVectRoutingNode”, “AntNetRouting1Node” hoặc “AntNetRouting2Node”.
Trong trường hợp giá trị của tham số là sa (chứa tên của mộ kiểu không ồn ại) quá
trình mô phỏng sẽ bị khi bắ đầu chạy - module type definition not found (khai báo
i
ện đ
ingTestNetwork. Đồng thờ
work không có kiểu cố định, mà k
đó mạng mô phỏng của bạn có
á trị của tham số như
i
ều này
t
a có
t
hể sử dụng thêm mộ
t
i
i
biến là routingNodeType cho
báo cho NED các modu e con
ểu của các module này được
hể dễ dàng
t
i
bạn cũng kha
l
t
là
i
t
i
t
i
i
t
t
t
l
ỗ
i
t
kiểu module không được tìm thấy).
Bên trong module RoutingTestNetwork, ta có thể gán giá trị cho các tham số và tiến
hành kế
ăng tính chính xác, đảm bảo
NED cần có sự giúp đỡ ừ bạn. Bạn có thể khai báo thêm mộ
RoutingNode) và phả đảm bảo chắc chắn rằng cả các module mà định sử dụng
t
nố
i
vớ
i
các module chứa các thuậ
ên của tham số và cổng mà bạn sử dụng là chính xác,
modu e (g ả sử tên là
t toán tìm đường tương ứng. Tuy nhiên để
t
t
t
t
l
i
i
tất
thông qua tham số routingNodeType đều có các tham số và các cổng giống như của
module RoutingNode.
Cú pháp
:
module RoutingTes
parameters:
tNetwork
routingNodeType: string; // should hold the name
// of an ex
gates: //...
isting module type
submodules:
node1
node2
//...
:
:
routingNodeType like Rou
routingNodeType like Rou
t
ingNode;
ingNode;
t
connections nocheck
:
node1.out0 --> node2.in0;
//...
endmodule
Đoạn mã này nếu nhìn theo góc độ của ngôn ngữ C++
của một lớp cơ sở, Dis VecRoutingNode, AntNe Routing1Node là các
ớp RoutingNode. Tham số routingNodeType ương ứng vớ con rỏ trỏ tớ
t
h
ì
RoutingNode đóng vai trò
ớp kế thừa
i lớp cơ sở.
t
t
l
từ
l
t
i
t
Module RoutingNode không cần được thực hiện trong C++ bở không có đối tượng cụ
thể nào của nó được ạo ra, nó chỉ đơn thuần được dùng để kiểm ra tính chính xác của
file NED. Mặ khác, các module thực sự sẽ được thay thể (ví dụ như
stVecRoutingNode, AntNetRouting1Node,...) sẽ không cần phả khai báo rong file
NED.
i
t
t
t
D
i
i
t
Trang 17
OMNet++
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ó cùng g
i
ao tiếp g
iống nhau (có cùng các tham số và các cổng) và sử dụng chúng
thay thế nhau
trong file NED.
3.5.4. Gán giá trị cho các tham số của các module con
Có 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
như các hằng số hoặc có thể sử dụng ngay các
hoặc cũng có khở gán bằng mộ biểu thức.
tham số của module con có thể được gán giá trị
t
ham số của module kế
t
hợp chứa nó,
i
t
Không bắ buộc ham số đều phả
t
t
ấ
t
cả các
t
i
khở
ừ file cấu h
nh mô phỏng sẽ nhắc bạn. Tuy nhiên nếu
nh, sẽ dễ dàng hơn cho v ệc sửa chữa giá trị của các
i
gán g
iá trị. Giá trị của tham số có thể
nhận trong lúc thực h
i
ện hoặc nhận
t
ì
nh hoặc trong
trường hợp giá trị của
tham số không có trong file cấu hình, quá trì
các tham số để trong file cấu h
tham số.
ì
i
Ví dụ
:
module CompoundModule
parameters:
param1
param2
:
:
numeric,
numeric,
useParam1
: bool;
submodules:
submodule1
parameters:
p1 = 10,
: Node
p2 = param1+param2,
p3 = useParam1==
//...
true ? param1 : param2;
endmodule
Trong khi mô h
tham số ương ứng được gọ
thể sử dụng cú pháp như
ì
nh hoạ
t
động, các biểu
t
hức gán giá
ra để gọ mộ
sau submodule.parametername
t
rị vẫn được tính toán nếu các
tham số của module con a có
(hoặc
t
i
đến. Ngoà
i
i
t
t
:
submodule[index].parametername).
Từ khoá input
Kh
ngườ
đầu thực h
trình mô phỏng, bạn có thể sử dụng
sử dụng có hể th t lập thông báo nhập giá trị hay đặt giá t
i
một tham số không nhận g
sử dụng sẽ được nhắc để nhập g
ện. Tuy nhiên nếu bạn muốn chủ động nhập giá
ừ khoá input. Từ khoá inpu
rị mặc định cho tham số.
i
á
t
rị trực tiếp trong file NED hoặc
rị cho tham số khi quá trình mô phỏng bắ
rị tham số khi bắ đầu quá
cũng cho phép ngườ
trong file cấu hình,
i
i
á
t
t
i
t
t
t
t
i
t
i
ế
Cú pháp
:
parameters:
Trang 18
OMNet++
numCPUs = input(10, "Number of processors?"), //giá trị mặc
//định, dấu nhắc
processingTime = input(10ms), //thông báo nhập giá trị
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
biểu thức.
có thể được khai báo như mộ
t
hằng số, một tham số hay mộ
t
Ví dụ
:
simple Node
gates:
in: inputs[];
out: outputs[];
endsimple
module CompoundModule
parameters:
numPorts: const;
submodules:
node1
gatesizes
inputs[2], outputs[2];
node2 Node
gatesizes
: Node
:
:
:
inputs[numPorts], outputs[numPorts];
//...
endmodule
gatesizes là không bắ
cổng nó sẽ được đặ bằng 0. Mộ
sẽ sử dụng gate++ (“extend gate vector with a new gate” - vector cổng mở rộng vớ
mộ cổng mớ ). gate++ sẽ được trình bầy kĩ hơn trong phần Connection.
t
buộc, nếu bạn muốn bỏ qua v
i
ệc khai báo gatesizes cho vector
t
t
lý do để bỏ qua v ệc gán giá
i
t
rị cho ga esizes à bạn
t
l
i
t
i
3.5.6. Khai báo gatesizes và tham số có điều kiện
Kích
thước của vector cổng và các tham số trong module con thường được kha
i
báo
kèm thêm đ
i
ều kiện.
Ví dụ
:
module Chain
parameters: count: const;
Trang 19
OMNet++
submodules:
node : Node [count]
parameters:
position = "middle";
parameters if index==0
position = "beginn ng"
:
i
;
parameters if index==coun
position = "end";
t-1:
gatesizes
in[2], out[2]
gatesizes f index==0 || index==coun
in[1], out[1]
:
;
i
t-1:
;
connections
//...
:
endmodule
Chú ý các g
xuống dưới, nếu gặp đ
trị mặc định trước đó. Trong trường hợp khai báo g
i
á trị mặc định nên được khai báo đầu tiên bở
ều k ện đúng thì các giá rị ương ứng sẽ được chèn vào các giá
á trị mặc định cuố cùng, g á trị
rị của một trường hợp đ ều kiện đúng trước đó.
i vì NED sẽ duyệt từ trên
i
i
t t
i
i
i
mặc định sẽ có thể chèn vào giá
t
i
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ế nố có thể được ạo ra giữa ha
(module kế hợp) trực tiếp chứa nó (trong mộ
thể được ạo ra giữa ha cổng của cùng mộ module kế
NED không cho phép mộ kế nố đa cấp (kế nố giữa ha
trúc phân cấp). Hạn chế này làm ăng tính độc ập và khả năng dùng
module. Ngoài ra, hướng của module cũng rấ trong quan trọng khi ạo kế
thể ạo mộ kế nố giữa hai cổng ra hoặc giữa ha nhau.
NED chỉ hỗ trợ kiểu kế nố một-mộ do đó mộ được sử dụng chỉ xuấ
hiện một lần trong mộ kế nối. K ểu kế nố cũng có thể
được ạo ra bằng cách sử dụng các module đơn g rong đó các luồng message được
nhân đôi hoặc được ghép thêm (duplica e message or merge message flows).
Các kế nố được li kê sau ừ khoá connect
chấm phẩy.
Ví dụ
t
i
t
i
module con hoặc giữa module con vớ
số ít trường hợp, mộ kế
hợp). Đ ều này có nghĩa
module xa nhau rong cấu
của mỗ
. Không
i
t
module cha
t
t
t
nố cũng có
i
t
i
t
t
i
là
t
t
i
t
i
i
t
t
l
l
ại
i
t
t
t nối
t
t
t
i
i
cổng vào vớ
i
t
i
t
t
cổng riêng b
i
ệt
t
t
t
i
t
i
một-nhiều và nhiều-mộ
ản
t
t
i
t
t
t
i
ệ
t
t
i
ons và được phân tách vớ
i
nhau bằng dấu
:
module CompoundModule
parameters: //...
gates: //...
Trang 20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Tài liệu OMNet++", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
- tai_lieu_omnet.pdf