Ciągły odczyt danych z subvi
Ciągły odczyt danych z subvi
Witam.
Mam problem z wyświetlaniem danych z podprogramu subvi w którym dane ciągle przyrastają. Subvi znajduje się w pętli for a subvi działa w petli while az do spelnienia warunków końcowych no i zgodnie z zasada fora kolejny raz subvi jest odpalany. Program w tym momencie wystawia mi tylko ostatnie dane które odczytały czujniki, w efekcie na wykresach ze 100 probek dostaje jedna ostatania i z oczekiwanych 4000 całościowo patrzac mam 400. Czy jest jakaś możliwość by wyniki były linkowane na wyjście ciągle wraz ze zmiana ich wartości. Wiem że jak wyciągnę bebechy z sub vi do głównego Vi to będzie to działało ale ze względu na to że program jest olbrzymi spróbowałem pod pliku dokonujacego pomiar.
Pozdrawiam i czekam na odpowiedź
Mam problem z wyświetlaniem danych z podprogramu subvi w którym dane ciągle przyrastają. Subvi znajduje się w pętli for a subvi działa w petli while az do spelnienia warunków końcowych no i zgodnie z zasada fora kolejny raz subvi jest odpalany. Program w tym momencie wystawia mi tylko ostatnie dane które odczytały czujniki, w efekcie na wykresach ze 100 probek dostaje jedna ostatania i z oczekiwanych 4000 całościowo patrzac mam 400. Czy jest jakaś możliwość by wyniki były linkowane na wyjście ciągle wraz ze zmiana ich wartości. Wiem że jak wyciągnę bebechy z sub vi do głównego Vi to będzie to działało ale ze względu na to że program jest olbrzymi spróbowałem pod pliku dokonujacego pomiar.
Pozdrawiam i czekam na odpowiedź
Re: Ciągły odczyt danych z subvi
Po pierwsze: wrzuć swój kod ;) Na podstawie samego opowiadania ciężko stwierdzić gdzie masz błąd.
Po drugie: trochę jaśniej pisz
W jaki sposób przechowujesz dane w tym SubVI? Zapamiętujesz je gdzieś? W jaki sposób wyprowadzasz je poza SubVI? Jeśli wartość, którą odczytujesz np. 10 razy, podpinasz bezpośrednio na wyjście pętli While (nie stosując Shift Register albo indeksowania), to nic dziwnego, że dostajesz tylko ostatni uzyskany wynik. Przykład poniżej: Jeśli pętla While wykona 5 iteracji, a sygnał wyprowadzisz tak jak na przykładzie po lewej, to uzyskasz tylko ostatnią wartość. Jeśli tak jak po prawej (Enable Indexing), to dostaniesz 5-elementową tablicę z kolejnymi wynikami.
Ok, tyle zgadywania ;) Napisz czy trafiłem ;)
Po drugie: trochę jaśniej pisz
Zgaduję, że SubVI jest w pętli For, natomiast sam w sobie zawiera pętlę While, tak? Idąc dalej tym tropem...MrJack pisze:Subvi znajduje się w pętli for a subvi działa w petli while az do spelnienia warunków końcowych
W jaki sposób przechowujesz dane w tym SubVI? Zapamiętujesz je gdzieś? W jaki sposób wyprowadzasz je poza SubVI? Jeśli wartość, którą odczytujesz np. 10 razy, podpinasz bezpośrednio na wyjście pętli While (nie stosując Shift Register albo indeksowania), to nic dziwnego, że dostajesz tylko ostatni uzyskany wynik. Przykład poniżej: Jeśli pętla While wykona 5 iteracji, a sygnał wyprowadzisz tak jak na przykładzie po lewej, to uzyskasz tylko ostatnią wartość. Jeśli tak jak po prawej (Enable Indexing), to dostaniesz 5-elementową tablicę z kolejnymi wynikami.
Ok, tyle zgadywania ;) Napisz czy trafiłem ;)
Re: Ciągły odczyt danych z subvi
Nie nie o to nie chodziło wiem że każdą daną mogę indeksować wstawić do tabeli i odczytać natomiast ja bym chciał żeby zmiany w sub Vi byly widoczne w glownym VI. Załączam pliki.
Main.vi to główny program odpalamy go, a przy okazji otwieramy sobie FP subvi.vi . W subvi.vi mierzony jest czas działania aplikacji który wystawiany jest po przejściu przez diagram sekwencyjny natomiast zmienna liczby zliczajaca numer petli w trakcie działania programu przyrasta do wartosci 600. Chciałbym ten dynamiczny przyrost zmiennej liczby obserwować w FP programu main.vi . Program ten to ofc tylko przykład problemu z którym się spotykam w pracy, a być może czegoś nie wiem o connectorach podprogramow vi. Pozdrawiam
Main.vi to główny program odpalamy go, a przy okazji otwieramy sobie FP subvi.vi . W subvi.vi mierzony jest czas działania aplikacji który wystawiany jest po przejściu przez diagram sekwencyjny natomiast zmienna liczby zliczajaca numer petli w trakcie działania programu przyrasta do wartosci 600. Chciałbym ten dynamiczny przyrost zmiennej liczby obserwować w FP programu main.vi . Program ten to ofc tylko przykład problemu z którym się spotykam w pracy, a być może czegoś nie wiem o connectorach podprogramow vi. Pozdrawiam
Re: Ciągły odczyt danych z subvi
A możesz wrzucić te pliki zapisane w wersji 8.5? Zwracaj uwagę na to, z jakiej wersji środowiska korzysta osoba prosząca o kod ;)
Natomiast wstępnie wydaje mi się, że możesz rozwiązać swój problem korzystając np. z Property Node lub jakiejś zmiennej globalnej (VI Global, Shared Variable). Zobacz sobie załączony przykład. Obsługa Property Node zajmuje więcej czasu niż np. VI Global, ale nie wymaga dodatkowego wątku z odczytem aktualnej wartości zmiennej.
Natomiast wstępnie wydaje mi się, że możesz rozwiązać swój problem korzystając np. z Property Node lub jakiejś zmiennej globalnej (VI Global, Shared Variable). Zobacz sobie załączony przykład. Obsługa Property Node zajmuje więcej czasu niż np. VI Global, ale nie wymaga dodatkowego wątku z odczytem aktualnej wartości zmiennej.
Re: Ciągły odczyt danych z subvi
Hej a więc to co zamieściłeś nie bardzo u mnie chodzi ;)
Zamieszczam moj program w wersji 8.5 no i faktycznie nie pomyslalem o tym ze nie kazdy to ma teraz bede pamietał.
Prosiłbym jeżeli bys mógł na tym przykładzie właśnie to zrobić moim
Pozdrawiam
Zamieszczam moj program w wersji 8.5 no i faktycznie nie pomyslalem o tym ze nie kazdy to ma teraz bede pamietał.
Prosiłbym jeżeli bys mógł na tym przykładzie właśnie to zrobić moim
Pozdrawiam
- Załączniki
-
- main.zip
- (10.4 KiB) Pobrany 389 razy
Re: Ciągły odczyt danych z subvi
Co dokładnie 'nie chodzi'? Tam zbyt wiele się zepsuć nie mogło.MrJack pisze:Hej a więc to co zamieściłeś nie bardzo u mnie chodzi ;)
Mam nadzieje, że to teraz zamieszczam zadziała, bo idea rozwiązania jest dokładnie taka sama. Zrobione na przykładzie zamieszczonym przez Ciebie. Na panelu głównym main.vi wyświetlany jest numer kolejnych iteracji pętli znajdującej się w subvi, po 150 iteracjach wyświetlany jest całkowity czas. Daj znać czy wszystko ok. Jak coś 'nie działa', to chociaż trochę napisz w czym problem.
PS. do obsługi przycisków lepiej wykorzystać strukturę Event zamiast Case'ów, ale to tak na przyszłość ;)
Ostatnio zmieniony 01 lis 2009 11:03 przez coolfon, łącznie zmieniany 1 raz.
Re: Ciągły odczyt danych z subvi
Tak dokładnie o to chodziło teraz idzie jak trzeba Musze tę wiedzę teraz przyswoić
Co do case vs event . Ciagle staram sie nauczyć aby działało to tak jak chce z eventami ale nie jest to jakos super przedstawione w samym lab view przy okazji wiec moze powiesz mi prosze :
Czym rozni sie drag ended z zielona a czym z czerwona strzałką ? Jeżeli naruszam regulamin forum bo gdzieś było pisane o tym to przepraszam i zerkne zaraz po wyslaniu tego posta
Kolejnym problemem , z którym się borykam to problem wlaśnie case może będziesz w stanie mi pomóc . Chciałbym móc zatrzymać w dowolnym momencie program przyciskiem stop tak aby zakończył działanie. Domyślam się że jest to proste , no ale jako , że uczyłem się sam LV to zdarza się mi czasem prostych spraw nie wiedzieć.
Czy jest możliwe uruchomienie 2 case'ów współbieżnie. Może trzeba to zastapić event'ami ? Po krótce wyglada to tak że poruszam platformą pomiarową w jednym case a w tym czasie fajnie jak by użytkownik mógł np ogladać wykres z danymi który aktualnie jest w innym case. Teraz jest tak ze jak wątek jednego case jest obsługiwwany to innego watku nie mogę ruszyć aż do zakończenia poprzedniego case
Jeżeli będą potrzebne przykłądy to mogę oczywiście takie stworzyć myślę że teraz wyraziłem się w miarę jasno
Pozdrawiam
Co do case vs event . Ciagle staram sie nauczyć aby działało to tak jak chce z eventami ale nie jest to jakos super przedstawione w samym lab view przy okazji wiec moze powiesz mi prosze :
Czym rozni sie drag ended z zielona a czym z czerwona strzałką ? Jeżeli naruszam regulamin forum bo gdzieś było pisane o tym to przepraszam i zerkne zaraz po wyslaniu tego posta
Kolejnym problemem , z którym się borykam to problem wlaśnie case może będziesz w stanie mi pomóc . Chciałbym móc zatrzymać w dowolnym momencie program przyciskiem stop tak aby zakończył działanie. Domyślam się że jest to proste , no ale jako , że uczyłem się sam LV to zdarza się mi czasem prostych spraw nie wiedzieć.
Czy jest możliwe uruchomienie 2 case'ów współbieżnie. Może trzeba to zastapić event'ami ? Po krótce wyglada to tak że poruszam platformą pomiarową w jednym case a w tym czasie fajnie jak by użytkownik mógł np ogladać wykres z danymi który aktualnie jest w innym case. Teraz jest tak ze jak wątek jednego case jest obsługiwwany to innego watku nie mogę ruszyć aż do zakończenia poprzedniego case
Jeżeli będą potrzebne przykłądy to mogę oczywiście takie stworzyć myślę że teraz wyraziłem się w miarę jasno
Pozdrawiam
Re: Ciągły odczyt danych z subvi
Najważniejszą cechą Event'ów z czerwoną strzałką jest fakt, że możesz je odrzucić (Discard) w momencie wystąpienia. Opis co robi który Event masz TUTAJ.MrJack pisze:Czym rozni sie drag ended z zielona a czym z czerwona strzałką ?
Odpal sobie jakiś prosty przykład z włączonym Highlight Execution (włączona żarówa w oknie diagramu) to zobaczysz jak działa program, który w jednej pętli While ma dwie struktury Case. Jeśli w jedna z nich wykonuje się stosunkowo długo, to tak samo długo będzie trwała jedna iteracja pętli While. Case'ów nie trzeba zastąpić Event'ami, a JEDNYM Even'tem i kilkoma wątkami. Przykład masz poniżej: Jeśli chcesz jednocześnie dokonywać nowego pomiaru oraz np. przeglądać wyniki poprzedniego, to musisz te zadania odpowiednio podzielić na różne wątki. W zamieszczonym przykładzie masz dość długo trwające odliczanie, w czasie którego masz możliwość zmieniania wartości kontrolki obok - właśnie dzięki wątkom. Generalnie polecam zapoznać się z ze strukturą producer - consumer, bardzo ułatwia ona programowanie.MrJack pisze:Czy jest możliwe uruchomienie 2 case'ów współbieżnie. Może trzeba to zastapić event'ami ? Po krótce wyglada to tak że poruszam platformą pomiarową w jednym case a w tym czasie fajnie jak by użytkownik mógł np ogladać wykres z danymi który aktualnie jest w innym case. Teraz jest tak ze jak wątek jednego case jest obsługiwwany to innego watku nie mogę ruszyć aż do zakończenia poprzedniego case
Wszystko zależy od tego, co masz w programie, który chcesz tak 'nagle' zatrzymać. Jeśli masz np. pętlę For, której wykonanie trwa np 10 sekund (i nie ma żadnego warunkowego zatrzymania), to musi ona się wykonać do końca, dopiero potem można zakończyć program (zobacz sobie co się stanie w załączonym wyżej przykładzie, gdy uruchomisz Countdown i w trakcie jego trwania naciśniesz STOP). Jeśli jednak bardzo Ci na tym zależy, to zawsze pozostaje funkcja Quit LabVIEW ;)MrJack pisze:Kolejnym problemem , z którym się borykam to problem wlaśnie case może będziesz w stanie mi pomóc . Chciałbym móc zatrzymać w dowolnym momencie program przyciskiem stop tak aby zakończył działanie.
Ostatnio zmieniony 05 lis 2009 15:53 przez coolfon, łącznie zmieniany 2 razy.
Re: Ciągły odczyt danych z subvi
Chciałem podziękować za pomoc siedzę nad tymi wątkami bo się moga przydać w nowym projekcie
Pełen profesjonalizm.
Pozdrawiam i do kolejnego posta
Pełen profesjonalizm.
Pozdrawiam i do kolejnego posta
Re: Ciągły odczyt danych z subvi
Witam, zaciekawił mnie ten wątek gdyż sam poszukuję informacji/pomocy z global variable. Jezeli mam dwa VI, i w tym drugim chce skorzystać ze zmiennych z pierwszego VI. Czy global variable da się tu wykorzystać i jak to zrobić ? Wiem jakogolnie korzytac z tej zmiennej ale nie bardzo wiem jak to zastosowac.
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Ciągły odczyt danych z subvi
Na początek poszukiwania w indeksie helpa "global variable". A potem w przykładach można znaleźć... Przykład ;) Fundamentals -> Local And Global Variables -> Display Number oraz Generate Number.