CHƯƠNG 3 : CÀI ĐẶT, ĐÁNH GIÁ KẾT QUẢ MÔ PHỎNG
3.3 Cài đặt mô phỏng
3.3.1 Cài đặt OMNeT++:
Để cài đặt OMNeT++, ta phải tải phần mềm trên trang chủ với phiên bản mới nhất (hiện nay là 4.3.1): http://www.omnetpp.org/. Sau đó giải nén ra ổgốc C (khơng nên giải vào Program File vì có chứa dấu cách).
Chạy file: mingwenv.cmd. sau đó chạy các lệnh theo hướng dẫn trong file INSTALL.txt
$ . setenv $ ./configure $ make
Hình 3.2–Start OMNet ++
Sau khi chọn thư mục làm việc, ta có thể tạo project mô phỏng. Giao diện sau khi tạo project như hình 3.3
3.3.2 Xây dựng chương trình mơ phỏng
Chương trình mơ phỏng được xây dựng bao gồm các thành phần cơ bản:
File EMRP_VSN.ned mô tảcác module trong mơ hình mạng
Các file mã nguồn Sensor.h, Sensor.cc, BaseStation.h, BaseStation.cc xử lý hoạt động các module simple được khai báo trong EMRP_VSN.ned
File RoutingDef.h khai báo các hằng số được sử dụng trong chương trình bao gồm: giá trị kiểu sốphân loại các gói tin, độdài các loại bản tin…
File Message.msg khai báo các loại gói tin và các trường dữliệu nằm trong mỗi bản tin.
File omnetpp.ini khai báo các tham số đầu vào cho mô phỏng như kích
thước mạng, số nút cảm biến, mức năng lượng ban đầu, giới hạn truyền tải, giới hạn cảm biến…
File Result.txt lưucác kết quả đầu ra của chương trình như tổng năng lượng
toàn mạng, mức năng lượng của mỗi nút, thời gian sống của mạng, tổng số gói tin gửi đi, tổng sốgói tin bị lỗi…
Sau đây là mơ tảchi tiết vềcấu trúc của hai thành phần quan trọng nhất trong cấu trúc một chương trình mơ phỏng OMNeT++.
3.3.2.1 File mô tảtopo mạng EMRP_VSN.ned
Ngôn ngữ NED được sử dụng để mơ tả topology của một mơ hình trong OMNeT++. NED sử dụng phương pháp mơ tả module hố. Điều này có nghĩa là một mạng có thể được mô tả như một tập hợp các mô 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 giản và kết hợp được sử dụng để mô tả một mạng nào đó có thể được sử dụng lại khi mơ tảmột mạng khác.
Nội dung file EMRP_VSN.ned khai báo lần lượt các module như sau:
simple module Sensor: module đơn đại diện cho các nút cảm biến.
simple module Event: module đơn đại diện cho sựkiện.
module mạng EMRP_VSN : bao gồm một module đơnBaseStaion, một tập
hợpmodunle đơnEvent và một tập hợp các module đơnSensor.
Mỗi module đơn sẽbao gồm các khai báo cơ bản như sau:
khai báo các tham số: vị trí xpos, ypos – của module BS là cố định còn của module Sensor là ngẫu nhiên trong khoảng nhỏ hơn kích thước mạng, tham sốgiới hạn truyền tải, giới hạn cảm biến, mức năng lượng, chuỗi hiển thị…
khai báo các cổng: mỗi module đơn sẽ có một tập hợp cổng đầu vào in[] và một tập hợp cổng đầu ra out[]
Module mạng EMRP_VSN bao gồm các submodule đã nói ở trên, trong khai báo module mạng EMRP_VSN cũng tiến hành gán giá trị cho các tham sốcủa từng submodule thường là lấy từkhai báo giá trịtham sốtrong file omnetpp.ini.
Source của file EMRP_VSN.ned:
network EMRP_VSN { parameters: int numberOfSensor; int numberOfEvents; int trRange; int ssRange; int frameNumber; int roundNumber; int xMax; int yMax; double energy; double switchLevel; @display("bgb=1000,500,#C6C6FF,#0000FF,2;bgg=500,1,#0000FF"); submodules: s[numberOfSensor]: Sensor { parameters: numberOfSensor = numberOfSensor; numberOfEvents = numberOfEvents; trRange = trRange; ssRange = ssRange; frameNumber = frameNumber; roundNumber = roundNumber; energy = energy; switchLevel = switchLevel;
xPos = intuniform(0, xMax);
@display("p=$xPos,$yPos"); } e[numberOfEvents]: Event { parameters: numberOfSensors = numberOfSensor; numberOfEvents = numberOfEvents; ssRange = ssRange;
xPos = intuniform(0, xMax);
yPos = intuniform(0, yMax);
@display("p=$xPos,$yPos"); } bs: BaseStation { parameters: numberOfSensor = numberOfSensor; numberOfEvents = numberOfEvents; trRange = trRange; ssRange = ssRange; frameNumber = frameNumber; roundNumber = roundNumber; xPos = xMax/2; yPos = yMax; @display("p=$xPos,$yPos"); } connections allowunconnected: } 3.3.2.2 Các file mã nguồn
Các file mã nguồn bao gồm Sensor.h, Sensor.cc, BaseStation.h,
BaseStation.cc. Mã nguồn được viết trên ngôn ngữ C++ đểxây dựng các lớp tương
ứng mới các simple module khai báo trong file EMRP_VSN.ned. Nội dung các file
này lâp trình cách thức thực hiện các sự kiện của mỗi module, hay nói khác đi là thực hiện các hoạt động (behaviour) của mơ hình. Các module Sensor và
BaseStation là các lớp kế thừa từ lớp cSimpleModule trong thư viện của OMNeT++.
Khai báo class Sensor và BaseStation:
class Sensor: public cSimpleModule
{ …… }
class BaseStation : public cSimpleModule
{ …… }
Cấu trúc mã nguồn của mỗi module gồm có các hàm chính như sau:
void initialize(): đây là hàm khởi tạo của lớp. Trong quá trình khởi tạo,
OMNeT++ sẽ xây dựng mạng: nó tạo ra các module đơn và các module kết hợp (compound module). Sau đó kết nối chúng theo các khai báo và định nghĩa trong file NED, đồng thời với đó là khai báo và gán giá trịcho các biến của module.
void handleMessage(cMessage *msg): hàm này được gọi khi trong quá
trình xửlý sựkiện. Như vậy hầu hết hoạt động của hệ thống được mô phỏng sẽ được lập trình trong các hàm này. Hàm handleMessage() sẽ được nhân mô phỏng (simulation kernel) gọi khi module nhận được một gói tin.