Presentation is loading. Please wait.

Presentation is loading. Please wait.

III. Tablouri (Arrays) și Clustere

Similar presentations


Presentation on theme: "III. Tablouri (Arrays) și Clustere"— Presentation transcript:

1 III. Tablouri (Arrays) și Clustere
Sometimes it is beneficial to group data related to one another. Use arrays and clusters to group related data in LabVIEW. Arrays combine data of the same data type into one data structure, and clusters combine data of multiple data types into one data structure. This lesson explains arrays and clusters, and applications where using these can be beneficial.

2 Topics Arrays Clusters

3 A. Arrays Spre deosebire de elementele scalare, care reprezentau o singura valoare, de un anumit tip (numeric, boolean, alfanumeric), elementele vectoriale (Array) pot contine, într-o manieră ordonată, mai multe valori de acelasi tip. Un tablou este o colecţie de elemente ale datelor care sunt toate de acelaşi tip. Un tablou are una sau mai multe dimensiuni şi poate avea până la 231 – 1 de elemente pe dimensiune, sau cât permite memoria.

4 Tablourile, în LabVIEW, pot fi de orice tip: numerice, Booleane, tip cale, stringuri, unde, și tip clustere (exceptând şiruri, tabele sau grafice). Se poate accesa fiecare element al tabloului prin index-ul său. Index-ul este în gama (0, N-1) unde N este numărul elementelor din tablou. Tabloul unidimensional (1D) arătat mai jos ilustrează această structură. De notat că primul element are index-ul 0, al doilea element are index-ul 1, etc..

5 Figure 3. 1 shows an example of an array of numerics
Figure 3.1 shows an example of an array of numerics. The first element shown in the array (3.00) is at index 1, and the second element (1.00) is at index 2. The element at index 0 is not shown in this image, because element 1 is selected in the index display. The element selected in the index display always refers to the element shown in the upper left corner of the element display. Figure 3.1. Array Control of Numerics

6 Crearea Array-urilor de Controale și Indicatoare
Se va selecta Array din subpaleta Controls >> All Controls >> Array and Cluster Atunci cand un element de tipul Array se dispune pe panou, tipul datelor pe care acesta le va contine nu este inca definit. Se spune ca elementul de tip Array este vid. Terminalul din diagrama bloc al elementului este de culoare neagra. Sageata Run este sparta, semn ca programul este incomplet si nu poate fi rulat. Pentru a defini tipul de date, in elementul de tip Array trebuie introdus un element de control sau indicator scalar de tipul dorit (numeric, boolean, alfanumeric, e.t.c.). Elementul scalar ce urmeaza a fi introdus in Array poate exista deja pe panou sau poate fi selectat la momentul respectiv din paleta de elemente. To create an array control or indicator as shown, select an array on the Controls»All Controls»Array & Cluster palette, place it on the front panel, and drag a control or indicator into the array shell. If you attempt to drag an invalid control or indicator such as an XY graph into the array shell, you are unable to drop the control or indicator in the array shell. You must insert an object in the array shell before you use the array on the block diagram. Otherwise, the array terminal appears black with an empty bracket. Un tablou de bază gol este arătat mai jos. Pentru a creea un tablou, se deplasează obiectul dată în interiorul unei ferestre Data Object sau se depune obiectul direct într-o fereastră folosind meniul pop-up al ferestrei.

7 Modul de plasare a unui obiect de date (în cazul acesta Control Numeric), într-un tablou:
EXERCITIU Să se dispună pe panoul unei aplicatii: - un Array cu valori numerice; - un Array cu valori booleene; - un Array cu valori alfanumerice. Transformati cele trei Array-uri din elemente de control in elemente indicatoare. To add dimensions to an array one at a time, right-click the index display and select Add Dimension from the shortcut menu. You also can use the Positioning tool to resize the index display until you have as many dimensions as you want.

8 Two-Dimensional Arrays
The previous examples use 1D arrays. A 2D array stores elements in a grid. It requires a column index and a row index to locate an element, both of which are zero-based. Figure 3.2 shows an 8 column by 8 row 2D array, which contains 8 × 8 = 64 elements. Figure D Array

