Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
816to820
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
816to820
816to820
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Serielle Schnittstelle (RS232, Ports, Com1)

Serielle Schnittstelle (RS232, Ports, Com1)
09.11.2006 11:02:22
Thannheuser
Hallo liebe Wissende!
Ich möchte über VBA (Excel) einen Barcodescanner auslesen, welcher an den COM1 angeschlossen ist. (Nein, ich kann keinen Scanner verwenden, der mit an den P/S2 angeschlossen wird, muss dieser Scanner sein)
Habe dazu eine Port.dll gefunden über die das machbar sein soll (findet man über google).
Allerdings erhalte ich als Antwort auf READBYTE immer nur eine "-1", also einen Fehler.
Hier ein Code-Fragment meines Programms (hab versucht übersichtlich zu kommentieren..):
#############################################################################

Private Sub LiesCode_Click()
TIMEOUT 9000    'Bei READBYTE wird 9000ms gewartet ob Daten gesendet werden, danach wird die -1 gesendet
'Da bei mir sofort ohne die 9s Verzögerung das -1 kommt liegt der Verdacht nahe,
'dass nicht nichts gesendet wird, sondern ein anderer Fehler zur -1 führt
'TIMEOUT ist eine Funktion der Port.dll
OPENCOM ("Com1:115200,N,8,1")   'Der COM1, also die serielle RS232-Schnittstelle wird geöffnet
'OPENCOM ist eine Funktion der Port.dll
If OPENCOM("Com1:115200,N,8,1") = 0 Then MsgBox "Zugriff auf Port verweigert evtl. wird bereits anderweitig auf Port zugegriffen", vbCritical
'diese Box kommt, wenn der Port nicht geöffnet werden kann (der Fehler kommt z.B., wenn der Port
'anderweitig beansprucht wird (z.B. das VisiSet-Tool drauf zugreift)
'MsgBox "Opencom bei Baudrate 9600(Bei Fehler 0): " & OPENCOM("Com1:9600,N,8,1")
MsgBox "Opencom bei Baudrate 115200: " & OPENCOM("Com1:115200,N,8,1")
'resultX = -1                   'Erzwungenes "Rein in die While-Schleife"
schicken = Chr(63) & Chr(13)    'Fragezeichen 63, Enter 13 ASCII
fragezeich = Chr(63)            '
enterzeich = Chr(13)            '
'SENDBYTE fragezeich            '
'SENDBYTE enterzeich            'Das ganze sollte ein Versuch sein, ob man mit dem Senden der Zeichen-
'folge "?" + "Enter" den Scanner zum Lesen bringen kann
'Scheiterte aber daran, dass SENDBYTE nur 0..255 senden kann
resultX = READBYTE              'Lesen eines Bytes von der seriellen Schnittstelle. Diese muß zuvor
'geöffnet worden sein.
'Parameter: keine
'Rückgabe: -1 bei Fehler, sonst das empfangene Byte
'READBYTE Funktion der Port.dll
If resultX = -1 Then MsgBox "Fehler beim Byte-Auslesen des Ports", vbCritical
MsgBox "Readbyte: " & READBYTE
iki = CInt(0)
a = CInt(0)
MsgBox "Der folgende Vorgang kostet Dich eine Minute Deines Lebens .. zumindest wartezeitmäßig.."
TIMEINIT             'Setzt den Millisekunden-Zeitzähler auf Null
Do While a < 256     'Anzahl der Leseversuche, alternativ auch Do While result = -1 möglich - dann aber
'Absturzgefahr (möglicherweise Endlosschleife)
SENDBYTE a          'Der Versuch über das senden aller möglichen Bytes eine
'Reaktion des Scanners zu erhalten
resultX = READBYTE  'eingelesenes Byte
a = a + 1           'um Schritte bis zum erfolgreichen Lesen/Abbruch zu zählen
If resultX <> -1 _
Then txtSerienNummer.Text = "Ungleich -1" _
Else
If resultX = -1 _
Then txtSerienNummer.Text = "Fehler beim Lesen"
Loop
Zeiteisen = TIMEREAD
MsgBox "Zeit für gesamten Schleifendurchlauf: " & Zeiteisen
MsgBox "Anzahl der Schleifendurchläufe: " & a
CLOSECOM            'Geöffneten COM-Port wieder schließen
'CLOSECOM Funktion der Port.dll
End Sub

#############################################################################
Was stimmt an dem Code nicht?
Bin für jede Hilfe/jeden Hinweis dankbar!
Für direkten Kontakt:
external.ekkehard.thannheuser@de.bosch.com
Gruß
Ekkehard

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Serielle Schnittstelle (RS232, Ports, Com1)
09.11.2006 11:34:43
Thannheuser
Hey, jetzt sei doch nicht gemein.
Ich möchte eine Lösung in VBA programmieren (was heiss "ich möchte", ich krieg keine Lizenzen, man sagt mir: machs mit VBA -- einer Programmiersprache von der ich bis vor 2 Wochen noch Null Ahnung hatte), das mit MSCOMM krieg ich nicht hin. Ich weiss nicht wie man die Mscomm32.ocx einbinden soll.
Es ist angeblich mit der port.dll machbar. Das hab ich jetzt schon mehrfach in Foren gelesen. Allerdings ist der Link zu der angeblich soo extrem voll und supi überhaupt tollen Seite (Irgeneine tonline Seite, die das Port ansprechen bis ins kleinste Detail beschreibt) tot.
Ich finde nicht, dass ich unfair oder egoistisch arbeite.
Gruß
Ekkehard
P.s.: Aber danke für die Antwort im wer-weiss-was-forum! Wobei: Mag sein, dass man irgendwo End If 's braucht, aber an der Stelle an der Du's reingebastelt hat meckert er bei mir 'rum: "End If ohne If Block" --- ?
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige