PĘTLA CZASOWA (For Loops, While Loops) Powtórzenia w okienku wewnętrznym mają na celu otrzymanie szczególnej wartości logicznej. Wartość ta zależna jest od ciągłego przetwarzania w pętli czasowej. Klikając prawym przyciskiem myszy uzależniamy połączenie i włączamy stop, jeśli jest prawdziwe (Stop if True) lub kontynuację jeśli nie jest (Continue if True). Możemy także przesyłać wiązkę błędu do terminalu końcowego klikając prawym przyciskiem myszy i wybierając stop jeśli wynika to z błędu (Stop on Error), lub kontynuację jeśli dane pochodzą z podręcznego menu (Continue while Error). Działania w pętli czasowej wykonywane są przynajmniej jeden raz. Zliczanie terminalu końcowego dostarcza strumień pętli zliczającej, która ma wartość zerową dla pierwszej powtórki. Jeżeli wybierzemy opcję pętli czasowej z menu działań kontrolnych i struktur (Execution Control Express Vis and Structures) i umieścimy ją na bloku diagramu, pojawi się przycisk stopu, a sygnał przesyłany jest do terminalu końcowego. Jeżeli wybraną pętle czasową umieścimy na wybranej palecie struktury, przycisk stopu nie pojawi się. Po utworzeniu pętli czasowej możemy przenosić wartości z jednej iteracji do następnej. Jeśli pętle czasową połączymy w szeregu, możemy czytać i przetwarzać każdy element przez autoindeksowanie. ĆWICZENIE: ZAPĘTLANIE I PĘTLA CZASOWA To ćwiczenie przedstawia kilka zasadniczych funkcji w zapętleniach i pętlach czasowych. Będziemy uczyć się jak tworzyć zapętlenia, określać czas pętli oraz kiedy używać właściwego czasu w programie. Pętla czasowa jest kontrolnym komunikatem wielokrotnie wykonywanego działania na blokach, do momentu gdy dany warunek zostanie spełniony. W pierwszej kolejności wykonywany jest kod w obrębie poddiagramu, a następnie oceniany w okienku końcowym. W przeciwieństwie do zwykłej pętli, pętla czasowa nie zlicza kolejnych operacji; dlatego, jeśli warunek się nie pojawi, działania wykonywane są w nieskończoność. str. 1
W zwykłej pętli działania wykonywane pomiędzy blokami poddiagramu mają określoną liczbę powtórzeń, w pętli czasowej działania wykonywane są aż do uzyskania określonej wartości w bloku końcowym. BUDUJEMY PĘTLE CZASOWĄ 1. Otwórz nową VI. Nowy VI możemy otworzyć używając polecenia File»New VI 2. Jeśli funkcje palety nie są widoczne, kliknij prawym przyciskiem myszy w puste miejsce na diagramie w celu aktywacji okienka z funkcjami. 3. W wyświetlonym okienku wybierz funkcję pętli czasowej (while loop). 4. Używając kursora zaznaczamy docelowy obszar na diagramie. str. 2
5. Puszczają przycisk myszy, granica zostaje ustalona. 6. Umieść przycisk stopu na panelu frontowym. Przycisk stopu znajdziesz w palecie przyrządów sterujących (Palette»Boolean»Stop). 7. Dodaj przycisk stopu z bloku diagramu do pętli czasowej, przenosząc ikonkę i upuszczając ją wewnątrz pętli. str. 3
8. Terminal końcowy określa, kiedy pętla ma się zatrzymać. Jego działanie sprowadza się do dwóch stanów: kontynuuj, jeśli jest prawdziwy (Continue if True) oraz zatrzymaj, jeśli jest prawdziwy (Stop if True). Kiedy nadajemy stan kontynuuj, jeśli jest prawdziwe, pętla wykonuje działanie tylko, jeśli sygnał prawdziwy wykrywany jest w bloku końcowym. Nadając stan zatrzymaj, jeśli jest prawdziwe, pętla zakończy działanie po otrzymaniu prawdziwego sygnału w bloku końcowym. zatrzymaj jeśli jest prawdziwe (Stop if True) kontynuuj jeśli jest prawdziwe (Continue if True) 9. Aby wybrać odpowiedni stan pracy, kliknij prawym przyciskiem myszy w okienko diagramu i wybierz odpowiednią funkcję. 10. Działanie pętli możemy kontrolować podłączają włącznik stopu. Kiedy naciskamy przycisk stopu, wartość prawdziwa przekazywana jest do bloku końcowego, a działanie pętli zostaje przerwane. Możemy przesyłać wszelkie dane do bloku końcowego, który kontroluje prace pętli. 11. Terminal końcowy ma na wyjściu dane o ilości skończonych powtórzeń. Zliczanie to, zawsze zaczyna się od zera. str. 4
12. Do tej pory stworzyliśmy prosty układ, w którym pętla generuje przypadkowe numery wyświetlane dotąd aż nie naciśniemy przycisku stop. STRUKTURA TUNELI Tuneli używamy do wprowadzania i wyprowadzania danych z wnętrza struktury pętli. Jeśli chcemy przesłać dane do naszej pętli, musimy zbudować strukturę tuneli. Dane przesyłane do pętli są tylko przy pierwszym zliczaniu, natomiast dane odbierane z pętli po ostatnim zliczaniu. Teraz stworzymy strukturę tuneli aby pokazać numery iteracji. 1. Tworzymy wskaźnik numerowy na panelu frontowym. 2. Tworzymy ścieżkę danych z licznika iteracji do granicy pętli. 3. Utworzony tunel pojawia się na granicy pętli. Kolor bloku ukazuje typ przesyłanych danych. Kiedy ścieżka z danymi przecina pętle, ta wykonuje działanie tylko po otrzymaniu tych danych. 4. Tworzymy widoczną ścieżkę danych od struktury tunelu do licznika iteracji. str. 5
5. W kolejnym diagramie, terminal zliczający jest połączony z tunelem. Wartości z tunelu nie są przesyłane do licznika iteracji, dopóki działania w pętli nie zostaną zakończone. STEROWANIE PRZYŁĄCZEM WARUNKOWYM Przez używanie funkcji Boole'a, możemy wielokrotnie wprowadzać warunki, aby symulować blok końcowy pętli. 1. Stwórzmy pętle czasową poprzez obrysowanie. 2. Umieszczamy ikonkę błędu na panelu frontowym. Znajdziemy ją w panelu kontrolnym (Array, Matrix & Cluster»Error In 3D.ctl.). 3. Przeprowadź połączenie pomiędzy przyciskiem stop a terminalem końcowym. 4. Upewnij się że ikonka błędu jest poza pętlą. 5. Umieść ikonkę operatora prostego błędu na zewnątrz pętli. Ikonkę tą znajdziemy w palecie funkcji (Functions Palette»Dialog & User Interface»Simple Error Handler.vi.). Funkcja ta powiadamia o wszystkich błędach które wystąpiły. str. 6
6. Połącz błąd sterowania z operatorem prostego błędu poprzez pętlę za pomocą struktury tunelu. Przeciągnij połączenie do granicy pętli, następnie poprowadź ją przez pętle do następnej granicy i dalej do operatora prostego błędu. 7. Umieść funkcję podbloku imiennego wewnątrz pętli. Ikonkę tą znajdziemy w palecie funkcji (»Programming»Cluster, Class, & Variant). Oddziela ona funkcję Boole'a od przesyłanych błędów. 8. Umieść funkcję albo wewnątrz pętli. Znajdziesz ją w palecie funkcji (»Programming»Boolean). str. 7
9. Zrób połączenia ścieżkami danych jak pokazano poniżej. Tym prostym zabiegiem przerywamy działanie naciskając przycisk stopu lub jeśli błąd jest wykryty wewnątrz pętli. BUDOWANIE FOR LOOP 1. Otwórz nową VI. Nową VI możemy otworzyć używając polecenia File»New VI. 2. Jeśli funkcje palety nie są widoczne, kliknij prawym przyciskiem myszy w puste miejsce na diagramie w celu aktywacji okienka z funkcjami. Jeśli chcemy aby okienko palety funkcji było cały czas widoczne, należy kliknąć pinezkę w górnym lewym rogu okienka. 3. Wybierz funkcję zapętlenia z okienka funkcji. str. 8
4.Na diagramie możemy umieścić pętle czasową. Następnie kliknij prawym przyciskiem myszy w linię graniczną pętli i wybierz funkcję przebudowy. 5. Funkcja zapętlenia zawiera terminal zliczający. Zlicza on ilość wykonywanych działań przez poddiagram. 6. Klikając prawy przyciskiem myszy na okienko terminalu zliczającego, wybierz funkcję utworzenia stałej. 7. Wstawiając wartość 100, pętla będzie wykonywała działania 100 razy po czym się zatrzyma. 8. Terminal zliczający pokazuje nam ilość aktualnych iteracji. Jak widać na poniższym przykładzie, aktualna liczba iteracji wyświetlana jest na panelu frontowym str. 9
DODAWANIE TERMINALU WARUNKOWEGO DO FOR LOOP W razie potrzeby możemy dodać terminal warunkowy do pętli aby zatrzymać jej działanie jeśli funkcja Boole'a natrafi na błąd. 1. Kliknij prawym przyciskiem myszy na krawędź pętli i wybierz funkcję terminalu warunkowego. 2. Pętla z terminalem warunkowym wykonuje działania dotąd aż trafi na warunek lub zakończy zliczanie, niezależnie od tego które z tych stanów wystąpi pierwsze. 3. Pętle kształtujemy łącząc wyjście z terminalem zliczającym który umieszczamy w prawym dolnym rogu bloku. 4. Ukształtowana pętla z wyjściem warunkowym powinna wyglądać jak na rysunku poniżej. Pętla generuje liczby do momentu uzyskania wartości 100, lub do przerwania działania poprzez naciśnięcie przycisku stop przez użytkownika. Więcej informacji o funkcjach pętli znajdziemy w plikach pomocy (Context Help). Pliki pomocy możemy znaleźć wybierając Help»Show Context Help, lub używając skrótu klawiszowego <Ctrl-H>. str. 10
PĘTLA FOR (FOR LOOP) Wykonuje swój subdiagram n razy, gdzie n jest wartością połączoną z liczbą (N) zakończeń. Zakończenie iteracji dostarcza liczbę aktualnej iteracji w pętli, która zawiera się w zakresie 0 do n-1. Po utworzeniu pętli for, można możesz użyć rejestrów przesuwnych aby przenieść wartości z jednej iteracji do następnej. Jeśli dołączysz układ do pętli for, możesz odczytać i przetworzyć każdy element tego układu poprzez uruchomienie automatycznego indeksowania. Pętle for zwracają daną domyślną kiedy liczba iteracji równa jest 0. str. 11