PRACOWNIA 8 1 Czytanie danych z karty NI PCI

Transkrypt

PRACOWNIA 8 1 Czytanie danych z karty NI PCI
SYSTEMY CZASU RZECZYWISTEGO
PRACOWNIA 8
Czytanie danych z karty NI PCI-6221
Zmienne współdzielone
Podczas dzisiejszego ćwiczenia wykorzystamy kartę ADC PCI-6221 znajdującą się na dedykowanym komputerze z systemem ETS i odczytamy podawane na nią sygnały.
1. Konfiguracja dedykowanego komputera PC (target PC)
Sprawdzamy, czy target PC widzi zainstalowaną w nim kartę akwizycji danych NI PCI-6221.
W tym celu w Measurement & Automation Explorer klikamy kolejno w Remote Systems > twój
komputer np. target35 > Devices and Interfaces > NI-DAQmx Devices. Powinno ukazać się
urządzenie NI PCI-6221: „Dev 1”. Klikamy w nie. Klikamy następnie w Properties i w zakładce
Accessory wybieramy SCB-68 (to nazwa płytki, do której podłączony jest kabel). Robimy selftest. Zamykamy Measurement & Automation Explorer.
2. Uruchomienie prostej aplikacji na target PC
a. Uruchom LabVIEW na komputerze głównym.
b. Kliknij Real-Time Project i podaj:
i. Project Type: Continuous communication architecture.
ii. Project Name: np. Prac_8.
iii. Project Folder: ścieżka do Twojego katalogu roboczego na dysku C:\ na głównym komputerze.
c. Kliknij Next, a następnie wybierz:
i. Target Configuration: Two loops.
ii. Host Configuration: Include user interface/Host VI.
iii. Kliknij Next.
d. Następnie znajdź Real-Time Desktop (twój target PC) i kliknij OK.
e. Kilknij Next (powinieneś zobaczyć twój projekt - Preview project).
f. Kliknij Finish (project zostanie skonfigurowany I zobaczysz go na pulpicie).
g. Uruchom aplikacje target oraz host.
h. Po pewnym czasie powinniśmy zobaczyć w oknie host przebieg sinusoidalny.
3. Zapoznanie się ze zmiennymi współdzielonymi
Należy obejrzeć film shared_var.swf. Dotyczy on innego urządzenia, ale dobrze objaśnia
zmienne współdzielone. Proszę nie wykonywać oglądanych czynności, a jedynie obejrzeć film
z uwagą.
4. Czytanie danych z karty ADC PCI-6221.
a. Wracamy do naszego projektu Prac_8. Na początek dobrze jest zmienić standardowo
utworzone, skomplikowane nazwy procedur (np. host – network _ RT(separate).vi) na
bardziej czytelne, np. host_8.vi, target_8.vi (poprzez opcję File> Save as> Rename
w odpowiednim oknie lub poprzez kliknięcie na nazwę procedury w oknie Project Explorer prawym i wybranie Rename lub kliknięcie lewym i F2). Zmieniamy też nazwę biblioteki ze zmiennymi współdzielonymi variables – network – RT(separate).lvlib na np.
zmienne_8.lvlib. Procedurę support – acquire data.vi usuwamy z projektu oraz z dysku.
Proszę zwrócić uwagę na sposób zaprogramowania zatrzymywania programu – zmienne stop - RT i stop - network w procedurach host_8 i target_8.
b. Otwieramy diagram blokowy procedury target_8. Usuwamy funkcję data (usunęliśmy ją
już z dysku w podpunkcie a). W jej miejsce wstawić należy funkcję obsługującą urządzenia (np. kartę PCI-6221), która znajduje się albo w Functions> Measurement I/O>
DAQmx – Data Acquisition> DAQ Assist albo w Functions> Express> Input. Po ułożeniu bloczka na diagramie blokowym otworzy się okno umożliwiające jego konfigurację.
c. Konfiguracja DAQ Assistant.
Będziemy odbierać sygnały analogowe przychodzące na pierwsze wejście analogowe
karty PCI-6221, wybieramy więc Acquire Signals> Analog Input> Voltage> kanał ai0.
1
SYSTEMY CZASU RZECZYWISTEGO
PRACOWNIA 8
Klikamy Finish i na następnym oknie jako Terminal Configuration wybieramy RSE (sygnał nie różnicowy, lecz mierzony względem wspólnej masy). Jako Acquisition Mode
wybrać należy Continuous Samples. Zamykamy okno (klikając OK), po czym do wejść
rate (ilość pomiarów, których w ciągu sekundy dokonuje układ ADC na karcie 6221)
oraz number of samples (ilość próbek przekazana w ciągu sekundy) utworzonego na
panelu bloczku podpinamy stałe równe 1000. Do wejścia stop (F) zmienną stop-RT.
Wyjście data ze zmienną data-RT, natomiast wyjście stopped ze stopem pętli while.
Takie podłączenie powoduje zatrzymanie pętli dopiero po zakończeniu działania funkcji
obsługującej kartę i chroni przed utratą danych.
d. Zmieniamy parametry zmiennej data-RT. W tym celu znajdujemy ją w oknie projektu i
klikamy w nią dwukrotnie. Zmienna ta powinna być typu Double Waveform (gdyż przekazujemy sygnał); Real-Time FIFO uruchamiamy dla Single element o rozmiarze 1000
punktów pomiarowych. Zmieniamy również zmienną data-network, która również powinna być typu Double Waveform. RT FIFO ustawiamy jak wyżej. Włączamy buforowanie z parametrami: 1 waveform o rozmiarze 5000 punktów (bufor powinien być większy
od pakietu przesyłanych danych co najmniej 2 razy).
e. W procedurze host_8 zmienna z danymi data-network ma być podłączona do Waveform Graph.
f. Będziemy również obliczać i podawać amplitudę, częstotliwość oraz offset, czyli przesunięcie (DC level) sygnału. Odpowiednie bloczki (odpowiednio Amplitude and Level,
Pulse Measurements oraz Basic Averaged DC-RMS) znajdują się w zakładce Functions> Programming> Waveform> Analog Wfm> Waveform Measurements – oczywiście należy jeszcze delikatnych przekształceń dokonać, by uzyskać amplitudę
i częstotliwość. Bloczki te najlepiej umieścić w niedeterministycznej pętli programu target_8. W pętli deterministycznej mogą przeszkadzać, natomiast umieszczenie ich w
host_8 może spowodować pojawienie się błędów związanych z opóźnieniami w komunikacji. Wyniki tych obliczeń proszę złożyć w jednowymiarową tablicę trzyelementową
i przekazać do host_8 przez nowoutworzoną zmienną Parametry. Zmienna ta musi być,
rzecz jasna, typu Array of Double, a buforowanie powinno zawierać jedną tablicę z 3
elementami. W host_8 tablica powinna być odczytana i jej wartości podane na odpowiednie kontrolki.
g. Proszę sprawdzić, jak będzie wyglądał przesyłany sygnał, jeżeli zmienić ilość punktów
w FIFO zmiennej data-RT z 1000 na 2000, 500, 200 lub inne wartości. Oś X wyświetlacza graficznego powinna się skalować automatycznie – klikając w nią możemy zaznaczyć AutoScale X, o ile nie jest zaznaczone.
h. Odbierany sygnał możemy również przekształcić, np. podzielić przez 2 lub odwrócić
(można dokonać tego w pętli niedeterministycznej), a następnie przekazać go do procedury host_8 i wyświetlić na tym samym wykresie, co oryginalny sygnał. Można to
zrobić, albo tworząc nową zmienną np. dane2-network, albo można przesłać oba sygnały zmienną data-network, lekko ją modyfikując.
2

Podobne dokumenty