Sunteți pe pagina 1din 22

Aplicaia II.

NOIUNI I PROCEDURI AVANSATE PENTRU


PROGRAMARE N LABVIEW; REALIZAREA DE
APLICAII COMPLEXE

Dac n aplicaiile precedente s-a lucrat cu date sub form de scalari, n cadrul
acestei lucrri se vor prezenta unele noiuni i proceduri privind modaliti de grupare
a datelor sub form de iruri i tabele. De asemenea, se vor face referiri la principalele
structuri de programare care introduc faciliti importante n ceea ce privete fluxul de
date n diagrama bloc. Utilizarea acestor noiuni i proceduri, pentru stocare, transfer
i prelucrare de date, va fi ilustrat prin exemple din domeniul calculelor de o
complexitate mai mare, cum sunt cele statistice.

3.1 Gruparea datelor n LabVIEW


n raport de complexitate i de necesitile de prelucrare, n mediul LabVIEW
se pot aplica trei modaliti de grupare a datelor, denumite n limba englez String,
Array i Cluster. n continuare, se vor folosi denumirile n englez, ntruct, pe de o
parte traducerile n romn implic utilizarea mai multor cuvinte, iar pe de alt parte
sunt mai uor de recunoscut titlurile din palete, meniuri sau comenzi.
String-uri
Prin String, n traducere curent ir, se nelege o succesiune de caractere
ASCII care, de regul, reprezint un text n care pot fi i caractere care nu se afieaz.
String-urile se folosesc pentru crearea de mesaje simple de text, pentru transferul
datelor numerice ctre anumite instrumente, pentru stocarea datelor pe disc, pentru
iniierea unor instruciuni etc.
Pe panoul frontal, String-urile apar sub form de tabele, de casete pentru
introducere de texte, sau de etichete. Editarea i manipularea String-urilor se face n
panoul frontal cu subpaleta String&Path din paleta Controls, procednd la fel ca
pentru controalele i indicatoarele numerice, folosind Operate Value i Edit Text din
paleta Tools. Executnd click dreapta deasupra unui control sau indicator String se
deschide un meniu care conine mai multe opiuni de afiare, descrise n tabelul
urmtor:
Opiunea din list Descrierea modului de afiare
Normal Display Afieaz caractere care pot fi tiprite cu fontul atribuit
controlului sau indicatorului
\ Codes Display Afieaz codificat cu diagonala la stnga ( \ ) toate caracterele
141 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

netipribile
Password Afieaz cte un asterisc (*) pentru fiecare caracter, inclusiv
Display spaiile
Hex Display Afieaz valoarea n ASCII a fiecrui caracter n hexa n
locul caracterului n sine

n paleta Controls se afl subpaleta List&Table, prin accesarea creia se


poate insera un tabel n panoul frontal. Fiecare locaie care se afl ntr-o linie sau ntr-
o coloan din tabel conine un string, astfel c tabelul afieaz o matrice 2D de
String-uri.
n diagrama bloc pentru editarea i operarea cu string-uri se acceseaz
diferitele opiuni care sunt afiate n subpaleta String din paleta Functions, aa dup
cum se arat in fig.3.1

Fig. 3.1 Subpaleta String din paleta Functions

Icoanele coninute n subpaleta String simbolizeaz funcii cu care se pot


executa diverse operaii asupra irurilor de caractere alfanumerice, atunci cnd o astfel
de icoan este tras n diagrama bloc. Semnificaiile acestor funcii i detalii asupra
operaiilor pe care le efectueaz se pot obine selectnd o anumit icoan i apoi
utiliznd Context Help. De exemplu, dac se selecteaz cea de a doua icoan de pe
prima linie a subpaletei, aceasta corespunde funciei Concatenate Strings. Accesnd
Context Help, n fereastra acestuia apare imaginea din fig.3.2 i explicaii privind
operaiile pe care le realizeaz aceast
funcie.
Funcia Concatenate Strings
posed un numr de intrri ce poate fi
Fig.3.2. Funcia Concatenate Strings modificat de ctre utilizator prin
INSTRUMENTAIE VIRTUAL 142

dimensionarea simbolului funciei. La ieirea sa, funcia genereaz o valoare


alfanumeric obinut prin concatenarea textelor de la intrrile sale, n ordinea de sus
n jos.
Array-uri
Spre deosebire de elementele scalare, care reprezint o singur valoare, de un
anumit tip, elementele vectoriale/matriceale pot cuprinde, ntr-o manier ordonat, mai
multe valori de acelai tip i se reprezint sub forma unui tablou (tabel), denumit n
limba englez Array. Un Array poate avea deci una sau mai multe dimensiuni i pe
fiecare dimensiune cte un numr de pn la 2 31 -1 elemente (limita permis de
memorie). Elementele componente ale unui array pot fi numerice, booleene, string-
uri, valori ale unei forme de und (grafic) etc, cu restricia de a fi toate de acelai tip.
Array-urile sunt utile n cazul operrii cu colecii de date similare i cnd se
efectueaz calcule repetitive.
Pentru a fi dispus n panou, un Array se selecteaz din meniul Array &
Cluster al paletei Controls. Atunci cnd Array-ul se dispune pe panou, tipul datelor
pe care acesta le va conine nu este nc definit. Se spune c elementul de tip Array
este vid. Terminalul su din diagram este de culoare neagr. Sgeata Run este spart,
semn c programul este incomplet i nu poate fi rulat.
Pentru a defini tipul de date, n elementul de tip Array trebuie introdus un
control sau indicator scalar de tipul dorit (numeric, boolean sau alfanumeric).
Elementul scalar ce urmeaz a fi introdus n
Array poate exista deja pe panou sau poate fi
selectat la momentul respectiv din paleta
Controls.
Cnd scalarul este adus deasupra
elementului Array, nainte de a se elibera
butonul stng al mouse-ului, conturul Array-
ului este marcat cu o linie ntrerupt ca in
Fig.3.3. Crearea unui tablou de scalari fig.3.3. Array-ul sesizeaz c i se va
introduce un element scalar.
La eliberarea butonului mouse-ului, scalarul apare n interiorul elementului
Array, acesta din urm modificndu-i corespunztor dimensiunile. n diagram
terminalul scalarului dispare, iar terminalul Array-ului capt culoarea, textul i
grosimea de chenar corespunztoare datelor pe care le va manipula.
n partea sa stng, un element de tip Array dispune de un index care indic
numrul de ordine al valorii afiate n poziia superioar (indicele valorii). Indicele
primei valori dintr-un Array este 0.
Imediat dup ce i se definete tipul de date, un Array nu conine nici o
valoare (este vid). Faptul este semnalizat prin afiarea "opac" a elementelor pe care
Array-ul le conine.
n mod implicit, atunci cnd este creat, un Array are o singur dimensiune,
putnd fi descris drept o matrice coloan. Numrul de dimensiuni ale unui Array
poate fi modificat prin dimensionarea indexului acestuia. Se poziioneaz cursorul
143 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

