Obsługa miernika - pomiar amplitudy sygnału oraz czasu

Wszelkie sprawy związane z LabVIEW i komunikacją ze sprzętem. Problemy i ciekawe rozwiązania.
charonio
Posty: 3
Rejestracja: 22 maja 2012 18:27
Wersja środowiska: LabVIEW 2011

Obsługa miernika - pomiar amplitudy sygnału oraz czasu

Post autor: charonio »

Witam,

LabVIEW znam dosyć kiepsko, jednak moja uczelnia była tak miła, że kupiła je dla mnie i każe w nim robić pracę dyplomową... Mianowicie, muszę skonfigurować dwa mierniki, by móc badać moc światła, zagłębiać się nie będę, gdyż nie ma to na ta chwilę znaczenia.
Przechodząc do rzeczy, w załączniku wstawiłem plik vi
PM100D Simple Example.vi
plik vi
(28.59 KiB) Pobrany 417 razy
, na którym obecnie pracuje. Ważna jest dla mnie szybkość pomiaru, miernik ma czułość 1 mikrosekundy jak podaje producent, jednak ja nie mogę zejść poniżej jednej sekundy... Spędziłem już nad tym trochę czasu, próbowałem używać gotowych rozwiązań z przykładów w labView oraz rozwiązań znalezionych tu na forum, czy w internecie, ale nie mogę sobie poradzić.
Plik vi był dołączony do miernika, jedyne co dodałem to Wavefom chart'a by widzieć wykres zmian mocy.
W manualu od producenta
17655-D02 PM100A User Manual Rev A.pdf
manual
(967.22 KiB) Pobrany 411 razy
strona 35 jest ładnie opisany vi, również napisane jest, że dla średniej prędkości Averaging Rate równej 3000 pomiar zbierany jest co sekundę. Nie widzę za bardzo zmian w szybkości zbierania pomiarów przy zwiększaniu/zmniejszaniu parametru, dodatkowo czasami program staje, gdyż zmieniam również parametr timeout, a ten musi być większy niż sam pomiar trwa, a podaje się go w ms.
Na waveformie mam oś czasu zwana Relative time, jednak daleko jej do czasu rzeczywistego. Siedząc ze stoperem w ręku stwierdziłem, że czas w programie płynie dwa razy wolniej, wobec tego, czy można mu ufać? Czy to tylko opóźnienia związane z labView i pomiary są wykonywane w sposób właściwy. Mam pewne podejrzenia, że jest to zrobione źle, a czas przekłada się na liczbę próbek, a jedna próbka oznacza sekundę...
Próbowałem zrobić coś w stylu wykresu amplituda-czas, gdzie amplitudę brałem z miernika, a czas z bloczku w labView, ale poległem, gdyż za słabo orientuje się w programie, dlatego proszę o pomoc.
Gdyby ktoś mógł mi napisać jakich bloczków użyć i jak je połączyć, bym mógł osiągnąć rozdzielczość pomiaru równa co najmniej 1ms. Próbowałem bawić się XY Graphem, ale to chyba nie to.. Dodatkowo, czy ten Waveform jest ok i zbiera dane w sposób właściwy, bo nie rozumiem skąd się biorą opóźnienia?
Najchętniej napisałbym ten program sam od początku, lecz nie mam na to czasu, za słabo znam SCIPI, a o labView nie wspomnę, dlatego nie wiem co się dzieje...

Dodatkowo jak póki co wygląda zrobiony pomiar:
Obrazek

Pozdrawiam i z góry dziękuję za jakąkolwiek chęć pomocy.
bogdani
Administrator
Posty: 1315
Rejestracja: 30 lip 2003 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Ruda Śląska
Kontakt:

Obsługa miernika - pomiar amplitudy sygnału oraz czasu

Post autor: bogdani »

Witaj na forum

Po pierwsze nie ten dział, ale już poprawiłem.

