You are on page 1of 23

Universitatea Tehnica "Gh.

Asachi" Iai Facultatea de Automatic i Calculatoare

Proiect CSC Comunicaii n sisteme de conducere Tema nr. 2

Student: Astefanoaie Alexandru Ichim Gabriel Mazuru Ionut-Bogdan Panainte Andrei

Grupa 1402B Cuprins


1. Tema proiectului Specificaiile de proiectare, formatul mesajului, descrierea proiectului in ansamblu. 2. Prezentarea resurselor HW i SW utilizate Descrierea pe scurt a resurselor hardware folosite de proiect (microsistemul MicroPac 515C, porturile de comunicaie, modem radio) i a mediului integrat de dezvoltare (uVision3) i testare a codului implementat (NoICE51). 3. Protocolul Master-Slave Descrierea protocolului Master Slave de acces la mediul de comunicaie i particularitile implementrii lui la nivel fizic (RS232 cu modem radio sau RS-485, in funcie de tem). 4. Programul principal Descrierea programului principal (iniializarea resurselor i bucla principal, cu tratarea comunicaiei i a interfeei cu operatorul local). Schema logic a programului principal n varianta combinat Master-Slave. 5. Pregtirea mesajelor pentru transmisie Descrierea funciei de pregtire a mesajului n varianta combinat Master-Slave, schema logic i descrierea codului implementat. 6. Transmisia mesajelor Descrierea funciei de transmisie a mesajelor n varianta combinat Master Slave, schema logic i descrierea codului implementat. 7. Recepia mesajelor descriere, schema logic i implementare Descrierea funciei de recepie a mesajelor n varianta combinat Master-Slave, schema logic i descrierea codului implementat. 8. Concluzii

1. Tema proiectului
Folosind microsistemul MicroPac 515C s se implementeze un protocol de comunicaie serial de tip master-slave, avnd urmtoarele caracteristici: 1 2 3 Port Parametri comunicaie Formatul mesajului COM0 (RS-232) - folosind modemul radio Satel 1870E 9600 Baud, 8 bii de date, paritate par, 1 bit de STOP Adres HW nod destinaie Cod funcie: 0 sau 1 Destinatia sau sursa mesajului, dup caz Lungime date Date Cod detectare erori LRC () Binar

Codificare mesaj

Formatul mesajelor: Adres HW destinaie 1 octet Obs.: Cmpul adres destinaie va conine adresa nodului care va recepiona mesajul. Cmpul cod funcie poate fi, dup caz: o 0 mesaj de interogare (lungime date = 0) transmis de master ctre un nod slave sau de slave ctre master, n lipsa altui mesaj util o 1 mesaj de date mesaj care conine un text ASCII Cmpul surs/destinaie va indica: o pentru un mesaj de tip 1 transmis de nodul master sursa mesajului o pentru un mesaj de tip 1 transmis de un nod slave destinaia final a mesajului Cmpul lungime reprezint numrul de octei al cmpului de date; Octetul din cmpul suma de control va fi calculat ca suma modulo 2 (XOR) a tuturor octeilor din cmpurile anterioare. Mesajul va fi transmis n format binar, octet cu octet, portului serial COM0. Cod funcie 1 octet Surs (master) Destinaie (slave) 1 octet Lungime 1 octet Suma de control Lungime 1 octet Date

2. Prezentarea resurselor HW i SW utilizate


MicroPac C515C este un sistem de dezvoltare organizat n jurul unui microcontroler Infineon C515C. Placa principal a microsistemului este prezentata in Fig. 1, procesorul C515C Fig. 2.

Fig. 1. Placa sistemului Caracteristici tehnice ale microcontrolerelor 515C: variant mbuntit a microcontrolerului SAB 80C515A, compatibil MCS 51; memorie program intern de pn la 64Koctei (cu excepia variantei C515C-L, utilizat i de sistemele MicroPac 515C din laborator); interfa pentru memoria program de 64Koctei; 256 octei de memorie RAM intern; 2 Koctei de memorie XRAM intern; interfa pentru memorie de date extern de pn la 64Koctei; arhitectur intern compatibil MCS 51, Fig. 2. Procesorul C515C

