Zapis danych z pomiarów
Zapis danych z pomiarów
Witam... znowu napotkałem na problem, z którym nie mogę sobie poradzić.Tytułem wstępu załączony plik to VI ćwiczebny, na którym próbuje w domu swoje pomysły. W rzeczywistości właściwy program zbierać będzie dane z rejstratora temperatury. To maksymalnie 20 kanałów (po 20 próbek czasu i wartości mierzonych), w regulowanych odstępach czasu (czas skanu 20 kanałów ok 300ms)... Po upłynięciu ustawionego czasu urządzenie wysyła dane w postaci wektorów array wartości mierzonych oraz odstępu pomiędzy pomiarami. Mój program grupuje/rozdziela je na kolumny symbolizujące mierzone kanały. Wyświetla wartości na wykresie/zapisuje do tabeli/pokazuje na bargrafach. Jednak po zapisie danych do pliku - KASZA... początkowe wiersze to tylko czas zapisu wiersza, po czym zapisywane są te same dane w kilku kolejnych liniach.
Zależy mi tu przy tym by zapis odbywał się na bieżąco. By na przykład w przypadku awarii, zwiechy, nie stracił pomiarów. Dlatego bloczków zapisu danych nie chce umieścić za pętlą while (tak by wykonywały się po zakończeniu pomiarów). Blok inicjalizujący kolejne odczyty z bufora urządzenia znajduje się właśnie w pętli while.
Proszę o pomoc....
Zależy mi tu przy tym by zapis odbywał się na bieżąco. By na przykład w przypadku awarii, zwiechy, nie stracił pomiarów. Dlatego bloczków zapisu danych nie chce umieścić za pętlą while (tak by wykonywały się po zakończeniu pomiarów). Blok inicjalizujący kolejne odczyty z bufora urządzenia znajduje się właśnie w pętli while.
Proszę o pomoc....
- Załączniki
-
- bargraf.vi
- (99.49 KiB) Pobrany 362 razy
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Zapis danych z pomiarów
Przy zapisie do pliku zamiast Write to Binary File, użyj Write to Text File (patrz obrazek) i od razu będzie lepiej.
Nie wiem jaką rolę miała tam spełniać funkcja Search/Split String, więc ją usunąłem.
Nie wiem jaką rolę miała tam spełniać funkcja Search/Split String, więc ją usunąłem.
Re: Zapis danych z pomiarów
Dziękuje ... jest lepiej, niemniej jednak VI write to text file, również wpisuje mi do pliku TXT kilka razy tę samą wartość ( przy ustawieniu czasu odświeżenia pętli while na 1sec... 3 razy)... przy czym czas (dodawany do stringa przed zapisem do pliku) zmienia sie.... Ma któryś z szanownych forumowiczów pomysł jak rozwiązać ten problem. Może po prostu do temetu zapisu danych do pliku należy podejść inaczej ( tylko jak ?? )
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Zapis danych z pomiarów
Zamieść swój program wraz z subviajami (Demo) Thermometer.vi i Display Table...vi.
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Zapis danych z pomiarów
Patrząc na ten kod nie widzę powiązania pomiarów z czasem odświeżania pętli. Nie wiem co się dzieje w "Display Table Incre.vi" - być może tam wymuszane są pomiary przy każdym cyklu pętli głównej... a być może gdzieś indziej bo nie widzimy miejsca zbierania pomiarów (za to widzimy case'a na dole, który nic nie robi
).
W każdym razie jeżeli tak jest, że pomiar nie jest zsynchronizowany z kolejną iteracją pętli, to łatwo sobie wyobrazić sytuację, w której mamy 100 pomiarów ustawionych w tablicy jako 100 wierszy, zapisujemy 98 do pliku (nie wiem czemu akurat jest 100-2), a przy następnym przebiegu pętli nie było pomiarów i znowu ten sam 98 jest zapisywany do pliku.

