User Tools

Site Tools


proiecte:wireless-mac

Wireless MAC

Ciubotariu Codrin - Master AAC Constantinescu Adrian - Master AAC

Introducere

In cadrul unei retele de senzori wireless, rolul fiecarui nod este de a “culege” si transmite informatii catre un nod central sau catre toate celelalte noduri. Proiectul nostru propune o metoda de a realiza aceasta comunicare, urmarind atat trimiterea mesajelor de la nodul central la restul nodurilor, cat si invers, avand in vedere si o sincronizare a perioadelor de trimitere-receptie si folosirea unui timp de “sleep” pentru reducerea consumului de energie.

Descriere generala

Nodurile din cadrul retelei sunt de tipul Sparrow v3, iar pentru simulare in Avrora am folosit platforma atmega128rfa1ek1 in cadrul unei topologii cu mai multe noduri.

* Nodurile urmeaza un program comun de activitate wireless, vor transmite la inceput un mesaj broadcast pentru a obtine informatii de rutare apoi vor transmite un pachet de la un nod specificat catre nodul desemnat base-station (nodul 0). * Senzorii sunt sincronizati asa incat sa alterneze intre perioade active si perioade de sleep. Toate nodurile vor fi in aceeasi stare (activa sau sleep) la un anumit moment de timp.

Implementare si simulare teoretica [1]

Base-station-ului (nodul cu indicele 0) va da un mesaj initial de Broadcast. Toti senzorii retin numarul de hop-uri pana la base-station si next-hop-ul pana la base-station. Pentru a minimiza sansele ca mesajul de broadcast să fie pierdut, fiecare nod care primeste un mesaj de broadcast (prima oară) va transmite in urmatoarele doua frame-uri cate un broadcast. Stabilirea “topologiei” de rutare, pentru fiecare nod se face in aceasta faza initiala.

In interiorul retelei, comunicarea se va face din aproape in aproape, dar va avea ca punct final nodul 0, orice pachet este directionat inspre base-station.

Pentru a transmite un pachet, un nod va trimite mai intai un scurt pachet RTS [2] (care contine destinatia hop-ului curent). Trimiterea acestui pachet se face cu contention period, nodul va astepta un interval marginit de un sfert din perioada activa (deci între 0 si ACTIVE_PERIOD/4) inainte de a trimite, si se abtine daca a fost transmis intre timp alt pachet RTS. Nodul care este adresat ca next hop va raspunde cu un mesaj CTS. Pachetul poate fi transmis in acea perioada activa imediat dupa receptionarea CTS.

Rulare si rezultate

Pentru fiecare nod, un ciclu dureaza 20 de secunde. In acest timp, nodul va face receptie si trimitere, dupa caz, iar in momentul in care si-a incheiat activitatea intra in sleep pana la termianrea cuantei de 20 de secunde, cand “se trezeste” pentru a incepe un nou ciclu. La transmiterea mesajului, contention period este de 5 secunde.

Testul 1

Topologia contine doua noduri

Node Time Event


 0  0:00:00.000762  ----> 00.00.00.00.7A.04.0D.FF.68.AC  0.319 ms
 1  0:00:00.000796  <==== 00.00.00.00.7A.04.0D.FF.68.AC  0.319 ms
Testul 2

Topologia contine sase noduri

Node Time Event


 0  0:00:00.000882  ----> 00.00.00.00.7A.07.0D.FF.00.00.00.6A.D9  0.416 ms
 2  0:00:00.000916  <==== 00.00.00.00.7A.07.0D.FF.00.00.00.6A.D9  0.416 ms
 1  0:00:00.000916  <==== 00.00.00.00.7A.07.0D.FF.00.00.00.6A.D9  0.416 ms
 1  0:00:00.102397  ----> 00.00.00.00.7A.07.0D.FF.01.00.01.4D.C8  0.416 ms
 2  0:00:00.202771  ----> 00.00.00.00.7A.07.0D.FF.02.00.01.14.98  0.416 ms
 1  0:00:00.203306  ----> 00.00.00.00.7A.07.0D.FF.01.00.01.4D.C8  0.416 ms
 2  0:00:00.404054  ----> 00.00.00.00.7A.07.0D.FF.02.00.01.14.98  0.416 ms
 4  0:00:00.102432  <==== 00.00.00.00.7A.07.0D.FF.01.00.01.4D.C8  0.416 ms
 3  0:00:00.102432  <==== 00.00.00.00.7A.07.0D.FF.01.00.01.4D.C8  0.416 ms
 3  0:00:00.404672  ----> 00.00.00.00.7A.07.0D.FF.03.00.02.13.CB  0.416 ms
 4  0:00:00.505044  ----> 00.00.00.00.7A.07.0D.FF.04.00.02.96.5B  0.416 ms
 3  0:00:00.706335  ----> 00.00.00.00.7A.07.0D.FF.03.00.02.13.CB  0.416 ms
 4  0:00:00.907079  ----> 00.00.00.00.7A.07.0D.FF.04.00.02.96.5B  0.416 ms
 5  0:00:00.505080  <==== 00.00.00.00.7A.07.0D.FF.04.00.02.96.5B  0.416 ms
 5  0:00:01.008073  ----> 00.00.00.00.7A.07.0D.FF.05.00.03.B1.4A  0.416 ms
 5  0:00:01.510491  ----> 00.00.00.00.7A.07.0D.FF.05.00.03.B1.4A  0.416 ms

In continuare vom descrie un frame de mai sus. Vom lua ca referinta frame-ul nr 4 (00.00.00.00.7A.07.0D.FF.01.00.01.4D.C8):

  • 7A.07 (2 octeti) - lungimea frame-ului;
  • 0D (1 octet) - Magic payload, numarul 13;
  • FF (1 octet) - Adresa destinatie (MAC) a frame-ului; FF reprezinta adresa broadcast;
  • 01 (1 octet) - Adresa sursa (MAC) a frame-ului;
  • 00 (1 octet) - tipul pachetului encapsulat. Acesta este un pachet numit “DISCOVERY” de catre noi, si are valoarea 0;
  • 01 (1 octet) - Numarul de hopuri pe care il are nodul sursa pana la nodul base station; Informatie specifica pachetului DISCOVERY
  • 4D.C8 (2 octeti) - CRC;

Informatii aditionale

Anexa 1 - structuri de date

* tipurile de mesaje si structurile lor

typedef enum {
DISCOVERY = 0,
RTS,
CTS,
NORMAL
}packet_type;

typedef struct {
uint8_t hop_nr; /* number of hops from the sender
of the packet to node 0 */
}discovery_packet;

typedef struct {
uint8_t request; // must be 1 - request;
}rts_packet;

typedef struct {
uint8_t response; // 1 - ack; 0 - nack
}cts_packet;

typedef struct {
uint8_t val;
}normal_packet;

* componenta unui mesaj

typedef struct {
uint8_t destination_node; /* receiver of the packet */
uint8_t source_node; /* transmitter of the packet */
packet_type type; /* type of the next packet */
//uint8_t data_size; /* nr of bytes for data */
void * data; /* pointer to data_size bytes of data */
}Frame_t;

* tabela de rutare pentru fiecare nod (directia catre nodul 0)

typedef struct {
int next_hop;
int hop_count;
}route_table;

Bibliografie

proiecte/wireless-mac.txt · Last modified: 2014/02/07 10:47 by codrin.ciubotariu