cu 8 registre DPTR n loc de unul singur; frecven de tact de pn la 10MHz, fr divizor de frecven (ciclu main de 1 48+1 linii I/E digitale cvasibidirecionale ,8 intrri analogice 3 timere de 16 bii (T0, T1 i T2, ultimul prevzut i cu faciliti de comparareconvertor A/D de 10 bii cu autocalibrare; port serial UART compatibil MCS51, cu generator de tact programabil; port serial sincron SSC (compatibil SPI Serial Peripheral Interface); modul CAN (Controller Area Network) integrat complet implementat; 17 surse de ntrerupere, organizate pe 4 niveluri; ceas de gard; 4 moduri de consum redus (Slow Down, Idle Mode, SW / HW Power Down). Caracteristici software: Memoria program varianta C515C-L, utilizat i de sistemele MicroPac 515C nu are memorie program intern, ns varianta C515C-8R dispune de 64 Koctei de ROM, iar C515C-8E are 64 Kocteti de memorie OTP (One Time Programming). La aceste variante, accesul la memoria intern ROM/OTP este validat prin aplicarea unui nivel logic 1 pe linia EA(External Access). Memoria de date singura diferen fa de organizarea memoriei la un microcontroler 8052 este prezena, n spaiul rezervat memoriei externe de date (XDATA), a unei memorii interne de date de 2 Koctei (XRAM) i a unei pagini de 256 de octei de memorie n care sunt mapai regitrii de interfa ai modulului CAN. Utilizarea acestor faciliti suplimentare se poate selecta explicit n configuraia microcontrolerului (XMAP0=0 n SFR SYSCON). Placa are urmatoarele caracteristici: Interfee de comunicaie serial asincron: COM0 (RS-232) - UART C515C portul serial al microcontrolerului C515C; COM1 (RS-232), COM2 (RS-485) un circuit extern DUART Philips SC26C92, cu dou canale independente full duplex; s la 6 MHz, respectiv de 600ns la 10MHz varianta din laborator).

captur);

COM3 (RS-232) - UART AT89C2051 - portul serial al coprocesorului AT89C2051; Porturile seriale pot lucra n modul asincron, cu 10 sau 11 bii/caracter i cu rate de comunicaie de pn la 230,4 Kbps. Interfa CAN: C515C integreaz pe cip un modul CAN (Controller Area Network) care implementeaz n hardware versiunea 2.0B a protocolului CAN. I/E digitale 11 linii I/E programabile, de nivel TTL 8 linii de ieire de curent mare (500mA); 4 linii de intrare i 3 linii de ieire TTL situate pe circuitul DUART Philips SC26C92. Liniile de intrare A/D pot fi de asemenea folosite ca intrri digitale. Atunci cnd coprocesorul AT89C2051 nu este instalat, mai rmn disponibile nc 6 linii I/E de nivel TTL. Intrri A/D 8 intrri multiplexate conectate la convertorul intern A/D cu rezoluia de 10 bii; durata unei conversii este de 9,6 s (104 Keantionri / sec). Ieiri D/A 4 canale de ieire D/A implementate cu un convertor extern AD7226 cu 4 canale; rezoluia ieirilor D/A este de 8 bii. Interfa LCD permite controlul oricrui afiaj cu cristale lichide bazat pe controlerele HD44780, HD61830 i compatibile. Conector extensie magistralele de adrese i date, liniile de reset i de ntrerupere sunt disponibile la un conector cu 50 de pini pentru conectarea unor periferice externe. Conectarea dintre placa si calculoator Comunicatia intre cele 2 ... se realizeaza cu ajutorul a 2 programe (NoICE51 si
uVision3).

