Download presentation
Presentation is loading. Please wait.
Published byReijo Lattu Modified over 6 years ago
1
E. Timing a VI Atunci când o buclă termină execuția unei iterații, imediat începe executarea următoarei iterații, bineînțeles dacă nu este întâlnită o condiție de stop. Most often, you need to control the iteration frequency or timing. For example, if you are acquiring data, and you want to acquire the data once every 10 seconds, you need a way to time the loop iterations so they occur once every 10 seconds. This section introduces some methods for timing your loops.
2
Wait Functions Plasarea unei funcții de așteptare în interiorul unei bucle, permite VI-ului să “doarmă” un anumit interval de timp. Acest lucru permite procesorului să abordeze alte sarcini. Funcțiile Wait utilizează practic ceasul sistemului de operare. The Wait Until Next ms Multiple Function monitors a millisecond counter and waits until the millisecond counter reaches a multiple of the amount you specify. Use this function to synchronize activities. Place this function in a loop to control the loop execution rate. For this function to be effective, your code execution time must be less than the time specified for this function.The execution rate for the first iteration of the loop is indeterminate.
3
The Wait (ms) Function waits until the millisecond counter counts to an amount equal to the input you specify. This function guarantees that the loop execution rate is at least the amount of the input you specify. Elapsed Time In some cases, it is useful to determine how much time elapses after some point in your VI. The Elapsed Time Express VI indicates the amount of time that elapses after the specified start time. This Express VI keeps track of time while the VI continues to execute. This Express VI does not provide the processor with time to complete other tasks.
4
F. Iterative Data Transfer. Regiștrii de transfer (deplasare)
La programarea cu bucle (While sau For), de multe ori trebuiesc acceste datele din iterațiile anterioare. De exemplu, daca achizitionam date la fiecare iterație a unei bucle, și dorim sa calculăm media la fiecare 5 iterații, este necesară reținerea datelor din iterațiile anterioare. In acest caz se utilizează regiștrii de transfer.
5
Shift registers are similar to static variables in text-based programming languages.
A shift register appears as a pair of terminals directly opposite each other on the vertical sides of the loop border. 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.
6
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.
7
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. A shift register transfers any data type and automatically changes to the data type of the first object wired to the shift register. The data you wire to the terminals of each shift register must be the same type.
8
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.
9
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.
10
Initialized Shift Registers
Output = 5 Output = 5 Run Once VI stops execution Run Again
11
Uninitialized Shift Registers
Output = 8 Output = 4 Run Once VI stops execution Run Again
12
G. AFIȘAREA DATELOR Mediul de programare LabVIEW dispune, în meniul Graph al paletei de controale, de o serie de elemente pentru reprezentari grafice. Cele mai utilizate sunt cele aflate pe prima linie a meniului Graph: Waveform Chart (numit pe scurt Chart); Waveform Graph (numit pe scurtGraph) și XY Graph.
13
Figure 2.16. Paleta Controls și subpaleta Graph
14
Elementul Waveform Chart
Unui element de tip Chart i se pot trimite în mod succesiv, punct cu punct, valorile ordonatelor punctelor pe care sa le traseze grafic. Acesta afișază și reține datele care au fost achiziționate și de asemenea adaugă noile date achiziționate. Un element de tip Chart considera valorile succesive pe care le primeste drept ordonate ale punctelor de pe grafic. Abscisele punctelor sunt considerate automat crescatoare din unitate în unitate (0 pentru prima valoare primita, 1 pentru a doua s.a.m.d.).
15
Bucla While executa câte o iteratie la fiecare trei secunde (datorita functiei Wait (ms)). La fiecare iteratie, functia Random Number (0-1) trimite câte o valoare aleatoare la elementul Chart. Atunci când primeste o noua valoare, un element Chart traseaza un segment de dreapta din punctul cel mai recent (ultimul de pe grafic) pâna în punctul determinat de noua valoare primita.
16
Un element Chart accepta nu numai valori trimise punct cu punct (scalare) ci si siruri de valori (Array). Atunci când primeste un sir de valori (considerate de asemenea tot ordonate ale punctelor), un element Chart adauga la sfârsitul graficului deja existent, nu un singur punct ci un numar de puncte egal cu numarul de valori din sirul primit.
17
În figura de mai jos, la fiecare iteratie a buclei While (la fiecare trei secunde), bucla For genereaza un sir (Array) de sapte valori aleatoare, sir ce este trimis elementului Chart. La fiecare trei secunde, la graficul din elementul Chart sunt adaugate astfel înca sapte puncte.
18
Figure 2.19. Wiring Multiple Plots to a Waveform Chart
Waveform charts can display multiple plots together using the Bundle function located on the Cluster, Class & Variant palette. In Figure 2.19, the Bundle function bundles the outputs of the three VIs to plot on the waveform chart. Figure Wiring Multiple Plots to a Waveform Chart
19
Dacă un element Chart primeşte o matrice de valori numerice (Array cu două dimensiuni), atunci el va trasa simultan un număr de grafice, egal cu numărul de linii ale matricei. Indicatorul Waveform Graph Un element de tip Graph nu acceptă valori individuale (scalare) ci numai şiruri (Array) de valori. Spre deosebire de elementele Chart, atunci când primeşte un şir de valori, elementul Graph şterge graficul pe care îl afişase anterior şi afişează doar graficul format din noile puncte primite.
20
Pentru a vedea diferența dintre un Chart și un Graph, se va implementa VI-ul a cărei Diagramă Bloc este prezentată mai jos.
21
Graficul se va schimba şi în elementul Graph la fiecare trei secunde dar, spre deosebire de cel afişat de Waveform Chart, la afişarea unui şir nou valorile afişate anterior se vor pierde. Un element de tip Graph consideră, de asemenea, valorile succesive pe care le primeşte drept ordonate ale punctelor de pe grafic, iar abscisele punctelor sunt considerate automat crescătoare din unitate în unitate (0 pentru prima valoare primită, 1 pentru a doua ş.a.m.d.).
22
Elementele de tip Graph permit însă, suplimentar, definirea abscisei primului punct şi a distanţei pe orizontală dintre două puncte succesive. În această situaţie, valorile x0 şi Δx se introduc (printr-o funcţie Bundle) într-un Cluster împreună cu şirul de valori ce reprezintă ordonatele punctelor, iar la terminalul elementului Graph se conectează ieşirea funcţiei Bundle.
23
Figure 2.17. Definirea valorilor x0 şi Δx
24
Figure 2.23. Multiple-Plot Waveform Graphs
Dacă un element Graph primeşte o matrice de valori numerice (Array cu două dimensiuni), atunci el va trasa simultan un număr de grafice egal cu numărul de linii ale matricei. Figure Multiple-Plot Waveform Graphs
25
În situaţia în care se trasează mai multe grafice şi se doreşte definirea abscisei x0 a primului punct şi a distanţei Δx pe orizontală dintre două puncte succesive, mărimile respective vor fi aceleaşi pentru toate graficele. În funcţia Bundle, la cea de a treia intrare se conectează matricea de valori.
27
Indicatorul XY Graph Indicatorul de tip XY Graph acceptă la intrare un Cluster format din două şiruri (Array) de valori. Primul şir reprezintă abscisele, iar cel de-al doilea ordonatele punctelor de pe grafic. Evident, cele două şiruri trebuie să conţină acelaşi număr de valori. Atunci când se primeşte o astfel de structură de date, graficul anterior este şters.
28
Figure 2.24. The XY Graph Indicator
29
Fig.2.25. Diagrama bloc pentru generarea graficului funcţiei sinus
În figura de mai jos este arătat un program pentru trasarea graficului funcţiei sinus între 0 şi 2π prin 101 puncte. Fig Diagrama bloc pentru generarea graficului funcţiei sinus
30
Stabilind că punctele vor fi la distanţe egale pe orizontală, se determină întâi distanţa Δx pe abscisă dintre două puncte succesive, împărţind la 100 intervalul de trasare, de lungime 2π. Într-o buclă For cu numărul de iteraţii egal cu numărul de puncte, se determină la fiecare iteraţie abscisa unui punct cu relaţia xi= i·Δx şi se calculează ordonata y=sin(xi). La ieşirea din bucla For, şirurile de valori xi şi yi sunt grupate într-un cluster (cu funcţia Bundle), iar acesta este trimis la terminalul elementului XY Graph.
31
Dacă se doreşte trasarea simultană a mai multor grafice se construieşte pentru fiecare grafic câte un Cluster format din două Array-uri (unul pentru abscisele şi altul pentru ordonatele punctelor). Ieşirile funcţiilor Bundle se conectează la o funcţie Build Array, iar ieşirea funcţiei Build Array se conectează la terminalul elementului XY Graph.
32
Opţiuni proprii indicatoarelor grafice
În meniurile proprii ale indicatoarelor grafice se află sub-meniul Visible Items, care conţine o serie de opţiuni conform listei din figura de mai jos, prin intermediul cărora se pot obţine facilităţi de afişare. Fig. Opţiunile din submeniul Visible Items
33
Selectând opţiunea Plot Legend, ca pe figura precedentă, se afişează o legendă, ca în figura alăturată, ce poate fi poziţionată independent, sau dimensionată pentru a avea un număr de poziţii egal cu numărul de grafice reprezentate. Numele graficelor (iniţial Plot 0, Plot 1 s.a.m.d.) pot fi modificate cu ajutorul uneltei de editare a textelor. Fig. Opţiunea Plot Legend
34
Apăsând butonul drept al mouse-ului atunci când cursorul este poziţionat deasupra unui grafic din legendă, se deschide un meniu propriu din care pot fi configurate opţiuni de afişare ale graficului respectiv: culoare, tip şi grosime de linie. Opţiunea Scale Legend, din acelaşi submeniu şi redată în figura următoare, afişează o componentă ce permite configurarea modului în care sunt afişate scalele indicatorului de reprezentare grafică: eticheta scalei, formatul şi precizia de reprezentare, vizibilitatea scalei sau a etichetei acesteia, culoarea caroiajului.
35
Pentru fiecare scală sunt disponibile:
un buton (notat cu X sau Y), la a cărui apăsare se realizează o autoscalare pe direcţia respectivă; un buton (marcat cu un lacăt) care, atunci când este apăsat, menţine continuu autoscalarea pe direcţia corespunzătoare. De regulă, pentru axa X se afişează Time, având semnificaţia de axă a timpului, ceea ce este util pentru semnalele care evoluează în raport cu timpul, dar se pot asocia şi alte semnificaţii.
36
H. Luarea deciziilor într-un VI.
Simple Decision: Select Function If Temp Scale is TRUE, pass top input; If temp scale is FALSE, pass bottom input. If the decision to be made is more complex than a Select function can execute, a Case Structure may be what is required.
37
Figure 2.25. Structura de selecție Case
Structura Case Structura de selectie Case - contine multiple subdiagrame, numai una din acestea executându-se depinzând de valoarea de intrare transmisă structurii. Figure Structura de selecție Case
38
Selecting a Case Figure 2.26 shows a VI that uses a Case structure to execute different code dependent on whether a user selects °C or °F for temperature units. The top block diagram shows the True case in the foreground. In the middle block diagram, the False case is selected. To select a case, enter the value in the case selector identifier or use the Labeling tool to edit the values. After you select another case, that case displays on the block diagram, as shown in the bottom block diagram of Figure 2.26.
39
Figure 2.26. Changing the Case View of a Case Structure
40
Boolean Case Structure Figure 2.27 shows a Boolean Case structure.
Figure Boolean Case Structure If the Boolean control wired to the selector terminal is True, the VI adds the numeric values. Otherwise, the VI subtracts the numeric values.
41
Integer Case Structure Figure 2.28 shows an integer Case structure.
Figure Integer Case Structure If the Integer wired to the selector terminal is 0 (add), the VI adds the numeric values. If the value is1 (subtract), the VI subtracts the numeric values. If Integer is any other value than 0 (add) or 1 (subtract), the VI adds the numeric values, because that is the default case.
42
Figure 2.29 shows a string Case structure.
Figure String Case Structure If String is add, the VI adds the numeric values. If String is subtract, the VI subtracts the numeric values.
43
Enumerated Case Structure
Figure 2.30 shows a enumerated Case structure. Figure Enumerated Case Structure If Enum is add, the VI adds the numeric values. If Enum is subtract, theVI subtracts the numeric values.
44
Using Case Structures for Error Handling
The following example shows a Case structure where an error cluster defines the cases. Figure No Error Case
45
Figure Error Case When you wire an error cluster to the selector terminal of a Case structure, the case selector label displays two cases—Error and No Error—and the border of the Case structure changes color—red for Error and green for No Error. If an error occurs, the Case structure executes the Error subdiagram.
46
I. Structura secvențială (Sequence)
Această structură se foloseşte atunci când se doreşte execuţia programului într-o anumită ordine preferenţială, alta decât fluxul de date oferit de LabVIEW. O structură secvențială conţine una sau mai multe subdiagrame sau cadre (frame) care se execută în ordine secvenţială. Există două secvenţe structurale: structură secvenţială plată (Flat Sequence Structure) şi structură secvenţială stivuită (Stacked Sequence Structure).
47
Structura secvenţială plată
Structura secvenţială plată se utilizează pentru a asigura execuţia unei subdiagrame înainte sau după o altă subdiagramă. Adăugarea unei noi structuri secvenţiale se obţine prin click - dreapta pe chenarul structurii şi apelarea facilităţii dorite din meniul contextual. Un clik – dreapta pe bara orizontală a chenarului oferă două facilităţi: introducerea unei structuri secvenţiale în faţă (Add Frame Before) sau introducerea unei structuri după (Add Frame After).
48
Un click – dreapta pe bara verticală a chenarului oferă doar una din cele două posibilităţi: pe bara stângă permite Add Frame Before iar pe bara dreaptă permite Add Frame After. Un click-dreapta pe o bară verticală a chenarului pentru o structură secvenţială intermediară oferă facilitatea Insert Frame. Structurile secvenţiale plate se execută de la stânga la dreapta când toate datele legate la cadru sunt disponibile. Se recomandă structura secvenţială plată pentru a evita secvenţele locale şi pentru o documentare mai bună a diagramei bloc.
49
În primul cadru se realizează operaţia de multiplicare a valorii controlui introdus în panoul frontal iar rezultatul este transferat spre cadrul 2. În cadrul 2 şi 3 se execută alte două operaţii matematice care se bazează pe rezultatul anterior. Condiţionarea privind succesiunea operaţiilor şi o ordonare clară a diagramei s-a soluţionat astfel prin structura secvenţială plată. Figure Structură secvențială plată
50
Structura secvenţială stivă
Atunci cand este dispusa in diagrama, o structura Sequence stivă, contine o singura fereastra, aceasta fiind totodata si fereastra curenta (vizibila). Deschizand meniul propriu al structurii si alegand una din optiunile Add Frame After sau Add Frame Before, se poate adauga o fereastra dupa sau inaintea celei curente.
51
Daca o structura Sequence stivă contine mai mult de o fereastra, atunci ferestrele primesc indici (numere de ordine) incepand cu 0, iar pe latura superioara a conturului structurii apare un selector prin intermediul caruia se poate trece de la o fereastra la alta. Atunci cand o structura Sequence stivă contine cel putin doua ferestre, ordinea acestora poate fi schimbata: se modifica indicele ferestrei curente, selectand optiunea Make This Frame, apoi noul indice. Atunci cand se doreste transferul unei valori intre doua ferestre ale unei structuri Sequence, prin selectarea optiunii Add Sequence Local se dispune pe conturul structurii o variabila locala a acesteia (sub forma unui patrat galben).
52
Daca, in una din ferestrele structurii, se conecteaza o valoare la variabila locala, fereastra respectiva devine fereastra sursa pentru acea variabila. In acea fereastra, simbolul variabilei locale contine o fereastra indreptata spre exteriorul structurii. In ferestrele anterioare ferestrei sursa, simbolul variabilei locale devine hasurat, semn ca valoarea variabilei locale nu este accesibila in acele ferestre.
53
In ferestrele de dupa fereastra sursa, simbolul variabilei locale va contine o sageata indreptata spre interiorul structurii. In aceste ferestre, valoarea transferata prin intermediul variabilei locale poate fi utilizata in fluxul de date. O structura Sequence poate dispune de mai multe variabile locale. Intr-o structura Sequence pot fi utilizate valori provenite din fluxul de date exterior. O valoare introdusa din exterior intr-o structura Sequence va putea fi utilizata in oricare dintre ferestrele structurii. Daca, intr-o anumita fereastra, se face o legatura din structura Sequence in exteriorul acesteia, la iesirea respectiva (patratul de pe contur) nu va mai putea fi legata o alta valoare din alta fereastra (ar exista o incertitudine privind valoarea care iese din structura). Indiferent de indicele ferestrei in care s-a facut o legatura spre exterior, valoarea va parasi iesirea de pe conturul structurii Sequence doar dupa executarea ultimei ferestre.
54
În figura alăturată se prezintă o structură secvenţială stivă formată din 3 cadre (0, 1, 2) cadrul activ în figura prezentată fiind cadrul 1. În fiecare cadru se pot introduce nodurile existente sau edita altele noi. Diagrama care trebuie execută prima se introduce în cadrul “0”, diagrama care trebuie executată a doua în cadrul “1” s.a.m.d. O exemplificare a utilizării structurii secvenţiale stivă este prezentată în figura de mai jos Exemplu de structură secvenţială stivă: a – cadru 0; b – cadru 1; c – cadru 2 In primul cadru se realizează conform schemei logice impuse o operaţie de multiplicare iar rezultatul este vizualizat prin indicatorul Numeric 2 şi utilizat atât în cadrul 2 cât şi în cadrul 3. Acest lucru este posibil prin crearea secvenţei locale apelând din meniul contextual pentru click dreapta pe conturul vertical al cadrului. Secvenţa locală devine activă după conectarea unui fir la aceasta. Starea activă este semnalizată prin apariţia unei săgeţi în interiorul semnului alocat secvenţei. Pe acelaşi principiu rezultatul operaţiei matematice din cadrul 2 este posibil să fie utilizat în cadrul 3 (dar nu şi în cadrul 1, fluxul datelor fiind doar spre cadrele de ordin superior).
55
J. Nodul Formulă (Formula Node)
Nodul Formulă facilitează scrierea în interiorul său, a formulelor matematice de calcul. Se recomandă utilizarea Nodului Formulă pentru implementarea formulelor complexe. Avantajele Nodului Formulă sunt următoarele: se uşurează scrierea, depanarea şi înțelegerea formulelor matematice; se elimină erorile care pot să apară la transcrierea formulelor matematice complexe în limbajul G, care foloseşte noduri şi fire; se reduce suprafața ocupată în diagrama bloc de formule matematice, implementate prin noduri şi fire.
56
Nodul Formulă este disponibil în caseta cu funcții şi VI-uri, în grupul „Structuri” (Structures).
Instrucțiunile de prelucrare din interiorul nodului se scriu într-o sintaxa asemănătoare limbajelor de programare, bazate pe text. Nodul Formulă defineşte operațiile prin una sau mai multe instrucțiuni de atribuire, fiecare terminându-se prin caracterul punct şi virgulă (;). Se precizează că o instrucțiune se poate întinde pe mai multe linii text; numărul maxim de caractere, care încap pe o linie, este dat de dimensiunea tipului de caractere folosit şi de dimensiunea orizontală a Nodul Formulă.
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.