LUCRAREA NR. 4
TABLOURI ÎN LabVIEW
1. Obiectivele lucrarii
a) Însusirea modului de operare cu tablouri în mediul de programare grafic LabVIEW.
b) Cunoasterea principalelor functii utilizate în lucrul cu tablouri.
2. Aparatura si suporturile utilizate:
a) PC în configuratia unitate centrala,monitor, tastatura;
b) Precizarile din prezentul îndrumar;
c) Manual de prezentare a mediului de programare grafic LabVIEW
3.Breviar
3.1. Definirea tipului tablou
Spre deosebire de elementele scalare, care reprezentau o singura valoare, de un anumit tip (numeric, boolean, alfanumeric), elementele vectoriale (Array) pot contine, într-o maniera ordonata, mai multe valori de ace 525b111f lasi tip.
Pentru a fi dispus în panou, un element de tipul tablou se selecteaza din meniul Array & Cluster al paletei de controale.
Atunci când un element de tipul tablou se dispune pe panou, tipul datelor pe care acesta le va contine nu este înca definit. Se spune ca elementul de tip tablou este vid.
Figura 1. Tipul tablou în LabVIEW.
Terminalul din diagrama al elementului
este de culoare neagra. Sageata Run este
Pentru a defini tipul de date, în elementul de tip tablou trebuie introdus un element de control sau indicator scalar de tipul dorit (numeric, boolean sau alfanumeric).
Elementul scalar ce urmeaza a fi introdus în tablou poate exista deja pe panou sau poate fi selectat la momentul respectiv din paleta de elemente.
Când elementul scalar este adus deasupra elementului tablou, înainte de a se elibera butonul stâng al mouse-ului, conturul elementului tablou este marcat cu o linie întrerupta (tabloul sesizeaza ca i se va introduce un element scalar).
Figura 2. Introducerea unui element scalar în elementul tablou.
La eliberarea butonului mouse-ului, elementul scalar apare în interiorul elementului tablou, acesta din urma modificându-si corespunzator dimensiunile. În diagrama, terminalul elementului scalar dispare, iar terminalul elementului tablou capata culoarea, textul si grosimea de chenar corespunzatoare datelor pe care le va manipula.
Figura 3.Elementul tablou dupa introducerea unui element scalar.
3.2. Definirea valorilor si a numarului de valori vizibile
Atunci când este dispus în panou si îi este definit tipul de date, un element de tip tablou afiseaza la un moment dat o singura valoare.
Pentru a modifica numarul de valori afisate, se pozitioneaza întâi cursorul mouse-ului pe un colt al elementului tablou, astfel încât pe colturile acestuia sa apara patru simboluri "echer" .
La aparitia celor patru simboluri "echer", se apasa butonul stâng al mouse-ului si, tinându-l apasat, se deplaseaza mouse-ul astfel încât sa se redimensioneze conturul elementului tablou.
Pe masura ce mouse-ul este deplasat, conturul redimensionat al elementului tablou este marcat cu linie întrerupta.
Atunci când conturul a fost redimensionat
astfel încât sa poata cuprinde numarul dorit de valori, se
elibereaza butonul mouse-ului si elementul tablou este afisat
redimensionat.
Redimensionarea conturului se poate efectua atât pe verticala cât si
pe orizontala.
În partea sa stanga, un element de tip tablou dispune de un index. Indexul unui element tablou indica numarul de ordine al valorii afisate în pozitia superioara (indicele valorii). Indicele primei valori dintr-un tablou este 0.
Imediat dupa ce i se defineste tipul de date, un tablou nu contine nici o valoare (este vid). Faptul este semnalizat prin afisarea "opaca a elementelor pe care tabloul le contine. Atunci când se defineste o valoare din tablou, aceasta este afisata normal.
Daca, la un moment dat, utilizatorul defineste o valoare si exista valori cu indici mai mici înca nedefinite, acestea vor capata automat o valoare implicita, în functie de tip.
Figura 4. Modificarea numarului de valori afisate de elementul tablou.
Când se modifica valoarea indexului unui tablou, valorile acestuia se deplaseaza astfel încât în pozitia superioara sa fie afisata valoarea cu indexul selectat.
Daca, în urma acestei deplasari, unele valori nu mai sunt vizibile, faptul nu echivaleaza cu stergerea acestora: valorile continua sa existe în cadrul tabloului si pot fi vizualizate prin modificarea corespunzatoare a indexului.
Figura 5. Introducerea si vizualizarea valorilor din elementul tablou.
3.3. Definirea numarului de dimensiuni
În mod implicit, atunci când este creat, un tablou are o singura dimensiune, putând fi descris drept o matrice coloana.
Numarul de dimensiuni ale unui tablou poate fi modificat prin dimensionarea indexului acestuia: se pozitioneaza cursorul mouse-ului pe un colt al indexului, astfel încât pe colturile acestuia sa apara patru simboluri "echer", se apasa butonul mouse-ului si se deplaseaza mouse-ul tinând butonul apasat, pâna când indexul capata dimensiunea dorita.
Daca un tablou are mai mult de o dimensiune, se poate stabili afisarea mai multor linii si mai multor coloane.
Figura 6. Marirea numarului de dimensiuni ale elementului tablou.
Terminalul unui element tablou se caracterizeaza prin prezenta unor paranteze drepte a caror grosime este proportionala cu numarul de dimensiuni.
Atunci când se realizeaza legaturi în diagrama, conexiunile pe care circula un tablou cu o dimensiune sunt mai groase decât cele pe care circula valori scalare.
Pentru tablourile cu doua sau mai multe dimensiuni, conexiunile sunt reprezentate cu linie dubla. Spatiul intermediar al liniei duble este cu atât mai mare cu cât numarul de dimensiuni ale tabloului este mai mare.
Figura 7. Reprezentarea conexiunilor pentru elementul tablou.
Functii utilizate pentru lucrul cu tablouri
Aceste functii se gasesc în paleta de functii ale diagramei ca în figura 8.
Figura 8. Functii utilizate pentru lucrul cu tablouri în LabVIEW.
În continuare se vor prezenta principalele functii de lucru cu tablouri.
Functia Array Size determina numarul de valori dintr-un element de tip tablou cu una sau
mai multe dimensiuni.
Daca tabloul de intrare are o singura dimensiune, iesirea functiei va fi o valoare scalara. Daca tabloul de intrare are N dimensiuni (N>1), iesirea functiei este un tablou cu o dimensiune, continând N elemente.
De exemplu, daca la intrarea functiei se conecteaza o matrice, iesirea functiei va fi un tablou cu doua elemente, primul reprezentând numarul de linii si al doilea numarul de coloane ale intrarii.
Functia Index Array extrage una sau mai multe valori ai caror indici sunt specificati.
ATENŢIE: prima valoare dintr-un sir are indexul !
Atunci când este dispusa în diagrama, functia Index Array are un singur terminal pentru
specificarea indicelui. Simbolul functiei poate fi dimensionat astfel încât sa dispuna de mai multe astfel de terminale.
Daca la terminalele pentru indici nu se conecteaza valori, functia va lua în considerare valori implicite, începând cu 0.
Functia Replace Array Subset înlocuieste valori dintr-un tablou, începând de la un indice specificat.
Simbolul functiei poate fi dimensionat pentru a permite înlocuiri simultane în mai multe portiuni.
Atunci când la intrarea functiei se conecteaza un tablou cu mai multe dimensiuni, terminalele pentru indici capata intrari pentru linii si coloane ce pot fi activate sau dezactivate independent.
- Functia Insert Into Array insereaza valori într-un tablou, începând de la un indice specificat. Numarul de valori din Array creste.
Functia poate mari numarul de valori din tablou doar de-a lungul unei singure dimensiuni, astfel încât, daca inserarea urmeaza a se efectua într-un tablou cu N dimensiuni, se vor putea insera în acesta doar elemente cu N sau cu N-1 dimensiuni (de exemplu, nu se poate insera un element scalar într-o matrice).
Functia Delete From Array sterge dintr-un tablou o portiune de marime specificata (intrarea length, cu valoare implicita 1), începând de la un indice specificat (implicit ultimul element).
stergerea se efectueaza doar de-a lungul unei singure dimensiuni: se sterg elemente dintr-un tablou cu o dimensiune, linii sau coloane dintr-o matrice etc (nu se poate sterge doar o valoare dintr-o matrice).
Functia dispune atât de o iesire pentru tabloul din care s-a realizat stergerea, cât si de o iesire pentru portiunea ce a fost stearsa.
Numarul de dimensiuni ale celei de a doua iesiri variaza: este egal cu numarul de dimensiuni ale tabloului de intrare daca a fost conectata o valoare la intrarea length si este cu o unitate mai mic decât numarul respectiv daca intrarea length a fost lasata neconectata.
- Atunci când este dispusa în diagrama, functia are o singura intrare dimension size, generând astfel un tablou cu o singura dimensiune. Daca se doreste generarea unui tablou cu mai multe dimensiuni, simbolul functiei poate fi dimensionat.
Daca la una dintre intrarile dimension size se conecteaza valoarea , sau daca toate intrarile respective sunt neconectate, functia va genera un tablou vid.
- Functia Build Array concateneaza la un tablou una sau mai multe elemente cu un numar de dimensiuni imediat inferior (adauga valori scalare la un tablou cu o dimensiune, adauga linii la matrici s.a.m.d.).
Atunci când este dispusa în diagrama, functia are o singura intrare. Numarul dorit de intrari se obtine prin dimensionarea simbolului functiei.
Functia Array Subset extrage o portiune dintr-un tablou.
Pentru fiecare dimensiune a tabloului de intrare, functia dispune de o intrare index (pozitia din care va începe extractia) si de o intrare length (numarul de valori extrase de-a lungul dimensiunii respective).
- Functia Rotate 1D Array efectueaza n permutari circulare ale valorilor dintr-un tablou cu o singura dimensiune.
Sensul permutarilor este determinat de semnul valorii n:
a. daca n>0, la fiecare
permutare ultima valoare din tablou trece pe prima pozitie;
b. daca n<0, la fiecare
permutare prima valoare din tablou trece în ultima pozitie.
- Functia Reverse 1D Array inverseaza ordinea valorilor dintr-un tablou unidimensional
- Functia Search 1D Array cauta o valoare într-un tablou unidimensional, începând de la un indice de start specificat, si returneaza indicele elementului gasit. Daca elementul cautat nu se afla în tablou, atunci functia returneaza valoarea -1.
Functia Split 1D Array divide un tablou unidimensional în doua tablouri, locul în care se efectueaza divizarea fiind determinat de valoarea conectata la intrarea index a functiei.
Tabloul rezultat la iesirea first subarray va contine valorile ce se aflau în tabloul initial pe pozitiile , , ..., index-1.
- Functia Sort 1D Array sorteaza valorile dintr-un tablou unidimensional: crescator daca valorile sunt numerice sau în ordine alfabetica daca valorile sunt de tip alfanumeric (String).
- Functia Array Max & Min determina valorile maxima si minima dintr-un tablou de valori numerice, precum si indicii acestor valori extreme.
Daca tabloul de intrare are mai multe dimensiuni, indicii valorilor extreme nu vor mai fi valori scalare, ci vor fi la rândul lor tablouri cu un numar de valori egal cu numarul de dimensiuni ale tabloului de intrare.
- Functia Transpose 2D Array transpune o matrice.
- Functia Interpolate 1D Array realizeaza o interpolare pe valorile tabloului de la intrarea array of numbers or points.
Daca, de exemplu, tabloul de intrare contine valorile 1, , si , iar la intrarea fractional index or x este conectata valoarea , functia va genera rezultatul (dupa valoarea cu indicele 1, la 70 % din distanta dintre aceasta si urmatoarea).
- Functia Threshold 1D Array realizeaza o operatie inversa interpolarii: dispunând de un tablou de valori numerice si de un prag (intrarea threshold y), începând de la un indice specificat, functia cauta doua valori consecutive din tablou astfel încât prima sa fie mai mica decât pragul si a doua mai mare sau egala cu acesta.
- Functia Interleave 1D Array construieste un tablou cu o singura dimensiune prin întreteserea mai multor tablouri având de asemenea o singura dimensiune.
- Functia Decimate 1D Array împarte un tablou initial într-un numar de tablouri egal cu numarul de iesiri.
Initial, functia are doua iesiri, dar numarul acestora poate fi modificat prin dimensionarea simbolului functiei.
Valorile din tabloul initial sunt
repartizate alternativ tablourilor de iesire.
De exemplu, daca functia are trei iesiri, valoarea cu indicele 0
este repartizata la prima iesire, cea cu indicele 1 la a doua, cea cu
indicele 2 la a treia, cea cu indicele 3 din nou la prima iesire, cea cu
indicele 4 la a doua s.a.m.d.
- Functia Reshape Array modifica numarul de dimensiuni ale unui element de tip tablou. De exemplu, un tablou unidimensional cu sase valori poate fi transformat într-o matrice cu trei linii si doua coloane, sau invers.
Numarul de dimensiuni ale rezultatului va fi egal cu numarul de terminale dimension size ale simbolului functiei.
4. Mod de lucru
a) Se alimenteaza sistemul cu tensiune;
b) Se lanseaza mediul LabVIEW;
c) Se implementeaza programele P1 si P2 descrise în prezenta lucrare.
Programul P1 are ca scop realizarea sumei elementelor de pe diagonala principala a unei matrici patratice.
Pe panou se vor pune urmatoarele elemente evidentiate în figura 9 :
un tablou n care se va introduce un obiect Num Ctrl, urmând ca apoi sa se creeze o
matrice patratica;
un
indicator numeric (
principala a matricei.
Figura 9. Elementele de pe panou corespunzatoare programului P1.
În diagrama se vor introduce urmatoarele functii evidentiate în figura 10
functia
Array Size, functia Index Array si
matricei patratice;
un structura repetitiva FOR pentru realizarea iteratiilor în care se calculeaza suma
elementelor de pe diagonala principala. În interiorul acestui ciclu se va introduce o functie Index Array pentru extragerea câte unui element de pe diagonala principala si o functie Add pentru realizarea sumei elementului curent cu elementul anterior extras de pe diagonala principala. Pentru a putea realiza suma elementului curent cu elementul anterior extras din matrice, ciclul FOR va fi prevazut cu un set de registre de deplasare, iar primul element extras se va aduna cu constanta 0.
Figura 10. Diagrama programului P1.
Pentru exemplul de figura 11 s-a considerat matricea de dimensiuni 3 x 3.
Figura 11. Rezultatul executiei programului P1.
Programul P2 realizeaza înmultirea unei matrici A de dimensiuni n x m cu o matrice B de dimensiuni m x p.
Pe panou se vor pune urmatoarele elemente evidentiate în figura 12
- doua tablouri în care se vor introduce câte un obiect Num Ctrl, urmând ca apoi sa se creeze matricile de dimensiuni n x m, respective m x p;
- un tablou tablou n care se va introduce un obiect Num Ctrl, urmând ca apoi sa se creeze o
matrice C de dimensiuni n x p. Aceasta matrice va reprezenta rezultatul înmultirii.
Figura 12. Elementele de pe panou corespunzatoare programului P2.
În diagrama se vor introduce urmatoarele functii evidentiate în figura 13
functia
Array Size, functia Index Array si
linii al matricei A (numarul n);
functia
Array Size, functia Index Array si
coloane al matricei A (numarul m);
functia
Array Size, functia Index Array si
coloane al matricei B (numarul p);
un ciclu FOR care contine un alt ciclu FOR în care se afla un al treilea ciclu FOR.
Aceste cicluri se utilizeaza pentru realizarea calculului . Pentru realizarea acestui calcul se vor utiliza în interiorul acestor cicluri doua functii Index Array, o functie Add pentru realizarea sumei, o functie Multiply pentru realizarea înmultirii si o functie Replace Array Subset pentru înlocuirea unui element din tabloul de iesire cu valoarea calculata a acestuia. De asemenea, pentru a se putea realiza o operatie cu o valoare calculata într-o etapa anterioara se vor folosi trei seturi de registre de deplasare.
Pentru a se putea initializa tabloul de iesire cu o matrice n x p de zerouri se va folosi
functia Initialize Array.
Figura 13. Diagrama programului P2.
Pentru exemplul de figura 14 s-au considerat matricile A de dimensiuni 2 x 3, respectiv B de dimensiuni 3 x 4.
Figura 14. Rezultatul executiei programului P2.
5. Exercitii
Sa se realizeze un program în LabVIEW care sa calculeze suma elementelor de pe
diagonala secundara a unei matrici patratice.
Sa se realizeze un program în LabVIEW care sa calculeze inversa unei matrici.
Sa se realizeze un program în LabVIEW care sa returneze valoarea maxima si minima
de pe fiecare linie, respectiv coloana a unei matrici date.
|