Serielle Schnittstellen (Ports, RS232, COM1) m.VBA

Hallo liebe Wissende!
Das ist das erste mal, dass ich dieses wer-weiss-was benutze.

Ich schreibe derzeit Diplomarbeit und muss da nebenbei ein kleines
Progrämmchen dazu schreiben.
Und zwar in VBA (Excel) - habe bislang noch nicht damit gearbeitet,
aber habe mich schon außreichend gut in VBA eingelesen…

Mein Problem: Barcode-Scanner ist an Com1 (seriell, RS232)
angeschlossen.
Ich möchte, dass sobald dieser was liest bzw. einen Barcode erkennt,
der Inhalt des Barcodes in eine Textzeile meiner VBA-Oberfläche
geschrieben wird.
Es ist schwer im www was drüber zu finden, finde nur VB-Programme,
die helfen mir nicht weiter beim VBA.
Habe eine Port.dll entdeckt, mit der kann ich die Schnittstelle
ansprechen, aber bei dem (hoffentlich bekannten) READBYTE Befehl
liefert er mir immer nur die „-1“ (also einen Lesefehler).

Wer hat Erfahrung mit sowas? Kannst Du mir helfen?

Bitte Antworten an:
[email protected]

Vielen Dank!
Mit freundlichem Gruße
Ekkehard

Und zwar in VBA (Excel) - habe bislang noch nicht damit
gearbeitet,
aber habe mich schon außreichend gut in VBA eingelesen…

Mein Problem: Barcode-Scanner ist an Com1 (seriell, RS232)
angeschlossen.
Ich möchte, dass sobald dieser was liest bzw. einen Barcode
erkennt,
der Inhalt des Barcodes in eine Textzeile meiner
VBA-Oberfläche
geschrieben wird.

Hi Ekkehard,

http://cgi.ebay.de/Messen-Steuern-und-Regeln-mit-Wor…

Gruß
Reinhard

Hallo Reinhard,
ich nehme an das ist ein Link zu einem ebay-Angebot wo ich mir ein Buch darüber kaufen soll?
Solche Seiten blockiert Bosch…
Trotzdem danke für die Antwort. Ich werds mir ggf. daheim mal anschauen! :o)
Gruß
Ekkehard

Klingt blöd, aber hat jemand den Inhalt dieses toten Links?:
http://home.t-online.de/home/th-steinhauer/serielle.htm

bin in so vielen Foren schon drüber gestolpert, dass das genau der Link sein muss den ich brauche - das A und O der Seriell-Port-Ansteuerung!

ich nehme an das ist ein Link zu einem ebay-Angebot wo ich mir
ein Buch darüber kaufen soll?
Solche Seiten blockiert Bosch…
Trotzdem danke für die Antwort. Ich werds mir ggf. daheim mal
anschauen! :o)

Hi Ekkehard,

hier ist ein Programm um V24/Rs232 auszulesen:

http://www.serielleschnittstelle.de/

und hier die Beschreibung des o.g. Buches:

Messen, Steuern und Regeln mit Word und Excel

Autor(en): Berndt/Kainka
Verlag: Franzis
Seiten: 267
Sprache: deutsch
Zustand: NEU
Herstellerbeschreibung

Die PC-gestützte Mess-, Steuerungs- und Regelungstechnik hat nicht nur in der Industrie, sondern auch im Hobbybereich und in der Ausbildung erhebliche Bedeutung erlangt. Für kleinere und weniger aufwendige Anwendungen haben sich Interfaces an der seriellen Schnittstelle bewährt, die meist mit spezieller Ansteuerungssoftware eingesetzt werden. Die Anwendungen reichen von der einfachen Messwerterfassung mit Digitalmultimetern über die Steuerung von Bewegungsmodellen bis hin zu komplexen Regelungssystemen. Vielfach wurde bisher mit getrennten Programmen zur Messwerterfassung und -auswertung gearbeitet, was allerdings oft zu einer aufwendigen Datenkonvertierung führte.

Obwohl es zunächst verwundern mag, dass man auch mit Word und Excel eine direkte Hardwareanbindung erreichen kann, erweisen sich diese Programme auch hier als universelle und leicht handhabbare Werkzeuge. Schon nach kurzer Einarbeitung in die Makro-Programmierung lässt sich eine erhebliche Arbeitserleichterung und Zeitersparnis erreichen.

Mit der dritten Auflage wird nun auch Office 2000 berücksichtigt.
Die CD enthält eine neue, aktualisierte Programmbibliothek.

Aus dem Inhalt:
Einführung in die Makro-Programmierung in Word und Excel
Ansteuerung von Digitalmultimetern, Relaiskarten und PC-Interfaces
Direkter Input/Output, I2C-Bus und AD-Wandler an der RS232
Anwendung und Programmierung von Mikrocontroller-Systemen
Aufbau und Programmierung der RSAPI.DLL

Angaben zum CD-Inhalt

Anwendungsbeispiele, Funktionsbibliothek für Windows
Lauffähige Makros für Word 97/2000 und Excel 97/2000
Die Funktionsbibliothek RSAPI.DLL in der Version 1.22
Dokumentationen und Software zu Messgeräten und Interfaces
Entwicklungswerkzeuge für Mikrocontrollersysteme

Ergänzende Angaben zu Messen, Steuern und Regeln mit Word und Excel.
© 2006 Libri. Alle Rechte vorbehalten.

Details
Seitenanzahl: 267
Größe: 23,5 x 16,7 x 2,4 cm
Gewicht: 576,0 Gramm

‚Was stimmt an dem Code nicht?‘
Hallo Liebe Wissende!

Hier mal ein fragment meines Codes, welchen ich für die Schnittstellenprogrammierung verwenden will.

Was stimmt daran nicht?
Beim Klick auf den „LiesCode“-Button soll der Barcodescanner (am Com1) ausgelesen werden.
Ich krieg aber immer nur die „-1“ (=Fehler)
Hoffe meine Kommentare machen den Code verständlicher - für die schlechte Formatierung kann ich nix - liegt an der Forums-Form. :smile:

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

Hoffe meine Kommentare machen den Code verständlicher - für
die schlechte Formatierung kann ich nix - liegt an der
Forums-Form. :smile:

Hi Ekkehard,
irgendwie fehlte da zumindest ein „End If“, benutze den pre-Tag:

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 -1 Then
 txtSerienNummer.Text = "Ungleich -1"
 Else
 txtSerienNummer.Text = "Fehler beim Lesen"
 End If
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

Gruß
Reinhard