Programul NoICE51. Acesta este un program de interfa cu sistemul MicroPac 515C ce permite ncrcarea i depanarea simbolic a aplicaiilor la distan, la nivel de cod surs, direct pe sistemul cu microcontroler. NoICE permite o depanare avansat a programelor, n condiii mult mai apropiate de cele n care va funciona n final, fr utilizarea unui instrument sofisticat i scump de tip ICE In-Circuit Emulator (no ICE). Interfata programului este prezentata in Fig. 3.

Fig. 3. Interfata programului NoICE Programul uVision3. Cu ajutorul acestuia, vom putea compila si hex-edita programe ce vor fi incarcate ulterior pe placa cu ajutorul NoICE. Pentru utilizare, vom creia un proiect, in care vom introduce ca librarii fisierele : mp515.c, lcddrv.c, copdrv.c, cirque.c, mmio.a51 i startup.a51, avand astfel acces la functii predefinite. Sistemul MicroPac 515C dispune de 4 porturi seriale: COM0 - Portul serial UART C515C echipat cu un adaptor de linie RS COM1 i COM2 - dou canale seriale furnizate de interfaa extern DUART Philips SC26C92. COM1 este echipat cu un adaptor RS-232, iar COM2 este echipat cu dou adaptoare RS-485.

COM3 - Portul serial UART AT89C2051 preprogramat i echipat pentru a asigura o interfa serial asincron RS-232 bufferizat, full-duplex, la viteza de 9600 Baud. Liniile seriale COM0, COM1 i COM3 ale MicroPac 515C sunt accesibile la trei conectori DB9 avnd o organizare RS-232 modificat, pentru a permite conectarea lor la PC folosind un cablu cu conexiuni directe pin la pin, de tip DTE-DCE (Data Terminal Equipment Data Communication Equipment sau calculator-modem). Din punctul de vedere al fluxului de date vehiculat, comunicaia dintre dou noduri interconectate printr-o legtur serial RS-232 poate fi de 3 tipuri: - simplex comunicaie ntr-un singur sens, cu un singur flux de date: un nod doar transmite (surs), iar cellat doar primete date (destinaie); - duplex comunicaie n ambele sensuri, cu dou fluxuri de date independente: nodurile pot transmite i primi date simultan (ambele noduri pot fi att surs ct i destinaie); - half-duplex - comunicaie n ambele sensuri, cu dou fluxuri de date ntreesute: nodurile pot transmite i primi date, dar nu simultan (un nod poate fi la un moment dat fie surs, fie destinaie).

3. Protocolul Master-Slave
In cadrul proiectului se conecteaza cele 5 noduri MicroPac515C intr-o retea RS232, prin canalul COM0. ntruct standardul RS-232 nu suport coliziunile se va utiliza tehnica de control al accesului la mediu master/ slave. Aceasta tehnic prevede existenta unui nod numit master (arbitru central) care s controleze momentele in care celelalte noduri din retea pot transmite sau receptiona date. Dreptul de acces este acordat de catre master , pe rand, in mod ciclic, fiecarui nod slave , printr-un mesaj adresat acestuia. Fiecare mesaj pe care un nod slave il va transmite va trece mai intai prin nodul master, apoi acesta va decide destinatia finala, in functie de adresa indicata in mesaj . Exista 2 tipuri de mesaje : un mesaj de interogare, care va fi transmis de master, pe rand, fiecarui slave pentru a determina daca acesta are un mesaj in asteptare. Acesta nu va contine campurile de lungime si de date. In cazul in care nu are mesaj , slave-ul va transmite la randul sau masterului un mesaj de interogare. Al doilea tip de mesaj este cel care contine date de transmis . El poate aparea ca raspuns al slave-ului la o interogare din partea masterului, si trimis mai departe slave-ului destinatie sau direct de la master, daca acesta a primit o comanda de transmisie din partea utilizatorului. (de la tastatura proprie) Descrierea functionarii programului pentru nodul master: Secvena de iniializare afiaj LCD coprocesor tastatura port serial variabilele programului (de exemplu adresa HW a nodului)

Afiare parametri program: Linia 1: Master/Slave, Adresa, COM0/COM2, ASCII/Binar Linia 2: RxM nod - ultimul mesaj de date recepionat cu succes i care nod l-a transmis Afiare meniu comenzi: Linia 3: 1 TxM 2 Stare

Linia 4: utilizat de comenzile 1 i 2 Masterul este cel care coordoneaza transmisia mesajelor in retea. Alege un slave initial (slave 1) , apoi va intra in bucla si va urma setul urmator de instructiuni. Verifica daca are un mesaj de transmis nodului respectiv (nod[slave].full==0 sau1 ). In cazul in care este un mesaj de trimis , masterul il va trimite la adresa indicata prin functia TxMesaj(nod destinatie) ; in caz contrar trimite un mesaj de interogare .(cod functie 0) Apeleaza functia RxMesaj(slave) cu adresa nodului de la care se asteapta un raspuns trimisa ca parametru. (asteptarea se va face cu timeout o secunda , moment in care se va trece la urmatorul slave). In cazul in care mesajul receptat este de tip 0, se va trece la urmatorul nod slave. Pentru un mesaj de tip 1 adresat nodului master ,acesta il va afisa pe ecran (linia a doua a LCD-ului). Daca vine un mesaj de tip 1 pentru destinat altui slave, il va memora pentru o transmitere ulterioara. Dupa terminarea functiei RxMesaj se verifica daca s-a apasat o tasta. Pentru valoarea 1 (TxM) va solicita adresa si datele care urmeaza a fi trimise slave-ului , iar pentru valoarea 2 se va verifica si afisa starea bufferului nodului slave indicat. Descrierea functionarii programului pentru nodul slave: Nodul slave ateapt n bucl infinit un mesaj de la master sau o comand de la tastatur. De la master exist posibilitatea primii un mesaj de tip 0 sau de tip 1. n cazul primirii unui mesaj de tip 1 atunci acesta este afiat pe linia 2, iar n cazul mesajului de tip 1 este transmis ctre master. Dac nodul slave nu are un mesaj de tip 1 de transmis atunci transmite ctre master un mesaj de tip 0. Dac apare o comand de la tastatur, trateaz comanda. Pentru comanda TxM: solicit adresa destinaie, preia adresa destinaie, solicit mesajul, preia i memoreaz mesajul. Pentru comanda stare mesaje: solicit adresa destinaie, preia adresa destinaie, afieaz dac exist sau nu un mesaj care ateapt s fie transmis.

10

4. Programul principal
n programul principal sunt iniializate variabile coprocesorului i comunicaia cu acesta cu comanda CopInit(). De asemenea se iniializeaz COM2, timerul 0 i pentru toate nodurile bufferul este gol. Cu funcia Afisare_meniu este afiat pe lcd n bucla infinit meniul. ntr-o bucla while n prima etap se consider cazul n care nodul pe care ruleaz programul este de tip MASTER i dac nu exist un mesaj ASCII de transmis ctre slave se folosete un mesaj de interogare retea[i].bufbin.functie=POLL. Tot n functia main sunt apelate funciile de transmisie mesaj i recepie mesaj, funcii care vor fi explicitate ntr-un paragraf ulterior. Dac nodul pe care ruleaz programul este slave este apelat funcia de recepie mesaj de la master. Nodul slave de asemenea caut dac are n bufferele de transmisie vreun mesaj de transmis. Dac nu este transmis nici un mesaj ctre master atunci se trimite un mesaj de interogare ctre master, calculeaz suma de control i apoi transmite mesajul de interogare. Programul este conceput n aa mod nct periodic s fie verificat dac s-a apsat vreo tast. ntr-un corp switch n cazul n care se apas tasta 1 se trateaz comanda transmisie mesaj iar n cazul tastei 2 se trateaz comanda citire stare buffer. local ct i iniializarea

