Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal...

56
- 1 - Martin Doležal Road Traffic Simulation & OMNeT++ 25.11.2006 Road Traffic Simulation & OMNeT++ Martin Doležal

Transcript of Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal...

Page 1: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 1 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Road Traffic Simulation&

OMNeT++

Martin Doležal

Page 2: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 2 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Road Traffic Simulation - požadavky

● Simulátor silniční dopravy● Definice sítě● Objekt křižovatka● Objekt automobil● Zdroj a cíl dopravních toků● Simulace sítě jako SHO● Výpočet statistických údajů● Implementace v OMNeT++

Page 3: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 3 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Zdroj a cíl dopravních toků

● Zdroj a cíl dopravních toků – automobilů● Výchozí statistické údaje

● Počet průjezdů v daném směru● Toky mezi danými místy● Počet aut za hodinu

● Hierarchické uspořádání sítí

Page 4: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 4 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Automobil

● Aktivní automobil● Zná cíl cesty● Vlastní rozhodnutí, kudy pokračovat● Nese si informace o cestě

● Pasivní automobil● Zná cíl cesty● Síť samotná ho navádí nejlepší cestou● Neví, kudy pojede● Cesty v daném toku se průběžně mění

Page 5: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 5 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Křižovatka

● Má průběžné informace o celé síti● Navádí automobily příslušnou cestou k cíli● Přizpůsobuje se momentální situaci

● Změna trasy – porucha, zácpa,...● Intervaly semaforů

● Na rozdíl od automobilu je to aktivní prvek

Page 6: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 6 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Silnice

● Spojuje navzájem● Křižovatky● Zdroje dopravních toků● Cíle dopravních toků

● 'Přenos automobilů' mezi křižovatkami● Její parametry výrazně ovlivňují chování sítě

● Délka silnice● Počet pruhů● Maximální rychlost● Pravděpodobnost poruchy - zablokování

Page 7: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 7 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Silniční síť

● Složená z definovaných objektů (křižovatka, silnice, zdroje a cíle toků)

● Momentální stav je určen stavy těchto objektů a zatížením sítě automobily

Page 8: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 8 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Příklady využití

● Simulace silniční sítě při její přestavbě● Omezení dopravy v daném úseku● Nové silnice či rozšíření stávajících

● Automatické navádění automobilů k cíli● Respektuje aktuální dopravní stav● Proměnné dopravní značení● Přizpůsobení délek intervalů u semaforů

aktuální dopravní situaci

Page 9: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 9 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Souvislosti s počítačovou sítí

● Zřejmé souvislosti s počítačovou sítí● Automobily, křižovatky, silnice, zdroje

toků dat,...● Packety, routery, kanály, servery,...

Page 10: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 10 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Diskrétní simulace

● Simulace systémů s diskrétními událostmi● Dění v systému lze popsat pomocí událostí● Mezi každými dvěma událostmi se „nic neděje“● Událost trvá nulový čas● Událostí je například

● Počátek přenosu paketu● Konec přenosu paketu● Vypršení timeoutu

Page 11: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 11 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

OMNeT++

● Objektově orientovaný modulární simulátor určený pro diskrétní simulace

● Modelování telekomunikačních sítích● Modelování protokolů● Modelování distribuovaných systémů● Validace hardwarových architektur● Vyhodnocení výkonnosti SW systémů● A jiné systémy s diskrétními událostmi

Page 12: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

MODUL v OMNeT++

- 12 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

OMNeT++

POPIS TOPOLOGIEv NED

POPIS CHOVÁNÍv C++

Page 13: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 13 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Zprávy

● Prostředek komunikace mezi moduly● V simulátoru silniční dopravy

● automobily● zpráva o nutnosti přepočítat směrovací

tabulky● self-messages

● jsou zděděny od základní třídy cMessage

Page 14: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 14 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Self-messages

● Zpráva, kterou modul posílá sám sobě● Typické využití jako časovač

● první self-message se pošle při inicializaci● při přijmutí ji znovu naplánuji za další

interval a provedu příslušnou akci● scheduleAt(time, msg)● cancelEvent(msg)

Page 15: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 15 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

FES

Future Event Set – fronta událostí – zpráv

