Zmienne globalne. Przesył pomiędzy oknami VI.
Zmienne globalne. Przesył pomiędzy oknami VI.
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.
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.
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Zmienne globalne. Przesył pomiędzy oknami VI.
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.
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.
Re: Zmienne globalne. Przesył pomiędzy oknami VI.
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.
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
Re: Zmienne globalne. Przesył pomiędzy oknami VI.
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:
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.
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:
Chcę by było okienka ponieważ, umożliwi to stworzenie czytelnego interfejsu graficznego, gdy upakuje wszystko w jednym będzie mało miejsca.Nie do końca rozumem jak to ma działać ale ja bym się nie bawił z wyskakującymi okienkami, chyba że są konieczne
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.
Re: Zmienne globalne. Przesył pomiędzy oknami VI.
Masz tak na szybko przy użyciu tych globali.
- Załączniki
-
- 1.zip
- (48.31 KiB) Pobrany 464 razy
CLS - Certified LabVIEW Student
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Zmienne globalne. Przesył pomiędzy oknami VI.
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...
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...
Zmienne globalne. Przesył pomiędzy oknami VI.
Dziękuję wam za udzielone odpowiedzi. Będę je analizował dokładniej. Gdy coś będzie nie jasne, będę pytał.
Jamal79:
Jamal79:
Chodzi mi o to by dane które generuje okno główne, od razu były widoczne w oknie subVi.PS. W pierwszym poscie piszesz, ze chcesz miec dane wyswietlane na bierzaco, co masz na mysli?
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Zmienne globalne. Przesył pomiędzy oknami VI.
Zawsze jest jakies opoznienie. Jezeli dane sa dynamiczne i odczytywane z duza czestotliwoscia to musial bys sie zastanowic nad innym rozwiazaniem...