Sunteți pe pagina 1din 11

LUCRAREA NR. 5 BUCLE DE CONTROL N LabVIEW 1.

Obiectivele lucrrii a) Cunoaterea principalelor bucle de control din mediul de programare grafic LabVIEW. b) nsuirea modului de utilizare a buclelor n mediul de programare grafic LabVIEW. 2.Aparatura i suporturile utilizate: a) PC n configuraia unitate central,monitor, tastatur; b) Precizrile din prezentul ndrumar; c) Manual de prezentare a mediului de programare grafic LabVIEW. 3.Breviar Buclele din LabView sunt echivalentul grafic al instruciunilor de ciclare (for, while) din limbajele de programare clasice. O bucl este reprezentat printr-un dreptunghi a crui dimensiune poate fi modificat . Partea din diagram care se gsete n interiorul dreptunghiului se numete subdiagram iar terminalele prin care datele sunt introduse n subdiagram i sunt preluate rezultatele prelucrrii se numesc tuneluri. Buclele de control se gsesc n paleta de funcii ale diagramei Bloc, n subpaleta Structures.

Figura 5.1. Structurile de control ale mediului LabVIEW. 3.1. Bucla WHILE Bucla WHILE permite execuia unui bloc att timp ct o condiie dat este adevrat (sau fals). Similar comportarii unei bucle Do sau o bucl Repeat-Until (=repeta pana cand) n cadrul limbajelor de programare bazate pe text, o bucl While execut o subdiagram pn cnd este ntlnit o condiie.

Figura 5.2. Bucla WHILE

1. Selectare bucl While

2. nlnuirea codului a fi repetat

3. Adugarea de noduri suplimentare i apoi realizarea legturilor


Do

Terminal iteraie

(Execut diagrama din interiorul buclei) While Condition is TRUE

Terminal condiionare

Figura 5.3. Selectarea i plasarea buclei While Terminalul de iteraie i are semnificaia de contor al ciclului n vreme ce terminalul din dreapta jos reprezint condiia de execuie a ciclului (se execut att timp ct variabila conectat la acest terminal are valoarea TRUE). Terminalul iteraie conine numrul de executri ale buclei (pornete de la zero). In exemplul de mai sus bucla While se execut pn ce valoarea de ieire de la butonul de stop este TRUE. Selectarea condiiilor buclei se face prin clic dreapta n terminalul condiionare pentru definirea opririi buclei Pe marginile buclei se pot crea regitri de deplasare care transfer datele de la o itera ie la urmtoarea

Figura 5.4. Selectarea condiiilor buclei While Exemplul 1: n diagrama bloc din figur, bucla While este executat pn cnd ieirea funciei de multiplicare este mai mare sau egal cu 5, iar controlul Enable este Adevrat (True). Funcia 2

I (AND) returneaz la ieire valoarea True doar dac cele dou intrri sunt True. Altfel ie irea este False. Datele pot fi trecute n exteriorul sau n interiorul buclei prin intermediul tunelurilor. Dac indicatorul ce afiaj Numrul de iteraii este trecut n afara buclei, datele ce vor ajunge la acesta prin intermediul unui tunel, se vor realiza doar la terminarea execuiei buclei. Exemplul 2: Urmtorul VI i va oprii execuia cnd terminalul iteraie depete cifra 100 sau cnd operatorul apas butonul de Stop. Este utilizat o ntrziere de 100 ms, pentru ca timpul Unitii de Procesare Centrale s nu fie ocupat de operaiile buclei. 3.2. Bucla FOR O bucl For exexut o subdiagram de un numr de ori, numr specificat de terminalul de numrare N.

Figura 5.5. Bucla FOR Bucla For are dou terminale: terminalul de numrare N (un terminal de intrare) i terminalul de iterare i (un terminal de ieire). Terminalul de numrare arat de cte ori se execut bucla. Terminalul de iteraie arat de cte ori a fost executat bucla. Pe marginile buclei se pot crea regitri de deplasare care transfer datele de la o itera ie la urmtoarea.

Exemplul 3: 3

Exemplul alturat, arat o bucl For ce genereaz 100 de numere aleatoare i afieaz punctele pe un nregistrator. In interiorul buclei se mai afla si un terminal iteraie (notat cu i) care genereaza o valoare numar natural reprezentnd indicele iteratiei aflate in curs de executie. Indicii iteratiilor sunt Terminalul de numrare numerotati incepnd de la valoarea 0, astfel inct ultima iteratie executata de catre bucla For va (terminal de intrare) avea indicele N-1. 3.3. Regitri de transfer (Shift Register) Terminal iteraie (terminal de ieire)

