buforowanie danych pomiarowych
buforowanie danych pomiarowych
Witam. Mam w programie dwie pętle. Pierwsza pętla chodzi szybko i odczytuje dane pomiarowe. Druga pętla chodzi wolniej i zapisuje zebrane dane pomiarowe na dysk. Teraz chciałbym odczytane dane z pętli pierwszej zapisać na dysk (pętla druga) W jaki sposób zbuforować dane z pętli pierwszej aby zapisać wszystkie pomiary z pętli pierwszej?
- ky3orr
- Posty: 149
- Rejestracja: 10 gru 2006 00:00
- Wersja środowiska: LabVIEW 8.6
- Lokalizacja: Siechnice
- Kontakt:
Re: buforowanie danych pomiarowych
możesz na przykład przesyłać dane pomiarowe w pierwszej pętli do drugiej z użyciem kolejki, zaś w pętli drugiej dodawać je sobie do tablicy (po każdym odebraniu danej z kolejki) i gdy tablica ma odpowiedni rozmiar zapisać na dysk.
to tak na szybko wedle własnej wiedzy
pozdrawiam
to tak na szybko wedle własnej wiedzy
pozdrawiam
Re: buforowanie danych pomiarowych
A jak użyć kolejki o której mówisz?
Re: buforowanie danych pomiarowych
Mam jeszcze pytanie odnośnie tych kolejek. Skoro szybka pętla będzie non stop dorzucać dane do kolejki, to jak zczytać na bieżącą wszystkie dane pomiarowe w petli która chodzi wolniej? Wydaje mi się że nie będę w stanie zapisać wszystkich danych pomiarowych.
- ky3orr
- Posty: 149
- Rejestracja: 10 gru 2006 00:00
- Wersja środowiska: LabVIEW 8.6
- Lokalizacja: Siechnice
- Kontakt:
Re: buforowanie danych pomiarowych
przekazywanie danych poprzez kolejkę to standardowa aplikacja frameworka: producent-konsument.
dane mierzone w pierwszej pętli są przekazywane do drugiej za pomocą kolejki.
tam są odbierane, wrzucane do tablicy i gdy jest odpowiednia ich ilość np. zapisywane na dysku.
jeśli chodzi o to, że druga pętla chodzi wolniej możesz w pierwszej pętli wykonać dodawanie kolejnych pomiarów do tablicy i gdy pakiet bedzie odpowiednio duży dopiero taką tabelę wrzucać do kolejki.
druga pętla odbierze taki pakiecik i zapisze np. od razu na dysk.
mam nadzieję, że jakoś pomogłem
pozdrawiam
dane mierzone w pierwszej pętli są przekazywane do drugiej za pomocą kolejki.
tam są odbierane, wrzucane do tablicy i gdy jest odpowiednia ich ilość np. zapisywane na dysku.
jeśli chodzi o to, że druga pętla chodzi wolniej możesz w pierwszej pętli wykonać dodawanie kolejnych pomiarów do tablicy i gdy pakiet bedzie odpowiednio duży dopiero taką tabelę wrzucać do kolejki.
druga pętla odbierze taki pakiecik i zapisze np. od razu na dysk.
mam nadzieję, że jakoś pomogłem
pozdrawiam
- Załączniki
-
- producent_konsument.vi
- (8.1 KiB) Pobrany 259 razy
Re: buforowanie danych pomiarowych
Kolego ky3orr mam jeszcze pytanie odnośnie zamieszczonego przez ciebie programu. Przetestowałem go sobie i potrzebowałbym pomocy w jego rozwinięciu. Chciałbym wrzucać do kolejki w szybszej pętli dwie dane pomiarowe - czas oraz zmienną procesową. Teraz w wolniejszej pętli potrzebowałbym przechwycić te dane w formie tablicy, gdzie w kolumnie 1 ma byc czas, w kolumnie 2 zmienna procesowa, zaś w wierszach poszczególne pomiary. Jak to zrobić?
- ky3orr
- Posty: 149
- Rejestracja: 10 gru 2006 00:00
- Wersja środowiska: LabVIEW 8.6
- Lokalizacja: Siechnice
- Kontakt:
Re: buforowanie danych pomiarowych
arczi w jakiej postaci zapisujesz czas (timestamp, date/time rec, liczba double, integer) i zmienną procesową?
ponadto ile pomiarów "na raz" chcesz przesyłać z tej szybszej pętli do wolniejszej?
uprzedzając fakty dane z kolejki są odbierane w takiej samej formie jak sa nadawane. jak wpuścisz tablicę to i takową odbierzesz z kolejki
pozdrawiam
ponadto ile pomiarów "na raz" chcesz przesyłać z tej szybszej pętli do wolniejszej?
uprzedzając fakty dane z kolejki są odbierane w takiej samej formie jak sa nadawane. jak wpuścisz tablicę to i takową odbierzesz z kolejki
pozdrawiam
Re: buforowanie danych pomiarowych
Zmienna procesową oraz czas chce zapisywać w formacie liczby integer. Chciałbym za jednym razem przesyłać około 1000 pomiarów, by potem zapisywać je w wolniejszej pętli.
- ky3orr
- Posty: 149
- Rejestracja: 10 gru 2006 00:00
- Wersja środowiska: LabVIEW 8.6
- Lokalizacja: Siechnice
- Kontakt:
Re: buforowanie danych pomiarowych
kolego podeślij kawałek kodu z tymi 2 pętlami ponieważ nie bardzo wiem jak generujesz dane i jak je odbierasz.
generalnie po wstawieniu danych do tablicy należałoby sprawdzić jej rozmiar i jeśli 1000 to wrzucenie tablicy do kolejki i jej opróżnienie.
w drugiej pętli odbierasz nadane 1000 rekordów i wykonujesz dalsze działania.
generalnie po wstawieniu danych do tablicy należałoby sprawdzić jej rozmiar i jeśli 1000 to wrzucenie tablicy do kolejki i jej opróżnienie.
w drugiej pętli odbierasz nadane 1000 rekordów i wykonujesz dalsze działania.
Re: buforowanie danych pomiarowych
Ok zamieszczam swój kod. Udało mi się stworzyć tablicę, przesłać ją poprzez kolejkę do drugiej pętli oraz tam zapisać dane pomiarowe. Proszę o sprawdzenie diagramu blokowego czy wszystko jest ok.
- Załączniki
-
- kolejka_zapis_pliku.vi
- (67.4 KiB) Pobrany 257 razy
- ky3orr
- Posty: 149
- Rejestracja: 10 gru 2006 00:00
- Wersja środowiska: LabVIEW 8.6
- Lokalizacja: Siechnice
- Kontakt:
Re: buforowanie danych pomiarowych
na mój gust jest to raczej poprawny kod.
można pokusić się o to by zakończeniem pierwszej pętli sterować jakimś przyciskiem, lub sygnałem innym niż błędu.
pozdrawiam
można pokusić się o to by zakończeniem pierwszej pętli sterować jakimś przyciskiem, lub sygnałem innym niż błędu.
pozdrawiam
Re: buforowanie danych pomiarowych
Mam jeszcze pytanie - czy taką kolejkę można zastosować w LabVIEW RT?
- skoziate
- Administrator
- Posty: 245
- Rejestracja: 06 mar 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Warszawa
- Kontakt:
Re: buforowanie danych pomiarowych
Można, ale po pierwsze nie masz kontroli nad buforami pamięci (osobiście sprawiało mi to problemy na RT), a po drugie kolejka nie jest deterministyczna. Zamiast tego polecma RT FIFO. W RT FIFO trzeba jednak z góry podać objętość przesyłanych danych i nie wszystkie typy danych są obsługiwane (na przykład klastry).
Pozdrawiam,
Sebastian
Sebastian
Re: buforowanie danych pomiarowych
A czy można prosić o jakiś przykłądzik na RT FIFO żeby działał analogicznie jak mój program oparty na kolejkach?