Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Programul LabView folosit la transmiterea de date

Informatica


Programul LabView folosit la transmiterea de date



Programul Trimite fisier.vi este folosit pentru a culege de pe hard-disk-ul calculatorului un fisier si pentru a-l trimite prin intermediul interfetei seriale la un alt calculator. Programul este realizat cu ajutorul mediului de programare vizual LabView. Pe cel de-al doilea calculator trebuie instalat un program compatibil, care va functiona pe aceleasi principii si va executa receptia acestui fisier. Informatia este trimisa sub forma de pachete succesive de 107 octeti. Pentru o buna functionare, compatibilitatea si sincronizarea cu programul care receptioneaza fisierul este esentiala. Cele doua calculatoare sunt conectate între ele prin porturile ser 333c26d iale cu un cablu full-duplex sau half-duplex.

6.1 Interfata utilizator a programului

Terminalele de intrare ale programului sunt:

Port: portul serial pe care se face emiterea datelor (0 înseamna COM1, 1 inseamna COM2, etc.);

Timp maxim de asteptare (sec): numarul maxim de secunde pe care VI-ul le va astepta pentru ca programul receptor sa trimita semnalul de READY;

Cale Fisier: locul de pe hard-disk unde se afla fisierul care urmeaza a fi trimis;

Status: indica daca trimiterea fisierului s-a efectuat cu success sau daca a intervenit o problema în timpul transferului si timpul de asteptare a expirat.

6.2 Functionarea programului

Dupa ce calculatoarele au fost conectate prin intermediul interfetei seriale, se executa VI-ul Trimite fisier.vi. Caracteristicile programului includ verificarea CRC (Cyclic Redundant Check) pe 16 biti a pachetelor pentru depistarea erorilor, retrimiterea datelor daca au aparut erori în timpul transmisiei si posibilitatea de time-out.

Pentru început programul cauta în buffer-ul interfetei seriale existenta unui semnal carrier, pentru a determina daca cele doua calculatoare sunt înca conectate. Trimite un caracter de start fisier (Ł) programului receptor, pentru a anunta disponibilitatea de a emite, si astepta raspuns afirmativ de disponibilitate de receptie de la receptor. Asteptarea se face pe durata aleasa de utilizator.

Dupa realizarea acestui handshaking, programul de trimite datele în pachete de 107 biti. Motivul principal pentru care s-a ales aceasta dimensiune este de a evita fenomenul de buffer overflow si de a simplifica codul LabView.

Pachetele sunt structurate dupa cum urmeaza:

100 biti date din componenta fisierului + 4 biti CRC + 3 biti care dau dimensiunea pachetului.

De exemplu, daca fisierul trimis este un text cu continutul

Trimitem_un_fisier_test.", el trebuie transmis într-un pachet de forma:

Trimitem_un_fisier_test.F F F F F F F F F F F F F F F F642D024

Cele 76 de caractere F sunt adaugate în completarea celor 24 de octeti care compun fisierul, pentru a rezulta un pachet de exact 100 octeti. Verificarea CRC pentru acest pachet este 642D, deci asta urmeaza celor 100 octeti. 024 de la sfârsit reprezinta dimensiunea pachetului. Daca CRC-ul este de numai 3 octeti, va trebui completat cu un caracter F pentru a deveni de 4 octeti.

Dupa ce pachetul a fost trimis, programul asteapta înstiintarea de la programul receptor ca datele au ajuns în siguranta. Daca primeste aceasta confirmare, pregateste urmatorul pachet de 107 octeti pentru trimitere. Daca datele nu au ajuns integre la destinatie, programul retrimite acelasi pachet, iar daca primeste semnalul de sfârsit fisier, se opreste executia lui.

6.3 Diagrama bloc a programului. Explicatii.

Introducerea variabilelor de catre utilizator.

Se introduc variabilele care vor fi folosite pe parcursul functionarii programului. De la panoul frontal utilizatorul alege portul serial disponibil pe care se va face emiterea datelor si calea (locul de unde fisierul va fi trimis). De asemenea se alege numarul de secunde pe care programul le va astepta pentru primirea raspunsului de READY de la receptor. Se seteaza valoarea implicita a time-out-ului pe Fals.

2. Golirea buffer-ului si cautarea semnalului Carrier Drop

Se folosesc trei SubVI-uri din libraria LabView. SubVI-ul Bytes At Serial Port returneaza numarul de octeti care se gasesc în buffer-ul portului serial. Serial Port Read citeste acesti octeti si îi transmite mai departe la intrarea subVI-ului Match Pattern, care cauta in datele de intrare valoarea CARR.

Trimiterea semnalului READY si asteptarea raspunsului de la receptor

