Unten habe ich ein simples Testprogramm und die (zusammengefasste, kommentierte) Debugausgabe dazu angehängt.
Kurz: Mit Hilfe einer externen Datenquelle lasse ich den COM-Input-Puffer volllaufen.
[1] Die Angabe der Puffergrössen in OpenSerialPort() (hier 1024) scheint nur einen PB-Internen Nutzen zu haben ?
[2] Der reale Inputpuffer (Windows?) ist bei 65536 Bytes voll, AvailableSerialPortInput( ) stagniert. Gut.
Aber SerialPortError() gibt immer nur 28 zurück ... ist der Befehl auch nur auf die PB-internen 1024er-Puffer bezogen ?
[3] Was wäre die eleganteste/schnellste Puffer-Lösch-Methode für unrelevante Alt-Daten im Eingangspuffer?
(In PB bleibt wohl nur ReadSerialPortData() bis AvailableSerialPortInput()=0, aber vielleicht hilft Windows ?)
Code: Alles auswählen
zeichen$=Space(1)
If OpenSerialPort(0, "COM28", 500000, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
Debug "COM Success"
Repeat
Debug (AvailableSerialPortInput(0)) ; COM Eingang empfängt ca. 1000 Bytes/sek.
ReadSerialPortData(0, @zeichen$, 1) ; COM Eingang aber nur sehr langsam absaugen ..
Delay (100)
Debug (SerialPortError(0)) ;
ForEver
Else
Debug "COM Failed"
EndIf
COM Success
0
28
417
28
758
28
871
28
870
28
869
28
868
28
867
28
..
..
.. ........ COM Daten laufen weiter auf ...
..
..
64578
28
64957
28
65336
28
65536 <- Inputbuffer full
28 <- kein #PB_SerialPort_RxOver o.ä. ??
65536
28
65536
28
65536
28
..
..
..
..
.. Hier wird Input auf COM (extern) beendet
65535
28
65534
28
65533
28 .......... COM Daten "tröpfeln" wieder heraus ...
65532
28
65531
28
..
..
..