problem z kominukacją szeregową (RS232)

Wszelkie sprawy związane z LabVIEW i komunikacją ze sprzętem. Problemy i ciekawe rozwiązania.
blumen
Posty: 18
Rejestracja: 19 kwie 2011 18:21
Wersja środowiska: LabVIEW 2010

problem z kominukacją szeregową (RS232)

Post autor: blumen »

Mam dwa przyrządy pomiarowe (halotronomierze Asonik SMS102). Po każdorazowym wykonaniu pomiaru przyrząd wysyła wartość do komputera przez RS232. Średnio co około sekundę (trochę losowo). Robie program w labview do sczytywania wartości i prezentacji danych na wykresie x-y.

Problem mam z komunikacją. Zrobiłem program tak:
Obrazek

No i sypie mi się co chwile następujący komunikat:

Obrazek

Czy istnieje jakiś bloczek oczekiwania na kompletną paczę danych? Walczę s tym od 4 godzin i nie wiem co robie źle...
AWiT
Posty: 17
Rejestracja: 13 lut 2011 23:38
Wersja środowiska: LabVIEW 2010

Re: problem z kominukacją szeregową (RS232)

Post autor: AWiT »

Wydaje mi się, że brakuje jeszcze jakiegoś opóźnienia w pętli while, typu Wait albo Wait Until Next.

Pozdrawiam,
Artur
blumen
Posty: 18
Rejestracja: 19 kwie 2011 18:21
Wersja środowiska: LabVIEW 2010

problem z kominukacją szeregową (RS232)

Post autor: blumen »

dorzucilem Wait Until Next Multiple (500ms) wewnątrz pętli, błędy sypią się dalej :/
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: problem z kominukacją szeregową (RS232)

Post autor: PiDi »

Jeśli już, to raczej za wolno czytasz i następuje przepełnienie bufora portu. Chodzi o to, że bez żadnej kontroli przepływu urządzenie śle do Ciebie dane bez przerwy, a jeśli nie zdążysz ich przeczytać, to następuje przepełnienie systemowego bufora. Rozwiązaniem, jeśli nie możesz użyć flow control, jest czytanie danych częściej (najlepsze rozwiązanie to wyrzucenie komunikacji do oddzielnej pętli, która będzie robić tylko to) albo w większych paczkach (na pewno chcesz czytać tylko po 10 bajtów na raz? czy te przyrządy nie przysyłają więcej?).
Rzuć okiem też na to: Why Do I Get Buffer Overflows with My Serial Port When Using VISA with Flow Control?.

W celach diagnostycznych możesz podejrzeć, ile masz danych na porcie za pomocą property node.
Załączniki
serial.jpg
ObrazekObrazekObrazekObrazek
blumen
Posty: 18
Rejestracja: 19 kwie 2011 18:21
Wersja środowiska: LabVIEW 2010

problem z kominukacją szeregową (RS232)

Post autor: blumen »

pomyliłem się z konfuguracją transmisji. powinienem miec Xon/Xoff. Powiem, że niewiele to zmienia.

ilość danych w jednym buforze = 0, natomiast w drugim okolo 1000... walczę, jak coś mądrego wymyslę, to pokaże.
blumen
Posty: 18
Rejestracja: 19 kwie 2011 18:21
Wersja środowiska: LabVIEW 2010

problem z kominukacją szeregową (RS232)

Post autor: blumen »

Poprawiłem program, teraz wygląda tak:

Obrazek

Program sprawdza stan (ilość danych) w buforach odczytu. Jeśli ilość danych w jednym jest inna niż w drugim, to czyści bufor. To samo ma się dziać, gdy dane nie będą nieświeże (gdy w buforze jest więcej danych niż po 2 paczki na każdy tor).

Czy będzie to działać poprawnie, czy o czymś jeszcze zapomniałem??
Awatar użytkownika
skoziate
Administrator
Posty: 245
Rejestracja: 06 mar 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Warszawa
Kontakt:

Re: problem z kominukacją szeregową (RS232)

Post autor: skoziate »

Może ja tylko dodam spostrzeżenie od siebie. Zakładasz, że oba urządzenia wysyłają dokładnie taką samą ilość danych i obsługujesz oba w tej samej pętli. Jednak nawet jeśli urządzenia są tego samego typu, to być może nie działają tak deterministycznie jak zakładasz i po jakimś czasie ten szybszy przepełni bufor. To też można zaobserwować według wskazówek od PiDi.

Czyszczenie bufora gdy liczba danych nie jest taka sama w buforach jest pewnym obejściem, ale lepiej byłoby umieścić obsługę obu urządzeń w osobnych pętlach. Tutaj aż samo nasuwa się stworzenie subVI i wykorzystanie go wielokrotnie z innymi portami COM.
Pozdrawiam,
Sebastian
ODPOWIEDZ