Biblioteka Synaser - pobierane dane są nieaktualne

0

Jestem w trakcie pisania aplikacji, której jednym z zadań jest pobieranie i wysyłanie danych do mikrokontrolera.
Korzystam z biblioteki synaser
http://synapse.ararat.cz/doc/help/synaser.TBlockSerial.html

Mam sobie takie oto wątek:

procedure TTrans.Execute;
begin
  BT.Connect('COM4');
  BT.config(9600, 8, 'N', SB1, False, False);

  while not (Terminated) do
  begin        
  x:= format('x%s%.1d%s%.1d%s%.1d%s%.1d%s%.1d%s%.1d',
               [SgnStr[diods[1]>=0], diods[1], SgnStr[diods[2]>=0], diods[2],
                SgnStr[diods[3]>=0], diods[3], SgnStr[diods[4]>=0], diods[4],
                SgnStr[diods[5]>=0], diods[5], SgnStr[diods[6]>=0], diods[6]]);



    Str := BT.RecvTerminated(1, 'x');
    Synchronize(@Form_Text);

    BT.SendString(x);
    delay(100);


  end;
end;

Wysyłanie działa bardzo spoko, reakcja jest prawie natychmiastowa. Jest natomiast problem z pobieraniem danych.

Kod powyżej działa nawet poprawnie, bo jest odczytywany string, w takiej formie w jakiej bym chciał by był odczyta, z tym, że jest on nieaktualny. Wygląda to tak, jakby istniał bardzo duży buffor, do którego są ładowane stringi z mikrokontrolera, a następnie odczytywane przez program, odczytywane wolnej niż generowane. W konsekwencji, czas jaki upływa od zmiany stringu, do jego pojawienia się na ekrania to około pół minuty(!).

Problem nie leży raczej po stronie mikrokontrolera, ponieważ, kiedy odpalam dowolny terminal, to tam wszystko działa prawidłowo i wysyłane stringi są natychmiast aktualizowane.

Próbowałem różnych funkcji z biblioteki synaser, jednak żadna nie działała tak jakbym tego oczekiwał.

Macie może pomysł jak mógłbym rozwiązać ten problem?

0

Zwiększ timeout. Być może jest tak krótki, że masz bardzo małą szansę odebrać tego stringa w całości. Zwiększ na minimum 1000 ms

0

Jak dla mnie wygląda to na jedno z dwóch:

  1. Nie kończysz wysyłanych z kontrolera stringów znakiem x więc dostajesz fragment dopiero po przepełnieniu wewnętrznego bufora
  2. Masz nieodpowiednie parametry transmisji.
0

@_13th_Dragon
Przy nieodpowiednich parametrach transmisji takich jak prędkość , parzystość, czy liczba bitów stopu to nic by się nie odbierało

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