Buforowanie danych z RS232

0

Witajcie, tworze aplikację, która komunikuje się z zewnętrznym urządzeniem przez RS232. Do komunikacji używam komponentu comport. Program, który stworzyłem po odebraniu danych z portu przetwarza je odpowiednio na dane prezentowane na formie + rysuje wykresy (nic ciężkiego). Gdy z urządzeniem komunikuję się przewodowo wszystko działa znakomicie nawet przy dużej częstotliwości wymiany danych (co 15ms), jednak gdy zamiast kabla zastosuję łącze bezprzewodowe Bluetooth, program często się zacina i gubi część danych. Wina leży po stronie "pakietowania" danych w Bluetoothie. Muszę stworzyć chyba jakiś bufor, który będzie łapał przychodzące dane i dopiero na nich działał.

Aktualnie działa to następująco:

  1. Co wybrany czas, przykładowo 50ms, komputer nadaje kod znaku $, co urządzenie interpretuje jako żądanie ramki.
  2. Urządzenie odpowiada ramką zaczynającą się @, kończącą #. Długość jest stała i wynosi zawsze 33 bajty.
  3. W zdarzeniu on RxChar comportu mam:
if (count >= 33) then
 comport1.Read(ramka, count);
  1. W tym samym timerze, który żąda ramki zajmuję się obsługą poprzedniej:
 if (ramka[1] = 64) AND (ramka[33] = 35) then
  begin
   //Robie to co chce z ramką
  End;

Tak jak wspomniałem, przewodowo działa znakomicie, bezprzewodowo ze sporymi problemami. Czy problem może być gdzieś indziej? Jak najlepiej zabrać się tworzenie takiego buforu danych odbieranych przez comport?

0

zobacz czy ramki w ogóle dochodzą, bez sprawdzania poprawności. może są po prostu błędy transmisji.

0

Sprawdziłem wcześniej, oczywiście dochodzą - testowane zewnętrznym terminalem. Tylko widać, że jest "pakietowanie", dane nie przychodzą natychmiast tak jak po kablu, tylko jakoś w kilku częściach.

0

pooglądaj sobie TComDataPacket

0

Oglądam i oglądałem :) Niestety efekty są podobne również się czasami tnie - jednak ogólnie jest lepiej. Czasami tylko cała aplikacja się zacina.

0

jak CI tak BT działa to co mu zrobisz?

0

To musi działać, przecież takie moduły są normalnie używane, opóźnienia są minimalne. Trzeba tylko jakoś bardziej "inteligentnie" buforować otrzymywane dane, przychodzi wszystko tylko w nieodpowiedni sposób.

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