Zapis i odczyt danych z plików tdms

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.
sanay
Posty: 15
Rejestracja: 08 wrz 2011 11:03
Wersja środowiska: LabVIEW 8.5
Lokalizacja: Ruda Śląska

Zapis i odczyt danych z plików tdms

Post autor: sanay »

Witam,
Od jakiegoś czasu próbuje poradzić sobie z dość wydawało mi się błahym (chyba) problemem. Próbuję zapisać pewne dane online do pliku, a później odczytywać te dane z pliku i je analizować. Problem w tym że nie dane zapisane i odczytane nie są takie same. Zamieściłem programy które obrazują sytuację. Program jest bardziej rozbudowany jednak usunąłem części które nie mają w tym przypadku znaczenia. Zamiast rzeczywistych danych podpiąłem generator, zapisuję z niego dane jednak po odczycie i przepuszczeniu przez bloczek FFT nie pokazuje mi prawdziwej częstotliwości. Próbowałem przerabiać program na różne sposoby jednak nie mogę tego dobrze zrobić. Rzeczywisty sygnał pochodzi z LPT (8bitów). Proszę o pomoc.
Przy okazji nie rozumiem dlaczego po ustawieniu generatora na 10Hz nie mam przebiegu nawet na żywo?
zapis do pliku
zapis do pliku
odczyt z pliku
odczyt z pliku
Załączniki
tdms-odczyt.vi
(65.3 KiB) Pobrany 376 razy
tdms-zapis.vi
(217.18 KiB) Pobrany 361 razy
AGF
Posty: 109
Rejestracja: 26 lut 2010 13:41
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

Re: Zapis i odczyt danych z plików tdms

Post autor: AGF »

W twoim tdms-zapis.vi tak naprawdę zapisujesz po jednj próbce do pliku tdms bo stosujesz convert from dynamic data to DBL zaraz po simulate signal i też dlatego nie widzisz sinusa przy 10 Hz. Jest to bym powiedział doskonały przykład Aliasingu bo na twoim chart widoczny był co 100-ny punkt sinusa próbkowanego 1000 razy/s o częstotliwości sygnału 10 Hz. Tak naprawdę widziałeś i odczytywałeś sygnał o próbkowaniu 10 razy/s. Aliasing jest też odpowiedzią na to czemu w analizie w tdms-odczyt.vi dostajesz inne częstotliwości.
Załączniki
cgh.png
Ostatnio zmieniony 10 sty 2012 19:56 przez AGF, łącznie zmieniany 2 razy.
sanay
Posty: 15
Rejestracja: 08 wrz 2011 11:03
Wersja środowiska: LabVIEW 8.5
Lokalizacja: Ruda Śląska

Re: Zapis i odczyt danych z plików tdms

Post autor: sanay »

Jeżeli chodzi o te 10Hz to faktycznie wytłumaczenie jest dość oczywiste, aż się dziwię że o tym nie pomyślałem. Dziękuję za wytłumaczenie. Mnie jednak zdecydowanie bardziej zależy nad zrozumieniem właściwego problemu. Zamiast bloczka generatora podaję w rzeczywistości dane 8 lub 16-bitowe które pobieram z portu równoległego. Chcę zapisywać do pliku odczytane z portu wartości np. z częstotliwością 500Hz, a później odczytywać te dane z pliku innym programem i obliczać częstotliwość własną za pomocą FFT. W takim układzie właśnie wychodzą mi głupoty tzn. na wykresie mam wartości rzędu 0,05~0,2Hz niezależnie od danych wejściowych. Proszę o pomoc w tym temacie.
sanay
Posty: 15
Rejestracja: 08 wrz 2011 11:03
Wersja środowiska: LabVIEW 8.5
Lokalizacja: Ruda Śląska

Re: Zapis i odczyt danych z plików tdms

Post autor: sanay »

Trochę czasu minęło ale nie widzę żadnej odpowiedzi. Zależy mi na rozwiązaniu tego problemu. Proszę chociaż o jakieś wskazówki które mi pomogą. Odczytuje dane z portu równoległego powiedzmy 100 razy na sekundę i potrzebuję je na bieżąco zapisywać do pliku z możliwością ich późniejszego odczytu, wyświetlenia i użycia np. FFT. Podczas moich prób rozjeżdża mi się czas przez co FFT nie pokazuje prawidłowej wartości.
Jeszcze raz proszę o jakąkolwiek pomoc.
In port.jpg
In port.jpg (2.85 KiB) Przejrzano 18300 razy
smiglo
Posty: 110
Rejestracja: 18 sty 2006 00:00
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

Re: Zapis i odczyt danych z plików tdms

Post autor: smiglo »

Radziłbym sprawdzić jak to się zachwuje dla mniejszych częstotlwiości np. 10 Hz. Przy 100 Hz jest to jeszcze teoretycznie realne ale więcej to na pewno będą problemy (rozumiem, że dzieje się to w windowsie).
Zapsiujesz za każdym razem pojedyncze próbki a to niestety wymaga czasu.
Ostatnio zmieniony 13 sty 2012 09:49 przez smiglo, łącznie zmieniany 1 raz.
smiglo
Awatar użytkownika
Krzysztof Szewczyk
Posty: 37
Rejestracja: 19 maja 2011 02:48
Wersja środowiska: LabVIEW 2017
Lokalizacja: Koszyce
Kontakt:

Re: Zapis i odczyt danych z plików tdms

Post autor: Krzysztof Szewczyk »

uzyj RAM-Disk :) nie bedzie problemu z szybkim zapisem. Problem jest taki ze jestes limitowany rozmiarem ram-dysku


http://www.dobreprogramy.pl/RAMDisk,Pro ... 23779.html
Obrazek
sanay
Posty: 15
Rejestracja: 08 wrz 2011 11:03
Wersja środowiska: LabVIEW 8.5
Lokalizacja: Ruda Śląska

Re: Zapis i odczyt danych z plików tdms

Post autor: sanay »

Tym się na razie nie martwię chociaż pomysł z ram-dyskiem jest interesujący. Na wolnym laptopie który używam do testów przy użyciu bloczka "Write To Measurement File" (który jest jak wiadomo wolny) udaje mi się zapisywać około 100 próbek na sekundę. Wykorzystując dostęp do plików na niższym poziomie szybkość zapisu jest znacznie większa. Ten problem będę rozpatrywał jak opanuję problem opisany wcześniej. Dziękuję za te uwagi i proszę oczywiście o następne.
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Zapis i odczyt danych z plików tdms

Post autor: PiDi »

Jak sobie podejrzysz, co odczytałeś z tego pliku, to stamtąd wynika, że operujesz na waveformie o kroku czasowym 1 s. Czyli widmo jest poprawne (swoją drogą, czemu używasz wersji Re-Im, zamiast zwykłego PSD?), tylko twoje odczytane dane mają nieprawidłowy czas. Sugeruję zapewnić stały okres próbkowania w pętli i z danych generować sobie waveforma zapisywanego do TDMSa. Idea pokazana na rysunku.
Okres 2 ms nie powinien być problemem, ale sugeruję jeszcze oddzielenie próbkowania i zapisu poprzez równoległe pętle. Do tego można jeszcze wykorzystać Timed Loop, która sama może informować o przekroczeniu zadanego okresu - i będzie wiadomo, czy pomiar się rozjechał.
Aha, a tak w ogóle to nie możesz na przykład najpierw zebrać próbek, a potem dopiero zapisać do pliku?
Załączniki
pomysl.png
ObrazekObrazekObrazekObrazek
sanay
Posty: 15
Rejestracja: 08 wrz 2011 11:03
Wersja środowiska: LabVIEW 8.5
Lokalizacja: Ruda Śląska

Re: Zapis i odczyt danych z plików tdms

Post autor: sanay »

Robiłem doświadczenia wg wcześniejszego pomysłu ale problem nie ustąpił. Wciąż rozmijam się z czasem. Co ja źle robię? Bez doświadczenia można stracić naprawdę dużo czasu rozwiązując takie problemy. Co do pytań to przypadek że użyłem wersji Re-Im - tak naprawdę próbowałem różnych bloczków sprawdzając czy nie ma różnic. Jeśli chodzi o wcześniejsze zbieranie próbek to taki miałem pomysł. Może nie jest to rozwiązanie najlepsze ale nie mam niestety doświadczenia. Proszę pamiętać że pokazałem tylko część programu.
zapis2_tdms.jpg
Jak zwykle proszę o następne wskazówki.
Załączniki
zapis2_tdms.vi
(77.52 KiB) Pobrany 353 razy
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Zapis i odczyt danych z plików tdms

Post autor: PiDi »

A, oczywiście dt w waveformie jest w sekundach, więc te 14 musisz podzielić przez 1000 jeszcze. Mój błąd.
ObrazekObrazekObrazekObrazek
sanay
Posty: 15
Rejestracja: 08 wrz 2011 11:03
Wersja środowiska: LabVIEW 8.5
Lokalizacja: Ruda Śląska

Re: Zapis i odczyt danych z plików tdms

Post autor: sanay »

Nie w tym rzecz.
Nawet jak dzielę przez 1000 to i tak mi źle pokazuje FFT, np. jeśli ustawię szybkość na 1ms i sinusoidę na 37Hz to po odczycie pliku FFT pokazuje mi 300Hz, jeśli dam 5ms i 37Hz to w wyniku mam 60Hz a przy 10ms i 37Hz FFT daje wynik 30Hz.
W pliku nie jest przechowywany czas każdej próbki ale parametr "wf_increment" ma wartość która jest taka sama jak ustawiona przez mnie ilością próbek. Dalej jestem w kropce.
sanay
Posty: 15
Rejestracja: 08 wrz 2011 11:03
Wersja środowiska: LabVIEW 8.5
Lokalizacja: Ruda Śląska

Re: Zapis i odczyt danych z plików tdms

Post autor: sanay »

Jest dość małe zainteresowanie próbie rozwiązania problemu który opisałem. Zastanawiam się czy to nie jest przypadkiem wina umieszczenia tematu w złym dziale? Chyba że nie jest to takie proste jak sądziłem. :)
Awatar użytkownika
Pitol
Moderator
Posty: 984
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Zapis i odczyt danych z plików tdms

Post autor: Pitol »

Spokojnie, to nie jest forum onetu gdzie tysiące ludzi pisze co 1s. Widocznie osoby zainteresowane są na urlopie/chorobowym albo po prostu nie mają czasu. Inni najwyraźniej też nie mają czasu żeby od początku się wdrożyć w temat. Cierpliwości.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
AGF
Posty: 109
Rejestracja: 26 lut 2010 13:41
Wersja środowiska: LabVIEW 2010
Lokalizacja: Bydgoszcz

Re: Zapis i odczyt danych z plików tdms

Post autor: AGF »

sanay:
W pliku nie jest przechowywany czas każdej próbki ale parametr "wf_increment" ma wartość która jest taka sama jak ustawiona przez mnie ilością próbek. Dalej jestem w kropce.
A skąd się tam bierze ta wartość?
Załączniki
sniped.png
sanay
Posty: 15
Rejestracja: 08 wrz 2011 11:03
Wersja środowiska: LabVIEW 8.5
Lokalizacja: Ruda Śląska

Re: Zapis i odczyt danych z plików tdms

Post autor: sanay »

Do Pitol:
Nie chciałem być nie miły. Przypominam się bo mam mało czasu. Sam dużo czasu poświęciłem na rozwiązanie tego problemu, a ponieważ mam jeszcze do zrobienia dużo z innymi elementami w moim projekcie, więc rzuciłem tematem na forum żeby nie zmarnować nie potrzebnie zbyt dużo czasu. Wydawało mi się że to nie powinno być trudne. Niestety mocno się to rozciąga w czasie więc nie wiem już czy mogę liczyć na pomoc z forum.

Do AGF:
Przepraszam ale nie rozumiem czy to było pytanie do mnie czy raczej wskazówka do przemyślenia. Tak czy inaczej nie rozumiem. Zapisuję dane w sposób jaki przedstawiłeś na obrazku. Proszę o wyjaśnienie.
ODPOWIEDZ