11

Reset

Initializari: LCD, coprocessor, tastatura, port serial, timer T0 Variabile locale

Afisare meniu

receptie mesaj

Afisare mesaj si sursa (daca mesajPOLL) i=1 i=0 gol plin Pune mesaj de interogare (POLL) in buffer(i) i++; buffer(i)

buffer(i)

gol

i:ID pregatire buffer(i) transmite mesaj(i) i=5? receptie mesaj(i) da i=0 nu

i++;

plin

afisare mesaj (pentru master)

i++; da alta

Punere in buffer(0) mesaj POOL

i=5? nu exista tasta apasata? 2 adresa buffer preia adresa buffer

i++;

pregatire mesaj(i) nu transmite mesaj(i) 1 solicita destinatia preia destinatia

solicita mesaj afisarte stare buffer preia mesaj refacere meniu

12

Fig. 4. Schema logic a programului principal n varianta combinat Master-Slave. 5. Pregtirea mesajelor pentru transmisie
Dintre cele 3 functii ce trebuiesc completate pentru implementarea proiectului, cea mai importanta este cea de pregatire a mesajului. Aceasta are ca targhet alcatuirea mesajului ce va fi trimis prin retea de la un nod la altul, si trebuie sa respecte anumite reguli pentru a putea fi interpretat si utilizat corect de functiile de receptie si transmisie. Conform schemei bloc de la Fig. 5., ce pute in vedere atributiile ce trebuiesc indeplinite, dealungul pregatirii mesajului trebuie tinut cont de: tipul mesajului ce trebuie pregatit: o date o interogare daca este de interogare, mesajul ce trebuie pregatit este suma de control a nodului, ce va fi egala cu adresa nodului; daca este mesaj de date, se construieste suma de control, tinand seama de adresa nodului, codul functiei, lungimea datelor si datele ce trebuie trimise. Pe baza acestor reguli s-a implementat urmatoarea functie, pentru pregatirea mesajului ce va urma sa fie trimis dealungul retelei. void Pregatire_mesaj(int i){ unsigned char sc; int j; if (retea[i].bufbin.functie==POLL) retea[i].bufbin.sc= retea[i].bufbin.adresa; else{ sc=retea[i].bufbin.adresa; sc^=retea[i].bufbin.functie; sc^=retea[i].bufbin.destsrc; sc^=retea[i].bufbin.lng; for (j=0;j<retea[i].bufbin.lng;j++)

13

sc^=retea[i].bufbin.date[j]; retea[i].bufbin.sc=sc; } }

Pregatire mesaj(i)

Cod functie

1
r[i].bufbin.sc=bj

0
r[i].bufbin.sc= r[i].bufbin.adr

bufascbufbin;

RET

Fig. 5. Schema bloc a functiei de pregatire a mesajului

14

6. Transmisia mesajelor
Cea de-a doua functie ce trebuie implementata, de transmisie a mesajului, va folosi implicit cuvintele formate in functia de pregatire a acestuia. Informatiile preluate ne ajuta pentru a stabili o comunicatie intre placi. Pentru implementarea algoritmului, ne vom ghida dupa schema bloc din Fig. 6. unde puteam observa pe larg atributiile acestei functii. La fel ca in functia de pregatire a mesajului, vom avea de controlat 2 tiputi de mesaje, ce vor fi diferentiate dupa codul functiei: un mesaj de date, ce trebuie trimis pas cu pas, tinand cont de urmatoarea ordine: trimiterea adresei nodului ce va primi mesajul; trimiterea lungimii mesajului; trimiterea cuvantului propiu-zis; trimitearea sumei de control.

un mesaj de interogare, ce va avea ca scop verificarea bufferului de date al unui nod oarecare din retea.

