Hallo zusammen
Ich sitze seit Tagen an einem Problem.
Ich Habe einen Barcodeleser, dessen Ausgabe ich über den virtuellen Bluetooth-COM Port im SPP Modus auslesen möchte.
Leider kann CommMG.au3 / CommAPI.au3 nicht mit diesen virtuellen Bluetooth COM-Ports umgehen, mit einem USB -> COM Adpater jedoch schon.
Ich habe herausgefunden, dass man COM-Ports auch mittels "_WinAPI_CreateFile("COM5", 2, 2)" ansprechen kann.
Soweit so gut, das klappt auch zuverlässig mit den BT-COM Ports.
Aber: Wenn ich den Output des Barcodelesers auslesen will, dann muss ich ja diesen Befehl anwenden:
; Öffnet COM5
$Input = _WinAPI_CreateFile($COMPort, 2, 2)
; Setzt eine Art 10Byte großen Puffer, in dem sich wohl später die Daten befinden
$tBuffer = DllStructCreate("byte[10]")
; An dieser Stelle wartet das Scrpit, bis der Barcodeleser etwas übermittelt
_WinAPI_ReadFile($Input, DllStructGetPtr($tBuffer), 10, $nBytes)
; Das erste Zeichen (von links) brauche ich nicht, deshlab kürze ich es weg.
$instr = StringReplace(StringTrimLeft(BinaryToString(DllStructGetData($tBuffer, 1)), 1), @LF, '')
; Obligatorische Wartezeit
Sleep(250)
; Zeigt mir die korrekte eingelesene Barcode-Nummer an
MsgBox(0,"Output Barcodeleser", $instr)
; Wenn ich das nicht nachschiebe und der nächste Barcode hat weniger Zeichen, dann bleiben die letzten Zeichen übrig
; Beispiel: 1. Code: XXXXXXXX -> Ergebnis: XXXXXXXX, 2. Code: YYYYYY -> Ergebnis: YYYYYYXX
$tBuffer = DllStructCreate("byte[10]")
Alles anzeigen
Nun kommt das kuriose:
Wenn ich "$tBuffer = DllStructCreate("byte[10]")" z.B. auf "$tBuffer = DllStructCreate("byte[20]")" setze und "_WinAPI_ReadFile($Input, DllStructGetPtr($tBuffer), 10, $nBytes)" auf "_WinAPI_ReadFile($Input, DllStructGetPtr($tBuffer), 20, $nBytes)" , dann muss ich 2x scannen, damit _WinAPI_ReadFile den Barcode verarbeitet und ausgibt. Dann habe ich aber auch meist beide eingescannte Codes in einer Ausgabe.
Muss ich diese "Puffergröße" immer nahe an den 100% "füllen", damit _Win_API_ReadFile greift?
Gibt es eine zuverlässigere Methode meinen BT-Com Port auszulesen?
Wenn ich einen Barcodeleser über USB -> COM anschließe und mit CommAPI.au3 / CommMG.au3 arbeite ist alles perfekt, aber da funktionieren (obwohl Ports aufgelistet werden) die BT-COM Ports nicht.