1. Zpráva, která má být doručena dříve, se zpracuje první. Jestliže jsou časy dvou zpráv stejné2. Zpráva s větší prioritou (v OMNeTu jsou vyšší priority ty s menším číslem) se zpracuje první, jestliže jsou stejné3. Zpráva dříve poslaná (naplánovaná) se zpracuje první

Page 16: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 16 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Simulační smyčka

initializewhile (FES not empty and

simulation not yet complete){retrieve first event from FES

t := timestamp of this event process event}finish simulation

Page 17: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 17 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

NED language

● Topologie sítě je popsána v jazyce NED● NED umožňuje modulární popis sítě● Popisy se ukládají do souborů s příponou .ned● Simulátor načítá NED

● Dynamicky při startu● nebo možný překlad do C++ a přímé

přilinkování ke spouštěcímu souboru

Page 18: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 18 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

NED language

● Popis v NEDu se skládá z následujících komponent:

● Příkazy import● Definice kanálů● Definice simple a compound modulů● Definice sítě

Page 19: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 19 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

NED language

Compound module

Simple module

Simple module

Channel

Compound module

Simple module

Compound moduleSimple Simple

Network

Page 20: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 20 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

NED language - import

import "ethernet"

Příkazem se vkládá externí soubor

Page 21: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 21 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

NED language – simple module

simple SimpleModuleNameparameters:

//... gates: //...endsimple

Page 22: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 22 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

CarGenerator.ned

simple CarGenerator gates: out: out; in: in;endsimple

Page 23: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 23 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

crossroad.nedsimple CrossRoad parameters: throughDelay: numeric; type: numeric const;

gates: out: outA, outB, outC, outD; in: inA, inB, inC, inD;endsimple

Page 24: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 24 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

NED language – channel

channel MyChanneldelay 0.0018

error 1e-8 datarate 128000endchannel

Page 25: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 25 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

NED language – compound module

module CompoundModuleparameters:

//...gates:

//...submodules:

//...connections:

//...endmodule

Page 26: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 26 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Příklad NED souboru s dopravní sítí

Page 27: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 27 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

network2.ned

import "cargenerator", "crossroad", "global";module NejkratsiCesty

//...endmodulenetwork network2 : NejkratsiCestyendnetwork

Page 28: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 28 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

module NejkratsiCesty

module NejkratsiCesty submodules: //... connections nocheck: //... display: "b=428,372";endmodule

Page 29: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 29 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

module NejkratsiCesty - submodules

submodules: Global: Global; display: "p=50,58;i=misc/cloud"; CrossRoad0: CrossRoad; display: "p=136,152;i=old/bwgen"; A: CarGenerator; display: "p=48,152;i=misc/town"; //...

Page 30: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 30 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

module NejkratsiCesty - connections

connections nocheck: A.out --> delay 3 --> CrossRoad0.inD; CrossRoad0.outD --> delay 10 --> A.in; //...

Page 31: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 31 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Ukázka

Tvorba NED souboru v GNED

Page 32: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 32 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Typy křižovatek

● Jsou definovány v externím souboru● Pomocí jednoduché gramatiky je možno

popsat chování křižovatky

Page 33: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 33 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Křižovatka

CROSSROAD

DIRECTION A0001 (1)

DIRECTION C0100 (4)

DIRECTION B0010 (2)

DIRECTION D1000 (8)

Page 34: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 34 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Bitové operace

● Směry jsou reprezentovány čísly● Používají se bitové operace, například

● Rotace doleva – získáme pruh nalevo od aktuálního

● Auto jede do autoCíl a pruh vede do pruhCíljedná se o vhodný pruh, pokud(autoCíl AND pruhCíl) != 0

● apod.

Page 35: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 35 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Popis křižovatky

TYPE Number TypeNameLANES(OneChar Chars)+

[MAJOR TwoChars][INTERVALSNumber( TwoChars)*]

Page 36: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 36 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Příklad křižovatkyDIRECTION A

0001 (1)

DIRECTION C0100 (4)

DIRECTION B0010 (2)

DIRECTION D1000 (8)

Page 37: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 37 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Popis předchozí křižovatky

TYPE 10 ExampleCrossRoadLANESA BCDB ACDC ABDD ABCMAJOR AC

Page 38: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 38 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Světelná křižovatka

TYPE 11 ExampleClockwiseLANESA BCDB ACDC ABDD ABCMAJOR ACINTERVALS30 AB AC AD30 BA BC BD30 CA CB CD30 DA DB DC

