Prof. Krzysztof Jemielniak k.jemielniak@wip.pw.edu.pl http://www.cim.pw.edu.pl/kjemiel ST 107, tel. 234 8656 PRZYRZĄDY WIRTUALNE Część 6 Macierze, klastry, wzory
Macierze (Arrays) Zbiór elementów tego samego typu Jeden lub więcej wymiarów, do 2 wymiar elementów na Dostęp do poszczególnych elementów przez indeks Pierwszy element ma indeks 0 indeks 0 1 2 3 4 5 6 7 8 9 Macierz 10-elementowa 1.2 3.2 8.2 8.0 4.8 5.1 6.0 1.0 2.5 1.7 31 Macierz 2D 0 1 2 3 4 0 1 2 3 4 5 6 5 wierszy, 7 kolumn: macierz o 35 elementach
Wstawianie macierzy na panelu czołowym Z palety Controls >> All Controls >> Array and Cluster wybierz Array Zrzuć skorupę na panel
Wstawianie macierzy na panelu czołowym (cd.) Umieść odpowiedni obiekt (np. zadajnik numeryczny Numeric Control) w skorupie Dodawanie wymiaru macierzy
Tworzenie stałej macierzowej (diagram) 1. Wybierz skorupę Array Constant z palety Array 2. Umieść potrzebny obiekt w skorupie (tu stała boolowska)
Tworzenie macierzy przy pomocy pętli Pętle domyślnie kumulują macierze (auto indeksowanie) Auto indeksowanie można wyłączyć
Tworzenie macierzy 2D
Działania na macierzach Array Size Index Array Replace Array Subset Insert Into Array Delete From Array Initialize Array Build Array Array Subset Rotate 1D Array Reverse 1D Array Search 1D Array Split 1D Array Sort 1D Array Array Max & Min Transpose 2D Array Interpolate 1D Array Threshold 1D Array Interleave 1D Arrays Decimate 1D Array Array Constant Array To Cluster Cluster To Array Reshape Array
Wymiar macierzy, dostęp do elementu lub części macierzy Array Size Index Array, Array Subset
Tworzenie macierzy Inicjalizacja macierzy Budowanie macierzy
Inne działania na macierzach Replace Array Subset zastąp część macierzy Insert Into Array wstaw do macierzy Delete From Array usuń z macierzy Array Subset fragment macierzy Rotate 1D Array obróć macierz 1D Reverse 1D Array odwróć macierz 1D
Pozostałe działania na macierzach Search 1D Array przeszukaj macierz Split 1D Array podziel macierz Sort 1D Array posortuj elementy macierzy Array Max & Min maksymalny i minimalny element macierzy Transpose 2D Array obróć macierz Interpolate 1D Array interpoluj macierz Threshold 1D Array znajdź przekroczenie progu Interleave 1D Arrays spleć macierze Decimate 1D Array przerzedź macierz Reshape Array zmień kształt macierzy
Polimorfizm Wszystkie funkcje LabVIEW są polimorficzne Wejścia funkcji mogą być różnych typów Kombinacja Skalar+skalar 5 2 7 wynik skalar macierz+ skalar 1 4 2 2 3 6 4 macierz macierz+macierz 3 2 5 1 4 2 4 6 7 macierz macierz+macierz 1 4 2 3 2 5 7 4 6 7 macierz Polimorfizm nie oznacza, że np. gdy na wejściach funkcji mnożenie są dwie macierze 2D, funkcja realizuje mnożenie macierzy! Otrzymamy iloczyny poszczególnych elementów macierzy parami. macierz*macierz 1 4 2 3 2 5 7 3 8 10 macierz
Ćwiczenie: skalowanie, fragment macierzy Napisać program tworzący losową macierz 10-elementową, skalujący ją i wyjmujący fragment
Ćwiczenie: wybór opcji 6 keys.vi Napisać program stwierdzający, który z sześciu klawiszy został naciśnięty i przekazujący na wyjście jego numer. Użyj funkcji: Build Array Boolean To (0,1) Search 1D Array Zapisz jako 6 keys.vi
Wywoływanie subvi z widocznym panelem czołowym Jeśli subvi ma swój panel czołowy, z którego użytkownik ma korzystać, musi się on po wywołaniu pokazać. Najczęściej po zakończeniu działania, powinien się schować. Kliknij jego ikonę na diagramie programu głównego i ustaw opcje jego zachowania:
Ćwiczenie: Przegląd.VI Opracuj Przegląd.VI, który będzie wywoływał na życzenie jeden z VI: Sygnal losowy.vi MultiWaveformChart.vi Ruchoma średnia.vi Przebieg ruchomej średniej.vi Nadzor sredniej.vi
Klastry (Clusters) Struktura grupująca dane różnych typów, analogiczna do record w Pascalu lub struct w C. Klaster zawiera same zadajniki (controls) lub wskaźniki (indicators). Klaster można porównać do kabla złożonego z wielu różnych przewodów
Tworzenie klastra na panelu czołowym 1. Z palety Controls >> All Controls >> Array and Cluster wybierz Cluster 2. Zrzuć skorupę na panel 3. Umieść pożądane obiekty w skorupie
Tworzenie stałej klastrowej na diagramie a) Wybierz skorupę Cluster Constant z palety Cluster, po czym umieść potrzebne obiekty w skorupie b) Kliknij prawym klawiszem myszy na istniejący klaster i wybierz Create > Constant
Kolejność elementów w klastrze Elementy w klastrze są uporządkowane logicznie (od 0) W celu zmiany uporządkowania kliknij prawym klawiszem na jego granicy i wybierz Reorder Controls in Cluster...
Wykorzystanie klastrów do przekazywania danych do SubVIs Umożliwia przekazanie wielu danych do jednego terminala Umożliwia obejście limitu 28 wejść/wyjść do subvi Upraszcza połączenia
Działania na klastrach Funkcje umożliwiające działania na klastrach: Functions>All functions>cluster Można je uzyskać także klikając prawym klawiszem na terminal klastra Unbundle (rozpakuj) Bundle (spakuj) Unbundle By Name (rozpakuj wg nazwy) Bundle By Name (spakuj wg nazwy)
Działania na klastrach: pakowanie Spakuj Bundle Etykiety terminali odzwierciedlają typ danych Tworzy klaster z indywidualnych elementów. Konieczne jest podłączenie wszystkich terminali w takiej samej kolejności jak elementy w klastrze wyjściowym (output cluster) Można wykorzystać do zmiany istniejącego klastera przez podłączenie go do środkowego terminala klastra wejściowego (input cluster). Wtedy nie jest konieczne podłączenie wszystkich elementów, lecz wszystkie muszą być.
Działania na klastrach: pakowanie wg nazwy Spakuj wg nazwy Bundle By Name Zmienia zawartość istniejącego klastra, podłączonego (koniecznie) do środkowego terminala. Można zmieniać dowolne elementy w dowolnej kolejności, wybierane z menu po nazwie Etykiety terminali odzwierciedlają nazwy własne danych
Działania na klastrach: rozpakowywanie Rozpakuj Unbundle Stosuj gdy potrzebujesz dostępu do wszystkich elementów klastra. Funkcja musi mieć dokładnie tą samą liczbę terminali co liczba elementów w klastrze wejściowym.
Działania na klastrach: rozpakowywanie wg nazwy Rozpakuj wg nazwy Unbundle By Name Stosuj gdy potrzebujesz dostępu do wybranych elementów klastra, wybieranych z menu
Ćwiczenie: działania na klastrach Opracuj VI w którym klaster ustawień początkowych będzie modyfikowany (użyj Bundle By Name) zadajnikami i przekazywany na wyjście jako ustawienia zmienione. Ponadto przekaż na wyjście klaster zawierający wybrane zmienne (użyj Bundle). Klastry niedostępne i poszarzałe: Zadajnik Czujnik w stanie False: Program działa w pętli do naciśnięcia klawisza OK
Klaster błędów Klaster błędów błędów zawiera następujące informacje : Boolean wskazuje czy wystąpił błąd Integer wskazuje kod błędu String podaje opis błędu
Ćwiczenie: obsługa klastra błędów Algorytm: if (liczba >= 0) then pierwiastek = SQRT (liczba) else pierwiastek = -99999 Wskaż błąd klastrem błędów end if
Automatyczna obsługa błędów Szczególnie ważna przy wszelkich operacjach wejścia/wyjścia (operacje na plikach, kartach DAQ itp.) Prawie wszystkie funkcje obsługujące we/wy zwracają informacje o błędach (klaster błędów) Informacje o błędach mogą być przekazywane z jednego subvi do następnego Jeśli w jednym subvi wystąpi błąd, następne subvi bogą być wykonywane w inny sposób Do automatycznej obsługi błędów służą funkcje w palecie Time & Dialog, z których najważniejsze to: Prosta obsługa błędów (Simple Error Handler) oraz Ogólna obsługa błędów (General Error Handler)
Funkcje do automatycznej obsługi błędów Typy dialogu: Ogólna obsługa błędów (General Error Handler) 0 Bez dialogu Użyteczne gdy chcesz błędy obsługiwać programowo. Wskazuje czy błąd wystąpił, a jeśli tak zwraca jego opis i wyświetla opcjonalne okno dialogowe. Prosta obsługa błędów (Simple Error Handler) Działa podobnie jak General Error Handler ma jednak mniej opcji. 1 OK (default) Wyświetla okno dialogowe z klawiszem Continue. Po kliknięciu klawisza program kontynuuje działanie. 2 Kontynuacja lub zatrzymanie Wyświetla okno dialogowe z klawiszami continue i stop użytkownik może wybrać kontynuację programu lub zatrzymanie go. 3 OK z ostrzeżeniem Wyświetla okno dialogowe z klawiszem Continue i komunikatem ostrzegającym. Po kliknięciu klawisza program kontynuuje działanie. 4 Kontynuacja lub zatrzymanie z ostrzeżeniem Wyświetla okno dialogowe z klawiszami continue i stop oraz komunikatem ostrzegającym. Użytkownik może wybrać kontynuację programu lub zatrzymanie go.