9 To add a multidimensional array to the front panel, right-click the index display and select Add Dimension from the shortcut menu. You also can resize the index display until you have as many dimensions as you want. Initializing Arrays You can initialize an array or leave it unitialized. When an array is initialized, you defined the number of elements in each dimension and the contents of each element. An uninitialized array contains a fixed number of dimensions but no elements. Figure 3.3 shows an uninitialized 2D array control. Notice that the elements are all dimmed. This indicates that the array is uninitialized. Figure D Uninitialized Array

10 In Figure 3.4, six elements are initialized.
In a 2D array, after you initialize an element in a row, the remaining elements in that row are initialized and populated with the default value for the data type. For example, in Figure 3.5, if you enter 4 in to the element in the first column, third row, the elements in the second and third column in the third row are automatically populated with a 0. Figure 3.4. An Initialized 2D Array with Six Elements Figure 3.5. An Array That Has Been Autopopulated with Zeroes

11 In mod implicit, atunci cand este creat, un Array are o singura dimensiune, putand fi descris drept o matrice coloana. Terminalul unui element Array se caracterizeaza prin prezenta unor paranteze drepte a caror grosime este proportionala cu numarul de dimensiuni. Atunci cand se realizeaza legaturi in diagrama, conexiunile pe care circula un Array cu o dimensiune sunt mai groase decat cele pe care circula valori scalare. Pentru Array-urile cu doua sau mai multe dimensiuni, conexiunile sunt reprezentate cu linie dubla. Spatiul intermediar al liniei duble este cu atat mai mare cu cat numarul de dimensiuni ale Array-ului este mai mare.

12 Creating Array Constants
1. Select Array Constant shell from the Array subpalette 2. Place the data object in the array shell Creating array constants uses the same two-step process as a front panel array. Select an array constant from the Array subpalette of the Functions palette. Place a constant data type inside the empty array shell. Note again that the data types are “grayed-out” and must be manually defined if the user wants to store values in the array constant. Atunci cand este necesara existenta in diagrama a unei constante Array, aceasta poate fi selectata din meniul cu functii pentru valori vectoriale (Array) al paletei de functii.

13 La dispunerea sa in diagrama, similar elementelor Array de pe panou, o astfel de constanta nu are definit tipul de date pe care le va contine. Definirea tipului de date se realizeaza prin introducerea in chenarul constantei Array a unei constante de tipul dorit (numeric, boolean sau alfanumeric). O constanta Array permite aceleasi operatii de definire a numarului de valori vizibile sau de modificare a numarului de dimensiuni ca si elementele Array din panou.

14 Crearea și utilizarea Tablourilor
Auto-Indexarea – buclele acumulează array-urile la marginile lor. În mod implicit, buclele For sunt auto-indexate, în timp ce buclele While, nu.

15 Crearea Tablourilor cu ajutorul Buclelor
• Buclele acumulează tablourile la marginile lor • Auto Indexarea poate fi eliminată • Se pot utiliza două Bucle For, una în interiorul celeilalte, pentru crearea unui Array 2D. • Bucla For exterioară crează elementele rânduri, iar Bucla For interioară crează elementele coloană.

16 Auto-Index Input An array input can be used to set the For Loop count terminal. Number of elements in the array equals the count terminal input. Run arrow not broken If you enable auto-indexing on an array wired to a For Loop input terminal, LabVIEW sets the count terminal to the array size so you do not need to wire the count terminal. In the following example, the For Loop executes a number of times equal to the number of elements in the array. Normally, if the count terminal of the For Loop is not wired, the run arrow is broken. However, in this case the run arrow is not broken. Auto-indexing can be used on input arrays: For calculations to be performed on each element of array, use auto-indexing. To pass the entire array into a loop, disable auto-indexing.

17 Funcții Array Pentru a obtine in mod dinamic (programatic), structuri de valori de tipul Array, pot fi utilizate o serie de functii specifice.

18 Common Array Functions
Array Size Functia „Dimensiune Tablou” (Array Size), returneaza numarul de elemente ale fiecarei dimensiuni ale tabloului de intrare. LabVIEW has many functions to manipulate arrays in the Array subpalette of the Functions palette. Array Size: The number of elements in the input array: 1D array: Output is a numeric. Multidimensional array: Array output with elements signifying size of each dimension. (Example: A 2 x 4 array will output array of two elements, with first element = 2 and second element = 4). Initialize Array: Creates an array of n dimensions containing the value tied to the element input. Initialize array can be “stretched out” to add more “dimension size” input terminals. You must have one “dimension size” input terminal for each dimension in the array. Initialize Array Functia „Initializeaza tablou” (Initialize Array), realizeaza initializarea elementelor unui tablou cu N dimensiuni cu o valoare indicata.

