problem z wczytywaniem pliku w sposob ciagly

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
KaVciA
Posty: 8
Rejestracja: 19 cze 2007 00:00

problem z wczytywaniem pliku w sposob ciagly

Post autor: KaVciA »

ja juz mam taki metlik w glowie, ze ciezko mi samemu wpasc na pomysl jak rozwiazac moj problem.

WSTEP: stworzylem program ktory generuje dwa rozne przebiegi (sin,cos,...) do tego ustawiam amplitude, czest, liczbe probek (dla obydwu) i kazdy wyswietla na osobnym wykresie, a do tego mam sumator, ktory dodaje dwa wygenerowane przebiegi do siebie i wyswitla to na trzecim wykresie czyli widac na kazdym wykresie co innego. program dziala w trybie ciaglym czyli jak zmieniam czestotliwosc w pierwszym kanale to od razu widze to na wykresie i oczywiscie na ostatnim trzecim (sumatorze) wykresie mozna zaobserwowac zmiany. Dodam jeszcze, iz zapisuje do pliku probki z 3 wykresu (np. dla probkowania 128 jest 128 roznych wartosci oddzielonych tabulatorem). jeden z kanalow sluzy do odczytu (kanal 1). czyli jak chce wczytac probki to maja sie wczytac i wyswietlic na pierwszym kanale, a reszta z kanalu pierwszego czyli generator jest nieaktywny. drugi kanal pracuje ciagle i np. wyswietla w.w. cosiunsoide.

PROBLEM: problem mam z odczytaniem pliku, w taki sposob aby raz wczytac probki i aby byly ciagle wyswitlane - czyli zapamietane w programie.

JAK JEST TERAZ: dzialaja dwa kanaly. daje "WCZYTAJ" i dane z pliku wczytuje oraz je wyswietla, ale tylko przez ulamek sekundy i wraca z powrotem do funkcji generatora - tego co mu tam ustawilem czyli sinusa.

CO WYMYSLILEM: prosze spojrzec na zdjecie. stworzylem dla kanalu pierwszego strukture CASE, aby pracowal jako generator [FALSE] lub na wczytywaniu pliku [TRUE], jesli przycisk jest na pliku [TRUE] to stworzylem kolejna strukture CASE, ktora odnosi sie do przycisku "WCZYTAJ" do wczytytwania z pliku. gdy wcisniemy "WCZYTAJ" [TRUE] fajnie to dziala, bo wczytuje i wyswietla, ale tylko raz, a chce aby sie ciagle wyswietlalo. stworzylem pusta tablice i umiescilem ja w strukturze CASE jako [FALSE] gdy przycisk wczytaj nie zostal wcisniety[FALSE] i na wykresie nie ma nic. wszystko niby fajnie, ale....

PROBLEM: na zdjeciu mam ostatni moj pomysl z petla "for loop" i "shift register-ami". ale to tez nie zdaje egzaminu. rzecz w tym ze program dziala w trybie "non stop" i do sumatora musza dojsc dwa sygnaly. jeden zawsze dojdziez z kanalu drugiego, a z kanalu pierwszego nie zawsze chce dojsc. BO jak jest generator w kanale pierwszym jest ok - generuje sinusa i program dziala. jak jest wcisniety tryb aby dzialal na pliku to jest ok, bo wtedy z pustej tablicy bierze "nic" i to nic wyswietla. daje wczytaj i wczyta raz plik. proboje stworzyc tablice, aby zapamietal dane z pliku i bez przerwy je wyswietlal na wykresie i tego nie moge zrobic.

kurde tyle sie napisalem, a dalej twierdze, ze problem jest latwy, ale ja nie wiem, co nowego stworze i dodam to za kazdym razem jest cos innego, a nie to co chcialem. (mam LabView 7.1)
mkachel
Posty: 8
Rejestracja: 12 lis 2005 00:00

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: mkachel »

Witam :twisted:

Moim zdaniem eleganckim rozwiązaniem byłoby zastosowanie dwóch wątków - jednego (A) do obsługi zdarzen od użytkownika (czyli struktura Event do obsługi kontrolek), oraz drugiego (B) do ciągłej generacji przebiegów. Komunikacja z A do B za pomocą kolejki.

Mniej eleganckim rozwiązaniem jest zastosowanie dodatkowej zmiennej "Wczytany/Niewczytany" i trzymanie wartości kanału w Shif Registerze.

Główny problem jest chyba w tym, że nie do końca rozumiesz jak działa Shift Register. W tym przypadku powinien on byc utworzony na pętli While, w której umieszczona jest struktura Case.

Polecam rozwiązanie pierwsze, może bardziej skomplikowane ale przyda Ci się w przyszłości.
Mam nadzieje, że Cie troche naprowadziłem:)

pozdrawiam,
mkachel
never trust a naked bus driver
KaVciA
Posty: 8
Rejestracja: 19 cze 2007 00:00

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: KaVciA »

mkachel dzieki za zainteresowanie, ale wydaje mi sie, ze shift register nie zdal egzaminu w zadnej petli - ani w While-u, ani w For-ze. chcialbym aby petla sie wykonywala kiedy ja wlacze, a kiedy zechce to ja wylacze, potem znowu wlacze itd.

potrzebuje czegos takiego, zeby ciagle wyswietlalo na wykresie "nic" (np pusta tablice - same zera), a jak wczytam dane z pliku (tez tablica) to niech je "cos zapamieta" i wywala ciagle na wykres ....... do momentu wczytania kolejnego pliku i tak w kolko........
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: Mikrobi »

