Strona 1 z 1

segregacja odebranych danych rs232

: 19 lip 2009 22:44
autor: opaluch
Witam
Czy ktoś mógłby pomóc. Zbudowałem urządzenie odbierające dane z RS232.
W jaki sposób mogę odbierać i dzielić dane z portu. Wysyłam z kontrolera ciągiem dane współczynnikY enter współczynnikX enter współczynnikY...
Potrzebuję wyłuskać osobno dane Y i X które są wysyłane ciągiem.

Myślałem by użyć funkcji "termination char", ale w tym języku jestem początkującym i nie wiem jak.

segregacja odebranych danych rs232

: 20 lip 2009 01:30
autor: coolfon
Na samym początku proponuję zmienić format wysyłanego ciągu danych. Zamiast dzielenia wartości enterami, przed współczynnikX daj 'x', a przed współczynnikY daj 'y'. Bez tego możesz mieć problem, bo nie bardzo będziesz mógł rozpoznać która wartość to X a która Y (nigdy nie wiadomo jak 'wstrzelisz' się z odczytem). No chyba że taka zamiana jest Ci obojętna.

Na rozdzielanie wartości X i Y sposobów jest wiele. Możesz odczytywać z portu RS-232 po jednym bajcie, w momencie gdy pojawi się wartość 'x' kolejne bajty zostaną potraktowane jako współczynnikX itd.

Jeśli możesz sobie pozwolić na utratę np co 5 próbki, to możesz od razu odczytywać więcej bajtów z portu (a ile to już zależy od tego jak 'duże' masz te współczynniki) i w takiej paczce szukać 'x' oraz 'y' - współczynniki znajdujące się za nimi lądują w stosownych tabelach (przykładowo...).

Jak możesz to zapisz przykładowy ciąg wartości odczytywanych z RS-232 do pliku txt i wrzuć go tutaj. Pomyślimy wtedy nad rozdzielaniem.

Re: segregacja odebranych danych rs232

: 20 lip 2009 12:15
autor: ky3orr
jeśli dane nie służą do rysowania wykresu on-line może warto przesyłać je większymi pakietami co jakąś chwilę i na te pakiety założyć np. sumę kontrolną na końcu transmisji w celu dodatkowego zabezpieczenie przed błędami (tyle, że jeśli pakiet jest błędny to dane też).

być może mały bufor powiedzmy na kilkadziesiąt znaków, żeby dało się zrobić retransmisję, w razie błędu porównania sumy kontrolnej, zanim zostanie złożony nowy pakiet danych...