Szenzorhálózatok - HF: MAC réteg vizsgálata

A VIK Wikiből

Feladat: (5) MAC réteg vizsgálata

Részletes kiírás

A mitmót eszközökön futó tinyOS operációs rendszer CSMA alapú MAC réteggel rendelkezik. A CSMA paraméterei (kezdeti várakozási idő, foglaltság esetén várakozási idő) változtathatók. A feladat célja a rádiós csatorna viselkedésének vizsgálata a paraméterek függvényében, illetve a jól használható paraméterek tartományának meghatározása.

Készítsen olyan alkalmazást, amivel az ütközések vizsgálhatók: Egy PC-hez csatlakoztatott jeladó jelének vétele után több vevő azonnal küldjön válasz üzenetet. A válaszüzeneteket a jeladó fogadja és a PC-n futó segédprogram segítségével a sikeresen fogadott és elveszett üzenetekről a paraméterek függvényében statisztikát készít. A rendszer biztosítson lehetőséget a paraméterek kényelmes és ellenőrzött állítására (pl. a jeladó elküldi a használandó paramétereket amit a vevőknek nyugtázni kell: a mérés csak ez után indulhat).

Az alkalmazás segítségével mutassa be a CSMA nélküli (várhatóan igen magas hibaszázalékkal működő) üzemmódot, valamint a paraméterek változtatásával beálló javulást. Javasoljon valamilyen szempontból optimális beállítást.

Segítség

A feladat megoldásához az opt/tinyos-1.x/contrib/bme/tos/lib/IA4420Radio/ könyvtárban található file-okat kell tanulmányozni, főképp az IA4420RadioM.nc-nek van nagy jelentőssége.

A rádió működését a mode változó befolyásolja, ezzel lehet a véletlen késleltetést és a csatornafigyelést engedélyezni vagy letiltani:

// Configuration bits	
enum {
	RX_ENABLED_BIT = 1,  // reception enabled
	TX_ENABLED_BIT = 2,  // transmission enabled
	TX_WAIT_ENABLED_BIT = 4, // random wait before transmission
	TX_LISTEN_ENABLED_BIT = 8  // listen to channel before transmission
};

	uint8_t mode = RX_ENABLED_BIT | TX_ENABLED_BIT | TX_WAIT_ENABLED_BIT | TX_LISTEN_ENABLED_BIT;
 

A kérleltetés mértékét a void do_wait_for_tx() függvényben lehet meghatározni, a

call TimerJiffyAsync.setOneShot( time )

paramétere a várakozási idő 1/32 ms-ban.

A CSMA/CA-nál a cél, hogy elkerüljük a csomagütközést. Ezt úgy valósítottam meg, hogy az adási igény érkezésekor az adás előtt véletlen ideig vár, majd a rádió belehallgat a csatornába, és ha adást érzékel, akkor újra kezdi a véletlen idejű várakozást. Ha két mote egyszerre akar adni, és véletlenül ugyanazt a várakozási időt sorsolták, akkor mindkettő üresnek érzi a csatornát, és egyszerre adnak, ilyenkor az ütközés elkerülhetetlen. Viszont ha különböző várakozási időt sorsoltak, akkor az egyik hamarabb kezdi az adást, ekkor a másiknak van esélye arra, hogy ezt detektálja. Ha túl kicsi lenne a különbség a két idő között, akkor a második lehet, hogy még nem érzékeli az első adását, különböző késleltetések miatt. A feladat lényege tehát annak a minimális késleltetési különbségnek a meghatározása, aminek a használata esetén biztonságosan elkerülhető az ütközés. (Ezt a minimális időt kell egy véletlen egész számmal szorozni, és akkor megkapjuk a késleltetést. Minél nagyobb tartományból választjuk a véletlen számot, annál kisebb lesz a valószínűsége, hogy a két vagy több mote ugyanazt az értéket sorsolja. A tartomány növelésével persze a várható adási késleltetés és a késleltetés szórása is nő.)

A rádió hardveréről és a csatornafoglaltásg érzékeléséről annyit érdemes tudni, hogy most az IA4420 digitális RSSI (vételi térerősség) bitjét használom, ami sajnos az adatlap szerint 0,5 ms késésben van az analóg jelhez képest, és az is valamilyen késésben lehet ahhoz képest, hogy valaki más adni kezdett.

-- Laci - 2007.04.19.