Respectand aceste regului, s-a implementat functia de transmitere a mesajului. void TxMesaj(int i){ unsigned char j, ch, *ptr; ch=retea[i].bufbin.adresa; ACC=ch; TB8=P; Ser_Send_Byte(COM0,ch,1); ch=retea[i].bufbin.functie; ACC=ch; TB8=P; Ser_Send_Byte(COM0,ch,1); if (ch==MES){ ch=retea[i].bufbin.destsrc; ACC=ch; TB8=P; Ser_Send_Byte(COM0,ch,1); ch=retea[i].bufbin.lng; ACC=ch;

15

TB8=P; Ser_Send_Byte(COM0,ch,1); for (j=0;j<retea[i].bufbin.lng;j++){ ch=retea[i].bufbin.date[j]; ACC=ch; TB8=P; Ser_Send_Byte(COM0,ch,1); } } ch=retea[i].bufbin.sc; ACC=ch; TB8=P; Ser_Send_Byte(COM0,ch,1); if (ADR_NOD!=MASTER) retea[i].full=0; Ser_SND_Done(COM0); }

16

TxMesaj(i)

ptr = retea[i].bufasc;

ACC = *ptr; TB8 = P; Ser_Send_Byte(COM0, *ptr,1);

ptr++ *ptr r[i].full = 0;

Ser_Send_Done(COM0);

Fig. 6. Schema bloc a functiei de transmisie a unui mesaj

17

7. Recepia mesajelor descriere Schema logic i implementare


Ultima functie ce a ramas de tratat, este cea de receptie a mesajelor. Ea este cea mai complaxa dintre toate, deoarece are ca responsabilitati de a decodifica mesajul primit, de a indentifica carui tip de nod (master / slave) ii este destinat si de a notifica utilizatorul legat de datele primite in buffer. Pentru a implementa aceasta functie, am urmarit cu atentie schema logica prezentata in Fig. 7. Pe scurt aceasta functie, tine mereu seama daca nodul care primeste un mesaj este de tip master / slave, si va intra in asteptarea caracterelor corecte. Daca se intampla ca datele receptionate sa fie eronate, va ignora acele date (informand utilizatorul) si va astepta informatii corecte. Dupa identificarea nodului, functia va avea o parte comuna, cea de recunoastere a mesajului primit, apoi va identifica iarasi daca nodul este master / slave pentru a vedea ce trebuie facut cu mesajul primit. Respectand schema bloc prezentata am alcatuit urmatorul cod, pentru a implementa functia: void RxMesaj(int i){ unsigned char j, ch, sc, screc, destsrc, lng, functie, *ptr; if (ADR_NOD==MASTER){ ch=Ser_Receive_TMO(COM0,1000); if (timeout) { error("Timeout nod "); LCD_Putchar(i+'0'); return; } retea[i].full=0; if (ch!=ADR_NOD) { do Ser_Receive_TMO(COM0,5); while (timeout==0); error("Adresa gresita"); return; } } else {

18

do{ do Ser_Receive_TMO(COM0,5); while( timeout==0); ch=Ser_Receive_Byte(COM0,1); }while(ch!=ADR_NOD) ; } screc=ADR_NOD; functie=Ser_Receive_TMO(COM0,5); if(timeout){ error("Timeout functie ") return; } do Ser_Receive_TMO(COM0,5); while(timeout==0); error("Functie eronata"); return; screc^=functie; if (functie==MES){ destsrc=Ser_Receive_TMO(COM0,5); if (timeout) { error("Timeout destsrc"); return; } screc^= destsrc; if (ADR_NOD==MASTER) { if (retea[destsrc].full==1) { do Ser_Receive_TMO(COM0,5); while (timeout==0); error("Buffer plin"); return; } } lng=Ser_Receive_TMO(COM0,5); if(timeout){ error("Timeout lng"); return; } screc^=lng; if (ADR_NOD==MASTER) { retea[destsrc].bufbin.destsrc=i; retea[destsrc].bufbin.functie=functie; retea[destsrc].bufbin.lng=lng; } for (j=0;j<retea[i].bufbin.lng;j++){

19

screc^= retea[i].bufbin.date[j]=Ser_Receive_TMO(COM0,5) if(timeout){ error("Timeout date"); return; } } sc=Ser_Receive_TMO(COM0,5); if (timeout) { error("eroare sc"); return; } if(sc==screc) retea[i].full=1; if(ADR_NOD!=MASTER) { retea[ADR_NOD].bufbin.destsrc=destsrc; retea[ADR_NOD].bufbin.lng=lng; for (j=0;j<retea[ADR_NOD].bufbin.lng;j++){ screc^=retea[ADR_NOD].bufbin.date[j]=Ser_Receive_TMO(COM0,5); if(timeout){ error("Timeout date"); return; } } sc=Ser_Receive_TMO(COM0,5); if (timeout) { error("eroare sc"); return; } if(sc==screc) retea[ADR_NOD].full=1; else error("eroare sc"); } } sc=Ser_Receive_TMO(COM0,5); if (timeout) { error("eroare time out"); return; } if(sc!=ADR_NOD){ retea[ADR_NOD].full=1; error("eroare sc"); } }