Registrii de transfer sunt componente ale structurilor repetitive ce pot fi utilizate pentru transferul unor valori intre doua sau mai multe iteratii succesive ale structurii. Pentru a adauga un registru de transfer unei structuri repetitive (bucla For sau While), se selecteaza optiunea Add Shift Register din meniul propriu al structurii. Un registru de transfer contine doua terminale (stang si drept) dispuse pe conturul structurii. O valoare conectata la terminalul drept al registrului va "apare" in terminalul stang la iteratia urmatoare. Cu alte cuvinte, terminalul stang introduce in iteratia curenta valoarea ce a fost transmisa la terminalul drept in iteratia anterioara. La executarea primei iteratii a unei bucle, nu exista inca nici un transfer efectuat de catre registru intre cele doua terminale ale sale. Terminalul stang al registrului nu a fost inca "alimentat" cu o valoare din iteratia precedenta. Pentru a se putea efectua extragerea unei valori din terminalul stang la prima iteratie, se conecteaza la acest terminal o valoare din exteriorul buclei. Se spune ca registrul de transfer se initializeaza. Terminalul stang al unui registru de transfer poate fi dimensionat, capatand astfel mai multe componente. Intr-o astfel de situatie, valoarea transferata din iteratia anterioara se afla in componenta superioara. De sus in jos, fiecare componenta contine cate o valoare provenita dintr-o iteratie mai indepartata. Dupa executarea ultimei iteratii a buclei, din terminalul drept al registrului se poate extrage ultima valoare transferata acestuia. O structura repetitiva poate contine mai multi registri de transfer, fiecare cu una sau mai multe componente ale terminalului stang si fiecare transferand intre iteratii valori de diverse tipuri. Exemplul 5: VI-ul din figura alturat folosete registrii de deplasare si bucla For, pentru a accesa valorile din repetarile anterioare. Indicatorul X(i) afiseaza valoarea curenta, indicatorul X(i-1) afiseaza valoarea

penultimei iteratii, indicatorul X(i-2) afiseaza o valoare cu doua iteratii in urma, si asa mai departe.

4. Mod de lucru a) Se alimenteaz sistemul cu tensiune; b) Se lanseaz mediul LabVIEW; c) Se implementeaz programele descrise n breviarul prezentei lucrri precum si cele descrise mai jos. 4.1. Auto Match VI Completati urmatorii pasi pentru a construi un VI care genereaza numere aleatoare pana atunci cand numarul generat se potriveste cu un numar specificat.Terminalul numarator al buclei inregistreaza numarul de repetari inainte sa se produca o potrivire. 1.Deschideti un nou panou frontal. 2.Construiti urmatorul panou frontal si modificati controalele si indicatorii asa cum se arata si asa cum se descrie in acest exercitiu.

Controlul Number to Match (numar de potrivit)-specifica numarul de potrivit cu un anumit numar. Indicatorul Current Number (numar curent) afiseaza numarul aleator curent. Indicatorul #of iterations (#fara repetari) afiseaza numarul de repetari inainte de o potrivire. Folositi optiunea Data Range (sir de date) pentru a preveni utilizatorul de a selecta o valoare care nu este compatibila cu un sir sau cu un increment. Completati urmatorii pasi pentru a fixa variatia intre 0 si 10,000 cu o crestere de 1 si o valoare de default de 50. 3.Click dreapta pe controlul Number to Match (numarul de potrivit) si selectati Data Range din meniul micsorat (shortcut menu!!!???). Apare fereastra de dialog Data Range. 4.Inlaturati marca de verificare din fereastra de verificare Use Default. 5.Selectati optiunile asa cum se arata in urmatoarea fereastra de dialog.

6.Dati click pe butonul OK. LabVIEW afiseaza controale numerice si indicatori in notatii decimale cu doua zecimale, cum ar fi 3.14. Folositi optiunea Format &Precision (format&precizie) pentru a schimba precizia sau pentru a afisa controalele numerice si indicatorii in notatii stiintifice, ingineresti, sau ora/minut/secunda. Terminati urmatorii pasi pentru a aschimba precizia la 0. 7.Click-dreapta pe indicatorul Current Number (numar curent) si selectati Format&Precision din meniul micsorat (shortcut menu!!!???). Fereastra de dialog Format&Precision apare.

8.Scrieti 0 la specificatia Digits of Precision si apoi dati click pe butonul OK. 9.Repetati pasii 7 si 8 pentru indicatorul #of iterations (#stop repetari). 10.Construiti urmatoarea diagrama bloc:

a.Pozitionati functia Random Number (0-1) amplasata in paleta Functions>>Numeric. Aceasta functie produce un numar aleator intre 0 si 1. b.Pozitionati functia Multiply amplasata in paleta Functions>>Numeric.Aceasta functie multiplica numarul aleator cu 10,000. c.Click-dreapta pe terminalul y din functia Multiply, selectati Creat>>Constant din meniul scurtatura (shortcut menu!!!???), tastati 1000, si apasati tasta <Enter> pentru a crea o constanta numerica. d.Pozitionati functia Round to Nearest amplasata in paleta Functions>>Numeric.Aceasta functie rotunjeste numarul aleator intre 0 si 10,000 la cel mai apropiat intreg. e.Pozitionati functia Not Equal?. Amplasata in paleta Functions>>Comparison. Aceasta functie compara numarul aleator cu Number to Match si returneaza TRUE in cazul in care numerele nu sunt egale;altfel, returneza FALSE. f.Plasati o bucla Loop amplasata in paleta Functions>>Structures. Patratul albastru care apare pe granita buclei Loop se numeste tunnel. Tunelel permit accesul datelor in si din structura. Datele trec in afara buclei dup ace se termina bucla. Atunci cand un tunel transfera date intr-o bucla, aceasta se executa numai dup ace datele ajung la tunel. Bucla se executa atat timp cat nu exista nici o potrivire. De aceea functia Not Equal? Returneaza TRUE in cazul in care cele doua numere nu se potrivesc. De fiecare adta cand bucla se executa, terminalul de repetare creste cu unu. Numaratorul de repetare trece in afara buclei dupa completare. Aceasta valoare creste cu unu in afara buclei deoarece numaratorul porneste de la 0. g.Pozitionati functia Increment amplasata in paleta Functions>>Numeric. Aceasta functie adauga 1 la numaratorul buclei While. Apare un punct de constrangere gri pe terminalul de iesire pentru a indica faptul ac LabVIEW a constrans reprezentarea numerica a terminalului repetitor sa se potriveasca cu reprezentarea numerica a terminalului de iesire. 11.Salvati VI-ul sub denumirea Auto Match.vi. 12.Afisati apnoul central si schimbati numarul in Number to Match. 13.Rulati VI-ul.Schimbati Number to Match si rulati din nou VI-ul. Current Number se actualizeaza la fiecare repetare a buclei deoarece este in interiorul buclei.#of iterations se actualizeaza dupa indeplinire deoarece este in afara buclei. 14.Pentru a vedea cum VI-urile actualizeaza indicatorii, permiteti ca executia sa fie la un nivel ridicat. In diagrama bloc, dati click pe butonul Highlight Execution pentru ca sa i se permita executiei sa fie rapida. Acest lucru mareste transferul de date prin diagrama bloc astfel incat veti putea vedea fiecare nuamr asa cum este generat. 15.Schimbati Number to Match cu un numar care este in afara domeniului datelor, care este 0 si 10,000 cu o crestere de 1. 16.Rulati VI-ul.LabVIEW constrange valorile din afara domeniului catre cea mai apropiata valoare din domneiul de date specificat. 17.Inchideti VI. 4.2. Timed Temperature VI 7

Complete the following steps to build a VI that uses the Thermometer VI to read a temperature once every second for a duration of one minute. Front Panel Open a blank VI and build the front panel shown in Figure below.

(a)Place a thermometer, located on the Controls_Numeric Indicators palette, on the front panel. This provides a visual indication of the temperature reading. (b)Place a numeric indicator, located on the Controls>>Numeric Indicators palette, on the front panel. Label this indicator Seconds Elapsed. Right-click the indicator and select Representation>>I32 from the shortcut menu. Block Diagram Build the block diagram shown in Figure below.

Place a For Loop, located on the Functions>>All Functions>>Structures palette, on the block diagram. Right-click the Loop Count terminal in the upper left corner of the For Loop and select Create Constant from the shortcut menu. Type 60 in the constant to set the For Loop to repeat 60 times. Place the Thermometer VI on the block diagram. Select Functions>>All Functions>>Select a VI and navigate to C:\Exercises\LabVIEW Basics I\Thermometer.vi to place the VI. This VI reads the temperature from the DAQ device. Right-click the Temp Scale input and select Create>>Constant from the shortcut menu. Use a False constant for Fahrenheit or a True constant for Celsius. Note: If you do not have a DAQ device with a temperature sensor on Channel 0, use the (Demo) Thermometer VI instead. Place the Wait Until Next ms Multiple function, located on the Functions>>All Functions>>Time & Dialog palette, on the block diagram. Rightclick the input and select Create>>Constant from the shortcut menu. Enter a value of 1000 to set the wait to every second.