19 Array Subset Functia „Subtablou” (Array Subset), returneaza un numar specificat din elementele unui tablou, începand de la un indice. Returns a portion of an array starting at index and containing length elements. For example, if you use the previous array as the input, the Array Subset function returns the following array for an index of 2 and a length of 3.

20 The Build Array Function
Appending an element Concatenate Inputs Build Array: Concatenates elements together into one array or concatenates multiple arrays together into arrays of higher dimension. Build array can be “stretched-out” to add additional input terminals Input terminals are set as Array input or Element input. Popping up on the input terminals allows selection of Change to Array/Element input. To concatenate arrays or elements together into one longer array, arrays must be tied to Array input terminals and single elements must be tied to Element input terminals. To create a higher dimensional array, arrays must be tied to Element input terminals. Students often are confused by the difference. Demonstrate on your machine the difference between “Array” and “Element” input. Building a higher dimension array

21 The Index Array Function
Extracting an Element Extracting a Row Index Array: accesses a specific element of the input array. Index Array can be “stretched-out” to add more index terminals. You must have one index terminal for each dimension in the input array. The slide example shows accessing a single element of a one-dimensional array. Index Array does not remove the element from the array. Remind students that arrays start their indices at zero. Index 2 in the example actually accesses the third element in the array. Extracting an Element of a Row

22 Modurile în care un Array se poate comporta la intrarea sau la iesirea dintr-o structura repetitiva sunt valabile si in cazul buclelor While, cu deosebirea ca, in cazul acestora, comportamentul implicit este inversat: -in mod implicit, o bucla While va prelua la fiecare iteratie intreg Array-ul de intrare. Doar in cazul in care componentei de pe contur i se selecteaza, din meniul propriu, optiunea Enable Indexing, bucla While va prelua cate o valoare la fiecare iteratie. -in mod implicit, daca o valoare din interiorul unei bucle While se conecteaza la conturul acesteia, componenta de pe contur va genera, dupa incheierea executiei buclei, doar valoarea primita in ultima iteratie. Doar daca se selecteaza optiunea Enable Indexing a componentei de pe contur, aceasta va genera, dupa incheierea ultimei iteratii, un Array cuprinzand valorile primite in cadrul tuturor iteratiilor.

23 Functiile aritmetice si logice pentru valori scalare, precum si cele pentru valori alfanumerice, permit conectarea de Array-uri continand valori de tipurile corespunzatoare. Se pot astfel realiza: - operatii aritmetice asupra valorilor dintr-un Array (radăcina pătrată, functii trigonometrice etc.), între un Array și o valoare scalara sau intre doua Array-uri; - operatii logice intre un Array si o valoare booleana sau intre doua Array-uri cu valori booleene; -operatii asupra Array-urilor de valori alfanumerice.

24 Functiile Add Array Elements si Multiply Array Elements determina suma, respectiv produsul valorilor numerice dintr-un Array. Functiile And Array Elements si Or Array Elements efectueaza operatiile logice SI, respectiv SAU, asupra tuturor valorilor booleene dintr-un Array, obtinand o valoare booleana scalara. Atunci cand au drept operanzi un Array si o valoare scalara sau doua Array-uri, functiile de comparatie genereaza un Array de valori booleene, compararea fiind efectuata valoare cu valoare.

25 Daca, din meniul propriu al functiei de comparatie, se alege optiunea Compare Aggregates, functia va genera o valoare booleana scalara. De exemplu, daca se compara doua Array-uri de valori numerice cu functia Equal? in starea Compare Aggregates, functia va genera valoarea True doar daca este indeplinita conditia de egalitate intre toate perechile de valori aflate pe aceleasi pozitii in cele doua Array-uri.

26 Functia Number To Boolean Array, aflata in meniul pentru functii booleene, transforma un numar natural intr-un Array de valori booleene, efectuand de fapt transformarea din baza 10 in baza 2. Bitul cel mai putin semnificativ este reprezentat in Array de valoarea cu indicele 0. De exemplu, valoarea 6= este transformata intr-un Array cu trei valori booleene: (False, True, True). Functia Boolean Array To Number realizeaza transfor-marea inversa, dintr-un Array de valori booleene intr-un numar natural.

