NI DAQ 6000 zdarzenie od IO
NI DAQ 6000 zdarzenie od IO
Cześć, posiadam kartę NI USB 6000 i podłączony do niego sensor na jedno z wejść IO. Program sterujący procesem wykonujący się na komputerze powinien jak najszybciej zareagować na zmianę poziomu na wejściu IO, czyli na zadziałanie sensora. Czy istnieje lepszy sposób, niż ciągłe czytanie stanu wejścia IO w while'u ?
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: NI DAQ 6000 zdarzenie od IO
W większości przypadków wystarczy Ci prawdopodobnie rozwiązanie, o którym piszesz, czyli odczytywanie w pętli stanu wejścia, ale doprecyzujmy:
1. Ile to jest "jak najszybciej" - nanosekunda, sekunda, minuta?
2. Co ma się zdarzyć po wykryciu tego sygnału?
3. Czy dopuszczalne jest "zgubienie" tego zdarzenia (tzn. DI przełączyło FALSE-TRUE-FALSE i program tego nie zauważył)?
1. Ile to jest "jak najszybciej" - nanosekunda, sekunda, minuta?
2. Co ma się zdarzyć po wykryciu tego sygnału?
3. Czy dopuszczalne jest "zgubienie" tego zdarzenia (tzn. DI przełączyło FALSE-TRUE-FALSE i program tego nie zauważył)?
Re: NI DAQ 6000 zdarzenie od IO
ok, precyzuję :
ad. 1) odczytywanie stanu co 1 ms
ad. 2) po wystąpieniu stanu wysokiego program ma za zadanie jak najszybciej (dokładność <= 1 ms) odczytać wartość pomiaru licznika, a następnie dołączyć go do danych pomiarowych
ad. 3) zgubienie stanu wysokiego jest niedopuszczalne.
Rozwiązanie z pętlą while ma dużą wadę - obciąża procesor i jego częstość odświeżania zależy od windowsa. (Czy myślisz, że zmiana Priorytetu wykonywania VI na wysoki, a także zmiana "prefered execution system" na "Instrument IO" coś daje? Czy w praktyce faktycznie to działa? (Sam sprawdzałem tylko wpływ "Allow Debugging" na CRIO - i faktycznie dezaktywacja tej opcji przyspieszyła kod o jakieś 3%).
Najlepsza wiadomość była by, gdyby istniał sposób stworzenia "przerwania" od pojawienia się stanu wysokiego.
ad. 1) odczytywanie stanu co 1 ms
ad. 2) po wystąpieniu stanu wysokiego program ma za zadanie jak najszybciej (dokładność <= 1 ms) odczytać wartość pomiaru licznika, a następnie dołączyć go do danych pomiarowych
ad. 3) zgubienie stanu wysokiego jest niedopuszczalne.
Rozwiązanie z pętlą while ma dużą wadę - obciąża procesor i jego częstość odświeżania zależy od windowsa. (Czy myślisz, że zmiana Priorytetu wykonywania VI na wysoki, a także zmiana "prefered execution system" na "Instrument IO" coś daje? Czy w praktyce faktycznie to działa? (Sam sprawdzałem tylko wpływ "Allow Debugging" na CRIO - i faktycznie dezaktywacja tej opcji przyspieszyła kod o jakieś 3%).
Najlepsza wiadomość była by, gdyby istniał sposób stworzenia "przerwania" od pojawienia się stanu wysokiego.
NI DAQ 6000 zdarzenie od IO
Najlepiej do tego zadania nadają się wejścia PFI. Na wspomnianej karcie są chyba dwa więc możesz ewentualnie sygnał rozdzielić na dwa wejścia i użyć zbocza opadającego i narastającego.
Re: NI DAQ 6000 zdarzenie od IO
Ok, ale co to zmieni po stornie programu?
NI DAQ 6000 zdarzenie od IO
karta sama rozpocznie pomiar jeżeli na wejściu PFI będzie odpowiednie zbocze. Nie będziesz musiał tego robić w while'u.