Strona 1 z 2

problem z wczytywaniem pliku w sposob ciagly

: 02 wrz 2007 18:18
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)

Re: problem z wczytywaniem pliku w sposob ciagly

: 03 wrz 2007 03:08
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

Re: problem z wczytywaniem pliku w sposob ciagly

: 03 wrz 2007 08:04
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........

Re: problem z wczytywaniem pliku w sposob ciagly

: 03 wrz 2007 08:20
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.

Re: problem z wczytywaniem pliku w sposob ciagly

: 03 wrz 2007 20:19
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ć.

Re: problem z wczytywaniem pliku w sposob ciagly

: 04 wrz 2007 02:49
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

Re: problem z wczytywaniem pliku w sposob ciagly

: 04 wrz 2007 03:31
autor: Mikrobi
A case? ... ten FOR to jednak nie jest element dekoracyjny?

Re: problem z wczytywaniem pliku w sposob ciagly

: 04 wrz 2007 09:25
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.

Re: problem z wczytywaniem pliku w sposob ciagly

: 04 wrz 2007 09:55
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.

Re: problem z wczytywaniem pliku w sposob ciagly

: 04 wrz 2007 10:23
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ł

Re: problem z wczytywaniem pliku w sposob ciagly

: 04 wrz 2007 10:59
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

Re: problem z wczytywaniem pliku w sposob ciagly

: 04 wrz 2007 11:05
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:

Re: problem z wczytywaniem pliku w sposob ciagly

: 04 wrz 2007 11:42
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.

Re: problem z wczytywaniem pliku w sposob ciagly

: 04 wrz 2007 12:10
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.

Re: problem z wczytywaniem pliku w sposob ciagly

: 04 wrz 2007 18:22
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 ;)