Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[VB]COM-Port reagiert nicht auf gesendeten String

Empfohlene Antworten

Veröffentlicht

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?

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.

  • Autor

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?

  • Autor

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!:(

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)

  • Autor

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.:rolleyes:

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

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?

  • Autor

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)?

  • Autor

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.:rolleyes:

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.