mkachel ma rację co do struktury: potrzebujesz układu while+event: Przeglądnij przykłady, poczytaj to co jest na forum. Taka struktura aplikacji jest przeznaczona właśnie do realizacji tych zadań o których piszesz.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: jogurt_owocowy »

Kavcia, opisz dokładnie jak chcesz to widzieć od strony interfejsu tj. jakie chcesz mieć dokładnie przyciski, jak działające itd. Wszyscy tu Ci dobrze radzą, ale to jak połączyć to w całość zależy od tego jak to ma działać.
mkachel
Posty: 8
Rejestracja: 12 lis 2005 00:00

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: mkachel »

A mi się wciąż wydaje, że problem jest w tym, że niestety nie rozumiesz jak działa shift register - widać to na diagramie.

pozdrawiam,
mkachel
never trust a naked bus driver
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: Mikrobi »

A case? ... ten FOR to jednak nie jest element dekoracyjny?
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
bartus
Posty: 141
Rejestracja: 07 maja 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Wrocław/Żory

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: bartus »

KaVciA pisze:mkachel dzieki za zainteresowanie, ale wydaje mi sie, ze shift register nie zdal egzaminu w zadnej petli - ani w While-u, ani w For-ze. chcialbym aby petla sie wykonywala kiedy ja wlacze, a kiedy zechce to ja wylacze, potem znowu wlacze itd.

potrzebuje czegos takiego, zeby ciagle wyswietlalo na wykresie "nic" (np pusta tablice - same zera), a jak wczytam dane z pliku (tez tablica) to niech je "cos zapamieta" i wywala ciagle na wykres ....... do momentu wczytania kolejnego pliku i tak w kolko........
pewnym rozwiazaniem tego moze byc functional global - zwane gli gdzieniegdzie - w jednej petli zapisujesz do tego czegos, a w innej odczytujesz.

w skrocie jest to taki vi, ktory sklada sie z while'a wykonywanego raz i dana jest przetrzymywana w shift registerze.
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: jogurt_owocowy »

pewnym rozwiazaniem tego moze byc functional global
Functional Global (czy jak go zwał) to jednak zmienna globalna ze wszystkimi tego przykrymi konsekwencjami i trzeba tego unikać. Poza tym nie jest to tutaj potrzebne - wszystko załatwia while + shift register + event.
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: Mikrobi »

...i trochę ćwiczeń PNMSP 8)
Oczywiście oboma manipulatorami graweruję się pod tym co napisał jogurt_owocowy (...brzoskwiniowy...?) przemyślany i zrozumiany while+event , żadych functional global czy jak je tam zwał
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
bartus
Posty: 141
Rejestracja: 07 maja 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Wrocław/Żory

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: bartus »

jogurt_owocowy pisze:
Functional Global (czy jak go zwał) to jednak zmienna globalna ze wszystkimi tego przykrymi konsekwencjami i trzeba tego unikać. [/b].
z tym sie nie zgodze do konca, functional global nie ma wszystkich konsekwencji jak zmienna globalna -> Polecam zerknac tutaj->Podrozdzial preventing race conditions.








s
Awatar użytkownika
skoziate
Administrator
Posty: 245
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Warszawa
Kontakt:

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: skoziate »

Przecież Functional Global Variable to nic innego, jak pętla while, z shift-register i case'm w środku, wszystko umieszczone w subVI. Moim zdaniem to dobry pomysł przechować tam dane, jeśli mają do tego dojść szereg metod do ich obsługi.

Na przykład:
Pozdrawiam,
Sebastian
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: Mikrobi »

skoziate owszem, ale stosowanie go przez kogoś kto nie rozumie dzialania shift registera jest oględnie mówiąc hm.... 'magią'.
Ponadto w tym wypadku jest działaniem nadmiarowym.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
bartus
Posty: 141
Rejestracja: 07 maja 2007 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Wrocław/Żory

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: bartus »

Mikrobi pisze:
Ponadto w tym wypadku jest działaniem nadmiarowym.
Byc moze jest dzialaniem nadmiarowym,na pewnie jest mozliwoscia rozwiazania problemu.

nie zmienia to faktu, ze jest jedna z lepszych praktyk (?) w LV do przechowywania wczytywania... itd duzych liczby danych. Chociazby dla samej znajomosci "zagadnienia" warto sie z fglb zapoznac i w ramach wlasniego szkolenia wykorzystac np w takim projekcie.
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: problem z wczytywaniem pliku w sposob ciagly

Post autor: jogurt_owocowy »

functional global nie ma wszystkich konsekwencji jak zmienna globalna
Słowo "functional" w nazwie robi różnicę, ale małą. Pozostaje podstawowa wada - sprzeniewierzenie się ( :!:
:!:
:!: :D) filozofii dataflow. Poza tym - jak już Mikrobi napisał - najpierw rower, potem samochód, a dopiero na końcu samolot. Rower tutaj to shift register.
nie zmienia to faktu, ze jest jedna z lepszych praktyk (?) w LV do przechowywania wczytywania... itd duzych liczby danych.
Możesz to jakoś rozwinąć? Bo brzmi to intrygująco.
W ogóle to my tu gadu gadu, a autor jakoś chyba stracił zainteresowanie tematem ;)
ODPOWIEDZ