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 đủ
pdf 82 trang Thùy Anh 21300 Free
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:

  • pdftai_lieu_omnet.pdf