Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Serielle Schnittstelle

Serielle Schnittstelle
28.11.2012 23:47:02
Thomas
Liebe Excelperten,
ich möchte aus Excel auf die serielle Schnittstelle zugreifen. Hierzu folgender Sachverhalt:
- habe mir aus dem Internet einen Code heruntergeladen, der die kernel32-Funktionen nutzt. Quelle: http://dev.emcelettronica.com/serial-port-communication-excel-vba
- folgende Konstante habe ich von 4 auf 20 hochgesetzt:

Private Const MAX_PORTS = 20

- dann habe ich noch die eigentliche Routine ergänzt:

Private Sub CommandButton1_Click()
Dim intPortID As Integer ' Ex. 1, 2, 3, 4 for COM1 - COM4
Dim lngStatus As Long
Dim strData   As String
Dim msg As String
intPortID = 10
' Open COM port
If CommOpen(intPortID, "COM" & CStr(intPortID), "baud=38400 parity=N data=8 stop=1")  0    _
_
_
_
Then
lngStatus = CommGetError(msg)
MsgBox "Fehler beim Öffnen: " & msg
Else
strData = "z"
lngStatus = CommWrite(intPortID, strData)
If lngStatus = 0 Then
lngStatus = CommGetError(msg)
MsgBox "Schreibfehler: " & msg
Else
AppSleep 100
If CommRead(intPortID, strData, 13) = -1 Then
lngStatus = CommGetError(msg)
MsgBox "Lesefehler: " & msg
Else
MsgBox strData
End If
End If
If CommClose(intPortID)  0 Then
lngStatus = CommGetError(msg)
MsgBox msg
End If
End If
End Sub

- läuft auf meinem Desktop (XP, Excel 2002) auf COM1 wunderbar :o)
- läuft auf meinem Laptop (W7, Excel 2003) aber leider nicht. :o( Hier habe ich allerdings keinen RS232-Port, sondern nur USB. Geht aber auch, da ich für den 9-poligen D-SUB-Stecker meines Gerätes einen RS232->USB-Umsetzer benutze. Dieser Umsetzer meldet sich auf dem Laptop als COM10 an! Selbstverständlich habe ich die Zeile "intPortID = 1" abgeändert auf "intPortID = 10".
- beim Öffnen des Ports kommt aber immer die Meldung

"Das System kann die angegebene Datei nicht finden."
Irgendwie findet Excel offenbar den COM10 nicht?
- er ist aber da! Mit Hyperterminal kann ich mit derselben HW (Laptop, RS232-Umsetzer) über COM10 auf das Gerät zugreifen, es antwortet auch richtig.
Weiß hier jemand Rat? Versteht die kernel32 evtl. nicht COM10? Geht die überhaupt so weit? Ich hatte ja die Konstante MAX_PORTS von 4 auf 20 hochgesetzt. Könnte hier der Hase begraben liegen?
Vielen Dank schon einmal!
Viele Grüße,
Thomas :o)

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Serielle Schnittstelle
29.11.2012 20:09:16
Peter
Schreib ab COM10: in der Form "\\.\COM10"), das sollte das Problem lösen.
Low-Level auf der Schnittstelle ist immer eine Quelle der Freude!
Je nachdem,was du machen willst, und welcher Art die serielle Datenquelle ist, kann es
sehr sinnvoll sein, Fertiges hinzuzunehmen.
Schau mal, ob du auf http://www.serielleSchnittstelle.de etwas passendes findest!

Anzeige
DAAAAAANKE!!!!
29.11.2012 23:04:17
Thomas
Hallo Peter,
es funktioniert! Ich könnte dich... ;o)
Ich verstehe zwar ehrlich gesagt noch nicht warum, aber vielleicht bekomme ich das auch noch heraus. Falls du noch eine Erklärung in ein-zwei Sätzen hast, wär ich dir dankbar, muss aber auch nicht sein.
Serielle-Schnittstelle.de muss ich mir mal anschauen. Hintergrund ist hier übrigens ein Gerät, das im Ziel eines Volkslaufes über einen Chip die Daten des soeben eingelaufenen Läufers einliest. Der PC kommuniziert hier mit dem Gerät eben (leider nur) über RS232. Die Daten lese ich mit Excel ein, da die komplette Volkslaufauswertung in Excel geschrieben ist.
Vielen Dank nochmal und viele Grüße aus Berlin,
Thomas :o)

Anzeige
AW: DAAAAAANKE!!!!
30.11.2012 18:26:06
Peter
Freut mich, dass die Welt jetzt wieder ein bisschen besser ist ... ;-)
Zum Grund weiß ich nicht viel zu sagen; außer vielleicht, dass der API-Aufruf CreateFile() und der Doppelpunkt sich nicht mögen.
Für deine Aufgabenstellung wird eines der Programme Extract!xxx auf der genannten Seite richtig sein.
Wenn etwas unklar ist, schreib dort eine Kontakt-Mail und man wird dir helfen!
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zugriff auf die serielle Schnittstelle in Excel


