Sunteți pe pagina 1din 9

Controlul execuiei programului cu structuri

Prezentare general
Structuri, un tip important de nod, guverneaza fluxul de execuie ntr-un VI, la fel cum structurile de control o fac ntr-un limbaj de programare standard. Acest capitol v introduce n principalele structuri din LabVIEW: bucla While, bucla For, structura Case, i structura Sequence, iar apoi v arat cum s combinai bucla While cu structura Case ntr-un cadru puternic de aplicatii. Vei nva, de asemenea, cum s puneti n aplicare formulele lungi utilizand nodul formula(Formula Node) i formule simple cu nodul expresie(Expression Node), cum sa deschideti o caset de dialog care conine mesajul vostru propriu, i o baz care priveste modul de a controla timpul de executie al programelor, precum i modul n care structurile temporizate ofer sincronizare si temporizare avansata. Obiectivele

Cunoasterea utilizarii buclei While si buclei For si intelegerea diferentelor dintre acestea. Recunoasterea necesitati pe care o au registri de schimbare in programarea grafica. Intelegerea diferitelor tipuri de structuri Case, numerice, siruri si Boolean. Invatati cum sa reglementati executia in ordine folsind structuri Sequence. Intelegerea pericolului de folosire a structurilor de secvente stivuite si secventele locale Utilizai Nodul Formula s implementati formule matematice lungi Utilizati LabVIEW pentru a implementa casete de dialog de tip pop-up pentru a afisa ceea ce doriti. Intelegeti cum sa folositi cateva din functiile simple de temporizare pe care le ofera LabVIEW Utilizarea Expression Node pentru a pune n aplicare formule cu o singur variabil Intelegeti cum structurile temporizate si VI-urile permit buclelor temporizate si secventelor temporizate sa se sincronizeze. Invatati cum sa combinati bucla While cu structura Case pentru a construi cadre de aplicatii simple, puternice si scalabile.

Dou bucle Daca ati programat vreodata in orice limba , probabil ati vrut sa repetati executia unei sectiuni din cod. LabVIEW va ofera doua structuri bucla pentru a va usura munca. Puteti folosi bucla For sau bucla While pentru a controla operatii repetitive in VI. O bucla For executa repetitia pentru un numar finit dat, iar bucla While repeta pina atunci cand o conditie specificata este adevarata (sau falsa, depinde cum a fost configurata bucla While). Puteti gasi cele doua bucle in submeniul Programming>>Structures din meniul Functions. Bucla For O bucla For executa codul din interiorul marginilor sale, care se numeste subdiagrama, pentru un numar finit dat, unde numarul finit este egal cu valoarea continuta in count terminal (terminalul contor). Puteti seta contorul prin legarea unei valori din exteriorul buclei la terminalul contor. Daca legati 0 la terminalul contor , bucla nu se va executa.

Figure 6.1. Bucla For

Iteration terminal(terminal repetitiv) contine numarul curent de repetitii complete ale buclei : 0 in timpul primei repetitii, 1 cand se va repeta a doua oara s.a.m.d pina la N-1 (unde N este numarul care indica de cate ori vreti ca bucla sa se repete). Bucla For este echivalenta cu urmatorul pseudocod.

for i = 0 to N-1 Execute subdiagram

Bucla While

Bucla While executa subdiagrama din interiorul marginilor sale pina cand valoarea Booleana legata la conditional terminal (terminal conditional) este Adevarata(TRUE, care inseamna da, opreste bucla), cum este descris in figura 6.2. LabVIEW verifica valoarea din terminalul conditional la sfarsitul fiecarei repetitii. Daca valoarea este negativa(FALSE, car e inseamna nu, bucla nu se opreste), o alta repetitie apare.

Figure 6.2. Bucla While

Iteration terminal se comporta exact la fel ca cel de la bucla For.

Bucla While este echivalenta cu urmatorul pseudocod:


Do Execute subdiagram While condition is FALSE (Until condition is TRUE)

Puteti deasemenea sa schimbati si starea pe care terminalul conditional din bucla While o verifica, asadar in loc sa repete cat timp este False, puteti modifica pentru a repeta atat timp cat este True. Bucla While va arata ca in Figura 6.3

Figure 6.3. While Loop with "Continue if True" conditional terminal

Bucla While din Figura 6.3 va avea urmatorul pseudocod:


Do Execute subdiagram While condition is NOT TRUE

Daca vreti sa convertiti o structura intr-un alt tip (de exemplu, sa convertiti o bucla For intro bucla While), puteti sa dati click-dreapta pe marginea exterioara a structurii si sa selectati Replace Item din meniul de scurtaturi. Puteti inlocui o structura doar cu una asemanatoare. Experimentati cu aceasta caracteristica pentru a vedea cum functioneaza. Plasarea obiectelor in interiorul structurii

Cursorul buclei For

Cursorul Buclei While

