1. Trang chủ
  2. » Công Nghệ Thông Tin

hướng dẫn chi tiết TicToc cho omnet++

26 1.5K 20

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Hướng dẫn TicToc cho Omnet++ Hướng dẫn ngắn này hướng dẫn về Omnet++ giúp bạn dạo qua một ví dụ cho việc mô hình hóa và mô phỏng, cho bạn thấy một số cách thông thường dùng với các tiện ích Omnet++. Bài này dựa trên ví dụ mô phỏng TicToc, bạn có thể tìm thấy ví dụ này trong thư mục samplestictoc của bộ cài Omnet++, nên bạn có thể thử ngay lập tức cách các ví dụ làm việc thế nào. Tuy nhiên, bạn sẽ tìm thấy nhiều hướng dẫn hữu ích hơn nếu bạn thực sự thực hành ít nhất các bước đầu tiên mô tả ở đây.

Hướng dẫn TicToc cho Omnet++ ng dn ngng dn v Omnet++ giúp bn do qua mt ví d cho vic mô hình hóa và mô phng, cho bn thy mt s ng dùng vi các tin ích Omnet++. Bài này da trên ví d mô phng TicToc, bn có th tìm thy ví d này trong c samples/tictoc ca b cài Omnet++, nên bn có th th ngay lp tc cách các ví d làm vic th nào. Tuy nhiên, bn s tìm thy nhing dn hu bn thc s thc hành ít nhu tiên mô t   Chú ý: Chúng tôi gi s  ng bt b cài làm vic Omnet++. Chúng tôi  s rng bn có mt kin thc tt v C++, và b thuc vi vic phát trin C/C++ (chnh sa file ngun, dch, bt l u hành ca bn. (u va ri là ngoài phm vi ca chúng tôi  - có nhiu cung dn tu bn cn cp nht kin thc  ngh s dng phát trin tích hp Omnet++ cho vic chnh sa và xây dng các mô phng ca bn.  làm các ví d d t c các code ngun s c nêu   mà ch c nêu tên, bn s t tìm  c samples/tictoc. Tài liu này và mô hình TicToc là mt phiên bc m rng bng dn TicToc gc t Ahmet Sekercioglu (i hc Monash). Ni dung: I.Khởi đầu II.Tăng cường thành 2-node TicToc III.Chuyển thành một mạng thực tế hơn I.Khởi đầu: Sources: tictoc1.ned, txc1.cc, omnetpp.ini Vì vùng ng dng ph bin nht ca Omnet++ là mô phng các mng truyn thông, chúng ta s làm vi ch  này t vi bu, chúng ta bu vi mt mng bao gm 2 node. Các node s làm vài vin: mt trong các node s to mt packet, và 2 node s gi vic qua li cùng gói tin vào và ra. Chúng ta g  c bn thc hin mô phu tiên ca bn t u: 1.To mc làm vic gi là tictoc và cd (lnh cd ca dos) c này 2.Mô t mng ví d ca bn bng vic to mt file topology. Mt file topology là mnode ca mng và các liên kt gia chúng. Bn có th to nó vi trình chnh sa bt tên cho nó là tictoc1.ned: // // This file is part of an OMNeT++/OMNEST simulation example. // // Copyright (C) 2003 Ahmet Sekercioglu // Copyright (C) 2003-2008 Andras Varga // // This file is distributed WITHOUT ANY WARRANTY. See the file // `license' for details on this and other legal matters. // simple Txc1 { gates: input in; output out; } // // Two instances (tic and toc) of Txc1 connected both ways. // Tic and toc will pass messages to one another. // network Tictoc1 { submodules: tic: Txc1; toc: Txc1; connections: tic.out > { delay = 100ms; } > toc.in; tic.in < { delay = 100ms; } < toc.out; } c tt nht là t i lên.  n nói: -TicToc1 là mt mc tp hp t hai module con, tic và toc. Tic và toc là các th hin ca cùng 1 kiu module gi là Txc1. Chúng ta kt ni cng ra ca n cng vào cc l tr 100ms vi c ng. -Txc1 là mt kic nguyên t trong ngôn ng Ned, và s t trong C++). Txc1 có 1 cng vào tên là in, và mt cng ra tên là out. 3.Chúng ta ct chn Txc1. Vi tr bi mt file C++ tên là txc1.cc: // // This file is part of an OMNeT++/OMNEST simulation example. // // Copyright (C) 2003 Ahmet Sekercioglu // Copyright (C) 2003-2008 Andras Varga // // This file is distributed WITHOUT ANY WARRANTY. See the file // `license' for details on this and other legal matters. // #include <string.h> #include <omnetpp.h> class Txc1 : public cSimpleModule { protected: // The following redefined virtual function holds the algorithm. virtual void initialize(); virtual void handleMessage(cMessage *msg); }; // The module class needs to be registered with OMNeT++ Define_Module(Txc1); void Txc1::initialize() { // Initialize is called at the beginning of the simulation. // To bootstrap the tic-toc-tic-toc process, one of the modules needs // to send the first message. Let this be `tic'. // Am I Tic or Toc? if (strcmp("tic", getName()) == 0) { // create and send first message on gate "out". "tictocMsg" is an // arbitrary string which will be the name of the message object. cMessage *msg = new cMessage("tictocMsg"); send(msg, "out"); } } void Txc1::handleMessage(cMessage *msg) { // The handleMessage() method is called whenever a message arrives // at the module. Here, we just send it to the other module, through // gate `out'. Because both `tic' and `toc' does the same, the message // will bounce between the two. send(msg, "out"); } Kic mô t bi lp C++ : Txc1, cái này là mt lp con t l       Omnet++ vi macro c t cSimpleModule: c triu gi t nhân mô phng: cái u tiên ch duy nht 1 ln, còn cái th hai thì khi mn ti mt module. Trong initialize() chúng ta to mp (cMessage), và gi nó ra ngoài qua cng out. Vì cc kt nn cng ra ca module khác, nhân mô phng s      n module khác trong handleMessage()sau truyn thông tr  liên kt trong file Ned. Module khác gi nó quay li (v tr 100ms), nên nó s có h qu u ng ping-pong liên tc.        kin (các b nh thi, c môt t tt c bng cMessage( hoc các lp con ca nó) trong Omnet++. Sau khi bn gi hoc lên lch cho chúng, chúng s c t chc bi nhân mô ph kit l kin n khi thi gian cc phân phn các module thông qua handleMessage(). Chú ý rng  u kin dng cho mô phng này: nó s tip tn mãi mãi. Bn có th dng nó t giao dii dùng. (Bn có th nh thi gian gii hn cho mô phng hoc gii hn thi gian cho CPU trong file cu  ng dn này). 4. Chúng ta bây gi to Makefile cái này s giúp chúng ta dch và liên kt       to file tictoc có kh  y: $ opp_makemake Lnh này s phi to ra mt makefc làm vic tictoc: 5.Gi ta dch và liên kt mô phu tiên ca chúng ta bng vic dùng lnh make: $ make 6.Nu bn bu chy bây gi, nó s gii thích nó không th tìm thy file omnetpp.ini, nên bn phi to my. omnetpp.ini nói v trình mô phng cái mng bn mun mô phng (vâng, 1 vài mng có th sng ng), bn có th  cho mô nh chính xác các seed cho vic sinh s ng To mt file omnetpp.ini r [General] Network=Tictoc1 Tictoc2 và cho tt c c sau  file omnetpp.ini sau: # This file is shared by all tictoc simulations. # Lines beginning with `#' are comments [General] # nothing here [Config Tictoc1] network = Tictoc1 [Config Tictoc2] network = Tictoc2 [Config Tictoc3] network = Tictoc3 [Config Tictoc4] network = Tictoc4 Tictoc4.toc.limit = 5 [Config Tictoc5] network = Tictoc5 **.limit = 5 [Config Tictoc6] network = Tictoc6 [Config Tictoc7] network = Tictoc7 # argument to exponential() is the mean; truncnormal() returns values from # the normal distribution truncated to nonnegative values Tictoc7.tic.delayTime = exponential(3s) Tictoc7.toc.delayTime = truncnormal(3s,1s) [Config Tictoc8] network = Tictoc8 [Config Tictoc9] network = Tictoc9 [Config Tictoc10] network = Tictoc10 [Config Tictoc11] network = Tictoc11 [Config Tictoc12] network = Tictoc12 [Config Tictoc13] network = Tictoc13 7.Khi b    c trên, bn chy mô phng bng lnh này: $ ./tictoc Và hi vng bc ca s mô phng Omnet++ 8.n nút Run trên thanh công c  khng mô phng. Bn s thy cais cách p vi nhau. Công c ca s chính hin th thi gian mô phng. Thi gian này là thi gian o, không có gì n thi gian thng h ng) v y. Thc s, s giây bn có th chy trong th gii thc ph thuc cao vào t ca phn cng ca bn và thng  phc tp ca chính mô hình mô phng. Chú ý rng thi gian mô phng cho m x lí tin nhn là bng 0. Ch nhng th i gian mô phng qua l tr trong các kt ni. 9.Bn có th làm chnh hoi thanh cun  trên nh ca s  ha. Bn có th dng môt hình bng  n nút stop trên toolbar), chy tc (f4), chay nó vi f5 hoc thoát khi hình nh (f6). 10.Bn có th thoát kh    ng bng vic click vào biu ng close hoc la chn File|Exit II.Bổ sung thêm cho 2 node TicToc: Bước 2: thêm ảnh đồ họa, và thêm đầu ra gỡ lỗi Sources: tictoc2.ned, txc2.cc, omnetpp.ini                u  file images/block/routing.png) và tô nó màu tía cho tic và vàng cho toc. Vic bng vic thêm chui hin th n file NED. Th i= trong chui hin th nh icon. // "block/routing" icon to the simple module. All submodules of type // Txc2 will use this icon by default // simple Txc2 { parameters: @display("i=block/routing"); // add a default icon gates: input in; output out; } // // Make the two module look a bit different with colorization effect. // Use cyan for `tic', and yellow for `toc'. // network Tictoc2 { submodules: tic: Txc2 { parameters: @display("i=,cyan"); // do not change the icon (first arg of i=) just colorize it } toc: Txc2 { parameters: @display("i=,gold"); // here too } connections: Bn s thy kt qu  nh s p g li cho Txc1 bng vic chuy         \ Và EV<<-\ Khi bn chy mô phng trong giao din Tkenv c xut hin trên ca s n: Bn có th m mt dãy các ca s u ra cho tic và toc bng vic n chut phi trên bing và la chn module output t menu. Tin ích này s hu ích khi bn có mt môt hình và bn ch p ghi li ca module c th  Bước 3: thêm một biến trạng thái Sources: tictoc3.ned, txc3.cc, omnetpp.ini c này chúng ta thêm mt b p sau i. Chúng ta thêm b p: class Txc3 : public cSimpleModule { private: int counter; // Note the counter here protected: Chúng ta thit lp bin giá tr là 10 trong initialize() và gim trong            m v 0, mô phng s ht s kin và hy. Chú ý dòng: WATCH(counter); Dòn trong mà ngun: vic này làm có th nhìn thy giá tr b m trong Tkenv. t vào bing ca chn ni dung trang Content t ca s theo dõi: [...]... tôi cho omnet++ sinh các lớp tự động cho chúng ta Lớp thông điệp mô tả trong tictoc1 3.msg: message { int int int } TicTocMsg13 source; destination; hopCount = 0; Makefile thiết lập cho việc biên dịch các thông điệp, opp_msgc được triệu gọi và nó sinh tictoc_ m.h và tictoc1 3_m.cc từ khai báo thông điệp Chúng sẽ chứa một lớp TicTocMsg13 sinh ra từ lớp cMessage Lớp sẽ có các phương thức set và get cho. .. nối Việc này cho phép dễ dang thay đổi tham số trễ của toàn mạng Bước 12: Sử dụng kết nối hai chi u: Sources: tictoc1 2.ned, txc12.cc, omnetpp.ini Nếu chúng ta kểm tra phần connections nhiều hơn một chút, chúng ta sẽ nhận ra mỗi cặp node được kết nối với 2 kết nối Mỗi hướng một kết nối Omnet++ 4 hỗ trợ kết nối hai chi u, giờ ta sử dụng chúng Đầu tiên, chúng ta phải định nghĩa cổng hai chi u (hay gọi... hơn 2 nodes Sources: tictoc1 0.ned, txc10.cc, omnetpp.ini Bây chúng ta sẽ làm một bước lớn: tạo một vài module tic và kết nối chúng thành một mạng Rồi chúng ta cho chúng làm việc đơn giản: một trong các node sinh một thông điệp, và các node khác tung thông điệp cho nhau theo các hướng ngẫu nhiên đến khi nó đến node đích đã xác định từ trước File Ned sẽ cần một ít thay đổi Đầu tiên cho tất cả, module Txc... cMessage Lớp sẽ có các phương thức set và get cho mọi trường Chúng tôi sẽ gộp tictoc1 3_m.h đến code C++ của chúng ta, và chúng ta có thể sử dụng TicTocMsg13 như các lớp khác #include "tictoc1 3_m.h" Ví dụ, chúng ta sử dụng các dòng sau trong generateMessage() để tạo thông điệp và thêm giá trị các trường: TicTocMsg13 *msg = new TicTocMsg13(msgname); msg->setSource(src); msg->setDestination(dest); return... suffix is used to identify the input/output part of a two way gate send(msg, "gate$o", k); } Chú ý: hậu tố đặc biệt $i và $o theo sau tên cổng cho phép chúng ta sử dụng với dãy kết nối hai chi u Bước 13: định nghĩa lớp message của riêng ta Sources: tictoc1 3.ned, tictoc1 3.msg, txc13.cc, omnetpp.ini Trong bước này địa chỉ đích sẽ không còn là cố định với tic[3] nữa – chúng ta tạo một đích ngẫu nhiên, và... gian trong Omnet++ có được bời việc module gửi thông điệp cho chính nó Các thông điệp như vậy được gọi là selfmessage Ta thêm hai biến cMessage là event và tictocMsg đến lớp, để nhớ các thông điệp ta sử dụng thời gian và thông điệp xử lí trễ khi ta đang mô phỏng class Txc6 : public cSimpleModule { private: cMessage *event; // pointer to the event object which we'll use for timing cMessage *tictocMsg;... trong omnetpp.ini: Tictoc7 .tic.delayTime = exponential(3s) Tictoc7 .toc.delayTime = truncnormal(3s,1s) Bạn có thể cố gắng nhiều lần bạn chạy lại mô phỏng (hoặc khởi động nó), bạn sẽ nhận chính xác cùng các kết quả Việc này bởi vì Omnet++ sử dụng thuật toán xác định (mặc định là Mersenne Twister RNG) để sinh các số ngẫu nhiê và khởi tạo nó cùng các seed- hạt nhân Việc này quan trọng cho việc mô phỏng... này: void Txc13::handleMessage(cMessage *msg) { TicTocMsg13 *ttmsg = check_and_cast(msg); if (ttmsg->getDestination()==getIndex()) Trong các đối gửi đến handleMessage(), chúng ta nhận được thông điệp như một con trỏ lớp cMessage Tuy nhiên, chúng ta chỉ có thể truy cập các trường của nó trong định nghĩa TicTocMsg13 nếu chúng ta ép kiểu msg sang TicTocMsg13 * C++ đưa đến một giải pahsp được... Sources: tictoc1 1.ned, txc11.cc, omnetpp.ini Định nghĩa mạng mới của chúng ta khá phức tạp và dài, đặc biệt là phần kết nối Thử làm nó đơn giản Thứ đầu tiên ta nhận thấy các kết nối thường sử dụng cùng tham số trễ delay Có thể tạo các kiểu cho các kết nối (chúng được gọi là các kênh-channel) giống các module đơn giản Chúng ta có thể tạo một kiểu kênh chỉ ra tham số trễ và ta sẽ sử dụng kiểu đó cho tất... chúng ta: network Tictoc5 { submodules: tic: Tic5; // the limit parameter is still unbound here We will get it from the ini file toc: Toc5; connections: Như bạn có thể thấy, định nghĩa mạng giờ ngắn và đơn giản hơn nhiều Việc kế thừa cho phép bạn sử dụng các kiểu phổ biến trong mạng của bạn và tránh xa các định nghĩa dư thừa và thiết lập tham số Bước 6: việc mô hình xử lí trễ Sources: tictoc6 .ned, txc6.cc, . Tictoc1 [Config Tictoc2 ] network = Tictoc2 [Config Tictoc3 ] network = Tictoc3 [Config Tictoc4 ] network = Tictoc4 Tictoc4 .toc.limit = 5 [Config Tictoc5 ] network = Tictoc5 **.limit. dẫn TicToc cho Omnet+ + ng dn ngng dn v Omnet+ + giúp bn do qua mt ví d cho vic mô hình hóa và mô phng, cho bn thy mt s ng dùng vi các tin ích Omnet+ + nonnegative values Tictoc7 .tic.delayTime = exponential(3s) Tictoc7 .toc.delayTime = truncnormal(3s,1s) [Config Tictoc8 ] network = Tictoc8 [Config Tictoc9 ] network = Tictoc9 [Config Tictoc1 0]

Ngày đăng: 16/11/2014, 09:23

TỪ KHÓA LIÊN QUAN

w