Schritt-für-Schritt-Anleitung

Um die serielle Schnittstelle über Excel VBA zu nutzen, kannst du die folgenden Schritte befolgen:

  1. VBA-Umgebung öffnen:

    • Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Neues Modul erstellen:

    • Klicke im Projektfenster mit der rechten Maustaste auf dein Projekt, wähle Einfügen und dann Modul.
  3. Code für die serielle Schnittstelle einfügen:

    • Kopiere folgenden VBA-Code in das Modul:
Private Const MAX_PORTS = 20

Private Sub CommandButton1_Click()
    Dim intPortID As Integer ' Ex. 1, 2, 3, 4 for COM1 - COM4
    Dim lngStatus As Long
    Dim strData As String
    Dim msg As String
    intPortID = 10 ' Ändere dies je nach deinem COM-Port

    ' Open COM port
    If CommOpen(intPortID, "\\.\COM" & CStr(intPortID), "baud=38400 parity=N data=8 stop=1") <> 0 Then
        lngStatus = CommGetError(msg)
        MsgBox "Fehler beim Öffnen: " & msg
    Else
        strData = "z"
        lngStatus = CommWrite(intPortID, strData)
        If lngStatus = 0 Then
            lngStatus = CommGetError(msg)
            MsgBox "Schreibfehler: " & msg
        Else
            AppSleep 100
            If CommRead(intPortID, strData, 13) = -1 Then
                lngStatus = CommGetError(msg)
                MsgBox "Lesefehler: " & msg
            Else
                MsgBox strData
            End If
        End If
        If CommClose(intPortID) <> 0 Then
            lngStatus = CommGetError(msg)
            MsgBox msg
        End If
    End If
End Sub
  1. COM-Port anpassen:

    • Stelle sicher, dass intPortID auf den richtigen COM-Port eingestellt ist (z.B. 10 für COM10).
  2. Code ausführen:

    • Füge einen Button auf dein Excel-Arbeitsblatt ein und verknüpfe ihn mit CommandButton1_Click, um die Kommunikation zu starten.

Häufige Fehler und Lösungen

  • Fehler beim Öffnen des COM-Ports:

    • Problem: "Das System kann die angegebene Datei nicht finden."
    • Lösung: Stelle sicher, dass du den COM-Port in der richtigen Form angibst: \\.\COM10.
  • Schreibfehler oder Lesefehler:

    • Problem: Fehlercodes beim Schreiben oder Lesen vom Port.
    • Lösung: Überprüfe die Verbindungen und ob das Gerät ordnungsgemäß funktioniert. Manchmal kann auch ein USB-zu-RS232-Adapter Probleme verursachen.

Alternative Methoden

  • Verwendung von Drittanbieter-Software:

    • Es gibt Tools wie Hyperterminal oder Software von serielleSchnittstelle.de, die dir helfen können, die Kommunikation zu testen, bevor du sie in Excel implementierst.
  • Excel VBA Serial Port Communication Bibliotheken:

    • Du kannst auch VBA-Bibliotheken nutzen, die speziell für die serielle Kommunikation entwickelt wurden, um die Implementierung zu vereinfachen.

Praktische Beispiele

  • Beispiel für RS232 Kommunikation:
    • Nutze einen RS232-USB-Adapter, um Daten von einem Sensor zu lesen. Stelle sicher, dass der COM-Port korrekt konfiguriert ist.
intPortID = 10 ' Setze auf den Port des Adapters
  • Daten von einem Laufzeit-Chip lesen:
    • Bei der Auswertung von Marathon-Daten kann Excel verwendet werden, um die eingehenden Daten über den COM-Port zu verarbeiten und anzuzeigen.

Tipps für Profis

  • Debugging:

    • Nutze Debug.Print in deinem Code, um den Status von Variablen oder Fehlercodes während der Ausführung zu überprüfen.
  • Verwaltung der COM-Ports:

    • Halte eine Liste der aktiven COM-Ports in deinem System. Verwende Device Manager auf deinem Laptop, um sicherzustellen, dass der richtige Port ausgewählt ist.

FAQ: Häufige Fragen

1. Warum funktioniert der Code nicht auf meinem Laptop? Die serielle Kommunikation kann von verschiedenen Faktoren abhängen, wie z.B. den Treibern des USB-Adapters oder der Konfiguration des COM-Ports.

2. Was ist der Unterschied zwischen RS232 und USB? RS232 ist ein älterer Standard für serielle Kommunikation, während USB eine neuere Technologie ist, die höhere Geschwindigkeiten und eine einfachere Handhabung bietet. Du kannst jedoch RS232 über USB adaptieren, was in vielen modernen Geräten üblich ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige