Zmienne globalne. Przesył pomiędzy oknami VI.

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
lajstos
Posty: 5
Rejestracja: 28 lis 2014 18:00
Wersja środowiska: Nie mam LabVIEW

Zmienne globalne. Przesył pomiędzy oknami VI.

Post autor: lajstos »

Dzień Dobry.

Moje pytanie jest proste, możliwe że prymitywne. Mam główne okno Vi oraz uruchamiane z tego okna okno subVi. Stworzyłem zmienne globalne. W oknie głównym wpisuję do zmiennej globalnej wartość, następnie otwieram okno subVi. Tam odczytuję tą wartość, właściwie tylko wyświetlam. Można uznać, że mam dwa okna otwarte, nie wiem czy one pracują równolegle, czy tylko aktywne jest okno subVI. Zmieniając wartość w oknie głównym zmiennej globalnej, chciałbym widzieć tą zmianę także w oknie subVI. Nie dzieje się tak jednak przy uruchomionych obydwóch vi. Zmieniając wartość w oknie głównym, zmiana nie jest uwzględniania w oknie subVi. Zamieszczę zdjęcie.
Chciałbym by ta zmiana występowała na bieżąco przy aktywności obu okien. Czyli gdy zmienię wartość zmiennej globalnej "Parzystość" z dwa na trzy, chcę widzieć tą zmiane od razu w oknie subVi.

Czemu potrzebuję takiego rozwiązania ?
Program ma za zadanie odczyt danych z kilku urządzeń podłączonych do portu COM komputera.
Przedstawię w jaki sposób chcę by działa mój program. Prosiłbym o krytykę mojego pomysłu oraz wskazówki.


1. W oknie głównym VI mam okienka Numeric Control do ustawiania parametrów portu COM, kontrolki, które będą sygnalizować odbiór danych z poszczególnych urządzeń oraz odpowiednio pod każdą kontrolką przycisk umożliwiający włączenie okna subVI.

2. W oknach subVi znajdują się wyświetlacze do prezentacji danych, dla każdego urządzenia inny.

3. W głównym oknie VI ustawiam parametry portu COM, następnie włączam Run w tym oknie. Główne, okno działa. Jeśli parametry portu COM zostały źle ustawione, zatrzymuję główne Vi, zmieniam parametry i włączam RUN, aż do poprawnego wyboru. Kontrolki mają sygnalizować, które urządzenie jest aktywne. Widząc, które urządzenia transmitują, klikam odpowiedni przycisk, który otwiera mi okno z prezentacją wyników transmitowanych przez urządzenie. Chciałbym by istniała możliwość otwarcia wielu okien naraz.

Pytania:

1. Jak zrealizować przesył pomiędzy dwoma aktywnymi oknami VI na bieżąco? Problem jest opisany na początku postu. Zamieszczam także zdjęcie.

2. Pytanie ze wstępem. Nastawę parametrów portu COM, odczyt danych i ich prezentacje mam wstępnie zrealizowane w oknie subVI. Myślę, że poprawniej będzie gdy zamieszczę nastawę parametrów portu COM oraz ich odbiór w oknie głównym, a samą ich prezentacje wyników w oknie subVi. Nie będę kopiował w ten sposób trzykrotnie nastawy parametrów portu COM oraz odczytu z portu COM. Czy to dobre podejście ?

3. Mając już taką budowę projektu jak przedstawia powyższy punkt, należy skupić się na przesyłaniu danych pomiędzy oknem głównym w którym jest odczyt danych, a oknem subVi w którym dane będą reprezentowane w sposób graficzny. Ta transmisja musi się odbywać na bieżąco, a z tym wydawać się prostym zagadnieniem mam problem. Czy stosowne do tego celu jest użycie zmiennych globalnych ? Jak można takie dane transmitować pomiędzy oknami ? Pytanie właściwie się pokryło z pierwszym.

4. Sposób otwieranie nowego okna jest zaczerpnięty z internetu, niby funkcjonuje jako tako. Czy jest to sposób optymalny ? Co można w nm zmienić, lub jaką inną metodę zastosować ? Zdjęcie prezentuje sposób.

To będzie tyle czasami podobnych do siebie pytań. Jeśli coś nie jasno przedstawiłem, proszę dopytać. Z góry dziękuję za pomoc.
Załączniki
globalne.png
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Zmienne globalne. Przesył pomiędzy oknami VI.

Post autor: Jamal79 »

Witaj.
Wymiana informacji pomiedzy viajami.
Zalozenie jest dobre ale zeby dzialalo poprawnie musial bys zrobic petle sprawdzajaca obecna wartosc zmiennej i ewentualne jej zminienie badz wyswietlenie aktualnej. Troche zamieszalem, ale ciezko kazac kontrolerowi dzialac jako indycator i na odwrot. No i jeszcze dochodzi obsluga kilku VI'ajiow jednoczesnie...