27 Polimorfism Poliformismul reprezintă capabilităţile funcţiilor din LabView (de ex. adunare, înmulţire, împărţire) de a accepta la intrare date cu dimensiuni şi reprezentări diferite. Funcţiile aritmetice care posedă aceste proprietăţi se numesc funcţii polimorfice. Un exemplu clasic pentru această proprietate este poliformismul funcţiei adiţionale scalar – scalar, scalar – matrice și matrice-matrice de dimensiuni diferite. Rezultatul Combinația Scalar+Scalar Scalar Array Array+scalar Array Array+Array Array Array+Array

28 B. Clustere Sunt structuri de date care grupează datele împreună.
Datele pot fi de tipuri diferite (numerice, Booleene, stringuri, e.t.c.). Elementele trebuie să fie, fie toate controale, fie toate indicatoare. Analog cu o legătură de fire dintr-un cablu. Fiecare fir din cablu reprezintă un element al clusterului.

29 Deoarece un cluster are un singur fir (de intrare sau de ieșire) chiar dacă acesta transportă multiple valori de diferite date, clusterele reduc firele și numărul de terminale conector pe care un subVI le necesită. Figura de mai jos ilustrează conceptul de grupare, respectiv degrupare, a elementelor de date într-un cluster.

30 Cluster Controls and Indicators
1. Select a Cluster shell from the Array & Cluster subpalette 2. Place objects inside the shell Demonstrate how to create a cluster front panel object by choosing Cluster from the Array & Cluster palette. This option gives you a shell (similar to the array shell when creating arrays). You can size the cluster shell when you drop it. right-click inside the shell and add objects of any type. Note: You can have a cluster inside of a cluster. The cluster becomes a control or an indicator cluster based on the first object you place inside the cluster. Create a cluster constant on the block diagram by choosing Cluster Constant from the Cluster palette. This gives you an empty cluster shell. You can size the cluster when you drop it. Put other constants inside the shell. Note: You cannot place terminals for front panel objects in a cluster constant on the block diagram, nor can you place “special” constants like the Tab or Empty String constant within a block diagram cluster shell.

31 Creating Cluster Constants
1. Select Cluster Constant shell from the Cluster subpalette You create a cluster constant on the block diagram by selecting a cluster constant on the Functions»All Functions»Cluster palette, placing it on the block diagram, and dragging a constant into the cluster shell. If you have a cluster control or indicator on the front panel and you want to create a cluster constant containing the same elements on the block diagram, you can either drag that cluster from the front panel to the block diagram or right-click the cluster on the front panel and select Create»Constant from the shortcut menu. 2. Place objects in the Cluster shell

32 Cluster Order Elements have a logical order (start with 0)
To change order, right-click the border and select Reorder Controls in Cluster... Elements are assigned an order based on the order in which they are added to the cluster. For example, if you have two Booleans and you want to update one of them, you need to know which is which. You can change the order of the elements by popping up on the edge of the cluster and choosing Cluster Order. A small number appears next to each object. You can then change the order. (Hint: Click on each object in the order in which you want the cluster order. This will renumber the objects as desired.) Demonstrate how to create a cluster with two Booleans, a numeric control, an array, and a string. Show that if you change one object to an indicator, all objects are changed to indicators. Modify the cluster order. Emphasize how to easily make clusters using the Create Constant/Control/Indicator options on the block diagram, and by copying/pasting clusters on the front panel. This will save the students significant time when working on the exercises, and prevent possible bad wires due to incorrect cluster order.

33 Utilizarea Clusterelor pentru transferul datelor în SubVI-uri
Unul dintre avantajele clusterelor este acela că acestea pot fi utilizate pentru gruparea datelor la intrarea și respectiv ieșirea subVI-urilor. Clusterele reduc astfel numărul de fire într-o diagramă. One advantage of clusters is that you can use them to group information together to pass into and out of subVIs. Clusters overcome the limit of 28 terminals for passing data between VIs. If you have a great deal of information to pass, group it into logical units using clusters, pass a single cluster into the subVI, and then unbundle the cluster in the subVI. Clusters can reduce the number of wires in diagrams, so there are fewer wires going into and out of the subVIs. Explain the diagram on the slide.