mouse-ului pe un col al indexului, astfel nct


pe colurile acestuia s apar patru simboluri
"echer", se apas butonul mouse-ului i se
deplaseaz mouse-ul innd butonul apsat,
pn cnd indexul capat dimensiunea dorit.
Dac un Array are mai mult de o dimensiune,
se poate stabili afiarea mai multor linii i mai
multor coloane, ca n fig.3.4.
n diagrama bloc, terminalul unui
element Array se caracterizeaz prin prezena
unor paranteze drepte, a cror grosime este
proporional cu numrul de dimensiuni.
Atunci cnd se realizeaz legturi n
diagram, conexiunile pe care se transmite un Fig.3.4. Redimensionarea Array-ului
Array cu o dimensiune sunt mai groase dect
cele destinate valorilor scalare. Pentru Array-
urile cu dou sau mai multe dimensiuni,
conexiunile sunt reprezentate cu linie dubl.
Spaiul intermediar al liniei duble este cu att
mai mare cu ct numrul de dimensiuni ale
Array-ului este mai mare, dup cum se
exemplific n fig.3.5.
Pentru a obine n mod dinamic Fig.3.5. Terminalele Array-urilor de
(programatic) n diagrama bloc structuri de diferite dimensiuni

Fig.3.6.Subpaleta Array din paleta Functions


INSTRUMENTAIE VIRTUAL 144

valori de tipul Array, pot fi utilizate o serie de funcii specifice. Aceste funcii, similar
ca pentru String-uri, se gsesc n subpaleta Array din componena paletei Functions.
n fig.3.6 este redat subpaleta Array n care a fost selectat funcia Build Array.
Aceast funcie permite introducerea n diagrama bloc a unui Array ce permite
concatenarea mai multor array-uri, sau adaug elemente la un array. Procedura de
selectare i de vizualizare a funciilor simbolizate de icoanele din subpaleta Array este
aceeai cu cea descris pentru String-uri.

Cluster-e
Elementele de tip Cluster sunt structuri
de date ce pot conine mai multe valori, de tipuri
i dimensiuni diferite. Un Cluster poate conine,
de exemplu, o valoare numeric, dou booleene
i una alfanumeric (text), sau poate conine o
combinaie de valori scalare, vectoriale i chiar
alte elemente de tip Cluster (de exemplu, o
valoare numeric, un Array de valori booleene
Fig.3.7.Definirea unui Cluster (aa
i un Cluster format din trei valori alfanumerice
cum se poate observa, un cluster
poate fi vzut ca o baz de date i una boolean).
simpl) Pentru a fi introdus n panoul unei
aplicaii, un element de tip Cluster se selecteaz
din meniul Array & Cluster al paletei de funcii. Imediat dup ce este dispus pe
panou, un Cluster este o structur vid (un chenar), nu conine nici o valoare (fig.3.7).

Fig.3.8. Subpaleta Cluster a paletei Functions


145 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

Definirea structurii de valori dintr-un Cluster se realizeaz prin introducerea n


chenarul su a unor elemente de tipurile dorite. Similar modului de definire a tipului
elementelor Array, atunci cnd un element este poziionat deasupra chenarului unui
Cluster, nainte ca utilizatorul s ridice butonul stng al mouse-ului, chenarul
elementului respectiv este reprezentat cu linie ntrerupt.
Funciile specifice elementelor de tipul Cluster sunt grupate n meniul cu
acelai nume al paletei de Functions, reprezentat n fig.3.8
n cazul reprezentat pe fig.3.8 a fost selectat icoana corespunztoare funciei
denumit Unbundle care permite separarea elementelor componente ale unui Cluster.
Pentru vizualizarea funciilor i detaliilor corespunztoare diverselor icoane incluse n
aceast subpalet se procedeaz la fel ca n cazurile anterioare, descrise pentru String-
uri i Array-uri.

3.2. Structuri de programare n LabVIEW


Structurile de programare sunt componente ale diagramei ale cror simboluri
se gsesc n subpaleta Structures a paletei de funcii avnd formele din fig.3.9.
Fiecare structur are un contur distinct n interiorul cruia se poate include o parte din
diagrama bloc (este denumit subdiagram) i care funcioneaz conform cu regulile
respectivei structuri. n diagram, o structur de programare urmeaz s conin o
serie de terminale de elemente, simboluri de funcii i valori constante ce vor forma un
flux de date n interiorul structurii. Dac, n momentul n care structura este aleas din
subpaleta Structures, o parte din elementele pe care urmeaz s le conin se afl deja
dispuse n diagram, chenarul structurii poate fi trasat n jurul componentelor
respective. Dup selectarea din subpalet, se apas butonul stng al mouse-ului n unul
din colurile viitorului chenar i se deplaseaz mouse-ul innd butonul apsat. Pe
msur ce mouse-ul este deplasat, se traseaz automat un contur cu linie ntrerupt,
contur ce va fi nlocuit de ctre structura selectat n momentul eliberrii butonului
mouse-ului.
Dup dispunerea n diagram, conturul structurii poate fi deplasat sau
dimensionat. Atunci cnd o structur este deplasat, toate elementele din interiorul su
se deplaseaz odat cu ea. Elemente din afara structurii pot fi mutate n interiorul

Fig.3.9. Simbolurile structurilor i ncadrarea elementelor


INSTRUMENTAIE VIRTUAL 146

acesteia, iar elemente din interior pot fi mutate n afara structurii. Dac, prin
dimensionare sau deplasare, o structur ajunge s se suprapun cu alte elemente din
diagram, acestea nu vor fi incluse n structur.
n cele ce urmeaz se vor prezenta detalii cu privire la structurile repetitive (de
tip bucl) For Loop i While Loop, la structura de tip cauzal Case i la structura de
tip secvenial Sequence.

Bucla For
O bucl For este o structur repetitiv care
execut de un numr fixat de ori poriunea de diagram
pe care o conine (subdiagram). O execuie a poriunii
interne de diagram poart numele de iteraie. O bucl
For, redat n fig.3.10, dispune n colul stnga-sus de un
terminal (notat cu N), la care trebuie legat o valoare care
Fig.3.10. Bucla For
s specifice numrul de iteraii pe care bucla urmeaz s
le execute. n interiorul buclei se afl un terminal numrtor (notat cu i), care
genereaz o valoare natural reprezentnd indicele iteratiei curente (aflate n curs de
execuie). Indicii iteraiilor sunt numerotai ncepnd cu valoarea 0, astfel nct ultima
iteraie executat de ctre bucla For va avea indicele N-1.

Bucla While
Bucla While este o structur repetitiv cu condiie de terminare, adic execut
poriunea de diagram pe care o conine pn cnd la terminalul de continuare (aflat n
colul dreapta-jos) apare o anumit valoare boolean. Atunci cnd o bucl While este
dispus n diagram, terminalul su de continuare se afl n starea implicit Continue
If True. Bucla va continua s execute iteraii succesive att timp ct la terminalul su
de continuare ajunge o valoare logic True. Dac la terminalul de continuare ajunge o
valoare logic False, bucla While nu mai trece la urmtoarea iteraie ci i ncheie
execuia. Starea implicit a terminalului de continuare poate fi modificat. Terminalul
poate fi trecut n starea Stop If True, fie cu unealta de operare, fie apsnd butonul
drept al mouse-ului i selectnd starea din meniul propriu. n starea Stop If True
bucla While i va ncheia execuia atunci cnd la terminalul de continuare ajunge
valoarea logic True. n colul stnga-jos, bucla While dispune de un terminal

Fig.3.11. Bucla While


147 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

numarator (notat cu i), care genereaz o valoare natural reprezentnd indicele


iteratiei curente (aflate n curs de execuie). Indicii iteraiilor sunt numerotai
ncepnd cu valoarea 0. Caracteristicile buclei While se pot observa n fig.3.11.
Structurile repetitive pot utiliza pentru
transferul unor valori ntre dou sau mai multe
iteraii successive registri de transfer. Pentru a
aduga un registru de transfer unei structuri
repetitive (bucla For sau While), se selecteaz
opiunea Add Shift Register din meniul propriu al
structurii. Un registru de transfer conine dou
terminale (stng i drept) dispuse pe conturul
structurii ca n fig.3.12. O valoare conectat la
terminalul drept al registrului va "apare" n
Fig.3.12. Registru de deplasare terminalul stng la iteraia urmtoare.
dispus pe conturul buclei
O structur repetitiv poate conine mai
muli registri de transfer, fiecare cu una sau mai multe componente ale terminalului
stng i fiecare transfernd ntre iteraii valori de diverse tipuri.

Structura Case
Atunci cnd este dispus n diagram, o structur Case, redat n fig.3.13,
conine dou ferestre (True i False), fiecare dintre acestea cu propriul flux de date.
Pe conturul structurii se afl dispus un terminal
selector (de culoare verde, coninnd semnul
ntrebrii). Structura Case va executa doar una din
cele dou ferestre, n funcie de valoarea boolean
(True sau False) conectat la terminalul su
selector.
Fig.3.13. Structura Case Dac la terminalul selector al unei
structuri Case, n locul unei valori booleene se
conecteaz o valoare numeric (numr ntreg sau natural), numele ferestrelor se vor
modifica automat din True i False n 0 i 1. Structura va executa fereastra al crei
nume va coincide cu valoarea numeric ce ajunge la terminalul su selector.
n aceast situaie, are sens ca structura Case s conin mai mult de dou
ferestre.
Deoarece structura Case nu va putea conine attea ferestre cte valori
numerice pot ajunge la terminalul su selector, una dintre ferestre trebuie declarat
drept fereastra implicita (Default). Fereastra implicit va fi executat atunci cnd
valorii ajunse la terminalul selector nu i corespunde nici un nume de fereastr.
Un nume de fereastr poate conine i descrierea unei mulimi de valori, de
genul 2..5, 7..9, nelegnd prin aceasta c fereastra respectiv va fi executat dac la
terminalul selector ajunge una din valorile 2, 3, 4, 5, 7, 8 sau 9. O valoare nu poate
exista n numele mai multor ferestre (ar exista o incertitudine privind fereastra ce
trebuie executat).
INSTRUMENTAIE VIRTUAL 148

Dac la terminalul selector al unei structuri Case se conecteaz o valoare