W każdym razie jeżeli tak jest, że pomiar nie jest zsynchronizowany z kolejną iteracją pętli, to łatwo sobie wyobrazić sytuację, w której mamy 100 pomiarów ustawionych w tablicy jako 100 wierszy, zapisujemy 98 do pliku (nie wiem czemu akurat jest 100-2), a przy następnym przebiegu pętli nie było pomiarów i znowu ten sam 98 jest zapisywany do pliku.
Re: Zapis danych z pomiarów
Parę zdań tytułem sprostowania:
- Jak już pisałem zamieszczony program to Vi ćwiczebny. Struktura case zawiera śmieci, fragmenty kodu skopiowane, na których przykładzie uczyłem się jak funkcjonują poszczególne algorytmy. Tym razem (bez powodzenia) chciałem dowiedzieć się jak w prosty sposób zapisywać na bieżąco mierzone dane. Struktura Case ma na stałe Bool'a na False, wiec w trakcie działania programu nic się wewnątrz niej nie dzieje
- VI Search/Split String służył mi do czego innego. Otóż początkowo założyłem sobie że dane do zapisu pobierał będę za pętlą for filtrującą dane pomiarowe od timestamp'ów. A to co potrafiłem do celów filtrowania zbudować, generuje mi array'a, który ma 40 pól, co przy założeniu że mierze 20 kanałów zapisuje niepotrzebne zera.
Wejście do bloczku zapisu przełączyłem jednak przed pętle by lepiej widzieć co mi się zapisuje (cyfry bez miejsc po przecinku [licznik pętli] łatwiej jest policzyć i sprawdzić czy się powielają, ile razy się powielają itd)...
- Dodam jeszcze (pewnie się powtarzam
) że rzeczywisty program ( ten z Vi'ami od Keithley'a 2701) wykonuje, po odpowiednio nastawionej przerwie, scan (pomiar i zapis do bufora wewnętrznego urządzenia nastawionej liczby kanałów) i wysyła wektor array z wykonanymi pomiarami do labview. Podobnie jak w programie "ćwiczebnym" rzeczywisty program dodaje gromadzone pomiary do shift register i podaje przez "interlive array" na dołączone bloki.
DO "smiga": Gdy zobaczyłem rezultaty zapisane w pliku również nie potrafiłem ( dalej nie potrafie) powiedzieć dlaczego tak się tak dzieje jak się dzieje(ten cały brak synchronizacji i bezwładne śmieci w pliku). To wygląda tak jakby bloczek zapisujący dane robił zapis tego samego array'a kilku krotnie ( nim następny się w pętli for "odfiltruje").
Nie wiem czy to ma jakiś związek, ale czy można wykorzystać VI'je z bloku "synhronization" - tak by bloczek zapisu poczekał na nowego array'a z dazymi
- Jak już pisałem zamieszczony program to Vi ćwiczebny. Struktura case zawiera śmieci, fragmenty kodu skopiowane, na których przykładzie uczyłem się jak funkcjonują poszczególne algorytmy. Tym razem (bez powodzenia) chciałem dowiedzieć się jak w prosty sposób zapisywać na bieżąco mierzone dane. Struktura Case ma na stałe Bool'a na False, wiec w trakcie działania programu nic się wewnątrz niej nie dzieje
- VI Search/Split String służył mi do czego innego. Otóż początkowo założyłem sobie że dane do zapisu pobierał będę za pętlą for filtrującą dane pomiarowe od timestamp'ów. A to co potrafiłem do celów filtrowania zbudować, generuje mi array'a, który ma 40 pól, co przy założeniu że mierze 20 kanałów zapisuje niepotrzebne zera.
Wejście do bloczku zapisu przełączyłem jednak przed pętle by lepiej widzieć co mi się zapisuje (cyfry bez miejsc po przecinku [licznik pętli] łatwiej jest policzyć i sprawdzić czy się powielają, ile razy się powielają itd)...
- Dodam jeszcze (pewnie się powtarzam

DO "smiga": Gdy zobaczyłem rezultaty zapisane w pliku również nie potrafiłem ( dalej nie potrafie) powiedzieć dlaczego tak się tak dzieje jak się dzieje(ten cały brak synchronizacji i bezwładne śmieci w pliku). To wygląda tak jakby bloczek zapisujący dane robił zapis tego samego array'a kilku krotnie ( nim następny się w pętli for "odfiltruje").
Nie wiem czy to ma jakiś związek, ale czy można wykorzystać VI'je z bloku "synhronization" - tak by bloczek zapisu poczekał na nowego array'a z dazymi
- Załączniki
-
- DisplayTable - Incre.vi
- (53.7 KiB) Pobrany 357 razy
-
- bargraf.vi
- (80.45 KiB) Pobrany 349 razy
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Zapis danych z pomiarów
Odnośnie usuwania zbędnych zer masz tu:
http://labview.pl/viewtopic.php?f=12&t= ... zer#p12623
Wracając do głównego problemu, niestety zapis był w każdej iteracji pętli,a zbudowanie tablicy też zajmuje kilka iteracji - więc zapisuję te same dane do pliku wielokrotnie.
Poniżej drobna poprawka usuwająca problem (jedna z możliwych do zastosowania) ... mam nadzieję, że o to chodziło (w wersji 8.0):
http://labview.pl/viewtopic.php?f=12&t= ... zer#p12623
Wracając do głównego problemu, niestety zapis był w każdej iteracji pętli,a zbudowanie tablicy też zajmuje kilka iteracji - więc zapisuję te same dane do pliku wielokrotnie.
Poniżej drobna poprawka usuwająca problem (jedna z możliwych do zastosowania) ... mam nadzieję, że o to chodziło (w wersji 8.0):
- Załączniki
-
- bargraf-1-2.vi
- (70.31 KiB) Pobrany 351 razy
Ostatnio zmieniony 18 lut 2010 11:23 przez smiga, łącznie zmieniany 2 razy.
Re: Zapis danych z pomiarów
używam LV 8.0 .. moglbym prosić o konwersje ?...
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Zapis danych z pomiarów
No i jakie rezultaty prac?
Mam nadzieję, że zauważyłeś plik w wersji 8.0 ... ?
Mam nadzieję, że zauważyłeś plik w wersji 8.0 ... ?
Re: Zapis danych z pomiarów
Tak dziękuje ( dostałem info na Priva)... rzeczywiście teraz działa... sprytny sposób, muszę przyznać (nie wpadłbym sam na to). Do chwili obecnej nie miałem zbyt wiele czasu by przeprowadzić jakieś poważniejsze krasztesty ... ale dziś nie omieszkam. Jeszcze raz dziękuję za pomoc