34 Funcții Cluster Aceste funcții se găsesc în subpaleta Cluster, Class & Variant a paletei Functions>>Programming Bundle function—Forms a cluster containing the given objects (explain the example). Bundle by Name function—Updates specific cluster object values (the object must have an owned label). Note: You must have an existing cluster wired into the middle terminal of the function to use Bundle By Name.

35 Funcţia Bundle Grupează mai multe componente, realizând un grup, sau înlocuieşte una sau mai multe componente ale unui grup existent. Gruparea elementelor se realizează în ordinea acestora în cadrul grupului. Prima componentă conectată la funcţia Bundle este componenta cu index-ul 0, urmează componenta cu index-ul 1, s.a.m.d. Numărul de intrări poate fi modificat fie prin selectarea Add Input din meniul contextual al intrării fie utilizând unealta de poziţionare / redimensionare din caseta Tools.

36 O altă exemplificare a utilităţii funcţiei Bundle este prezentată în figura de mai jos.
Constanta numerică (setată la valoarea 0) defineşte punctul de origine real iar prin controlul numeric se impune valoarea de incrementare. Funcţia Bundle reuneşte datele numerice permiţând reprezentarea grafică.

37 Funcţia Bundle poate fi utilizată și pentru înlocuirea unor componente ale unui grup (cluster) deja existent. În acest caz, grupul trebuie conectat la intrarea cluster a funcţiei. În cadrul aplicaţiei de mai jos, funcţia bundle permite înlocuirea valorii numerice corespunzatoare controlului Knob şi respectiv a controlului Numeric 2, cu valorile numerice corespunzătoare controalelor knob_input, respectiv Numeric 2_input.

38 Funcţia Bundle by Name Funcţia Bundle by Name este folosită doar pentru înlocuirea unei componente dintr-un grup existent. Modul de lucru este asemănător cu cel prezentat anterior. Cluster-ul existent se conectează la intrarea specificată a funcţiei (input cluster). În ordinea logică a construcţiei se introduce controlul care va înlocui o componentă. Componenta de înlocuit se va identifica după numele reprezentat prin eticheta asociată. Numărul posibilităţilor de înlocuire se pot vizualiza din meniul contextual al intrării funcţiei prin selectarea opţiunii Select Item.

39 Funcțiile Unbundle și Unbundle by Name
Descompunerea (degruparea) grupurilor (clusterelor) în componente, se realizează cu ajutorul a două funcţii, Unbundle şi Unbundle by Name.

40 Error Clusters Use the error in and error out clusters in each VI you use or build to handle errors in the VI. The error clusters located on the Controls»Array & Cluster palette include the components of information shown Error cluster contains the following information: Boolean to report whether error occurred Integer to report a specific error code String to give information about the error Error clusters are a powerful means of handling errors. The LabVIEW DAQ VIs, File I/O functions, networking VIs, and many other VI’s use this method to pass error information between nodes. The error cluster contains the following elements: status, a Boolean which is set to True if an error occurs. code, a numeric which is set to a code number corresponding to the error that occurred. source, a string which identifies the VI in which the error occurred. When you perform any kind of I/O, consider the possibility that errors will occur. Almost all I/O functions return error information. Include error checking in VIs, especially for I/O operations such as file, serial, instrumentation, data acquisition, and communication operations, and provide a mechanism to handle errors appropriately. Checking for errors in VIs can help you identify the following problems: You initialized communications incorrectly or wrote improper data to an external device. An external device lost power, is broken, or is not working properly. You upgraded the operating system software, which changed the path to a file or the functionality of a VI or library. You might notice a problem in a VI or a system program.

41 Error Cluster Details Status is a Boolean value that reports TRUE if an error occurred. Most VIs, functions, and structures that accept Boolean data also recognize this parameter. Code is a signed 32-bit integer that identifies the error numerically. A non-zero error code coupled with a status of FALSE signals a warning rather than a fatal error. Source is a string that identifies where the error occurred. The error clusters located on the Controls»Array & Cluster palette include the components of information shown.


Download ppt "III. Tablouri (Arrays) și Clustere"

Similar presentations


Ads by Google