Ja osobicie stworzylem, cos w rodzaju Servera ktory rozmawia z poszczegolnymi klientami poprzez DataSocketa. Tu rodzaj komunikacji Prod/cons niema wiekszego znaczenia. Server zawiera poindeksowane wszystkie informacje. Klienci nadpisuja badz odczytuja konkretne indeksy... Zateta tego systemu jest to ze moge podlaczac kolejnych klientow, oraz lokalnie konfigurowac ich ustawienia itd.
pawhan11
Posty: 67
Rejestracja: 21 wrz 2011 16:25
Wersja środowiska: LabVIEW 2012

Re: Zmienne globalne. Przesył pomiędzy oknami VI.

Post autor: pawhan11 »

Nie do końca rozumem jak to ma działać ale ja bym się nie bawił z wyskakującymi okienkami, chyba że są konieczne

Zrób sobie 2 watki:
- interfejs do zadawania parametrów tego COMa i startowania readerów
- watek który monitoruje czy coś przyszło na coma i ewentualnie coś wysyła (reader). Jeżeli coś przyszło to odeśle tą daną do wątki interfejsu i tam się to wyświetli.

Co do komunikacji:
-interfejs wysyła polecenuia do readera za pomocą kolejek.
- reader generuje user eventa i zwraca wynik do wątku 1.

Jeżeli chcesz czytać naraz wiele portów to powielasz readera.
Jak się uprzesz to da się pewnie 1 wątek do odczytu wszystkich portow ale nigdy nie próbowałem. Jak chcesz zamykać/dodawać kolejne porty to będziesz uruchamiał watek readera dynamicznie.
CLS - Certified LabVIEW Student
lajstos
Posty: 5
Rejestracja: 28 lis 2014 18:00
Wersja środowiska: Nie mam LabVIEW

Re: Zmienne globalne. Przesył pomiędzy oknami VI.

Post autor: lajstos »

Jamal79:
Mógłbyś mi zamieścić przykład wymiany danych pomiędzy dwoma plikami przy użyciu pętli sprawdzających ? Byłbym bardzo wdzięczny. Oczywiście spróbuję to zrobić na własną rękę, ale z przykładem było by o wiele prościej. Z góry dziękuję.


pawhan11:
Nie do końca rozumem jak to ma działać ale ja bym się nie bawił z wyskakującymi okienkami, chyba że są konieczne
Chcę by było okienka ponieważ, umożliwi to stworzenie czytelnego interfejsu graficznego, gdy upakuje wszystko w jednym będzie mało miejsca.

Co do odczytu i rozróżniania danych, to mam już to zrobione. Odczytuję tylko z jednego portu COM.
Interesuję mnie tylko transmisja danych pomiędzy oknami VI, która będzie się odbywała na bieżąco. Mam nadzieję, że nie wymaga to użycia skomplikowanych technik.
pawhan11
Posty: 67
Rejestracja: 21 wrz 2011 16:25
Wersja środowiska: LabVIEW 2012

Re: Zmienne globalne. Przesył pomiędzy oknami VI.

Post autor: pawhan11 »

Masz tak na szybko przy użyciu tych globali.
Załączniki
1.zip
(48.31 KiB) Pobrany 399 razy
CLS - Certified LabVIEW Student
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Zmienne globalne. Przesył pomiędzy oknami VI.

Post autor: Jamal79 »

Witaj
Mialem na mysli raczej warunek logiczny. Zrobilem cos takiego na predce. Uzylem zmiennych lokalnych. Warunek logiczny sprawdza czy wartosc x z SubVIaja jest rowna wartosci z Glownego VIaja. Jak sa rozne to wyswietla ta z glownego, tak aby zapobiec kazdorazowej zmianie przy otwarciu kolejnego SubVIaja. itd...

PS. W pierwszym poscie piszesz, ze chcesz miec dane wyswietlane na bierzaco, co masz na mysli?
PS2. W LabView jest wiele sposobow na uzyskanie podobnych efektow...
Załączniki
warunek.JPG
lajstos
Posty: 5
Rejestracja: 28 lis 2014 18:00
Wersja środowiska: Nie mam LabVIEW

Zmienne globalne. Przesył pomiędzy oknami VI.

Post autor: lajstos »

Dziękuję wam za udzielone odpowiedzi. Będę je analizował dokładniej. Gdy coś będzie nie jasne, będę pytał.

Jamal79:
PS. W pierwszym poscie piszesz, ze chcesz miec dane wyswietlane na bierzaco, co masz na mysli?
Chodzi mi o to by dane które generuje okno główne, od razu były widoczne w oknie subVi.
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Zmienne globalne. Przesył pomiędzy oknami VI.

Post autor: Jamal79 »

Zawsze jest jakies opoznienie. Jezeli dane sa dynamiczne i odczytywane z duza czestotliwoscia to musial bys sie zastanowic nad innym rozwiazaniem...
ODPOWIEDZ