Utilizarea portului serial
Portul serial a fost utilizat pentru a realiza prima legatura intre doua calculatoare. Portul serial este des
utilizat si in prezent pentru a conecta diverse dispozitive la calculator. Chiar daca majoritatea calculatoarelor nu mai dispun fizic de un port serial,
se utilizeaza des porturi seriale virtuale, realizate prin intermediul portului USB (Universal Serial Bus). Cu alte cuvinte exista o serie de dispozitive
conectate la calculator prin intermediul USB insa din punct de vedere logic ele sunt conectate printr-un port serial virtual. Pentru programator, aceasta
conectare este identica cu o conectare prin intermediul unui port serial fizic. Conectarea prin intermediul portului USB fiind deci "transparenta" din
punctul de vedere al scrierii aplicatiilor, acestea fiind scrise la fel cu aplicatiile pentru portul serial.
Configurarea si initializarea portului serial
Pentru a putea fi utilizat, portul serial trebuie configurat, cu alte cuvinte trebuiesc stabilite valorile pentru diversi
parametri, cum ar fi: viteza de lucru, lungimea cuvantului, paritate etc.
Aplicatia: serial_00 permite dialogul cu un sistem de achizitie
conectat prin intermediul portului USB. Sistemul dispune de 5 intrari analogice, 8 iesiri digitale si 4 intrari digitale.
Comanda pentru citirea unei intrari analogice este:Ai unde i=0..4, comanda pentru inscrierea celor 9 iesiri digitale este
O,n unde n este numarul in zecimal care va fi afisat in binar pe cele 8 iesiri digitale si in sfarsit comanda D1 pentru citirea unui numar zecimal care
codifica cele 4 intrari digitale.
Pentru a utiliza portul serial, s-a utilizat functia "Visa configure port serial" plasata in grupul:
Functions => InstrumentI/O => Serial => VISA configure Port Serial
Similar, pentru a utiliza scrie, respectiv citidre la serial, s-au utilizat functiile:
"Visa write port serial" respectiv "Visa read port serial" plasate in grupul: Functions => InstrumentI/O => Serial => VISA
Utilizarea portului serial
Sa presupunem ca vrem sa afisam continuu intrarea analogica A0. Realizam astfel aplicatia :
serial_01 in care se afiseaza grafic intrarea analogica A0.
In diagrama blog se va folosi constanta de tip sir de caractere A0
Raspunsul sistemului de achizitie la comanda A0 este un sir de forma: A0,val. Va trebui sa separam subsirul val si
sa-l convertim intr-o valoare numerica. Pentru aceasta, s-a folosit functia "Decimal String to Number" plasata in grupul
Function => String => String Number Conversion => Decimal String to Number in care s-a setat Offset-ul la 3 adica opzitia de unde incepe sirul "val"
Dupa cum se observa, diagramele bloc devin tot mai complicate, asa ca este necesara realizarea unor "SubVI-uri"
Urmatoarea aplicatie serial_02 utilizeaza SubVI-ul
init_ser . Diagrama bloc devenind:
Putem merge mai departe realizand urmatoarea aplicatie serial_03
car include SubVI-ul wr_rd_ser pentru scrierea si citirea unui sir la portul serial.
Diagrama bloc devenind:
Chiar si inchiderea portului serial poate fi incapsulata in SubVI-ul close_rd_ser
si obtinem aplicatia serial_04 a carei diagrama bloc este:
Citirea intrarilor analogice
Sa presupunem ca sistemul de achizitie dispune de comanda AA care permite citirea tuturor intrarilor analogice. Raspunsul
sistemului la comanda AA fiind AA,val0,val1,val2,val3,val4.
Pentru a interpreta fiecare valoare trebuie sa utilizam o serie de functii pe sirurile de caractere.
Urmatoaea aplicatie serial_05 interpreteaza sirul transmis si
separa fiecare valoare transmisa.
Diagrama bloc va utiliza functia:"Search/Split String" pentru a separa sirurile necesare.
In aplicatia serial_06 , diagrama bloc se va simplifica foarte mult daca se va utiliza functia:"Spreadsheet String To Array" pentru a separa sirurile necesare.
Citirea pachetelor de date
In aplicatiile anterioare am afisat date in timp real. Datele au fost afisate pe masura sosirii
acestora. Aceasta metoda este utila atunci cand datele achizitionate provin de la un semnal cu evolutie lenta in timp. Pentru
semnale cu evolutie rapida, solutia este achizitionarea unui numar mare de date si apoi transferarea intregului pachet.
Sa presupunem ca sistemul de achizitie dispune de comanzile AI1, AI2, AI3, AI4, D1I care permit citirea unui pachet de date.
Raspunsul sistemului la comanda AI1 se compune din 200 de valori achizitionate din semnalul A0 urmat de 200 de valori achizitionate din semnalul A1. Valorile
sunt separate prin caracterul ",".
Pentru obtine datele referitoare celor doua semnale vom folosi in continuare o serie de functii pe sirurile de caractere.
Citirea pachetelor de date analogice
Urmatoarea aplicatie serial_20

interpreteaza sirul transmis si afiseaza grafic evolutia in timp a doua semnale generate de modulul:
Diagrama bloc va utiliza functia:"Spreadsheet String To Array" pentru a transforma sirul de date primit intr-un
vector de 400 elemente. Folosind functia "Split 1D Array", din vectorul initial se obtin doi vectori a cate 200 de elemente, vectori ce corespund
semnalului A0, respectiv A1.
Cei doi vectori sunt prelucrati( pentru a realiza translatie respectiv amplificare) apoi mixati pentru a putea fi afisate
cele doua semnale A0, respectiv A1 pe un singur control de tip "Waveform Graph".
Citirea pachetelor de date digitale
Urmatoarea aplicatie serial_30 :
interpreteaza sirul transmis si afiseaza grafic evolutia in timp a patru semnale digitale, generate de modulul:
- Pentru citirea intrarilor digitale, vom folosi comanda "D1I".
- Raspunsul sistemului la comanda D1I se compune din 200 de valori achizitionate din semnalul B0,B1,B2,B3.
- Valorile sunt separate prin caracterul ",".
- Fiecare valoare reprezinta : B0+2*B1+4*B2+8*B3
Diagrama logica: