Witam!
Mam system pomiarowy z kartą NI PCI-6143 i piszę (rysuję) do niego oprogramowanie w LabView 7.0. Sterowniki do karty to DAQmx v 7.3.
Karta prowadzi pomiary w dość nietypowy sposób: na jedno z wejść cyfrowych podane są impulsy taktujące pomiar, na drugie impulsy wyzwalające serię pomiarów, a na wejścia analogowe - wartości mierzone.
Impulsy taktujące i wyzwalające pojawiają się cały czas w następującej zależności: 720 impulsów taktujących / 1 impuls wyzwalający (są to przetworzone impulsy z enkodera przyrostowego). Maksymalna częstotliwość impulsów taktujących to ok 150kHz, a wyzwalających odpowiednio 720 razy mniejsza.
Chciałbym zebrać na dysk każdą serię pomiarów (i ew. pokazać na ekranie, może byc co któraś seria). Natomiast gdy robię po prostu "DAQ read" -> Graph, to widzę, że zapamiętuję mniej więcej co drugą. Tak jakby na czas transferu danych z karty do pamięci komputera przestawała ona robić kolejne pomiary.
Próbowałem juz różnych ustawień zadania pomiarowego w MAX-ie: 720 pomiarów "HW triggered" i Continous, ale nie udało mi się uzyskac zadowalającego efektu.
Czy jest na to rada?
Innym pomysłem było skonfigurowanie innego zadania pomiarowego, które zebrałoby mi dane np ze 100 obrotów (72000 punktów) i zapamiętanie tego na dysku. Nie sprawdziłem tego jeszcze, ale jak się do tego ma stwierdzenie w specyfikacji karty, że ma ona 2046 bajtów FIFO. Czy jest tak jak myślę, że takie "długie" zadanie pomiarowe nie będzie mogło być utworzone?
Z góry dziękuję za wszelkie rady.
Wełniak
Utrata pomiarów
Re: Utrata pomiarów
Witaj
Przeczytałem Twojego posta i w sumie to mam jedną radę - staraj się budować problem z małych klocków, ale działających. Jest cala masa rzeczy które mogą wplywać na ten problem, eliminować je można pojedyńczo - ustawiać w MAXie test panel i sprawdzać powoli, potem pisane programy najpierw sprawdzaj punkt po punkcie, potem resztę.
Tak na prawde to my nie wiemy czy impusly z enkodera dochodzą poprawnie i w ogóle jak napisany jest kod? nie staram się tu być mr. smart ass - miałem podobne problemy i wyeliminowałem je właśnie w taki sposób, że robiłem coś krok po kroku - przy czym każdy miał działać poprawnie
Pozdrawiam
pmaj
Przeczytałem Twojego posta i w sumie to mam jedną radę - staraj się budować problem z małych klocków, ale działających. Jest cala masa rzeczy które mogą wplywać na ten problem, eliminować je można pojedyńczo - ustawiać w MAXie test panel i sprawdzać powoli, potem pisane programy najpierw sprawdzaj punkt po punkcie, potem resztę.
Tak na prawde to my nie wiemy czy impusly z enkodera dochodzą poprawnie i w ogóle jak napisany jest kod? nie staram się tu być mr. smart ass - miałem podobne problemy i wyeliminowałem je właśnie w taki sposób, że robiłem coś krok po kroku - przy czym każdy miał działać poprawnie
Pozdrawiam
pmaj
-
bogdani
- Administrator
- Posty: 1315
- Rejestracja: 30 lip 2003 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Ruda Śląska
- Kontakt:
Re: Utrata pomiarów
Witaj
Jak wygląda twój program, czy czasem on nie zatrzymuje się na czas pobierania próbek?
Wrzuć tu kod, jak możesz i się przyjrzymy temu. Mamy podaną przez ciebie kartę pomiarową, więc można ją sobie zaemulować na czas testów, jakby co.
Nowe sterowniki, są wielowątkowe i nie powinno być problemów z dąstępęm do karty, tylko zostaje pytanie czy sterowniki wspierają tą właśnie kartę.
bogdani
Jak wygląda twój program, czy czasem on nie zatrzymuje się na czas pobierania próbek?
Wrzuć tu kod, jak możesz i się przyjrzymy temu. Mamy podaną przez ciebie kartę pomiarową, więc można ją sobie zaemulować na czas testów, jakby co.
Nowe sterowniki, są wielowątkowe i nie powinno być problemów z dąstępęm do karty, tylko zostaje pytanie czy sterowniki wspierają tą właśnie kartę.
bogdani
Re: Utrata pomiarów
Jeśli chodzi o stronę sprzętową (impulsy z enkodera), to sprawdziłem to dosyc dokładnie na oscyloskopie, więc tutaj jest raczej pewność.
Jeśli zaś chodzi o program, to nie odważę się wystawic go tutaj w formie, którą ma w tej chwili, bo byłoby to wystawienie "na pośmiewisko"
Przygotuję wersję okrojoną i tę podeślę. Ale mogę w skrócie opisać jak to wygląda:
Jedna pętla while z warunkiem podłączonym do klawisza STOP. Przed pętlą" DAQmx Start Task", a w pętli DAQmx Read z timeout=-1 bloczek ustawiony jest tak, żeby zwracał wyniki w postaci dwuwymiarowej tablicy. Wyjście tego bloczku rozdziela sie i wchodzi na Express VI zapisujący do pliku LVM oraz na Graph-a.
Docelowo odczytywane dane mają przechodzić jeszcze przez kilka etapów prostej obróbki (znajdowanie maksimum, filtracja, itp) i nawet to juz narysowałem, ale chyba nie to powoduje zacięcia o których wspominałem.
Czuję "przez skórę", że dobrze by było, gdyby odczyt z karty, wizualizacja i zapis odbywały się w niezależnych wątkach, a dane między nimi szły przez odpowiednie bufory lub kolejki. Wtedy np. wizualizacja nie blokowałaby pomiaru. Problem w tym, że jeszcze nie wiem jak taką strukturę zrealizować w LabView.
Pozdrawiam
Wełniak
PS. Dołączam jeszcze schemat mojego programu (uproszczony)
Jeśli zaś chodzi o program, to nie odważę się wystawic go tutaj w formie, którą ma w tej chwili, bo byłoby to wystawienie "na pośmiewisko"
Jedna pętla while z warunkiem podłączonym do klawisza STOP. Przed pętlą" DAQmx Start Task", a w pętli DAQmx Read z timeout=-1 bloczek ustawiony jest tak, żeby zwracał wyniki w postaci dwuwymiarowej tablicy. Wyjście tego bloczku rozdziela sie i wchodzi na Express VI zapisujący do pliku LVM oraz na Graph-a.
Docelowo odczytywane dane mają przechodzić jeszcze przez kilka etapów prostej obróbki (znajdowanie maksimum, filtracja, itp) i nawet to juz narysowałem, ale chyba nie to powoduje zacięcia o których wspominałem.
Czuję "przez skórę", że dobrze by było, gdyby odczyt z karty, wizualizacja i zapis odbywały się w niezależnych wątkach, a dane między nimi szły przez odpowiednie bufory lub kolejki. Wtedy np. wizualizacja nie blokowałaby pomiaru. Problem w tym, że jeszcze nie wiem jak taką strukturę zrealizować w LabView.
Pozdrawiam
Wełniak
PS. Dołączam jeszcze schemat mojego programu (uproszczony)
Re: Utrata pomiarów
Witam
Pozdrawiam
Piotr Maj
Tak. Nalezy to robić w niezależnych wątkach. Jak? - wrzucić to do dwóch niezależnych pętli while, a dane przekazywać przez kolejkę FIFO - bo jest najpewniejsza. Proste zastosowanie kolejki (queue) znajdziesz w przykladowych programach lub na forum gdzies wczesniej zamiescilem prostrzy przyklad chyba ... jak sie nie myle w topiku o liczeniu impulsów - to i tak tylko schemat ideowy.welniak pisze:Czuję "przez skórę", że dobrze by było, gdyby odczyt z karty, wizualizacja i zapis odbywały się w niezależnych wątkach, a dane między nimi szły przez odpowiednie bufory lub kolejki. Wtedy np. wizualizacja nie blokowałaby pomiaru. Problem w tym, że jeszcze nie wiem jak taką strukturę zrealizować w LabView.
Pozdrawiam
Piotr Maj
Nie jestem leniwy
Mam zawyżone wymagania motywacyjne
Mam zawyżone wymagania motywacyjne