Page 39: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 39 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Příklad křižovatky 2DIRECTION A

0001 (1)

DIRECTION C0100 (4)

DIRECTION B0010 (2)

DIRECTION D1000 (8)

Page 40: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 40 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Popis předchozí křižovatky

TYPE 12 ExampleCrossRoad2LANESB A CC AB

Page 41: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 41 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Předdefinované typy

● Je možno použít některé předem definované typy křižovatek

● Základní – 4 směry – přednost zprava● Kruhový objezd

● Možnost odkázat se na již definovaný typ a jenom změnit některé jeho vlastnosti (typicky intervaly semaforů)

Page 42: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 42 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Simple module v OMNet++

Třída zděděná od cSimpleModule, je nutnopřetížit následující virtuální metody:

void initialize()void handleMessage(cMessage *msg)void activity()void finish()

Page 43: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 43 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Constructor vs. initialize()● Konstruktor – ukazatele na NULL● initialize() – inicializace parametrů,

proměnných, alokace dynamických dat, self-messages, apod.

● finish() – záznam statistik (žádné mazání)● Destruktor – uvolnění paměti, zrušení self-

messages, apod.

Page 44: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 44 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Varianta s activity()● Podobné jako programování vlákna či procesu● Kdekoliv v kódu je možno čekat na příchozí

zprávu● V kódu je možno na nějaký čas zastavit

činnost modulu● OMNeT++ tuto variantu příliš nedoporučuje

Page 45: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 45 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Varianta s activity()

activity(){ while (true) { // wait, receive,... }}

Page 46: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 46 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Varianta s activity()

receive()wait()send()scheduleAt()cancelEvent()end()

Page 47: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 47 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Varianta s handleMessage()

send()scheduleAt()cancelEvent()receive()wait()

Page 48: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 48 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

CrossRoad::handleMessage()void CrossRoad::handleMessage(cMessage *msg){

if (msg->isSelfMessage()) {CRInfo *crinfo = check_and_cast<CRInfo*>(msg);switch (crinfo->type()) {

case CRI_ONE_LANE_CHECK: carChecks(crinfo->lane());break;

case CRI_ALL_LANES_CHECK: engagedPassageMsg[crinfo->from()]

[crinfo->to()] = NULL;allLanesCheck();break;

case CRI_SEMAPHORE:changeSemaphore();break;

}delete msg;

}

Page 49: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 49 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

CrossRoad::handleMessage() pokr.

else { // if it is not selfMessageCar* car = check_and_cast<Car*>(msg);carArrived(car, carArrivedToPos(car), carToPos(car));

}

Page 50: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 50 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

CarGenerator::handleMessage()

void CarGenerator::handleMessage(cMessage *msg){

if (!msg->isSelfMessage()) {// not selfMessage -> it is a car -> delete itev << simTime() << " CarGenerator: deleting car";delete msg;return;

}

scheduleAt(simTime() + uniform(...), msg);

car = new Car(messageCount-1);

// send it to outputsend(car, "out");

}

Page 51: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 51 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Průjezd křižovatkou

● Je první ve frontě?● Má zelenou?● Má přednost?● Má před sebou místo?● Naplánuje možnost vyjetí následníka● Naplánuje možnost vyjetí těch aut, která mu

dávala přednost● Přeplánování zprávy

Page 52: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 52 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

omnetpp.ini

Konfigurační soubor

[General]network = network1sim-time-limit = 100hcpu-time-limit= 300sini-warnings = yes

Page 53: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 53 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

omnetpp.ini

[Run 1]description="Hradec Kralove nadrazi"**.throughDelay = 3.50;**.Global.autoIntervalLength = true**.Global.flows="flow1.txt"network1.CEZ.type = 15network1.Koruna.type = 11**.type = 0**.typesFile = "types.txt"output-vector-file = output.vec

Page 54: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 54 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Ukázka

Road Traffic Simulation

Page 55: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 55 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

OMNeT++

www.omnetpp.org

Page 56: Road Traffic Simulation OMNeT++ - cvut.cz · Road Traffic Simulation & OMNeT++ Martin Doležal 25.11.2006 Varianta s activity() Podobné jako programování vlákna či procesu Kdekoliv

- 56 -

Martin DoležalRoad Traffic Simulation & OMNeT++

25.11.2006

Road Traffic Simulation & OMNeT++

KONEC