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