Visa read brak płynności odczytu

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.
Robert79
Posty: 15
Rejestracja: 28 paź 2013 20:18
Wersja środowiska: LabVIEW 7.1

Visa read brak płynności odczytu

Post autor: Robert79 »

Witam.
Napisałem program w którym odczytuję dane z zewnętrznego rejestratora.
Dane przesyłane są z prędkością 115200 bps.
Podczas odczytu danych z rejestratora zauważyłem że visa read ma problem z płynnością tzn odbiera dane z bufora po czym po ok 1s jakby się zatrzymuje na ułamek sekundy, w tym czasie bufor się zdąży napełnić sporą ilością danych(kilka kilo B), visa read znowu zaczyna odbierać i znowu się zatrzymuje.
Próbując znaleźć problem zacząłem wyrzucać wszystko z pętli sądząc że znajdę przyczynę, ale niestety w pętli zostało już praktycznie tylko visa read.
Czy możecie mi podpowiedzieć gdzie szukać przyczyny.
Docelowo w pętli wykonuję jeszcze obliczenia i wyświetlanie danych a to powoduje że podczas przesyłania strumienia bufor odbiorczy się znacznie napełnia i powoduje opóźnienia.

Pozdrawiam
Załączniki
odczyt danych.JPG
odczyt danych.JPG (30.9 KiB) Przejrzano 4897 razy
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Visa read brak płynności odczytu

Post autor: PiDi »

- Jaki bufor się zapełnia? Skąd to wiesz?
- Ile tych danych jest? Jak często powinieneś je dostawać? Dlaczego czytasz w pętli po jednym bajcie 52 razy zamiast po prostu odczytać 52 bajty?
- Oddziel przetwarzanie danych od komunikacji (architektura producent-konsument).
- Pokaż resztę tego kodu - inicjalizację VISA.
- Jeśli pracujesz na Windowsie, to pamiętaj, że to nie jest system czasu rzeczywistego i robi jeszcze dużo innych rzeczy w tle, które mogą przycinać twój program.
ObrazekObrazekObrazekObrazek
Robert79
Posty: 15
Rejestracja: 28 paź 2013 20:18
Wersja środowiska: LabVIEW 7.1

Re: Visa read brak płynności odczytu

Post autor: Robert79 »

Urządzenie to rejestrator parametrów i podczas normalnej pracy dane zapisuje do pamięci flash.
Na żądanie dane te są przesyłane do komputera. Może być ich nawet do 1MB.
Bufor odbiorczy się nie zapełnia tylko napełnia, podgląd mam na bieżąco w programie i właśnie na tej podstawie stwierdziłem że bufor odbiorczy napełnia się w sposób oscylacyjny.

Poniżej zrzut części inicjalizacyjnej powiązany z automatycznym wyszukiwaniem portu.
Jeżeli chodzi o uwagi związane z kodem to będę się poprawiał na bieżąco ponieważ nie używam LV zbyt często.
W jaki sposób oddzielić przetwarzanie danych od komunikacji? O co chodzi w architekturze producent-konsument?
Załączniki
init_visa.JPG
ODPOWIEDZ