Po drugie to przez interfejs komunikacyjny nie osiągniesz za dużo, może zejdziesz do kilkuset ms na odczyt, ale to wszystko - zależy od komputera.
Jak chcesz mieć pomiar rzędu 1 ms, to musisz wykorzystać wyjście analogowe oferowane przez urządzenie, na którym może ono aktualizować wartość z częstotliwością do 100 kHz. Przez USB możesz o tym zapomnieć.
Do tego jednak musisz mieć kartę z wejściem analogowym, choćby najprostszą NI USB 6009. Pamiętaj jednak że wtedy stracisz trochę na dokładności pomiaru przez podwójne przetworzenie sygnału.

Jak zachowuje się oryginalna aplikacja? Odczytuje dane częściej? Może uda się wykorzystać którąś z jej bibliotek do odczytywania tablicy z pomiarami, zamiast pojedynczych pomiarów.

bogdani
Ktoś ci pomógł na forum? Podziękuj dając pochwałę.

Obrazek Obrazek Obrazek
charonio
Posty: 3
Rejestracja: 22 maja 2012 18:27
Wersja środowiska: LabVIEW 2011

Obsługa miernika - pomiar amplitudy sygnału oraz czasu

Post autor: charonio »

Dzięki wielkie za odpowiedź.
Ok, to w takim razie porzucam USB, spróbuję pobawić się wyjściem analogowym, może to coś zmieni.
Oryginalna aplikacja to właściwie "to" co wstawiłem, no i jest tak jak pisałem, przy Averaging Rate równym 3000 wykres "odświeża się" co sekundę, przy zmniejszeniu parametru wykres jest bardziej dynamiczny, rzekłbym, że pobiera pomiary o wiele częściej niż sekunda.
Nie odpowiedziałeś mi na pytanie, czy waveform chart i jego oś czasu jest prawdziwa, czy występują tam przekłamania, czy też jest tak jak sadzę, że to pic na wodę i zebrana dana pomiarowa odpowiada sekundzie? Chce wiedzieć, czy mogę temu zaufać.
Może uda się wykorzystać którąś z jej bibliotek do odczytywania tablicy z pomiarami, zamiast pojedynczych pomiarów.
Myślałem o czymś takim, typu stworzenie tablicy w której jedna kolumna wypełniałaby się danymi pomiarowymi, a druga czasem rzeczywistym. Jednak nie wiem jak coś takiego zrobić, mógłbym prosić o jakieś rady/kluczowe hasła/tutorial/przykład? Bo przyznam szczerze, że póki co działam na ślepo, staram się dołączyć nowy bloczek, lub skopiować układ bloczków, ale najczęściej nie działa :D.
Garreth
Posty: 74
Rejestracja: 28 gru 2011 14:13
Wersja środowiska: LabVIEW 2011

Obsługa miernika - pomiar amplitudy sygnału oraz czasu

Post autor: Garreth »

Najlepiej zrobić sobie pusty VI, z jedną pętlą, waveform chart i bloczkiem liczącym sinusa, a zobaczysz jak zachowują się osie w waveform chart. Możesz także użyć typu danych waveform, w którym możesz określić czas początkowy próbkowania t0 (i możesz tu wstawić przykładowo obecny czas systemowy). Pamiętaj także, że we właściwościach waveform chart możesz ustawić formatowanie osi, żeby notacja wartości na wykresie nie była automatyczna/domyślna tylko taka, jaka jest wymagana. Jak chcesz bardzo ufać timingowi, możesz zrobić coś w stylu http://screenshooter.net/5784010/ohvxksj

@bogdani prawdopodobnie miał na myśli, żeby z miernika pobierać tablicę danych. Twój pomysł dotyczy czegoś innego - możesz pobawić się bloczkami z palety array. Jeśli chodzi o przykłady, to w labview masz wbudowany example finder. Wpiszujesz tylko słowo kluczowe (np. Array) i dostaniesz listę przykładów, wraz z opisami i dość dobrymi komentarzami w kodzie.
charonio
Posty: 3
Rejestracja: 22 maja 2012 18:27
Wersja środowiska: LabVIEW 2011

Obsługa miernika - pomiar amplitudy sygnału oraz czasu

Post autor: charonio »

Najlepiej zrobić sobie pusty VI, z jedną pętlą, waveform chart i bloczkiem liczącym sinusa, a zobaczysz jak zachowują się osie w waveform chart. Możesz także użyć typu danych waveform, w którym możesz określić czas początkowy próbkowania t0 (i możesz tu wstawić przykładowo obecny czas systemowy).
Ok spróbuję w wolnym czasie, bo rozumiem, że nikt nie wie jak zachowuje się waveform i jak określa skale czasu...
Pamiętaj także, że we właściwościach waveform chart możesz ustawić formatowanie osi, żeby notacja wartości na wykresie nie była automatyczna/domyślna tylko taka, jaka jest wymagana.
Jedyne czym się bawiłem to zmianą skali z relative na absolute time, bo na takiej mi zależy, chyba, ze mówisz o czymś innym.
Twój pomysł dotyczy czegoś innego - możesz pobawić się bloczkami z palety array. Jeśli chodzi o przykłady, to w labview masz wbudowany example finder. Wpiszujesz tylko słowo kluczowe (np. Array) i dostaniesz listę przykładów, wraz z opisami i dość dobrymi komentarzami w kodzie.
Wiem, szukałem już przykładów na timing i wykresy, mało mi pomogły w sumie ;). Pewnie się pobawię teraz tablicami, nic innego mi nie pozostało.
@bogdani prawdopodobnie miał na myśli, żeby z miernika pobierać tablicę danych.
Można coś więcej na ten temat, istnieją jakieś biblioteki, czy gotowe funkcje?
Garreth
Posty: 74
Rejestracja: 28 gru 2011 14:13
Wersja środowiska: LabVIEW 2011

Re: Obsługa miernika - pomiar amplitudy sygnału oraz czasu

Post autor: Garreth »

Tutaj masz fajnie wyjaśniony waveform chart: http://www.cipce.rpi.edu/programs/remot ... t/labview/ , szczególnie zwróć uwagę na tekst:
Waveform charts are typically used to show raw data collected from an external source or generated programmatically because they easily plot data in real-time. However, waveform charts do provide any information about timing when used in the four configurations shown above. The charts only plot collected data values versus their number in the data collection sequence. For example, if a single data point is collected from a source every second for ten seconds, then the waveform chart will show the data points plotted as y-axis magnitudes x-axis values running from zero to ten. If a single data point is collected from a source every hour for ten hours, the chart will again show the exact same plot.
Więc jeśli zrobisz timing w taki sposób jak pokazałem w screenshocie (albo tak jak jest na przykładach z podanego wyżej tutoriala) to powinno działać.

Jeśli chodzi o zmianę skali, to zauważyłem, że masz notację inżynierską na osi Y, a na osi X czas masz podany w dość dziwnej formie - bo z jednej strony pokazuje godziny, a z drugiej czas z dużą dokładnością, po prostu nie wiedziałem czy takie opisanie osi to efekt zamierzony, czy przypadkowy:)

Tablice są stosunkowo proste do opanowania, ale też najlepiej potrenować na pustym VI. Jak się zdecydujesz aby stworzyć tablicę z danymi czas-próbka, to ja albo jakaś inna dobra dusza Ci tutaj pomoże:) Tylko jak czas nie goni to jednak dobrze się tym pobawić samemu, a tutoriali na ten temat jest naprawdę sporo (w google wpisałem labview +arrays i znalazło mnóstwo użytecznych stron, więc nawet nie ma sensu bym przytaczał linki).
Można coś więcej na ten temat, istnieją jakieś biblioteki, czy gotowe funkcje?
Tu chodzi o możliwości tego miernika - przejrzałem na szybko jego instrukcję i takiej opcji nie zauważyłem (to znaczy nie znalazłem komendy która by zleciła miernikowi pomiar przez X sekund i zwrócenie danych w jednym ciągu. Ale mogę się mylić, więc przejrzyj dokładniej jakie możliwości ma ten miernik, bo sam w sobie wygląda na całkiem niezłą zabawkę:)
ODPOWIEDZ