alfanumeric, atunci numele ferestrelor vor trebui s fie de tipul String (se modific
utiliznd unealta de editare texte). i n aceast situaie trebuie s existe o fereastr
implicit. Se pot, de asemenea, defini mulimi de valori (de genul "A".."F"), cu
condiia evitrii dublurilor.
O valoare introdus din exterior ntr-o structur Case este accesibil n orice
fereastr a acesteia. Dac dintr-o fereastr a unei structuri Case se scoate o valoare n
exterior, pe conturul structurii apare un terminal de iesire de culoare alb, semn c
diagrama conine o eroare. Atunci cnd o structur Case are pe contur un terminal de
ieire, la acesta trebuie definite legturi din toate ferestrele structurii. n caz contrar,
se spune c ieirea din structur nu este complet definit. Dac ieirea este complet
definit, terminalul de ieire se umple cu culoarea reprezentnd tipul de date conectate
(pentru a fi corect definit, la o ieire trebuie s ajung acelai tip de date din toate
ferestrele structurii. Aceste detalii sunt redate n fig.3.14.

Fig.3.14. Structuri Case cu terminale pe contur

Structura Sequence
O structur secvenial, de regul dispune de mai multe ferestre
(subdiagrame), fiecare dintre acestea cu propriul flux de date. Structura Sequence
execut n ordine ferestrele respective. De exemplu, n fig.3.15 sunt reprezentate dou
ferestre ale unei structuri Sequence. Structura va executa nti fereastra cu indicele 0,
trimindu-se valoarea de la elementul de control Slide la elementul indicator Meter,
apoi va executa fereastra 1 ce are ca efect transmiterea valorii booleene ntre cele dou
elemente.
Atunci cnd este dispus n diagram, o structur Sequence conine o singur
fereastr, aceasta fiind totodat i fereastra curent (vizibil).
Deschiznd meniul propriu al structurii i alegnd una din opiunile Add
Frame After sau Add Frame Before, se poate aduga o fereastr dup sau naintea
celei curente.

Fig.3.15. Dou ferestre ale unei structuri Sequence


149 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

Dac o structur Sequence conine mai mult de o fereastr, atunci ferestrele


primesc indici (numere de ordine) ncepnd cu 0, iar pe latura superioar a conturului
structurii apare un selector prin intermediul cruia se poate trece de la o fereastr la
alta, ca n fig.3.16.
Trecerea la o alt fereastr se poate realiza, fie prin intermediul celor dou
sgei de la capetele selectorului, fie apsnd pe sgeata din partea dreapt (ndreptat
n jos) i selectnd indicele ferestrei dorite din lista care se desfoar.
La un moment dat, este vizibil doar fluxul
din fereastra curent a unei structuri Sequence.
Se poate crea o dublur a ferestrei curente,
selectnd din meniul propriu al structurii opiunea
Duplicate Frame. Fereastra curent poate fi
tears, cu opiunea Delete This Frame. Atunci
Fig.3.16. Indexarea ferestrelor cnd o structur Sequence conine cel puin dou
structurii Sequence ferestre, ordinea acestora poate fi schimbat astfel:
se modific indicele ferestrei curente, selectnd
opiunea Make Frame, apoi noul indice. Atunci cnd se dorete transferul unei valori
ntre dou ferestre ale unei structuri Sequence, prin selectarea opiunii Add Sequence
Local se dispune pe conturul structurii o variabil local a acesteia (sub forma unui
ptrat galben). n meniul propriu exist i alte opiuni privind legturile cu fluxul de
date externe.

3.3. Calculul mediei i dispersiei - metoda I


n cadrul acestui exemplu se va efectua calculul mediei i dispersiei unei
colecii variabile de numere aleatoare. Programul se poate considera unul de test, deci
se va putea executa n modul Run Continuously.
n panoul frontal al aplicaiei se adaug un control digital care va indica
numrul de numere aleatoare generat i i se stabilete valoarea implicit 10. Tipul de
date pe care l va genera trebuie s fie ntreg, de aceea se va alege Representation >>
Unsigned Byte. Pentru a afia valorile se vor crea dou tablouri de ntregi. Din grupul
Array & Cluster se selecteaz Array i se plaseaz primul tablou n cadrul panoului.
Apoi, din subpaleta Numeric se alege un indicator digital, se dispune iniial pe panou,
i se atribuie precizia la 3 zecimale i apoi se trage n interiorul tabloului. n acest
moment s-a creat un tablou de numere ntregi. Se redimensioneaz tabloul pe
orizontal astfel nct s rezulte 10 elemente vizibile. n dreptul indexului se apas
butonul dreapta al mouse-lui i din meniul Visible Items se execut click pe Index
Display pentru a ascunde index-ul tabloului i se modific eticheta tabloului n Sir cu
N nr aleatoare. S-a setat mai sus n aa fel nct la prima rulare a programului s se
genereze 10 numere aleatoare. Dac utilizatorul selecteaz mai multe, nu se vor afia
dect 10 n tablou. Pe de alt parte, dac se alege un numr mai mic, n celulele
rmase se va afia valoarea 0 i ele vor fi colorate n gri pentru a semnala c sunt
nefolosite.
INSTRUMENTAIE VIRTUAL 150

Se selecteaz tabloul nou creat i cu Copy/Paste este creat cel de-al doilea
tablou, care se va intitula Sir ce are ultima valoare Suma. Acest tablou se
redimesioneaz pentru a conine 11 elemente, n care ultimul va fi suma celorlalte.
Pentru a marca acest aspect, folosind butonul Edit Text din paleta Tools se efectueaz
click n zona ultimului element al noului tablou i se scrie Suma. Astfel a fost creat un
tabel nou care indic faptul c n ultimul element al tabloului se gsete suma
(fig.3.17).

Fig.3.17. Panoul frontal inial al aplicaiei Calculul mediei i dispersiei metoda I

Pentru evideniere, suma se va afia i n cadrul unui indicator digital separat


de cele dou tablouri. Scopul programului este de a calcula media i dispersia celor N
numere generate aleator. Se creaz nc dou indicatoare pentru cele dou valori i se
personalizeaz pentru a arta ca n fig.3.18. Pentru aceasta se selecteaz, din spaiul
butonului de colorare din paleta Tools, butonul din fundal i se alege culoarea dorit,
de exemplu rou. Dup aceea se stabilete precizia indicatoarelor la 4 zecimale.

Fig.3.18. Activarea Boolean Text n cazul unui buton


Dup cum se poate observa n fig.3.18, a fost adugat un buton tip Push
Button din grupul Boolean, cruia i s-a ascuns eticheta i a fost redenumit
Genereaza. Trebuie menionat c, dac deasupra unui buton se gsete eticheta sa sau
caption-ul, atunci n acea zon butonul nu reacioneaz. Chiar dac se ncearc o
ordonare, n sensul s se trimit eticheta n spate cu opiunea Move to Back, nu se
rezolv nimic, pentru c butonul nu este transparent i eticheta va fi ascuns. Pentru ca
151 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

totui s apar text deasupra butonului i acesta s reacioneze chiar dac se face click
n zona textului, se va activa din Visible Items opiunea Boolean Text i se va
redenumi Genereaza ca n fig.3.18. n acest mod, butonul va reciona indiferent n ce
zon a sa a primit un click. Scopul acestui buton este de a produce o iteraie atunci
cnd este apsat. Pentru aceasta trebuie s i se modifice modul de funcionare. n mod
implicit, un buton funcioneaz ca un switch de tip boolean: cnd nu este apsat se
genereaz valoarea False, iar cnd este apsat se genereaz valoarea True. n cazul de
fa, butonul trebuie s genereze True doar cnd este apsat i apoi s revin i s
genereze n continuare False. Valoarea True trebuie s fie generat doar o singur
dat, pentru ca utilizatorul s poat citi datele. Comportamentul butonului la aciunea
utilizatorului se poate stabili din meniul care apare n urma apsrii butonului dreapta
al mouse-ului n zona acestuia i care este redat n fig.3.19. Din acest meniu se alege
grupul Mechanical Action i apoi Latch When Pressed. Acum butonul va genera o
singur valoare True cnd va fi apsat i apoi va reveni automat la starea iniial i
anume False. Dup cum se observ, comportamentul butoanelor poate fi modificat n
mai multe feluri, n funcie de nevoile utilizatorului. Descrierea comportamentului
pentru fiecare aciune se poate vedea consultnd Help-ul LabVIEW-ului i tastnd n
cmpul Search opiunea Change mechanical action. Primul item gsit este o
descriere amnunit a fiecrui tip de aciune a unui buton boolean, aa cum se arat n
fig.3.19.

Fig.3.19. Selectarea tipului de date pentru controlul timpului de reafiare


a rezultatelor
Cu aceast operaie s-a terminat lucrul asupra panoului frontal i se trece la
partea de diagram bloc.
Diagrama bloc final a aplicaiei va fi destul de complicat, de aceea se va
descrie pas cu pas realizarea ei.
Controlul digital pentru numrul de valori generate se poziioneaz n partea
stng a diagramei. Din grupul Structures al paletei Functions se alege For Loop, se
INSTRUMENTAIE VIRTUAL 152

plaseaz n vecintea terminalului controlului digital i


se conecteaz acesta din urm cu N. n interiorul buclei
se adaug un generator Random Number (0-1) care se
selecteaz din grupul Numeric. Bucla For va arata ca n
fig.3.20.
Se mut Array-ul pentru afiarea numerelor
Fig.3.20. Bucla For pentru aleatoare lng For Loop i se conecteaz cu
generatorul de numere generatorul de numere aleatoare. n acest moment, s-ar
aleatoare putea ca firul care conecteaz bucla For cu Array-ul s
fie ntrerupt. Acest lucru se datoreaz faptului c
valorile din bucl nu sunt indexate ca s poat fi adugate n tablou. Pentru a realiza
indexarea se efectueaz click dreapta pe conectorul de pe bucl i se activeaz
opiunea de indexare, dup cum se poate observa pe fig.3.21.

Fig.3.21. Activarea indexrii elementelor generate pentru a putea fi adugate n tablou

n continuare, urmeaz s se realizeze suma valorilor din Array, care se vor


afia, alturi de restul numerelor, n al doilea tablou. Pentru aceasta se folosete
modulul Add Array Elements din grupul Numeric. Ieirea acestuia se conecteaz la
indicatorul digital pentru Suma, care a fost prevzut n panoul frontal. Pentru a aduga
elementul sum la Array-ul deja existent, va trebui s se foloseasc un modul tip
Build Array, care se selecteaz din grupul Array al paletei Functions i a crui
utilizare este ilustrat n fig.3.22.
Cnd se adaug modulul n diagram, se observ c acesta are o singur
intrare i o ieire. Se selecteaz modulul i apoi se trage de partea sa inferioar. Se
constat c numrul de intrri crete. Intenionnd s se adauge un element ntr-un

Fig.3.22. Modificarea automat a numrului de intrri ale unui Array i adugarea diferitelor
tipuri de elemente la intrrile acestuia
153 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

Array deja existent va fi nevoie doar de dou intrri. Un alt aspect care trebuie
remarcat este c icoana modulului creat se schimb n momentul cnd pe o intrare se
adaug elemente tip Array.
Ieirea de la modulul Build Array se conecteaz la cel de-al doilea Array,
rezultnd o schem precum cu cea din fig.3.23.

Fig.3.23. Calculul sumei elementelor din tablou

n continuare, se calculeaz media i dispersia elementelor tabloului folosind


1 n
relaiile matematice cunoscute: media este M = xi , iar dispersia este
n i =1
1 n
D= ( xi M ) 2 . Pentru fiecare valoare care se dorete s se obin, trebuie
n 1 i =1
s se construiasc diagrama bloc, care s fie conform ecuaiei matematice ataate.
Pentru medie este nevoie de un modul de sumare a elementelor tabloului Add
Array Elements, care se selecteaz din paleta Functions, meniul Numeric. Numrul
n de elemente ale tabloului se determin cu funcia Array Size n meniul Array din
paleta Functions.
Att modulul de sumare a elementelor Array-ului, ct i Array Size
genereaz valori scalare, care se vor mpri i se va obine media M care este tot un
scalar. Diagrama parial, cu ramura pentru medie, arat ca n fig.3.24.
Dispersia necesit cunoaterea valorii medii a elementelor deoarece, aa cum
se vede din relaia de calcul din fiecare element al tabloului trebuie sczut valoarea
medie.
Este de remarcat c n mediul LabVIEW datele de tip Array sunt percepute
ca cele de tip scalar. De exemplu, pentru a transfera un Array n altul este de ajuns s
se conecteze cele dou tablouri printr-un simplu fir. Pentru a ridica la putere
elementele unui Array se conecteaz ieirea la ambele intrri ale unui modul de
nmulire, iar rezultatul va fi un Array similar, care are elementele la ptrat. O alt

Fig.3.24. Calculul sumei i a mediei elementelor dintr-un Array


INSTRUMENTAIE VIRTUAL 154

situaie este cea n care se dorete s se adune la fiecare element al unui tablou cte un
scalar. Pentru aceasta, este suficient s se conecteze la o intrare a modulului sum
tabloul i la cealalt scalarul. Operaia este similar pentru toate operaiile matematice
de baz: scdere, nmulire, mprire.
Conform celor de mai sus, se adaug un modul de scdere la ale crui intrri
se conecteaz Array-ul iniial i media calculat. n continuare, trebuie s se ridice la
ptrat noile elemente ale Array-ului i acest lucru se realizeaz cu ajutorul unui modul
de nmulire. Se calculeaz suma elementelor obinute, care apoi se mparte la numrul
de elemente minus 1, pentru a respecta formula.
Se obine diagrama bloc din fig.3.25, care permite calculul sumei elementelor,
al mediei i al dispersiei.

Fig.3.25. Diagrama bloc pentru Calculul mediei i dispersiei - metoda I


Dup ce s-a realizat schema pentru calculul mediei i dispersiei, trebuie s se
adauge structurile necesare pentru generarea
numerelor aleatoare la apsarea butonului
introdus n panoul frontal. Pentru aceasta
este necesar o sintax de tip If-else, la fel
ca ntr-un program obinuit. LabVIEW-ul
nu are prevzut explicit o structur de acest
tip, ns se poate implementa orice situaie
tip If-else cu ajutorul structurii Case.
Structura Case are n mod implicit,
dou cazuri: True i False. ns acestea se
pot redenumi n funcie de ce condiie dorim
s fie ndeplinit. De asemenea, se pot
aduga alte situaii unei structuri Case.
Dup cum se observ n fig.3.26,
bucla Case are o intrare reprezentat de o
csu cu simbolul ?. Aceast csu este
Fig.3.26. Structura Case i meniul de zona de conectare a buclei cu exteriorul. n
modificare a acesteia, obinut prin click funcie de valoarea primit n aceast csu,
dreapta n zona etichetei True se execut una din ramurile buclei Case.
155 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

Dup cum s-a mai menionat, structura Case are n mod implicit dou ramuri:
True i False. Se observ c n zona etichetei True se afl dou sgei laterale i una
orientat n jos. Indiferent de unealta cu care se lucreaz, adic indiferent de cursorul
selectat, atunci cnd se ajunge n zona etichetei cursorul se modific ntr-o sgeat cu
direcia de deplasare (stnga sau dreapta). Cu sgeile laterale se pot executa secvenial
deplasri ntre ramurile Case-ului, n timp ce prin apsarea sgeii orientat n jos, se
deschide un meniu tip pop-up, redat in fig.3.27, de unde se poate selecta ramura Case-
ului care intereseaz.
O stuctur Case se poate aduga similar
uneia For sau While. Cnd se selecteaz din
Functions subpaleta Structures i apoi Case
Structure, cursorul se transform ntr-un
dreptunghi. Se alege colul din stnga sus i apoi se
ncadreaz schema, sau poriunea dorit din schem,
n interiorul Case-ului.
Fig.3.27. Selectarea unei ramuri n
cadrul unei structuri Case
n cazul de fa va trebui s se includ toat
schema dezvoltat pentru calculul mediei i
dispersiei n cadrul buclei Case, cu excepia
butonului de comand a generrii numerelor aleatoare. Cnd butonul este apsat, se
genereaz o valoare True. Deci toat diagrama va rmne pe ramura True a Case-
ului. Pe False nu intereseaz s se ntmple un eveniment, deci se va lsa goal. n
continuare se leag butonul Genereaza la intrarea buclei Case. Diagrama final a
aplicaiei va arta ca n fig.3.28.

Fig.3.28. Diagrama final a aplicaiei


Aplicaia este funcional i trebuie s se revin n panoul frontal pentru a o
executa . Aa cum s-a stabilit la nceput, aplicaia va rula n modul Run Continously
i va fi oprit cu Abort Execution. Dup cum se poate observa, se genereaz un
numr iniial de 10 numere aleatoare, care sunt afiate i crora li se calculeaz media
i dispersia. Numerele aleatoare nu sunt generate ncontinuu, ci doar la apsarea
butonului plasat n panoul frontal. Salvarea aplicaiei se face sub denumirea Calculul
mediei i dispersiei metoda I_[nume / prenume student]_[grupa].vi.
INSTRUMENTAIE VIRTUAL 156

Programul are un bug la afiare. Atunci cnd colecia de numere ce urmeaz a


fi generate este mai mic dect 10, suma este afiat n urmtoarea celul goal a
Array-ului i nu n ultima, aa cum indic eticheta. Panoul frontal va arta, n acest
caz, aa cum este prezentat n fig.3.29.

Fig.3.29.Panoul frontal final al aplicaiei Calculul mediei i dispersiei metoda I

3.4. Calculul mediei i dispersiei metoda II


Urmtoarea aplicaie calculeaz media i dispersia unor numere aleatoare ce
vor avea o baz selectat de utilizator prin intermediul unui Slide. Numerele generate
vor fi n intervalul [baza, baza+1]. Valorile se vor genera continuu, pn cnd aplicaia
va fi oprit. Intervalul de generare este prestabilit la 200 ms.
Primul pas va fi construcia panoului frontal. Slide-ul ce reprezint baza
numerelor aleatoare se copiaz din Calcul volum cilindru_[nume / prenume
student]_[grupa].vi cuprins n Aplicaia II.2, pentru a nu repeta paii care au fost
efectuai acolo. Se deschide aplicaia anterior precizat i, cu ajutorul uneltei
Select/Size, se ncadreaz slide-ul Inaltime, mpreun cu
indicatorul digital i cu chenarul de decor. Se reamintete
c aceste obiecte erau grupate, ca atare selecia va arta ca
n fig.3.30.
Prin procedeul Copy/Paste se aduce grupul
Inaltime n noua aplicaie, care se va numi Calculul
mediei i dispersiei metoda II. Cu unealta Edit Text, se
modific eticheta Inaltime n Baza. Se stabilete valoarea
implicit ca fiind 4, n loc de 5.
Se repet procedura pentru Waveform Chart iar
aici se ascunde eticheta Inaltime. Pentru aceasta, cu click
Fig.3.30. Grupul nlime dreapta n zona graficului, se alege Y Scale i apoi se
din aplicaia Calcul volum deselecteaz opiunea Visible Scale Label procednd ca
cilindru n fig.3.31.
157 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

Fig.3.31. Ascunderea etichetei nlime


Valoarea implicit a indicatorului digital se stabilete la 4 pentru a corespunde
slide-ului Baza.
Din exemplul anterior, Calculul mediei i dispersiei metoda I, avnd panoul
frontal iniial redat n fig.3.17, se selecteaz cele dou indicatoare pentru medie i
dispersie trgnd un dreptunghi n jurul lor. Pentru a selecta i indicatorul pentru
sum, cu tasta Shift apsat, se efectueaz click n zona indicatorului Suma celor N
nr. aleatoare. Se observ c n acest moment sunt selectate cele trei indicatoare, care
se aduc prin Copy/Paste n noua aplicaie.
Se redenumete indicatorul Suma celor N nr. aleatoare n Suma valorilor.
Apoi, se mai adaug un indicator n care se vor reine attea numere aleatoare cte au

Fig.3.32 Panoul frontal al aplicaiei


INSTRUMENTAIE VIRTUAL 158

fost procesate n cadrul aplicaiei. Pentru a opri aplicaia, este necesar un buton tip
Stop.
Dup ce au fost adugate elementele sus-menionate, ele se aranjeaz ntr-un
mod convenabil aa cum se poate observa n fig.3.32.
Pasul urmtor este reprezentat de realizarea diagramei bloc a aplicaiei. Se are
n vedere generarea unei serii de numere aleatoare, la un interval de 200 ms.
Utilizatorul va putea interveni asupra Slide-ului, selectnd o nou baz pentru
numerele generate. Cnd se va apsa butonul Stop se vor calcula media i dispersia
numerelor i se vor afia pe ecran, dup care aplicaia se va opri.
S-au identificat cele dou etape ale aplicaiei. n prima etap se va trata partea
de generare. Pentru aceasta, se conecteaz Slide-ul Baza cu indicatorul aferent i se
adaug un modul de adunare. La una din intrrile acestuia va fi un fir de la Baza, iar
cel de-al doilea va fi conectat la un generator de numere aleatoare, dup ce, n
prealabil, a fost i acesta introdus n schem. Ieirea modulului va fi conectat att la
indicatorul digital pentru valoarea instantanee, ct i la indicatorul grafic.
Se adaug partea de
temporizare, realizat dintr-o constant
cu valoarea 200 i un Wait Untill Next
ms Multiple i se aduce butonul Stop n
vecintatea schemei.
Se ncadreaz elementele ntr-o
bucl While, care se va opri atunci cnd
va fi apsat butonul Stop. S-a obinut
astfel prima parte a diagramei i anume
partea de generare a numelor aleatoare
Fig.3.33. Generarea numerelor aleatoare redat n fig.3.33.
Dup acest pas, pentru a putea
calcula media i dispersia, trebuie s se stocheze valorile acestora ntr-un array. Se
insereaz un modul Build Array, a crui intrare se conecteaz la firul care iese din
modulul de sumare. Se observ c trecerea din interiorul spre exteriorul buclei While
se face printr-un tunel. Se execut click dreapta asupra acestuia i se activeaz
opiunea Enable Indexing, pentru a putea stoca valorile n tablou.
Spre deosebire de exemplul anterior, nu se mai concateneaz intrrile
tabloului n care vor fi stocate valorile. Pentru aceasta, trebuie s se verifice dac
opiunea Concatenate Inputs este activat n meniul pop-up care se deschide la
acionarea click dreapta n zona modulului Build Array. Dac este activ trebuie
dezactivat.
Care este diferena dintre un tablou cu intrrile concatenate i unul fr? n
cazul de fa nu este o diferen semnificativ, dar n anumite cazuri se dovedete a fi
folositoare. Pentru exemplificare, se consider dou tablouri {1,2} i {3,4,5}. Dac se
creaz un tablou folosind modulul Build Array i opiunea Concatenate Inputs este
selectat, atunci rezultatul final va fi {1,2,3,4,5}. Dac opiunea mai sus-menionat
nu este activ, atunci rezultatul va fi crearea unui tablou 2D: {{1,2,0},{3,4,5}}, n care
a fost adugat valoarea 0 pentru a se respecta dimensiunea.
159 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

n aceast exemplu, n loc de un vector linie de elemente, aa cum a fost cazul


n aplicaia anterioar din seciunea 3.3, va rezulta un vector coloan avnd ns un
numr de n+1 elemente, fapt de care trebuie s se in seama n operaiile ulterioare.
n continuare, folosind procedeul Copy/Paste, se preia din aplicaia de
generare a numerelor aleatoare partea de calcul a mediei i dispersiei i se aduce n
VI-ul la care lucreaz.
Se execut dublu click pe icoana Sir cu N numere aleatoare, ceea ce produce
direcionarea ctre panoul frontal, cu Array-ul gata selectat, i apoi se terge acest
Array. Urmnd acelai procedeu, se terge i Sir ce are ultima valoare Suma. Pentru
a evita redundana calculului sumei valorilor, se mut indicatorul Suma celor N nr
aleatoare pe ramura de calcul a mediei, se efectueaz legturile necesare, i apoi se
terge toat ramura unde se va calcula suma numerelor.
Se adug (n diagram) un element tip Build Array, i apoi se efectueaz
conexiunile. Noua diagram va arata ca n fig.3.34.

Fig 3.34. Seciunea de calcul a mediei i dispersiei dup adugarea unui Build Array

Se observ (din numrul de fire generat de Build Array) c array-ul de


elemente cu care se lucreaz are dou dimensiuni, una fiind index-ul (similar unei
baze de date) i cea de-a doua coninnd valorile care trebuie prelucrate. Deci se

Fig 3.35. Diagrama final a aplicatiei Calcul al mediei si dispersiei metoda II


INSTRUMENTAIE VIRTUAL 160

lucreaz cu o matrice cu 2 linii i n coloane. n acest sens, pentru a calcula numrul de


elemente care este necesar pentru calculul mediei i dispersiei, va trebui s se afle
numrul de coloane. Array Size va genera un vector cu cele dou dimensiuni, de
aceea va trebui s se aplice un Index Array pentru a stabili numrul de coloane. n
momentul cnd se aplic Index Array i se extrage elementul al doilea (numrul de
coloane), firul ntrerupt va deveni continuu i astfel aplicaia se va putea rula. Se
reamintete c Array-urile n LabVIEW au primul element pe poziia 0, al doilea pe
poziia 1 .a.m.d. Artificiul care trebuie realizat se observ n fig.3.35. Acelai
procedeu se folosete i n cazul dispersiei, astfel c diagrama din fig.3.35 devine
varianta final a aplicaiei de Calcul al mediei i dispersiei metoda II, iar panoul
frontal este cel din fig.3.32.

3.5. Chestiuni de studiat


1. Pentru fiecare dintre funciile prezentate pentru modul de grupare a datelor
String, se va crea cte un program care s exemplifice modul de utilizare a funciei
respective.
2. Se va insera n diagrama bloc o constant Array cu valori numerice, avnd
o singur dimensiune, coninnd elementele 1, 2, 3, 4, 5. Apoi se va iniializa un
Array, tot cu o dimensiune, care s cuprind de zece ori 7. Se va construi o matrice
avnd pe prima linie rezultatul concatenrii celor dou Array-uri precedente, iar pe
linia a doua rezultatul interseciei acestora.
3. Se va dispune pe panoul frontal un element de tip Cluster i se va introduce
n chenarul acestuia un element pentru valori numerice i un Array cu valori
booleene. Similar, se va crea un alt Cluster care s conin dou elemente de tip
String. Pentru cele dou Cluster-e s se testeze n diagrama bloc funciile Bundle i
Unbundle.
4. Se va realiza aplicaia descris n seciunea 3.3 Calculul mediei si
dispersiei metoda I. Se vor crea panoul frontal i diagrama bloc n conformitate cu
indicaiile cuprinse n aceast seciune.
5. Se va proceda la fel ca la punctul 4 pentru realizarea aplicaiei descris n
seciunea 3.4 pentru calculul mediei i dispersiei prin cea de-a doua metod.

3.6. Modul de lucru i prezentarea rezultatelor


Pentru punctul 1 de la Chestiuni de studiat, de exemplu, pentru funcia
String Length, se va plasa n panoul frontal un element de control pentru valori
alfanumerice, n care se va introduce un text i un indicator pentru valori numerice,
programul trebuind s afieze numrul de caractere al textului introdus. Prin proceduri
similare se vor realiza programe pentru functiile Concatenate Strings i String
Subset.
Referitor la punctele 2 i 3 se vor realiza programele cerute innd seama de
noiunile cuprise n seciunea 3.1 i de detaliile pe care le ofer Context Help n ceea
ce privete funciile din subpaletele Array i Cluster.
161 II.3. Noiuni i proceduri avansate pentru programare n LabVIEW

La punctul 4, se va rula aplicaia realizat i se vor observa rezultatele


obinute. Pe parcursul crerii aplicaiei, se vor testa diversele proceduri utilizate pentru
stabilirea caracteristicilor i proprietilor elementelor i structurilor introduse n
panoul frontal i n diagrama bloc, innd seama ndeosebi de noiunile prezentate n
seciunile 3.2 i 3.3.
Pentru punctul 5, innd seama de aspectele de creare i de rulare a VI-ului,
se va face o comparaie de principiu ntre aplicaia de calcul a mediei i dispersiei prin
cea de a doua metod, cu aplicaia similar bazat pe prima metod, lund n
considerare, n principal, modul de generare a numerelor aleatoare i de afiare a
rezultatelor. De asemenea, se vor compara panourile frontale i diagramele bloc ale
celor dou aplicaii.
Aplicaiile realizate, observaiile i comentariile referitoare la rezultatele
obinute se vor salva n fiierul personal al fiecrui student conform procedurii
descrise la lucrrile anterioare. O atenie deosebit se va acorda celor dou aplicaii de
calcul a mediei i dispersiei i comparaiei dintre ele. Titlurile sub care se vor salva
aplicaiile vor fi cele ale seciunilor 3.3 i 3.4 din prezenta lucrare, sau similare cu
acestea.

S-ar putea să vă placă și