jomama Geschrieben 12. August 2003 Geschrieben 12. August 2003 Da ist der Code Private Sub MenuDelete_Click() If MSComm1.PortOpen = False Then MSComm1.PortOpen = True MSComm1.Output = "T1" & vbCrLf MSComm1.Output = "CLRMEM" & vbCrLf MSComm1.PortOpen = False End Sub Also der Port soll geöffnet werden, die beiden Strings sollen gesendet und der Port dann wieder geschlossen werden. Ich habe die Befehle per Serial Monitor gesendet und es funzt einwandfrei. Ich schicke sie mit vb und der Barcodescanner merkt nix davon. Ich habe es bereits mir vbCrLf, vbCr und ohne den Schnörkel probiert, kein Erfolg. 1. Frage: Wie krieg ich das gesendet, das es der Scanner kapiert? 2. Frage: Wie krieg ich da ein 2 Sekunden Delay dazwischen? Zitieren
PeliWeli Geschrieben 12. August 2003 Geschrieben 12. August 2003 Hi, ich gehe mal davon aus das der Scanner ein LineFeed als Befehlsabschluß ansieht. Probier mal statt den VB Konstanten den Abschluß mit Chr$(&HD) (ASCII Zeichen 13 = LineFeed) und den Delay erreichst Du mit der API-Funktion Wait (da steht dann aber die ganze Applikation) oder mit einem Timer nach dem Motto dim Start as Date Start = Now Do if DateDiff("s", Start, now) > 2 then exit do loop Ich hoffe ich konnte helfen. Zitieren
jomama Geschrieben 13. August 2003 Autor Geschrieben 13. August 2003 Funzt leider noch nicht. Kann es auch daran liegen, das ich das Prog unter Windows 2000 kompiliere, aber unter NT ausführe? Wenn ja, was muss ich machen, damits bei beiden läuft? Zitieren
jomama Geschrieben 13. August 2003 Autor Geschrieben 13. August 2003 Also der Port wird geöffnet, hab versucht, während das Prog läuft, den Port zu öffnen, und er sagt mir, der ist bereits offen. Daran kanns also nicht liegen. Ich hab mal mit dem Serial Monitor rumgespielt, wenn ich da die Zeichenfolge "T1#0D" sende, kommt das gewünschte Ergebnis. Wenn ich versuche, die gleiche Zeichenfolge über MSComm1.Output an den Scanner zu schicken, tut der nichtmal piepen. Ich hab mal probiert, über den Serial Monitor "T1" ohne CR an das Gerät zu schicken, mit dem selben Effekt, den ich in vb hatte, nämlich keinem. Ich vermute daher mal, dass es an dem gesendeten String liegt. Was könnt ich denn da noch dazuschreiben, damit er es erkennt? Hüüülfee! Zitieren
PeliWeli Geschrieben 14. August 2003 Geschrieben 14. August 2003 hast Du einen Befehlsreferenz für den Scanner? Da sollte auf jeden Fall stehen welches Ascii Zeichen dieser für einen Befehlsabschluß benötigt. Probier mal Chr$(&HA) Zitieren
jomama Geschrieben 14. August 2003 Autor Geschrieben 14. August 2003 Es funzt, der Scanner redet mit mir. Ich hab einfach mal probiert, das vbCrLf am Anfang und am Ende zu Senden, und siehe da, es funktioniert. Ist nirgends in der Doku gestanden, das soll man wohl riechen. Trotzdem Danke für die Mühen. :uli Aber jetzt bedrückt mich was anderes. Ich will per Input dei Daten auslesen. Klappt auch, nur gibt mir das Gerät keinen CommEvent aus, wenn der Sendevorgang beendet ist. Was gibt denn Input zurück, wenn kein Input kommt? Mit Null gehts nicht, mit "" auch nicht. Und False geht ebenso wenig. Hier der Nicht-Funktionierende Code: Private Sub ScanRead_Click(Index As Integer) PortOpen (PortNr) 'Die Funktion öffnet den Port ComWrite ("D") 'Schickt ein Zeichen an den Port MSComm1.InputLen = 0 Do InString = InString & MSComm1.Input If MSComm1.Input = "" Then Exit Do Loop PortClose Text1.Text = InString InString = "" End Sub Zitieren
maxim_42 Geschrieben 15. August 2003 Geschrieben 15. August 2003 The RThreshold and SThreshold Properties The RThreshold and SThreshold properties set or return the number of characters that are received into the receive and transmit buffers before the OnComm event is fired. The OnComm event is used to monitor and respond to changes in communications states. Setting the value for each property to zero (0) prevents the OnComm event from firing. Setting the value to something other than 0 (1, for instance) causes the OnComm event to be fired every time a single character is received into either buffer. Damit dein MsComm überhaupt bei Empfang ein Event feuert muss RThreshold einen Wert ungleich 0 haben. Liegts daran? Zitieren
jomama Geschrieben 16. August 2003 Autor Geschrieben 16. August 2003 Ich werde das in der Arbeit mal ausprobieren, aber ich glaub, den hab ich auf eins gesetzt. Was wäre denn der CommEvent wenn die Übertragung abgeschlossen ist, bzw. nichts mehr gesendet wird(brauch ich für die Schleife als Abbruchanwisung)? Zitieren
jomama Geschrieben 19. August 2003 Autor Geschrieben 19. August 2003 Hat sich erledigt. Ich les jetzt bis zum LineFeed per Funktion eine Zeile aus und benutz das Erkennungszeichen der Letzten Zeile im Scanner als Abbruchanforderung. Trotzdem Danke für die Mühen. Gibt wohl nur wenige vb-Coder hier. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.