Jak zapisać napływające dane z COM do memo lub pliku?

0

Witam.
Jak wczytywać dane z buf do Memo ale tylko wtedy gdy ostatni pobrany znak to koniec wiersza (#13)?
Chodzi o to że wysyłam komendę przez coma do maszyny przemysłowej a w odpowiedzi dostaję treść zawartości pamięci tej maszyny - zwykły tekst (ok. 10kb)
Robiłem na różne metody to albo buf się przepełniał tzn. ComStat.cbInQue osiągało wartość 4096 i wtedy już leciały śmieci a nie dane. Obróbka pobieranych danych trwa zbyt długo.
Kod który działa w miarę poprawnie ale zbyt wolno i czasem nie nadąża. ComStat.cbInQue jest na pograniczu od 3800 do 4000 i więcej.

var
c:char;
linia:string;
repeat
begin
  ClearCommError(hCOM,Errors,@ComStat);
  //Odczytanie bufora gdy są dane
  if ComStat.cbInQue>0 then
begin
 readfile(hcom,c,1,nrRead,nil);
  if (nrRead>0) then
   begin
    IF c<>#10 then linia:=linia+c
     else
      begin
       memo1.Lines.add(linia);
       linia:='';
      end;
   end;
end;
until ComStat.cbInQue=0;

Próbowałem z tym kodem ale nie wiem. Działa szybciej ale dane były nie kompletne. Może ktoś ma pomysł jak to uzupełnić.

var
    buf:array[0..2048] of char;
begin
repeat
  //Sprawdzenie czy jest coś w buforze COM
  ClearCommError(hCOM,Errors,@ComStat);
  //Odczytanie bufora gdy są dane
  if ComStat.cbInQue>0 then
   begin
    ReadFile(hCOM,buf,ComStat.cbInQue,nrRead,nil);
      if ??????? then
        Memo1.lines.add(buf);
   end;
until ComStat.cbInQue=0;

lub może ktoś ma gotowe rozwiązanie tego problemu?

0

tcomport i po sprawie

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