problem z wczytywaniem pliku w sposob ciagly
problem z wczytywaniem pliku w sposob ciagly
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)
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)
Re: problem z wczytywaniem pliku w sposob ciagly
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
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
Re: problem z wczytywaniem pliku w sposob ciagly
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........
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........
Re: problem z wczytywaniem pliku w sposob ciagly
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.
- 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
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ć.
Re: problem z wczytywaniem pliku w sposob ciagly
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
pozdrawiam,
mkachel
never trust a naked bus driver
Re: problem z wczytywaniem pliku w sposob ciagly
A case? ... ten FOR to jednak nie jest element dekoracyjny?
- 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
pewnym rozwiazaniem tego moze byc functional global - zwane gli gdzieniegdzie - w jednej petli zapisujesz do tego czegos, a w innej odczytujesz.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........
w skrocie jest to taki vi, ktory sklada sie z while'a wykonywanego raz i dana jest przetrzymywana w shift registerze.
- 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
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.pewnym rozwiazaniem tego moze byc functional global
Re: problem z wczytywaniem pliku w sposob ciagly
...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ł
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ł
- 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
z tym sie nie zgodze do konca, functional global nie ma wszystkich konsekwencji jak zmienna globalna -> Polecam zerknac tutaj->Podrozdzial preventing race conditions.jogurt_owocowy pisze:
Functional Global (czy jak go zwał) to jednak zmienna globalna ze wszystkimi tego przykrymi konsekwencjami i trzeba tego unikać. [/b].
s
- 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
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:
Na przykład:
Pozdrawiam,
Sebastian
Sebastian
Re: problem z wczytywaniem pliku w sposob ciagly
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.
Ponadto w tym wypadku jest działaniem nadmiarowym.
- 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
Byc moze jest dzialaniem nadmiarowym,na pewnie jest mozliwoscia rozwiazania problemu.Mikrobi pisze:
Ponadto w tym wypadku jest działaniem nadmiarowym.
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.
- 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
Słowo "functional" w nazwie robi różnicę, ale małą. Pozostaje podstawowa wada - sprzeniewierzenie się ( :!:functional global nie ma wszystkich konsekwencji jak zmienna globalna
:!:
:!: ) filozofii dataflow. Poza tym - jak już Mikrobi napisał - najpierw rower, potem samochód, a dopiero na końcu samolot. Rower tutaj to shift register.
Możesz to jakoś rozwinąć? Bo brzmi to intrygująco.nie zmienia to faktu, ze jest jedna z lepszych praktyk (?) w LV do przechowywania wczytywania... itd duzych liczby danych.
W ogóle to my tu gadu gadu, a autor jakoś chyba stracił zainteresowanie tematem ;)