Odczytywanie kolejki

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.
CHRISTOPCHER
Posty: 71
Rejestracja: 05 mar 2007 00:00

Odczytywanie kolejki

Post autor: CHRISTOPCHER »

Witam

Chcę odczytać dane ze zwalnianej kolejki i zapisać w pliku tekstowym ( wszystkie w jednym wierszu ) jednak jak na razie moje są bezowocne, dlatego zwracam się z prośbą o zaproponowanie rozwiązania pozwalającego mi odczytać format danych zaprezentowanych na poniższym rysunku( chce odczytać tablice 2D), lub o wszelkie wskazówki które pozwolą mi rozwiązać ten problem. Zdaje sobie sprawę że dla części użytkowników rozwiązanie jest banalne jednak nie dla mnie.

Pozdrawiam

CHRISTOPCHER
Ostatnio zmieniony 27 wrz 2007 20:21 przez CHRISTOPCHER, łącznie zmieniany 1 raz.
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Odczytywanie kolejki

Post autor: Mikrobi »

Czy zauważyłeś, że jeśli wartość Numeric bedzie w okolicach 2 to wrzucasz kolejkę do kosza, czyli tracisz dane...
:?:

Może prościej będzie zamieścić kod...?
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
CHRISTOPCHER
Posty: 71
Rejestracja: 05 mar 2007 00:00

Re: Odczytywanie kolejki

Post autor: CHRISTOPCHER »

Udało mi się odczytać dane a przynajmniej cześć która jest zwalniana z kolejki, rozwiązanie jednak jak mi sie wydaje jest wysoce niepoprawne. Co do tracenia danych to trudno mi się z tym zgodzić, ponieważ gdy numeric przyjmuje wartość 2, kolejka rzeczywiście jest zwalniana, jednak na waveform chart otrzymuje cześć wykresu, więc zastanawiam się czy kontrolka nie zwraca jednak wartości które usuwa z kolejki.

Co do kodu wydaje mi sie że nie jest on tu najważniejszy, zwłaszcza że są to tylko probne programy, a próbuje zrobić program który generuje tablice danych 2D w głównej pętli, dane te umieszczane są w kolejce gdy kontrolka numeric przyjmie wartość 1, natomiast gdy kontrolka przyjmie wartość 2, żadne nowe dane nie są już umieszczane, a cala kolejka jest zapisywana w jednej linii w pliku tekstowym. Obecnie zastanawiam sie czy jest możliwość pobrania całej kolejki i zapisania w jednej linii w jednej iteracji pętli consumer. Ze względu na przejrzystość diagramu nie dodałem kontrolek odpowiedzialnych za archiwizacje.

( Dziękuje za zainteresowanie tematem )
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Odczytywanie kolejki

Post autor: Mikrobi »

0. Nadal nie odpowiedziałeś na postawione przeze mnie pytanie. Proszę o odpowiedź.
1. Będę tendencyjny: uporządkuj diagram
2. Ładujesz do kolejki tablicę 2D DBL o nazwie waveform a czytasz co...?
Dla mnie wygląda to tak:

jeśli wartość Numeric3 = 2 to oprózniasz całą kolejkę.
Przeczytaj co robi ta funkcja (Flush Queue), albo lepiej zacytuję:
Removes all elements from a queue and returns the elements as an array.
czyli wyrzucasz wszystko z kolejki, nie sprawdzając ile w niej jest elementów. Funkcja zwraca całą usuwaną zawartość jako tablicę. Tą tablicę zamieniasz (nie wiem po co) na klaster z tego klastra bierzesz tylko jeden element.
Zatem: ty sam wyrzucasz wszystkie dane z kolejki biorąc tylko jedną. Nie następuje żadna utrata danych - to konsekwentna realizacja twojego kodu.
A teraz pytanie:
3. Jaki algorytm oczekujesz, że będzie realizować dolna pętla?
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
CHRISTOPCHER
Posty: 71
Rejestracja: 05 mar 2007 00:00

Re: Odczytywanie kolejki

Post autor: CHRISTOPCHER »

Zauważyłem że jesli wartość numeric bedzie w okolicach dwa to oprozniam kolejke.

Co do algorytmu jaki chce zeby realizowala dolna petla:

Gdy numeric przyjmie wartość w okolicach dwoch oczekuje ze cala kolejka danych bedzie podczas jednej iteracji dolnej petli zapisywana w jednej linii pliku tekstowego. Na razie z czym mam problem to fakt ze nie potrafie odczytac calej kolejki, bez znajomosci ilosci danych znajdujacych sie w niej.

Uprzedzajac pytanie dlaczego zapisuje do pliku tekstowego, chodzi o to ze ze poszczegolne linie danych beda mialy rozna wielkosc( długość ) a gdybym zapisywal to za pomoca kontrolki Write To Spreadsheet File, a pozniej chcial to odczytac Read From Spreadsheet File , to bym musial pobrac cala tablice lub jej czesc, co by skutkowalo ze krotrze wiersze byly by uzupelnione zerami. Natomiast w pliku tekstowym jest możliwość wybieranai okreslonego rzedu "tekstu " ktory chce odczytac - czyli nie ma znaczenia ze sa one roznej długości.
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Odczytywanie kolejki

Post autor: Mikrobi »

Przyglądałem się temu co zrobiłeś. W zasadzie dla rozładowania kolejki widzę dwie alternatywy: - twoją z małą poprawką:
Obrazek
- z pętlą while , kontrolą rozmiaru kolejki i rozładowaniem po jednym elemencie:
Obrazek
Pierwsza metoda wygląda na skuteczniejszą i pozbawioną zasadzki jaka jest w drugiej metodzie: Jeśli producent wprowadza cały czas dane, metoda druga może nie zakończyć pracy, metoda pierwsza jednorazowo oprózni kolejkę. Pierwsza uwaga: Numeric powinien być typu I32 lub podobny - integer. Nie rozumiem dlaczego nie pobierasz zmiennej lokalnej z Numeric2 a przepisujesz do Numeric3. Może jest szersze uzasadnienie gdzies w algorytmie - tutaj wygląda to na dublowanie danych.
Druga uwaga: nie ma powodu, aby w każdej iteracji konsumenta wywoływać zapis do pliku. Warto by to przemyśleć.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
CHRISTOPCHER
Posty: 71
Rejestracja: 05 mar 2007 00:00

Re: Odczytywanie kolejki

Post autor: CHRISTOPCHER »

Dziękuje za poświęcony czas. Słowa uznania za przedstawione rozwiązania.
Nie rozumiem jednej uwagi
Numeric powinien być typu I32 lub podobny - integer
Jedyne pytanie jakie mi się nasuwa to dlaczego ?
Pozdrawiam
CHRISTOPCHER
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Odczytywanie kolejki

Post autor: Mikrobi »

CASE nie obsluguje typów DBL i SGL. Zwróć uwagę na kropkę przy selektorze CASE - środowisko rzutuje typ na liczbę całkowitą. Nie ma jednoznaczności w kodzie. Może zamiast tego wykorzystać In Range and Coerce ?
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
ODPOWIEDZ