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?