cap.4

27
4. Bucle de control și regiștri de transfer A. Bucla While B. Bucla For C. Regiștri de transfer

Upload: costelgxa

Post on 23-Jan-2015

154 views

Category:

Documents


2 download

DESCRIPTION

Instrumentatie virtuala

TRANSCRIPT

Page 1: Cap.4

4. Bucle de control și regiștri de transfer

A. Bucla While

B. Bucla For

C. Regiștri de transfer

Page 2: Cap.4

• The different Loops and Structures available is located in the “Structures” sub palette in the Functions palette on the Block Diagram.

• The most important loops are:

For Loop While Loop

Page 3: Cap.4

A. Bucla While

Similar comportarii unei bucle Do sau a unei bucle Repeat-Until (=repetă până când) în cadrul limbajelor de programare bazate pe text, o buclă While execută o subdiagramă până când este întâlnită o condiție.

Page 4: Cap.4

• A While loop repeats the sub diagram inside it until the conditional terminal, an input terminal, receives a particular Boolean value. The Boolean value depends on the continuation behavior of the While Loop. Right-click the conditional terminal and select Stop if True or Continue if True from the shortcut menu. You also can wire an error cluster to the conditional terminal, right-click the terminal, and select Stop on Error or Continue while Error from the shortcut menu. The While Loop always executes at least once.

• Below we see an empty While loop:

Page 5: Cap.4

Do

(Execută diagrama din interiorul buclei)

While Condition is TRUE

1. Selectare buclă While 2. Înlănțuirea codului a fi repetat

3. Adăugarea de noduri suplimentare și apoi realizarea legăturilor

Terminal condiționare

Terminal iterație

Page 6: Cap.4

Selectarea condițiilor buclei• Clic dreapta în terminalul condiționare pentru definirea opririi buclei• Pe marginile buclei se pot crea regiștri de deplasare care transferă datele

de la o iterație la următoarea

Terminal iterație Terminal condiționare

Page 7: Cap.4

Structure Tunnels

• Tunnels feed data into and out of structures. • The tunnel is a block that appears on the border; the color of

the block is related to the data type wired to the tunnel. • When a tunnel passes data into a loop, the loop executes

only after data arrive at the tunnel.

• Data pass out of a loop after the loop terminates.

Page 8: Cap.4

Exemple de bucle While

În diagrama bloc din figură, bucla While este executată până când ieșirea funcției de multiplicare este mai mare sau egală cu 5, iar controlul Enable este Adevărat (True). Funcția ȘI (AND) returnează la ieșire valoarea True doar dacă cele două intrări sunt True. Altfel ieșirea este False.

Page 9: Cap.4

• This example run until either the user clicks the stop button or number of iterations is greater than 10.

Page 10: Cap.4
Page 11: Cap.4

• VI-ul din figura de mai jos generează numere aleatoare, până când numărul generat corespunde cu numărul specificat. Terminalul iteratie înregistrează numărul de numere aleatoare generate, până când apare numărul specificat.

Page 12: Cap.4

Următorul VI, va simula aruncarea a două zaruri și va determina numărul de aruncări necesare până cele două zaruri corespund.

Page 13: Cap.4

B. Bucla For

O buclă For execută o subdiagramă de un număr de ori, număr specificat de terminalul de numărare N.

Page 14: Cap.4

• Plasaţi bucla For în DB selectând-o din paleta Structs & Constants aflată în meniul Functions.

• O buclă For este un element redimensionabil. • Ea execută diagrama din interiorul său de un număr predeterminat de ori. • Bucla For are două terminale: terminalul de numărare N (un terminal de intrare) şi

terminalul de iterare i (un terminal de ieşire). Terminalul de numărare arată de câte ori se execută bucla. Terminalul de iteraţie arată de câte ori a fost executată bucla.

• Pe marginile buclei se pot crea regiștri de deplasare care transferă datele de la o iterație la următoarea

Terminalul de numărare Terminalul de numărare (terminal de intrare)(terminal de intrare)

Terminal iterație(terminal de ieșire)

Page 15: Cap.4

Timing Functions

Wait Until Next ms Multiple

Wait (ms)

Time Delay

Page 16: Cap.4

Numeric Conversion• Numerics default to double-precision (8 bytes) or long integer

(4 bytes)• LabVIEW automatically converts to different representations• For Loop count terminal always converts to a long integer• Gray coercion dot on terminal indicates conversion

Page 17: Cap.4

• LabVIEW chooses the representation that uses more bits. • If the number of bits is the same,

LabVIEW chooses unsigned over signed.• To choose the representation,

right-click on the terminal and select Representation.

• When LabVIEW converts floating-point numerics to integers, it rounds to the nearest integer. LabVIEW rounds x.5 to the nearest even integer. For example, LabVIEW rounds 2.5 to 2 and 3.5 to 4.

Page 18: Cap.4

C. Regiștrii de transfer• 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.

Page 19: Cap.4
Page 20: Cap.4

• 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. 

Page 21: Cap.4

• VI-ul din figura de mai jos folosește registrii de deplasare si o 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.

Page 22: Cap.4

VI-ul din figura de mai jos folosește registrii de deplasare si o bucla While, ce simulează un semafor

Page 23: Cap.4

Feedback Nodes

• Appears automatically in a For Loop or While Loop if you wire the output of a subVI, function, or group of subVIs and functions to the input of that same VI, function, or group.

• Stores data when the loop completes an iteration, sends that value to the next iteration of the loop, and transfers any data type

Page 24: Cap.4

• Wire from output to input to automatically create a feedback node

<OR>• Place a feedback node

from the Functions»Structures palette

Page 25: Cap.4

Initialized Shift Registers & Feedback Nodes

Run Once VI stops execution Run Again

Output = 5Output = 5

Output = 5 Output = 5

Page 26: Cap.4

Uninitialized Shift Registers & Feedback Nodes

Run Once VI stops execution Run Again

Output = 8Output = 4

Output = 4 Output = 8

Page 27: Cap.4

Summary

• Two structures to repeat execution: While Loop and For Loop

• Loop timing controlled using Wait Until Next ms Multiple function, the Wait (ms) function, or the Time Delay Express VI.

• Coercion dots appear where LabVIEW coerces a numeric representation of one terminal to match the numeric representation of another terminal

• Feedback nodes and shift registers transfer data values from one iteration to the next

• Use shift registers only when more than one past iteration is needed