Cand selectati pentru prima data o structura din submeniul Programming>>Structures aflat in meniul rapid Functions, cursorul structurii pe care ati ales-o va aparea in miniatura; de exemplu m, bucla For sau bucla While. Dupa care, puteti da click pe unul dintre colturile structurii si sa o redimensionati dupa cum doriti. Dupa ce ati dat redimensionat, structura va aparea, continand toate obiectele care au fost capturate in interiorul ei. Dupa ce ati creat structura in interiorul diagramei, puteti adauga alte obiecte inauntrul acesteia fie prin a le trage din exteriorul ei, sau le puteti adauga direct din meniul rapid Functions Puteti de asemenea sa redimensionati o structura existenta prin prinderea si tragerea unui maner de redimensionare pe o margine cu instrumentul de pozitionare. Daca mutati o structura existenta astfel incat sa se suprapuna cu un alt obiect din diagrama , acel obiect va fi vizibil peste marginea structurii. Daca mutati o structura complet peste un alt obiect , acel obiect va afisa o umbra groasa s te avertizez c obiectul este peste sau sub mai degrab dect n interiorul structurii. Ambele situaii sunt prezentate n figura 6.4

Figure 6.4. A subVI that is not inside a structure, floating above it and hiding beneath it

Auto Grow
Toate structurile au o proprietate care se numeste Auto Grow(crestere automata), care poate fi inversata prin bifarea sau debifarea Auto Grow din meniul pop-up al structurii.Cand este activata, aceasta caracteristica cauzeaza doua comportamente foarte utile. In primul rand, cauzeaza structura sa creasca automat cand mutati obiecte inauntrul ei iar in al doilea rand, aceasta functie previne redimensionarea structurii la o dimensiune mai mica decat obiectele din interiorul acesteia. Aceste doua functii previn ascunderea obiectelor din interiorul structurii sau in afara cadrului sau

Indepartarea structurii: Nu doar sa le stergeti.


Cand vreti sa stergeti o structura, fiti atenti. Daca stergeti o bucla While, veti sterge deasemenea si tot ce se afla in interiorul acesteia functii, subVI e.t.c. Daca nu vreti sa stergeti tot ceea ce se afla in interiorul structurii, puteti sa deschideti meniul pop-up al acesteia si sa selectati Remove While Loop sau Remove For Loop. Astfel veti inlatura structura dar nu si codul din interiorul ei, lasand codul si tot ce se afla in interior in diagrama bloc.

Terminal in interiorul buclelor si alte probleme

Datele trec in si din bucla printr-o cutie mica pe margina buclei care se numeste tunel. Deoarece LabVIEW opereaza conform cu principiile dataflow, datele de intrare intr-o bucla trebuie sa treaca innainte ca bucla sa se execute. Datele de iesire din bucla vor trece doar dupa ce bucla a terminat toate repetitiile. De asemenea , conform dataflow, trebuie adaugat un terminal in interiorul buclei daca vreti ca acel termibnal sa fie verificat si actualizat la fiecare repetitie a buclei. De exemplu , bucla While din Figura 6.5 verifica controlul Boolean de fiecare data cand se repeta. Cand bucla citeste o valoare TRUE , se opreste.

Figure 6.5. Stop button inside a loop (reads the value, every loop iteration)

Daca plasati terminalul controlului Boolean in exteriorul buclei While , cum este afisat in Figura 6.6, veti creea o bucla infinita sau o bucla care se va executa o singura data, depinde de valoarea controlului Boolean setata initial. If you place the terminal of the Boolean control outside the While Loop, as pictured in the right loop of Figure 6.6, you create an infinite loop or a loop that executes only once, depending on the Boolean's initial value. Conform cu dataflow, LabVIEW citeste valoarea controlului Boolean innainte sa intre in bucla, nu in bucla sau dupa completarea acesteia.

Figure 6.6. Butonul de stop aflat in afara buclei (citeste valoarea o singura data, innainte ca bucla sa se execute)

Similar, Digital Indicator aflat in bucla din figura 6.7 se va actualiza in timpul fiecarei repetitii. aflat in bucla din Figura 6.8 se va actualiza doar dupa ce bucla s-a terminat. Va contine un numar aleator din ultima repetitie a buclei.
Digital Indicator

Figure 6.7. Un indicator in bucla (actualizeaza fiecare repetitie)

Figure 6.8. Un indicator in afara buclei (actualizat o singura data, dupa ce bucla se opreste)

Tineti minte, prima data prin bucla For sau bucla While, contorul repetitiei este zero ! Daca vreti sa aratati de cate ori bucla a fost repetata , trebuie sa adaugati 1 la contor! Activitatea 6-1: Numararea buclelor In aceasta activit, veti putea construi o bucla For care isi afiseaza numerotarea intr-o diagrama de pe panoul frontal. Iti vei alege numarul de repetari, iar bucla va numerota de la 0 pina la numarul ales minus 1(deoarece numaratoarea repetitiei va incepe de la 0).Veti construi apoi o bucla While care numara pina cand va fi oprita de un comutator Boolean. Doar pentru divertisment (i, de asemenea, pentru a ilustra un punct important), vei observa efectul care il are adaugarea controalelor si a indicatorilor in afara buclei While. 1. Crearea unui nou panou prin selectarea New VI din meniul File sau fcnd clic pe New VI text, n caseta box dialog din LabVIEW. 2. Construiti panoul frontal si diagrama bloc afisata in Figurile 6.9 si 6.10 . Bucla For este localizata in submeniul Programming>>Structures din meniul rapid Functions. Se poate folosi comanda Tile Left si Right din meniul de Windows in asa fel incat sa puteti vedea si front panel dar si diagrama bloc in acelasi timp.