20

RxMesaj (i)

DA

ADR_NOD == MASTER ?

NU

Astept cu TMO 1000ms primul caracter al raspunsului de la slave i

Astept fara TMO primul caracter al mesajului de la master

retea[i].full=0

NU

timeout Timeout nod i

DA

ch=:

NU

DA

ch=:

Astept cu TMO=5ms primul caracter al adresei HW

NU
RET

Astept cu TMO=5ms al doilea caracter al adresei HW

ptr=retea[i].bufascii

Eroare incadrare Conversie adresa Ascii-hex in binar

Astept cu TMO=5ms primul caracter al adresei HW

Receptioneaza si ignora restul mesajului (LF) DA adresa ADR_NOD? NU

timeout? NU Astept cu TMO=5ms al doilea caracter al adresei HW

DA

RET

Timeout nod i

RET

Astept cu TMO=5ms fiecare octet al restului mesajului pe care il stocheaza in bufferul Ascii

SCMC = adresa: Conversie adresa Ascii-hex in binar Conversie cod functie din Ascii-hex in binar DA

adresa ADR_NOD? NU Eroare adresa

<2

functie

Eroare cod functie

functie

RET

Receptioneaza si ignora restul mesajului

Conversie destsrc

Conversie SC

RET

screc+=destsrc

SC==SCREC?

NU

Eroare SC
RET

master? DA Conversie lng NU

DA

Retea[destsrc].full=1 ? screc+=lng DA Eroare suprapunere

21

*
RET

*
NU master DA

Stocheaza in bufbin functia, r[ADR_NOD].bufbin.destsrc=destsrc;

Stocheaza in bufbin functia, r[destsrc].bufbin.destsrc=i;

Conversie date, actualizare screc

Conversie date, actualizare screc

Conversie SC

Conversie SC

NU

SC==SCREC?

DA

NU

SC==SCREC?

DA

Eroare SC

r[ADR_NOD].full=1

Eroare SC

r[destsrc].full=1

RET

RET

Fig. 7. Schema bloc a functiei de receptie

22

8. Concluzii
Pentru a face fa unor creteri temporare n viteza de producere a datelor sau unor ntreruperi ale fluxului de date la nivelul receptorului, nodul surs stocheaz datele ntr-un buffer gestionat prin program. Totui, viteza de recepie a datelor nu poate depi viteza medie de consum a acestora, iar creterile fluxului de date la nivelul receptorului nu pot dura prea mult din cauza capacitii finite a bufferului de recepie. Functionalitatea programului a fost verificata pentru toate situatiile posibile (master, slave, transmisie mesaj, receptive mesaj), avand in vedere comunicatia placa PC, PC placa, placa placa. De asemenea, au fost eliminate erorile de functionare aparute. Pe durata testarilor, s-a observat o ridicare a temperaturii modemului radio.

23