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:
- Co wybrany czas, przykładowo 50ms, komputer nadaje kod znaku $, co urządzenie interpretuje jako żądanie ramki.
- Urządzenie odpowiada ramką zaczynającą się @, kończącą #. Długość jest stała i wynosi zawsze 33 bajty.
- W zdarzeniu on RxChar comportu mam:
if (count >= 33) then
comport1.Read(ramka, count);
- 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?