G PROGRAMMING Part #10
Metody zarządzania danymi
Zarządzanie danymi inf. ogólne Języki tekstowe uporządkowany model wykonywania poleceń, model sekwencyjny oparty na kolejności poleceń LabVIEW (G) - opiera się na modelu strumienia danych (węzły powiązane połączeniami) zasada węzeł wykonuje operacje przy danych obecnych na wszystkich wejściach i przesyła na wyjścia, możliwość tworzenia diagramów wykonujących operacje równoległe, przypadkowość kolejności wykonywania operacji przy braku połączeń pomiędzy węzłami, sterowanie kolejnością: struktury sekwencyjne, sztuczne dane niewykorzystywane przez węzeł do operacji, tylko do wyzwalania działania.
Wymiana danych w operacjach równoległych Operacje równoległe = brak bezpośrednich połączeń Pętla 1 Pętla 2 Węzeł 1 Węzeł 2 Węzeł 1 Węzeł 2 Połączenia tworzą naturalną kolejność Brak możliwości równoległej pracy pętli Pętla 2 rozpocznie działanie po zakończeniu Pętli 1 Działanie równoległe umożliwiają: Zmienne lokalne Zmienne globalne Połączenia DataSocket
Zmienne lokalne Funkcja dostępu do danych terminala (z więcej niż jednego punktu w programie) Dostęp do danych bez wykonywania połączeń (drutowania) Dostępne w zakresie pojedynczego programu (VI) Możliwość: zapisu danych do zmiennej lokalnej (domyślna, cieńsza ramka) odczytu danych ze zmiennej (funkcjonowanie jako źródło danych (menu kontekstowe /Change to Read)
Zmienne lokalne - tworzenie Za pomocą menu kontekstowego terminala (Create /Local Variable) Za pomocą palety: All functions /Structure /Local Variable Dodatkowa konieczność zadeklarowania terminala, z którym związana jest zmienna (menu kontekstowe /Select Item) Ułatwiona obsługa (identyfikacja) dla terminali z własnymi etykietami Zmiana powiązania zmiennej z terminalem menu kontekstowe (wybór z dostępnych etykiet) Zmiana zachowania zmiennej (menu kontekstowe): Change to Read zmienna jako źródło danych Change to Write - zmienna przyjmująca dane
Zmienne lokalne - zastosowanie Przykładowy program tworzący wykresy za pomocą niezależnych pętli Problem jak poprawnie zatrzymać funkcjonowanie programu? ŹLE - (0) jednokrotne wykonanie obu pętli - (1) brak możliwości zastopowania pętli ŹLE - (0) jednokrotne wykonanie obu pętli -(1) pętla 1 - stop OK, pętla 2 1 iteracja
Zmienne lokalne - zastosowanie Przykładowy program tworzący wykresy za pomocą niezależnych pętli Problem jak poprawnie zatrzymać funkcjonowanie programu? POPRAWNIE Pętle 1 i 2 zatrzymywane są równocześnie: Pętla 1 bezpośrednio za pomocą przełącznika Sterowanie pętlami Pętla 2 za pomocą danych ze zmiennej lokalnej przełącznika
Zmienne lokalne - zastosowanie Zastosowanie 2 zmiennych lokalnych: -Start - Wskaźnik działania pętli Start - równoczesne zatrzymywanie obu pętli Wskaźnik działania pętli - aktualizowanie danych pola tekstowego stałymi Pętla nr 1 i Pętla nr 2
Zmienne lokalne - zastosowanie Zmienna lokalna Nazwa logowania, skonfigurowana do zapisu, do resetowania pola Nazwa logowania Zmienna lokalna Hasło, skonfigurowana do zapisu, do resetowania pola Hasło Dodatkowo: Struktura sekwencyjna do zachowania kolejności działania Węzeł właściwości do wybrania pola Nazwa logowania
Zmienne globalne Zmienna globalna obiekt panelu czołowego (widoczny na schemacie blokowym programu) do przechowywania danych Do przekazywania danych pomiędzy równocześnie wykonywanymi programami lub programami, które nie mogą posiadać połączeń Specjalny typ programu (VI), który posiada tylko panel czołowy (nie posiada kodu programu - diagramu) Obsługują zapis i odczyt przełączenie funkcjonalności za pomocą menu kontekstowego Zmienna globalna do zapisu Zmienna globalna do odczytu
Zmienne globalne - tworzenie Paleta All Functions /Structures /Global Variable Edycja zmiennej wprowadzanie kontrolek i wskaźników (jak VI) Zapis programu zmiennej globalnej Deklarowanie związku terminala i elementu zmiennej lokalnej (menu kontekstowe zmiennej /Select Item) Inne operacje: Zmiana sposobu funkcjonowania zmiennej (Change to Write/Read) Wstawianie istniejącej zmiennej globalnej do programu - All functions /Select a VI
Zmienne globalne - zastosowanie Synchronizacja zatrzymywania dwóch programów do tworzenia wykresów Zmienna globalna STOP do równoczesnego zatrzymywania pętli dwóch programów
Zmienne globalne - zastosowanie Synchronizacja zatrzymywania dwóch programów do tworzenia wykresów - zmienna globalna STOP (z programu wykresu do programu generatora) Przekazywanie danych wykresu za pomocą zmiennej globalnej - zmienna DANE (z programu generatora do programu wykresu)
Zmienne lokalne i globalne - wskazówki Zapewnić inicjalizację zmiennych lokalnych i globalnych przed ich odczytem (zapobieganie niepożądanemu działaniu) Zapobieganie warunkom współzawodnictwa (wyścigu) -brak wyraźnej zależności w kolejności wykonywania operacji prowadzi do nieprecyzyjnego wyniku? x = x * 5 x = x + 2 czy? x = x + 2 x = x * 5
Zmienne lokalne i globalne - wskazówki Zmienne lokalne i globalne wykorzystywać tylko w ostateczności: Każdy odczyt zmiennej prowadzi do kopiowania danych Dostęp do zmiennych podnosi zapotrzebowanie na pamięć Dostęp do zmiennych obniża prędkość działania aplikacji Niepoprawne (niekonieczne) zastosowanie zmiennych lokalnych w strukturze sekwencyjnej
Zmienne lokalne i globalne - wskazówki Eliminacja zmiennych przez drutowanie i zmienną struktury sekwencyjnej Eliminacja zmiennych i struktury sekwencyjnej z dodatkową obsługą błędu
DataSocket Technologia internetowa bazująca na protokole TCP/IP (niezależność platformowa) Uproszczenie wymiany danych pomiędzy aplikacjami G Możliwość przesyłania danych pomiędzy LabVIEW i dowolną aplikacją (pod warunkiem rozpoznawania typu danych) Komunikacja w obszarze pojedynczego komputera i między jednostkami w sieci Przesyłanie danych w formatach: Zwykły tekst operacje na zmiennych łańcuchowych (np. wskaźniki). Tekst oddzielony tabulatorami (tsv) arkusze, tablice. *.wav pliki dźwiękowe i funkcje. Variant dla danych pochodzących z innych aplikacji i formatów (zawiera informacje o obiekcie (np. wskaźniku liczbowym), typ danych, wartość danych).
DataSocket - składniki DataSocket API Konwertuje dane w strumień przed wysłaniem Konwertuje otrzymane dane Komponenty - All Functions /Communication /DataSocket DataSocket Server Samodzielna aplikacja (serwer) do wysyłania danych do sieci Zarządzanie połączeniami i klientami Menu Programy /NationaI Ins../
DataSocket podstawowe funkcje DataSocket Write zapis danych (data) do bufora serwera z zadeklarowaniem adresu URL (connection in) (Publisher) DataSocket Read odczyt danych z serwera o wyspecyfikowanym adresie URL (Subscriber) DataSocket Select URL do bieżącego określania (wybierania) adresu URL (dstp:// ) z deklarowaniem nazwy okna dialogowego
Komunikacja DataSocket przykład Publisher DataSocket Write DataSocket Server Subscriber DataSocket Read Deklarowanie funkcjonowania elementów programu w DataSocket - menu kontekstowe /Data Operations /DataSocket Connections
Serwer DataSocket Diagnostyka Konfiguracja
Porty komunikacyjne Szanowni Państwo! Korzystam ze środowiska LabVIEW, Konfigurując środowisko sieciowe napotkałem problemy przy ustawieniach firewalla i routera. Które porty powinny zostać otwarte? Z poważaniem, Program/protokół Port DataSocket 3015 GPIB ENET 5000, 5003, 5005 and 5010 GPIB ENET/100 5000, 5003, 5005, 5010, and 5015 ENET-232 5225 ENET-485 5225 LabVIEW 3079 -- LabVIEW łączność panelu czołowego przez RT TCP 3363 -- VI Server 3537 -- VISA Server 3580 NI Service Locator 3015 -- DataSocket oraz obsługa panelu czołowego DataSocket 80 -- LabVIEW Web Server 81 Dodatki Internet Toolkit's do serwera HTTP Lookout Logos Communication
Serwer HTTP LabVIEW Niezależność platformowa HTTP i TCP/IP Zastosowanie do zdalnego przeglądania i sterowania panelem czołowym, szybka metoda zdalnej publikacji Obraz panelu przesyłany do klienta, diagram blokowy wykonywany na serwerze Zdalny dostęp do programu za pomocą: interfejsu LabVIEW (Operate /Connect ) przeglądarki internetowej Obsługa wielokrotnych, równoczesnych połączeń do programu, ale modyfikacja możliwa tylko z jednego klienta Specyfika wyświetlania aktualizacja wartości danych, a nie wyglądu samych obiektów
Serwer HTTP - konfiguracja Uruchomienie serwera Tools /Options /Web Server: Configuration - Enable Timeout czas w sekundach pomiędzy odczytem, a odłączeniem klienta Wybieranie aplikacji Tools /Options /Web Server: Visible VIs Control Time Limit (sec) czas przez jaki zdalny konkurujący z innymi użytkownik może kontrolować aplikację (o ile o sterowanie ubiega się więcej niż 1 klient)
Serwer HTTP - konfiguracja Deklarowanie dostępu do serwera Tools /Options /Web Server: Browser Access Deklarowanie stacji roboczych klientów za pomocą: nazw DNS (www.pol.lublin.pl), nazw NetBIOS (tester), adresów IP (212.182.23.11), korzystanie ze znaków wieloznacznych: *.pol.lublin.pl 212.182.23.*
Klient HTTP Serwer: Uruchomienie serwera Wybranie aplikacji Wybranie klientów Klient: Menu Operate /Connect to remote panel Przejmowanie kontroli menu kontekst. /Request Control (uwaga brak lokalnej współpracy serwer/klient) Serwer: Monitorowanie klientów menu Tools /Remote Panel Connection Manager
Serwer HTTP i klient z przeglądarką Serwer: Tools /Web Publishing Tool Opcje przeglądania: Embedded - zdalne przeglądanie i sterowanie Snapshot - statyczny zrzut ekranu Monitor - aktualizowane zrzuty ekranu Zapis do pliku *.htm, *.html Klient: Instalacja wtyczki do przeglądarki (LabVIEW Run - Time Engine) jeśli brak LabVIEW http://serwer/program.htm Kontrola Request Control Brak lokalnego podglądania plików tj. Browser /Otwórz /*.htm))
Serwer HTTP i klient z przeglądarką Wstępne automatyczne udostępnianie sterowania klientowi Przejmowanie sterowania przez serwer Zwracanie sterowania do serwera
Klient z przeglądarką -LVRTE Run-Time Engine musi być zainstalowany w systemie operacyjnym obsługującym pliki wykonywalne utworzone w środowisku LabVIEW. Dodatkowo umożliwia przeglądarkom wyświetlanie zawartości osadzonej w witrynach. Run-Time Engine (Standard) - pełna obsługa plików wykonywalnych w tym możliwość korzystania ze zdalnych paneli, zdalnych paneli w przeglądarkach internetowych, protokołu Datasocket, funkcjonalności zmiennych (lokalnych i globalnych). LVRTE86std.exe dla wersji LabVIEW 8.6 zajmuje 108 MB. LVRTE90std.exe dla LV 2009 = 160 MB. Run-Time Engine (Minimum) - okrojona wersja, dedykowana do obsługi zdalnych paneli za pomocą przeglądarek. LVRTE86min.exe dla wersji LabVIEW 8.6 zajmuje 28.7 MB. LVRTE90min.exe dla LV 2009 = 36 MB. Może występować niezgodność z poprzednimi wersjami Run-Time Engine. Konieczna jest instalacja wersji zgodnej z silnikiem wykorzystanym w aplikacji. Możliwe współistnienie kilku wersji silnika w obrębie tego samego systemu operacyjnego.
Serwer HTTP i klient z przeglądarką Możliwa dysfunkcjonalność /zalecenia: niewłaściwe wyświetlanie elementów panelu w aplikacjach zmieniających położenie i rozmiar obiektów (na pewno poprawnie okna dialogowe ), zapobiegać publikowaniu aplikacji eksportujących wielkie ilości danych (np. wykresy wielu zmiennych pracujące w pętlach bez opóźnień) = problemy z wydajnością sieci i szybkością aktualizacji, możliwy brak synchronizacji widoku lokalnego i zdalnego w przypadku programowych zmian wyglądu panelu (np. za pomocą węzłów właściwości), programy, w których ustawienia elementów panelu wpływają na wykonywanie diagramu mogą mieć obniżoną efektywność, brak możliwości lokalnego testowania funkcjonowania serwera HTTP za pomocą przeglądarki (Browser /Otwórz /*.htm) i menu Operate.
Podsumowanie Zmienne lokalne pozwalają na wielokrotny dostęp do obiektów panelu czołowego w obszarze programu, w którym zostały stworzone Poprzez zapis i odczyt zmiennych lokalnych możliwe jest deklarowanie stanu lub odczytywanie wartości terminali panelu Zmienne globalne umożliwiają przekazywanie danych pomiędzy programami pracującymi równolegle Odczytowi zmiennych globalnych powinien towarzyszyć ich uprzedni zapis (inicjacja) Nadmiernie korzystanie ze zmiennych lokalnych i globalnych jest niepożądane (pamięć, wydajność) DataSocket stanowi niezależną platformowo metodę wymiany danych lokalnie i w sieci Na DataSocket składają się dwa elementy interfejs API oraz Serwer Połączenia DataSocket realizowane są we współpracy publishera (data write), serwera i subscribera (data read)
End of Part #10