Place the Increment function, located on the Functions>>Arithmetic & Comparison>>Express Numeric palette, on the block diagram. This function adds one to the iteration terminal output. 2.Save this VI as Timed Temperature.vi in the C:\Exercises\LabVIEW Basics I directory. 3.Run the VI. The first reading might take longer than one second to retrieve if the computer needs to configure the DAQ device. 4.If time permits, complete the following optional and challenge steps, otherwise close the VI. For Loops versus While Loops Goal Identify when to use a While Loop and when to use a For Loop. Then, build an example using both. Description For the following scenarios, decide whether to use a While Loop or a For Loop. Scenario 1 Acquire data in a loop that executes once per second for one minute. 1. If you use a While Loop, what is the condition that you need to stop the loop? 2. If you use a For Loop, how many iterations does the loop need to run? 3. Is it easier to implement a For Loop or a While Loop? Scenario 2 Acquire pressure data until the pressure is greater than or equal to 1400 psi. 1. If you use a While Loop, what is the condition that you need to stop the loop? 2. If you use a For Loop, how many iterations does the loop need to run? 3. Is it easier to implement a For Loop or a While Loop? Scenario 3 Perform a repeated calculation for a number of iterations defined by a front panel control. 1. If you use a While Loop, what is the condition that you need to stop the loop? 2. If you use a For Loop, how many iterations does the loop need to run? 3. Is it easier to implement a For Loop or a While Loop? Scenario Build a VI to enact Scenario 1 described above. Create a loop which will simulate acquiring data once per second for one minute using both a While Loop and a For Loop. Design The finished VI is shown in Figure 5.6.

Figure 5.6. Simulate Data VI Block Diagram Implementation 1. Open a blank VI. 2. Save the VI as Simulate Data.vi in the <Exercise> directory. 3. Place a While Loop. Add a While Loop to the block diagram. 9

4. Define the period for each iteration of the loop. Add a Wait (ms) function to the block diagram inside the loop. Right-click the milliseconds to wait input and select Create Constant. Enter the value 1000. 5. Define the condition to end the loop. Add a Greater Or Equal? function to the block diagram inside the loop. Wire the iteration terminal to the x input of the Greater Or Equal? function. Right-click the y input and select CreateConstant. Enter the value 59. Wire the output of the Greater Or Equal? function into the conditional terminal. 6. Define the action for the loop to perform. Add a Simulate Signal Express VI to the block diagram inside the loop. When the dialog window appears, leave all values default. Click OK. Add a Convert from Dynamic Data Express VI to the block diagram inside the loop. When the dialog window appears, select Single waveform from the Resulting data type list. Click OK. Wire the output of the Simulate Signal Express VI into the Convert from Dynamic Data Express VI. Wire the output of the Convert from Dynamic Data Express VI to the edge of the While Loop. Right-click the tunnel which appears and select Enable Indexing. 7. Make a copy of the While Loop. Select the While Loop, hold <Ctrl>, and drag the selected code to the right. 8. Change the new loop to a For Loop. Right-click the new loop and select Replace With For Loop. Move the numeric constant which is connected to the Greater Or Equal? function outside of the For Loop. Wire the constant into the count terminal of the For Loop. Change the value of the constant to 60. Delete the Greater Or Equal? function from the For Loop and delete the broken wires. 9. Compare the results of the two loops. Add an Equal? function to the block diagram. Wire the output of the For Loop to the x input of the Equal? function. Wire the output of the While Loop to the y input of the Equal? function. Right-click the Equal? function and select Comparison ModeCompare Aggregates. Right-click the output of the Equal? function and select CreateIndicator. Rename the indicator Equivalent Output?. Test 1. Run the VI. 2. The VI will run for 60 seconds. 3. When the VI is finished, check the indicator on the front panel to determine whether the two loops generate equivalent data. 4. Save the VI and close it when you are finished Answers Scenario 1 Acquire data every second for one minute. 1. While Loop: Time = 1 minute 2. For Loop: 60 iterations 3. Both are possible. 10

Scenario 2 Acquire pressure data until the pressure is 1400 psi. 1. While Loop: Pressure = 1400 psi 2. For Loop: unknown 3. A While Loop. Although you can add a conditional terminal to a For Loop, you still need to wire a value to the count terminal. Without more information, you do not know the appropriate value to wire to the count terminal. Scenario 3 Perform a repeated calculation for a number of iterations defined by a front panel control. 1. While Loop: Iterations = value of the control 2. For Loop: Defined by the front panel control 3. Both are possible.

11

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