Hallo William!

Ich habe den Thread nur überflogen, ich hoffe dass ich Deine Frage richtig verstanden habe. Falls ja:

Ich mache sowas in der Tat mit einem Ringpuffer (das Schlagwort ist ja schon gefallen). Jedes empfangene Zeichen wird einfach an den aktuellen Index des Puffers geschrieben, dann durchsuche ich den Puffer nach einer Startbedingung (die in den Daten natürlich nicht vorkommen darf). Wenn ich sie finde, lese ich ab dort die Daten und verwende sie. Ich hab das vor einiger Zeit mal quick-and-dirty gemacht, nämlich so:

Code:
Do
   If Ischarwaiting() <> 0 Then
      Toggle Led2
      Circ_buf(circ_buf_i) = Inkey()
      If Circ_buf_i < 34 Then
         Incr Circ_buf_i
      Else
         Circ_buf_i = 1
      End If
   End If
   '
   ' puffer nach datenstartbedingung (&HFFFF) durchsuchen
   For Ub1 = 1 To 34
      If Circ_buf(ub1) = &HFF Then
         ' ein &HFF gefunden, evnt. datenstartbedingung?
         Ub2 = Ub1 + 1
         If Ub2 = 35 Then Ub2 = 1                           ' pufferende erreicht
         If Circ_buf(ub2) = &HFF Then
            ' zwei &HFF in folge gefunden -> datenstartbedingung
            Incr Ub2                                        ' datenbeginn in circ_buf
            For Ub3 = 1 To 32
               ' datan in arr_buf einlesen
               If Ub2 = 35 Then Ub2 = 1
               Arr_buf(ub3) = Circ_buf(ub2)
               Incr Ub2
            Next Ub3
            Exit For
         End If
      End If
   Next Ub1
   
   'hier kann man dann was mit den Daten in Arr_buf machen 
Loop
Ich behaupte nicht, dass das schön programmiert ist, es funktioniert aber gut .

Achso, was ich dann vielleicht noch nachtragen sollte: eine CRC hab ich jetzt natürlich nicht integriert, das könntest Du ja aber zusätzlich natürlich noch machen. Aber - wenn ich das jetzt richtig sehe - das bringt Dir natürlich auch keine 100%ige Sicherheit, denn es kann immerhin sein, dass ein Fehler aufgetreten ist, der zur gleichen CRC geführt hat wie die richtigen Daten. In meinem Falle war es so, dass es zu verkraften gewesen wäre, wenn mal ein "falscher" Datensatz dazwischen wäre - hauptsache der nächste wird dann wieder korrekt im Leseraster interpretiert...

Vielleicht kannst ja was damit anfangen...


Viele Grüße
Malte