Serial Port i magiczne 8 bajtów

0

Witam,
Tworzę program pod Visual Studio 2005 do odioru danych przez RS232. Wszystko byłoby ok gdyby mój program nie dzielił wiadomości na 8 bajtów i reszta
Np. wysyłam mu 1234567890
A mój program odczytuje: [RX]1234567
[RX]90
Zauważyłem że dwa razy jest wywołane zdarzenie serialPort1_DataReceived.
Nie wiem jakim cudem to zdarzenie jest dwa razy wywoływane. Czy jest jakiś magiczy sposób aby ten komponet nie dzielił wiadomości?

0

z moich obserwacji tak to po prostu działą - zarówno w Delphi (TComPort) jak i w C# (standardowo System.IO.Ports) dane są porcjowane po 8 bajtów. Musisz sobie po prostu na końcu dodać jakiś znacznik po którym będziesz rozpoznawał koniec ramki

0

to jest podstawowa charakterystyka komunikacji strumieniowej - dostajesz jak tylko cos przyjdzie. a ze sprzet jest ograniczony co do mozliwosci do wysylania serii skonczonej dlugosci paczek (np. w ethernecie troche ponad 1400B, na serialach - pare bajtow) no to Twoja wiadomosc musi zostac podzielona. w ogolnosci, niskopoziomowe mechanizmy komunikacyjne nie maja zadnej kontroli co do wygladu danych przed podzialem - wysylasz 1 B, przelatuje od razu, wysylasz 100B - dochodzi najpierw 1B potem 99, ale to otrzymane 1B ze 100B paczki z punktu widzenia 'drivera portu' nie rozni sie niczym otrzymanego 1B z 1B paczki. musisz sobie opakowac to jakims swoim mechanizmem ktory bedzie zczytywal bajty z portu i informowal reszte programu dopiero jak sie usklada caly pakiet.

0

Dzięki za odpowiedź. Sklejam i później biorę to co najważniejsze - no i działa
[green]

1 użytkowników online, w tym zalogowanych: 0, gości: 1