Hallo Frank,
das mache ich mit einer While Schleife in Verbindung mit einer SerStat_xx Funktion, aber es gibt mehrere Wege.
Einer meiner Codes als Beispiel:
Code
if WaitPipe( RxBufferC0, 30 ) then
inZKS[79]:=0; // lösche EingangsBuffer Zähler auf 0
rxCnt:= 0;
while SerStatC0 do //Daten vorhanden dann abarbeiten
if not SerInpBlock_TO( UsartC0, inByte, 1) then
// in TimeOut gelaufen, keine Daten verwerten!!!
zksClearIn();
return(0);
endif;
inZKS[rxCnt]:= inByte; // lege Daten im Empfangsspeicher ab und zähle
inc(rxCnt);
// Bereits Telegramm vorhanden? Dann raus, rest im nächsten Aufruf abholen
if (inByte1=$10) AND (inByte=$06) then break;
elsif (inByte1=$10) AND (inByte=$15) then break;
elsif (inByte3=$10) AND (inByte2=$03) then break;
Endif;
// Versatz für Auswertung...
inByte3:=inByte2; inByte2:=inByte1; inByte1:=inByte; // hier evtl Prüfen!!!
endwhile;
inZKS[79]:= rxCnt; // setze Datenmenge in den Empfangsbuffer
return(rxCnt);
else // Waitpipe
inZKS[79]:=0; // lösche EingangsBuffer Zähler auf 0
return(0); // TimeOut WaitPipe
endif; // Waitpipe
Gruß
Thorsten