Figure 6.9. Panoul Frontal al VI pe care il veti construi in aceasta activitate.

Figure 6.10. Diagrama bloc a VI pe care o veti contrui in aceasta activitate

Adaugati un Waveform Chart din submeniul Modern>>Graph al meniului rapid Controls in panoul frontal. Etichetatil For Loop Count . Vom vorbi mai mult despre diagrame i grafice, n capitolul 8, "LabVIEW's Exciting Visual Displays: Charts and Graphs." Folositi un digital control din submeniul Programming>>Numeric pentru a controla numarul de repetitii. 3. Pop-up Waveform Chart si selectati AutoScale Y din meniul Y Scale astfel nct diagrama se va scala pentru a se potrivi cu bucla For. Apoi pop up pe diagrama si Visible Items>>Digital Display. Adaugati un numar la controlul Number of Iterations si rulati VI. Observati ca indicatorul digital numara de la 0 la N-1 nu de la 1 la N (unde N este numarul specificat de voi)! De fiecare data cand bucla se executa , diagrama afiseaza numaratoarea buclei For pe axa Y in timp pe axa X. In acest caz , fiecare unitate de timp reprezinta o bucla repetata. 4. Observai punctul mic gri la intersecia a numrului de terminale i sarma Number of Iterations. Se numete un punct de corectie, i vom vorbi despre asta dup acest exerciiu. Pop-up la controlul Number of Iterations i alegei I32 Long de la submeniu pentru a face sa dispara. 5. Putei salva VI, dac dorii, dar nu il vom folosi din nou. Deschideti o noua fereastra astfel incat

sa incercati bucla While 6. Construii VI prezentat n figurile 6.11 i 6.12. Amintii-v, Booleans apar pe panoul frontal n poziia implicit lor false. De asemenea, nu uitai s setai terminalul conditionat al Buclei While pentru a continua dac este TRUE.

Figure 6.11. Panoul frontal al VI pe care il veti construi

Figure 6.12. Diagrama bloc a Vi pe care il veti construi

7. Comutatorul Boolean trebuie sa fie in pozitia TRUE si porniti VI-ul.Cand vreti sa il opriti apasati pe buton pentru a comuta in jos la FALSE. Numaratoarea buclei se va actualiza la fiecare repetitie a buclei.

Instrumentul de operare 8. Cu comutatorul nc n poziia de FALSE, executai din nou VI. Observai c Bucla While se executa o dat, dar numai o singur dat. Amintii-v, bucla verific terminalul condiional de la sfritul unei repetitii, aa c ntotdeauna execut cel puin o dat, indiferent de ce valoare este legata la ea. 9. Acum dute la diagrama bloc si muta indicatorul Loop Count in afara buclei cum este afisat in Figura 6.13. Va trebui sa legati indicatorul cu un fir; tunelul este crea automat cum firul paraseste bucla.

Figure 6.13. VI-ul vostru, dupa ce ati mutat indicatorul Loop Count in afara buclei While

10. Asigurai-v c ntreruptorul este TRUE i executai VI. Observai c indicatoarele se actualizeaza doar dupa ce ati comutat pe FALSE i bucla sa terminat de executat; va conine valoarea final a numrului de repetitii. Veti afla mai multe despre trecerea de date din bucle n capitolul 7, "LabVIEW's Composite Data: Arrays and Clusters." Pn atunci, nu ncercai s treceti date scalare dintr-o bucla FOR cum ai fcut ntr-o bucl WHILE, sau vei primi fire rele i nu vei nelege de ce. Poate fi usor de facut, dar va trebui sa inveti prima data despre autoindexare. 11. Salvai VI. Punei-l n directorul MYWORK si numiti Loop Count.vi. 12. Acum, doar sa demonstrati ce sa nu faceti, trageti comutatorul din bucla(dar lasatil legat). Asigurati-va ca comutatorul este pe pozitia TRUE, porniti VI-ul, apoi apasati pe comutator pentru a opri. Nu se va opri!Odata ce LabVIEW intra in bucla,nu va verifica valorile din afara buclei. Du-te nainte i apsai pe butonul Abort pe Bara de instrumente pentru a opri execuia. Dac switch-ului ar fi fost FALSE, atunci cnd a nceput bucla, bucla ar fi executat numai o dat nu la infinit. nchidei VI i nu salvai modificrile.

Abort Button

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