În urmatoarea secventa a programului, caracterul Ł (semnalul READY) este trimis prin portul serial programului receptor. Urmeaza o structura While Loop, care repeta subdiagrama din interiorul ei pâna când terminalul conditional primeste valoarea TRUE. La fiecare executie a structurii While Loop, programul citeste buffer-ul portului serial si cauta existenta caracterului Ł (raspunsul de la receptor). De asemenea, la fiecare executie a buclei, se compara timpul care a trecut de la transmiterea lui READY cu timpul introdus de utilizator ca timp de time-out. Pentru aceasta se folosesc doua subVI-uri Get Date/Time In Seconds (care calculeaza timpul trecut din 1 Ian 1904), unul în exteriorul buclei While Loop, iar celalalt în interior, diferenta dintre al doilea si primul fiind apoi comparata cu timpul de time-out la fiecare executare a subrutinei. Daca Ł nu este gasit în buffer înainte de expirarea timpului, executia programului este întrerupta. Daca este gasit, se trece la urmatorul pas, construirea pachetelor de date.

Pregatirea pachetelor de date

Open File deschide fisierul indicat de utilizator pentru citire/scriere; urmeaza Read File care citeste datele din fisierul indicat de refnum. Citirea incepe de la locatia ramasa la ultima citire si se face exact pe durata a 100 octeti.

Cei 100 octeti cititi sunt trecuti în paralel prin doua structuri Concatenate Strings - String Subset. Prima structura efectueaza concatenarea (alipirea) a 100 de caractere F la octetii de date efectivi, dupa acestia, dupa care din pachetul rezultat sunt extrasi ultimii 100 octeti. Acesta reprezinta pachetul de date cu lungimea de 100 octeti, care va fi efectiv trimis. Cea de-a doua structura Concatenate Strings - String Subset, efectueaza verificarea CRC pe 16 bti a pachetului de date. Rezultatul calculului este concatenat cu atâtia F cât este nevoie pentru a-l face de exact 4 octeti. Verificarea CRC va fi discutata în detaliu în subcapitolul urmator. De asemenea pachetul de date citit este trecut si printr-o structura String-Length - Number To Decimal String , care calculeaza lungimea lui efectiva în octeti, sub forma unui numar de 3 cifre.

Cele trei valori rezultate în urma operatiilor de mai sus sunt din nou concatenate, rezultând un pachet de date de 107 octeti, primii 100 reprezentând datele trimise, urmatorii 4 codul CRC, iar ultimii 3 lungimea pachetului efectiv de date, pentru ca acesta ar putea fi mai mic de 100 octeti.

Serial Port Write trimite datele primite la terminalul string to write portului serial.

Verificarea CRC (Cyclic Redundancy Check)

Cyclic Redundancy Check este o metoda comuna de a proteja datele, de a verifica daca au fost alterate, în cazul transmiterii lor pe un canal de comunicatie.

SubVI-ul CRC 16 executa verificarea CRC pe 16 biti a pachetului de date care urmeaza sa fie trimis.prin portul serial. Valoarea CRC-ului este constituita din 2 octeti, care contin o valoare binara de 16 biti. CRC-ul este adaugat în continuarea mesajului de 100 octetig. Programul receptor recalculeaza CRC-ul în timpul primirii datelor, si compara valoarea calculata cu valoarea primita de la emitator. Daca cele doua nu sunt egale, va rezulta o eroare.

Verificarea CRC porneste prin generarea unui registru de 16 biti cu toate valorile presetate 1. Urmeaza un proces de aplicare succesiva a octetilor de 8 biti din componenta mesajului primit la continutul acestui registru. Doar cei opt biti de date din fiecare caracter sunt folositi pentru generarea CRC-ului. Bitii de start, de stop si de paritate nu sunt folositi. De obicei sunt filtrati de driverul portului serial.

Pentru generarea CRC-ului, fiecare valoare de 8 biti este comparata (functia OR) cu valoarea registrului. Rezultatul este mutat in directia bitului cel mai putin semnificativ (LSB) iar 0 este introdus în pozitia bitului cel mai semnificativ (MSB). LSB-ul este extras si examinat.

Procesul este repetat pâna când opt mutari au fost executate. Dupa ultima (a opta) repetare, urmatorul octet de opt biti este comparat cu valoarea existenta a registrului, si procesul repetat de inca opt ori ca mai sus. Continutul final al registrului, sub forma hexazecimala, dupa ce tot octetii mesajului au fost aplicati, reprezinta valoarea CRC-ului.

De exemplu:

Valoare CRC initiala:

Octet de procesat:

Valoare CRC rezultata:

Asteptare raspuns de la receptor

 

Se face o noua citire a buffer-ului portului serial, asteptându-se raspuns de la receptor. Exista trei posibilitati:

a)      Daca datele au ajuns integre, programul trimite urmatorul pachet de 107 octeti;

b)     Daca datele au ajuns corupte, programul primeste cerere de retrimitere a aceluiasi pachet;

c)     Daca a fost ultimul pachet din componenta fisierului, se opreste executia.


Document Info


Accesari: 1869
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )