Strona 1 z 1

problem z kominukacją szeregową (RS232)

: 28 maja 2011 21:53
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...

Re: problem z kominukacją szeregową (RS232)

: 28 maja 2011 22:05
autor: AWiT
Wydaje mi się, że brakuje jeszcze jakiegoś opóźnienia w pętli while, typu Wait albo Wait Until Next.

Pozdrawiam,
Artur

problem z kominukacją szeregową (RS232)

: 28 maja 2011 22:13
autor: blumen
dorzucilem Wait Until Next Multiple (500ms) wewnątrz pętli, błędy sypią się dalej :/

Re: problem z kominukacją szeregową (RS232)

: 28 maja 2011 23:26
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.

problem z kominukacją szeregową (RS232)

: 29 maja 2011 11:14
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.

problem z kominukacją szeregową (RS232)

: 29 maja 2011 14:47
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??

Re: problem z kominukacją szeregową (RS232)

: 06 cze 2011 23:24
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.