Die Community zu .NET und Classic VB.
Menü

Das COM-Control

 von 

Einleitung 

Das Microsoft Comm Control, also das Kommunikations-Steuerelement, dient zur Verständigung über die seriellen Schnittstellen - ergo: zum Senden und Empfangen von Daten.
In diesem Tutorial soll ein grober Überblick über die technischen Details der seriellen Schnittstelle gegeben und vertieft die Arbeit mit dem Comm Control demonstriert werden.

Viel Spaß beim Lesen
Björn Kirsch

Allgemeines zur seriellen Schnittstelle  

Früher war es üblich, dass sich zumindest eine serielle Schnittstelle in einem PC befand. Zumeist waren es sogar eher zwei Schnittstellen und durch wenig Aufwand konnte eine Nachrüstung erfolgen. Selbst Notebooks wurden mit diesem Schnittstellen-Typus versehen. Heute findet man nicht mehr an allen Geräten solche Anschlussmöglichkeiten. Der seriellen Schnittstelle bedient man sich, um Daten mit Geräten, wie z. B. Computermäusen, Modems, tlw. auch Scannern, etc. auszutauschen.

Die serielle Schnittstelle ist definitiv nicht die schnellste Schnittstelle an modernen PCs. Bereits der Parallelport konnte ein höheres Datenvolumen transportieren, von den Geschwindigkeiten aktueller Schnittstellen (Firewire, etc.) einmal ganz abgesehen. Das Geschwindigkeitsproblem der seriellen Schnittstelle ergibt sich regelmäßig aus Ihrem einfachen Aufbau (dieser wird später näher beschrieben), da insgesamt weniger Datenleitungen gestellt werden. Ein klarer Vorteil der Schnittstelle lag - im Vergleich zur parallelen Schnittstelle - in der geringen Fehleranfälligkeit. Dieser Vorteil wurde klar durch Anschlussarten wie USB, etc. relativiert.

Die Sicherheit dieser Schnittstelle ist gut. Ein Anschluss von Geräten kann z. B. während des normalen PC-Betriebes erfolgen, ist aber nicht sonderlich empfehlenswert. Einfachere Komponenten können zudem mit Strom versorgt werden. Es werden bis zu ca. 10 mA zur Verfügung gestellt werden.

Technische Details  

Grundlagen

Für die Kommunikation über die serielle Schnittstelle bedarf es eigentliche nur eines zweipoligen Kabels (Masse- und Datenleitung). Die bidirektionale (senden- und empfangen) Kommunikation kann unter Hinzunahme einer weiteren Datenleitung ermöglicht werden.

Der Datenaustausch über die serielle Schnittstelle ist weitestgehend normiert (Norm: RS-232(-C), ca. seit 1969). In dieser Norm sind u. a. die Verkabelung, das Datenübertragungsprotokoll, usw. definiert.

die Pinbelegung

Die folgende Tabelle zeigt die Pinbelegung bei 25poligen und 9poligen Steckern. Das Anschlusskabel hat normalerweise eine Buchse.

9 Pins 25 Pins E/A Bezeichnung Funktion
3 2 Aus TxD (Transmit Data) Sendedaten
2 3 Ein RxD (Recieve Data) Empfangsdaten
7 4 Aus RTS (Request To Send) Sendeteil einschalten
8 5 Ein CTS (Clear To Send) Sendebereitschaft
6 6 Ein DSR (Data Send Ready) Betriebsbereitschaft
5 7 . GND Betriebserde
1 8 Ein DCD (Data Carrier Detect) Empfangssignalpegel
4 20 Aus DTR (Data Terminal Ready) Endgerät bereit
9 22 Ein RI (Ring Indicator) Einkommender Ruf

Die Pins der Stecker sind in zwei Reihen angeordnet. Die Mehrzahl der Pins sollten sich bei einer Frontansicht rechts befinden (13 Pins = 25poligen Stecker, 5 Pins = 9poliger Stecker).

Die oben nicht aufgeführten restlichen Leitungen eines 25poligen Steckers bleiben eigentlich unbelegt. Für die Entwicklung eigener Hardware, z. B. um eine erhöhte Funktionalität zu bieten, könnten die verbleibenden Leitungen aber genutzt werden.

Die Ausgänge der Stecker sehen eigentlich einen Schutz vor Kurzschlüssen vor. -12 V ist als Low-Zustand definiert. Der High-Zustand sieht +12 V vor. Spannungen unter ca. 1,0 V werden im Regelfall als Low erkennt; High beginnt über ca. 1,25 V. Der Eingangswiderstand liegt bei etwa 10 kOhm. Eine Schalthysterese (Zustandsänderung bei Bereichüberschreitung der Eingangsspannung) besteht.

Die Sendeleitung TxD wird normalerweise zum Senden und zum Empfangen die Leitung RxD genutzt. Die weiteren Leitungen sind als Handshakeleitungen zu bezeichnen und unterstützen die Kommunikation. Hiervon auszunehmen ist logischerweise die Betriebserde.

Die Nutzung der TTL-Pegel wollen wir in diesem Tutorial unerwähnt lassen, da sich nicht alle PC auf diesen Standard verstehen.

Register des UART  

Über den Universal Asynchronous Receiver Transmitter - als UART oder SIO bekannt - kommuniziert die serielle Schnittstelle (üblicherweise) mit dem PC.

Zur Steuerung der Ein- und Ausgabe werden über den UART 8250 (respektive kompatible Chips) 10 Register vorgehalten. Die Ansprache erfolgt über sieben, teilweise doppelt belegte, Adressen. Es gibt bereits weitere Versionen des UART, z. B. den 16550.

Die Register des UART 8250:

Register Offset Bemerkung
Transmitter-Holding 0 Sendebyte schreiben
Receiver-Data 0 Empfangsbyte lesen
Baudrate-Devisor LSB (low) 0 .
Baudrate-Devisor MSB (high) 1 .
Interrupt-Enable 1 .
Interrupt-ID 2 .
Line-Control 3 .
Modem-Control 4 Hilfsleitung setzen
Line-Status 5 .
Modem-Status 6 Hilfsleitung lesen

Steuerung

Die Registersteuerung erfolgt softwäremäßig. Weitere Register können der internen Kommunikation dienen, beispielsweise die Receiver-Shift-Register und Transmitter-Shift-Register. Über das Receiver-Shift-Register werden die ankommenden Bits gesammelt. Ist ein ein Datenwort vollständig, wird dieses an das Receiver-Data-Register weitergegeben. Das Auslesen kann dann per Software erfolgen. Jedes Register verfügt über acht Bits.

Für jede Schnittstelle ist ein Bereich festgelegt, damit der PC die Registeradressen finden kann. Die erste Adresse wird als Basisadresse bezeichnet, z. B. hat die Schnittstelle COM1 oft die hexadezimale Basisadresse 3F8. Für vorstehende Register ergibt sich ergo der Bereich 3F8 bis 3FF.

Die Register können über die Registeradresse angesteuert werden. Eine Berechnung erfolgt, wie vorstehen erwähnt, wie folgt: Basisadresse + Offset = Registeradresse

Auf die Hilfsleitungen DTR oder RTS kann somit z. B. über die die Adresse 3FC zugegriffen werden (3F8+4).

Den Ausflug in die Hardwarelandschaft des PC wollen wir an dieser Stelle beenden, da man sich als Entwickler unter Windows nicht mit den Schwierigkeiten der Umsetzung irgendwelcher Registeransteuerungen beschäftigen muss - dafür soll schließlich das Comm Control eingesetzt werden. Die oben beschriebenen Hardwaredefinitionen sollten nur ein grundsätzliches Verständnis zum Thema "serielle Kommunikation" vermitteln und vielleicht hat nunmehr auch der eine oder andere Leser selbst das Bedürfnis entwickelt, sich näher mit der Nutzung der seriellen Schnittstelle auseinander zu setzen, z. B. um den Toaster zu programmieren.

Das Comm-Control  

Es wurde bereits darauf hingewiesen, dass das Comm Control die Arbeit mit externen seriellen Geräten erheblich erleichtert, da man sich über die direkte Hardwareansteuerung keine Gedanken mehr zu machen braucht. Das Comm Control bietet allerdings noch genügend Möglichkeiten freie Zeit mit interessanten Aufgaben zu verbringen. Das Comm Control ist nicht automatisch als Control verfügbar und ist daher vorab über die Komponentenliste einzufügen. Es nennt sich "Microsoft Comm Control" und ist nach Aufnahme in die Komponentenliste auf die Form zu ziehen.
Möchte man mit mehreren Schnittstellen gleichzeitig agieren, so muss man das Comm Control mehrfach aufziehen, da ein Control nur jeweils eine Schnittstellen nutzen kann.
Die nachfolgenden Ausführungen beziehen sich immer auf ein aktives Comm Control mit dem Namen "MSComm1". Alle Beispiele werden unter Verwendung dieses Controls dargestellt.
Nahezu jedes Control unter Windows hat natürlich Eigenschaften, um das jeweilige Control zu konfigurieren. Beim Comm Control ist das nicht anders und wir sollten uns vorab mit der Eigenschaft "CommPort" beschäftigen.

Der CommPort

Mit der Eigenschaft "CommPort" wird die Nummer des Kommunikationsanschlusses festgelegt. Natürlich kann der aktuell verwendet Kommunikationsanschluss auf gleichem Wege auch abgefragt werden.
Festgelegt wird die Adresse wie folgt:

MSComm1.CommPort = Nummer des Anschlusses, z. B. 1

Das bedeutet, dass dem Nutzer des Controls die hexadezimale Adresse nicht bekannt sein muss, sondern nur die in Windows definierte Nummer der Schnittstelle.
Die Anschlussnummern 1 - 16 zur Verfügung. Definiert man in über diese Eigenschaft einen Anschluss, der eventuell nicht verfügbar ist, so wird erst mit der Funktion "PortOpen" ein Fehler erzeugt.

CommOpen [Step one]

Eigentlich ist die Beschreibung der PortOpen-Funktion (Eigenschaft) an dieser Stelle noch ein wenig verfrüht, da nach der Definition des Comm-Ports auch noch andere Einstellungen vorgenommen werden müssen, allerdings bietet die PortOpen-Eigenschaft eine wertvolle Hilfestellung, wenn man wissen möchte, welche CommPorts zur Laufzeit zur Verfügung stehen. Hierfür öffnen (PortOpen = True) wir alle 16 Ports hintereinander und fragen etwaige Fehler ab. Ist ein Port im System verfügbar, so bekommen wir keinen Fehler - sofern wir nicht voreilig fehlerhafte Einstellungen über die Settings-Funktion gesetzt haben. Das bedeutet allerdings auch, dass sofern wir zum Beispiel an CommPort 1 ein Modem in Betrieb haben und eine Verbindung geöffnet ist, diesen CommPort nicht als verfügbar zurück bekommen. Der Port ist erst wieder verfügbar, wenn die DFÜ-Verbindung beendet wurde.
Die Schleife (mit Test-Funktion) müsste also wie folgt aussehen:

Public Function PortTest(COMPortNummer As Integer) As Boolean
  MSComm1.CommPort = COMPortNummer
  On Error Resume Next
  MSComm1.PortOpen = True

  If Err = 0 Then
    PortTest = True
    MSComm1.PortOpen = False
  Else
    PortTest = False
    MSComm1.PortOpen = False
  End If
End Function

For Portzaehler = 1 To 16
  If PortTest(Portzaehler) Then
    MsgBox "COM" + Str(Portzaehler) + " verfügbar"
  End If
Next

Settings

Die Settings-Eigenschaft legt fest, welche Werte die Parameter für Baud, Parität, Datenbits und Stoppbits haben.
Damit eine Kommunikation zwischen dem PC und dem Endgerät funktionieren kann, ist es wichtig, dass Einigkeit über die oben dargestellten Parameter besteht, sonst wird eine Kommunikation nicht funktionieren.

  • Datenbits
    Datenbits definieren die Länge des Datenwortes, also die Anzahl der Bits, die beim Senden losgeschickt werden und als vollständige Information beim Empfänger gelten sollen. Will man also Dateien senden, so sollten 8 Datenbits genutzt werden, damit auch die volle ASCII-Datenbreite (1 Byte) genutzt werden kann. Die übliche Voreinstellung sind immer 8 Datenbits, das sollte auch so bleiben.

  • Parität
    An ein Datenbit kann ein Parity-Bit angeschlossen werden, das Fehler in der Datenübertragung aufzeigen soll. Man unterscheidet dabei zwischen der üblichen gerade und ungeraden Parität, der Markierung und dem Leerzeichen. Bei gerader Parität wird das gesendete Datenwort um das Parity-Bit so ergänzt, dass die Anzahl der gesetzten Bits gerade ist und bei den anderen Arten dementsprechend. Diese Methodik gibt aber nur eine ungewisse Sicherheit, da auf dem Wege der Übertragung eventuell genau so viele Bits verschwinden können, dass am Ende wieder die gewünschte Parität erreicht wird. Die Voreinstellung ist daher, dass keine Parität verwendet wird.


    Abbildung 1: Die Paritäten

  • Stoppbits
    Das Stopp-Bit wird jeweils am Ende eines gesendeten Datenwortes gesetzt. Diese Einstellung ist nicht optional und ist in der Voreinstellung 1. Die etwas obskur anmutende Einstellung 1,5 ist auf eine Veränderung der Bit-Übertragungszeit zurückzuführen, also wenn der Übertragungszustand um das 1,5-fache auf High oder Low gelegt ist. 2 Stoppbits werden eigentlich nur sehr selten definiert, da natürlich die Übertragung durch ein zusätzliches Stoppbit behindert wird. Insgesamt dienen die Stoppbits zur Synchronisation der Datenübertragung.

  • Baud
    Baud oder besser BPS steht für Bits pro Sekunden und definiert die Übertragungsgeschwindigkeit, die nicht zuletzt von der Schnittstelle und dem Kommunikationsempfänger abhängen. Ein analoges Modem kann heute z. B. 56000 Baud als Übertragungsgeschwindigkeit nutzen. Folgende Einstellungen sind möglich:


    Abbildung 2: Die Baudraten

    Die Settings-Eigenschaft wird nun wie folgt definiert:

    MSComm1.Settings = Baud,Parität,Datenbits,Stoppbits

    Hat man also ein schnelles analoges Modem, so parametrisiert sich die Kommunikation im Normalfall wie folgt:

    MSComm1.Settings = 56000,N,8,1

CommOpen [Step two]

Nunmehr ist uns bewusst, wie die einheitliche Kommunikation zwischen Sender und Empfänger hergestellt werden kann. Das bedeutet, dass der Versuch einen Port zur Kommunikation zu öffnen, wie folgt aussehen sollte:

MSComm1.Commport = 1
MSComm1.Settings = "56000,N,8,1"
MSComm1.PortOpen = True

RThreshold, SThreshold und InputLen
Diese drei Eigenschaften sollten bereits nach der Öffnung des Ports gesetzt werden, damit es später beim Datenempfang keine Probleme gibt.

  • RThreshold
    Legt fest und gibt zurück, wie viele Zeichen im Empfangspuffer angekommen sein sollen, bevor das Kommunikation-Steuerelement die CommEvent-Eigenschaft auf comEvReceive festlegt und ein OnComm-Ereignis auslöst.

  • SThreshold
    Legt fest und gibt zurück, welche Anzahl an Zeichen unterschritten werden muß, bevor das Kommunikation-Steuerelement die CommEvent-Eigenschaft auf comEvSend festlegt und das OnComm-Ereignis auslöst.

  • InputLen
    Legt fest oder gibt zurück, wie viele Zeichen die Input-Eigenschaft aus dem Empfangspuffer liest.
    Letztendlich sollte die Definition wie folgt aussehen:

    MSComm1.RThreshold = 1
    MSComm1.SThreshold = 1
    MSComm1.InputLen = 0

Output
Zum Senden von Daten wird die Output-Funktion genutzt. Der Abschluss einer Anweisung sollte bei Anweisungen an das Modem immer vbCr oder bei Kommunikationsmodulen unter Windows vbCrLf sein.
Die Verwendung ist relativ einfach:

MSComm1.Output = "Testtext" + vbCr

Input und OnComm
Zum Empfangen von Daten über die serielle Schnittstelle ist für das Control ein OnComm-Ereignis zu implementieren. Hierfür ist eine separate Sub erforderlich, die z. B.:

Private Sub MSComm1_OnComm()

genannt wird. Durch diese Definition wird der serielle Port, der über MSComm1 definiert ist, ständig abgehört.

Sollten Daten empfangen werden, so können diese über CommEvent abgefragt werden. Ein Beispiel:

Dim Eingang As String
  Select Case MSComm1.CommEvent
   Case comOverrun:   MsgBox "Datenverlust!"
   Case comRxOver:    MsgBox "Datenverlust!"
   Case comEvReceive: Eingang = Eingang + MSComm1.Input
  End Select

Das CommEvent kann folgende Ereignisse bzw. Fehler vorweisen:

Bezeichung Beschreibung
ComEvCD Pegeländerung auf DCD
ComEvCTS Pegeländerung auf CTS
ComEvDSR Pegeländerung auf DSR
ComEvRing Pegeländerung auf RI (Ring indicator) - Anruf
ComEvReceive Daten gemäß Vorgabe RThreshold empfangen
ComEvSend Im Sende-Buffer liegen gemäß Vorgabe SThreshold X Zeichen
ComEvEof Es wurde ein EOF-Zeichen empfangen
ComBreak Ein Anhaltesignal wurde empfangen
ComFrame Fehler im Übertragungsraster
ComOverrun Datenverlust während der Übertragung
ComRxOver Empfangs-Buffer-Überlauf
ComRxParity Paritätsfehler
ComTxFull Sende-Buffer ist voll
ComDCB Unerwarteter Fehler beim Abfragen des DCB

CommOpen [Step three]

Bevor wird den benutzten Port wieder verwenden können, müssen wir ihn schließen. Das funktioniert über die PortOpen-Anweisung wie folgt:

MSComm1.PortOpen = False

Beispielprojekt  

Mit diesem Grundlagenwissen kann nun ein eigenes Kommunikationsprogramm für die serielle Schnittstelle entwickelt werden. Das anhängende Beispiel dient zur Kommunikation zwischen zwei PC oder aber auch zur Kommunikation mit dem Modem.
Dieses Tutorial sollte einen ersten Überblick über die Möglichkeiten der seriellen Kommunikation geben. Insgesamt könnte sicherlich ein komplettes Buch gefüllt werden.
Viel Spaß.

Quelltext

'Autor: Björn Kirsch
'Email: bjoern@activevb.de

Option Explicit

Dim PortOpen As Boolean

Public Function PortTest(COMPortNummer As Integer) As Boolean
  MSComm1.CommPort = COMPortNummer

  'wenn ein Fehler auftritt, dann funktioniert der Port nicht
  On Error Resume Next

  MSComm1.PortOpen = True
  If Err = 0 Then
    'Port verfügbar
    PortTest = True
    MSComm1.PortOpen = False
  Else
    PortTest = False
    MSComm1.PortOpen = False
  End If
End Function

Private Sub Command1_Click()
  Me.Text1 = Me.Text1 & Str(Time) & " +++ Versuch den Text" & _
             " zu senden" & vbCrLf

  If PortOpen = False Then
    MsgBox "Bitte vorher einen Port öffnen"
    Me.Text1 = Me.Text1 & Str(Time) & _
               " +++ Fehler beim Senden des Textes, Port " & _
               "ist nicht geöffnet" & vbCrLf & vbCrLf
    Exit Sub
  End If

  If Me.Text2 = "" Then
    MsgBox "Und was ist mit dem Text"
    Me.Text1 = Me.Text1 & Str(Time) & " +++ Text fehlt" & _
               vbCrLf & vbCrLf
    Exit Sub
  End If

  On Error Resume Next

  MSComm1.Output = Me.Text2 + vbCr

  If Err <> 0 Then
    MsgBox "Text nicht fehlerfrei gesendet!"
    Me.Text1 = Me.Text1 & Str(Time) & " +++ Text nicht " & _
               "fehlerfrei gesendet" & vbCrLf & vbCrLf
  Else
    Me.Text1 = Me.Text1 & Str(Time) & _
               " +++ """ + Me.Text2 & """wurde gesendet" & _
               vbCrLf & vbCrLf
  End If
End Sub

Private Sub Command2_Click()
  Dim Portzaehler As Integer

    Me.Text1 = Me.Text1 & Str(Time) & _
               " +++ Vorhandene COM-Ports abfragen" & vbCrLf

    ' Combobox löschen
    Me.Combo1.Clear

    For Portzaehler = 1 To 16
      If PortTest(Portzaehler) Then
        Me.Combo1.AddItem "COM" & Str(Portzaehler)
      End If
    Next

    If Me.Combo1.ListCount = 0 Then
      Me.Combo1.AddItem "Kein Comport verfügbar"
      Me.Text1 = Me.Text1 & Str(Time) & _
                 " +++ Kein Comport verfügbar" & _
                 vbCrLf & vbCrLf
    Else
      Me.Text1 = Me.Text1 & Str(Time) & _
                 " +++" & Str(Me.Combo1.ListCount) & _
                 " Comport(s) verfügbar" & vbCrLf & vbCrLf
    End If

    'Selektion auf den ersten Eintrag setzen
    Me.Combo1.ListIndex = 0
End Sub

Private Sub Command3_Click()
  Dim CPort As Byte
  Dim Settings As String

    Me.Text1 = Me.Text1 & Str(Time) & _
               " +++ Versuch den COM-Port zu öffnen" _
               & vbCrLf

    If PortOpen = True Then
      MsgBox "Es ist bereits ein Port geöffnet. Bitte " & _
             "vorher schließen!"
      Me.Text1 = Me.Text1 & Str(Time) & _
                 " +++ COM-Port kann nicht geöffnet " & _
                 "werden, da bereits ein Port geöffnet ist" _
                 & vbCrLf & vbCrLf
      Exit Sub
    End If

    CPort = Val(Mid(Me.Combo1.List(Me.Combo1.ListIndex), 4, _
                    Len(Me.Combo1.List(Me.Combo1.ListIndex))))

    If CPort = 0 Then
      MsgBox "Fehler! Sind eventuell keine COM-Ports " & _
             "vorhanden?"

      Me.Text1 = Me.Text1 & Str(Time) & _
                 " +++ COM-Port kann nicht geöffnet " & _
                 "werden " & vbCrLf & vbCrLf
    Else
      MSComm1.CommPort = CPort
      Settings = Me.Combo2.List(Me.Combo2.ListIndex)
      Select Case Me.Combo4.ListIndex
        Case 0: Settings = Settings & ",E"
        Case 1: Settings = Settings & ",O"
        Case 2: Settings = Settings & ",N"
        Case 3: Settings = Settings & ",M"
        Case 4: Settings = Settings & ",S"
      End Select

      Settings = Settings & "," & _
                 Me.Combo3.List(Me.Combo3.ListIndex)

      Settings = Settings & "," & _
                 Me.Combo5.List(Me.Combo5.ListIndex)

      MSComm1.Settings = Settings

      On Error Resume Next

      MSComm1.PortOpen = True

      If Err <> 0 Then
        MsgBox "Fehler! Sind eventuell keine COM-Ports " & _
               "vorhanden oder die Einstellungen falsch?"

        Me.Text1 = Me.Text1 & Str(Time) & _
                   " +++ COM-Port kann nicht geöffnet werden" _
                   & vbCrLf & vbCrLf
      Else
        MSComm1.RThreshold = 1
        MSComm1.SThreshold = 1
        MSComm1.InputLen = 0
        Me.Text1 = Me.Text1 & _
                   Str(Time) & " +++ COM-Port wurde geöffnet" _
                   & vbCrLf & vbCrLf
        PortOpen = True
      End If
    End If
End Sub

Private Sub Command4_Click()
  Me.Text1 = Me.Text1 & Str(Time) & _
             " +++ Versuch den COM-Port zu schließen" & vbCrLf

  If PortOpen = False Then
    MsgBox "Es ist kein Port geöffnet, ein Schließen ist " & _
           "daher nicht notwendig"

    Me.Text1 = Me.Text1 & Str(Time) & _
               " +++ COM-Port kann nicht geschlossen " & _
               "werden, da nicht " & "notwendig" & vbCrLf & _
               vbCrLf
  Else
    On Error Resume Next

    MSComm1.PortOpen = False
    If Err <> 0 Then
      MsgBox "Fehler beim Schließen des Ports"
      Me.Text1 = Me.Text1 & _
                 Str(Time) & " +++ COM-Port kann nicht " & _
                 "geschlossen werden" & vbCrLf & vbCrLf
    Else
      Me.Text1 = Me.Text1 & Str(Time) & " +++ COM-Port " & _
                 "geschlossen" & vbCrLf & vbCrLf
      PortOpen = False
    End If
  End If
End Sub

Private Sub Form_Load()
  ' Oberfläche initialisieren
  Me.Combo1.Clear
  Me.Combo1.AddItem "Kein Comport verfügbar"
  Me.Combo1.ListIndex = 0
  Me.Combo2.AddItem "4800"
  Me.Combo2.AddItem "9600"
  Me.Combo2.AddItem "19200"
  Me.Combo2.AddItem "38400"
  Me.Combo2.AddItem "57600"
  Me.Combo2.AddItem "115200"
  Me.Combo2.ListIndex = 4
  Me.Combo3.AddItem "4"
  Me.Combo3.AddItem "5"
  Me.Combo3.AddItem "6"
  Me.Combo3.AddItem "7"
  Me.Combo3.AddItem "8"
  Me.Combo3.ListIndex = 4
  Me.Combo4.AddItem "Gerade"
  Me.Combo4.AddItem "Ungerade"
  Me.Combo4.AddItem "Keine"
  Me.Combo4.AddItem "Markierung"
  Me.Combo4.AddItem "Leerzeichen"
  Me.Combo4.ListIndex = 2
  Me.Combo5.AddItem "1"
  Me.Combo5.AddItem "1.5"
  Me.Combo5.AddItem "2"
  Me.Combo5.ListIndex = 0

  PortOpen = False

  Me.Text1 = Str(Time) & _
             " +++ Programmstart. Willkommen." & _
             vbCrLf & vbCrLf
End Sub

Private Sub MSComm1_OnComm()
  Select Case MSComm1.CommEvent
    Case comOverrun:   MsgBox "Datenverlust!"
    Case comRxOver:    MsgBox "Datenverlust!"
    Case comEvReceive: Me.Text3 = Me.Text3 + MSComm1.Input
  End Select
End Sub

Beispiel als Download [3.6 Bytes]

Ihre Meinung  

Falls Sie Fragen zu diesem Tutorial haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Unter welcher VB-Version läft das Beispielprogramm? - Flemming 28.12.12 16:31 2 Antworten

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 100 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Jürgen Bock am 13.07.2010 um 12:04

Wie kann ich die Klasse laden: MSComm1 ?

Kommentar von Martin Döscher am 17.06.2010 um 14:57

Bisher konnte ich die serielle Schnittstelle in Excel 2000 über das MSComm-Steuerelement ansprechen. Leider haben wir jetzt auf Excel 2003 umgestellt. Wenn ich jetzt versuche das Microsoft Communication Control Version 6.0 (das ich unter "weitere Steuerelemente" finde) auf ein Tabellenblatt zu ziehen, bekomme ich die Fehlermeldung "Objekt kann nicht eingefügt werden". Was mache ich falsch?

Kommentar von Wilhelm Hanselmann am 13.06.2010 um 17:42

Vielen Dank für dieses wirklich gelungene Tutorial und dann auch noch in deutsch!! Es hat viele klar gemacht.
Bleibt eine Frage:
Ich muss an ein Kundendisplay Escape Sequenzen senden.
Wie muss das codiert werden?

Vielen Dank
Wilhelm

Kommentar von Christopher P am 02.12.2009 um 15:23

Hallo,


könnte ihr mir helfen?

Case comEvReceive:
Es erkennt dem receive Befehl nicht- was habe ich vergessen?

Besten Dank

Kommentar von Frank am 19.07.2009 um 16:43

Danke für das Bespiel.
Hat mir viel geholfen.

Kommentar von Florian am 18.01.2009 um 17:52

Hallo,
ich muss mal sagen das dieser Artikel eine sehr große Hilfe ist. Ich benutze das MsComm32 für meine Technikerarbeit. Leider habe ich mit einigen Sachen immernoch große Probleme. Villeicht kann mir hier aber jemand weiterhelfen.
Ich muss mit Excel Daten über die Serielle Schnittstelle von einer SPS empfangen und dann verarbeiten. Da ich leider nicht den Zeitpunkt sagen kann, wann die Daten kommen muss ich das OnComm Event benutzen. Und genau da fängt schon mein Problem an. Mit der Eigenschaft RThreshold lege ich ja fest, wann das Event ausgelöst werden soll. Also z.B. wenn 70 Zeichen im Eingangspuffer sind. Soweit so gut, aber wenn jetzt mal aus irgendeinem Grund weniger Zeichen im Eingangspufer stehen, wird das Event nicht ausgelöst, somit passt nach dem nächsten Auslösen des Eventes mein String nichtmehr!! Das bringt mein komplettes Programm durcheinander. Gibt es nicht eine Möglichkeit das einfach immer wenn Daten im Empfangspuffer stehen das Event ausgelöst wird?? Also egal wie viele!!
Oder hat jemand eine Idee wie ich das Problem lösten könnte?

Danke schonmal im Vorraus für die Hilfe
Mfg
Flo

Kommentar von Gernot Noll am 07.01.2009 um 00:38

Hallo,

Ich suche schon verzweifelt Informationen ueber IR-Schnittstellen Programmierung im Internet.

Folgendes Problem habe ich.

Ich schreibe ein Diabetiker Programm das ein Modul haben das...:
- die Schnittstelle Com1-4 und USB nach einem Infrarot Sender/Empfaenger abfragt
- bei gefundene Infrarot Sender/Empfaenger nach konstanten Externen IR Quellen sucht
- bei gefundener Gegenstation - Synchnisation der Sende/Empfaenger Daten d. h. angleichung der Datenuebertragungsart vom Sender des PCs an die Gegenstelle z. Bsp. Diabetiker Blutmessgerät oder PocketPC
Uebertragen der Daten vom Diabetiker mMessgeraet zum Programm und Steuerung zum löschen der Datem auf dem Messgeraet
- Daten Uebertragung vom Programm ueber IR zum PocketPC.

Meine Frage: Wo bekomme ich Informationen zum Programmierung der IR Schnittstelle her??
Gibt es evtl. Beispielscodes oder Tools dafuer

Alle hinweise wie ich zu den entsprechenen Infos komme sind mir herzlich st Willkommen.Programmiert in VB6 und/oder .NET.

Ich bedanke mich im voraus und verbleibe

MfG

genoll

Kommentar von Berni am 01.01.2009 um 22:04

Hallo Björn!

Ich finde diesen Artikel sehr gut.
Mein Ziel ist es, vom seriellen Port Werte (0-255, ein Byte) zu lesen und diese in eine Tabellen einzutragen. Von dort aus wird dann ein Diagramm erstellt.
Aber wie bringe ich die Werte einzelln in die Tabelle??

Wäre nett wenn du mir helfen könntest.

Vielen Dank im Voraus!

Kommentar von pseudoweber am 13.09.2008 um 15:36

Also ich finde das hier sehr gut aber ich wollte eine Antwort auf die Frage von Legend weil so was ähnliches vor habe also bitte antwortet thx im vorraus :-D

Kommentar von Legend am 24.08.2008 um 02:15

hey björn,

ist echt ein guter artkel!
such aber eigentlich nach etwas anderem... suche nach einem quellcode um den serial port nicht zum senden von "texten" sondern von high & low signalen zu nutzen...

meine idee: ich wollte ein signal, durch zb einen taster an den port senden, und darauf hin, wenn das programm sozusagen feststellt "taster ist gedrückt", soll über den port eine led angesteuert werden...

wäre nett, wenn du mir da helfen könntest...

danke schonmal im vorraus, gruß legend

Kommentar von Thomas am 26.06.2008 um 20:22

Hallo Björn

ich finde den Artikel sehr gut
ich konnte auf meinem Rechner mit WinXP das Control
einbinden und registrieren

das gleiche wollte ich mit Win98 versuchen, da bekomme ich
wenn ich das Control auf ein ACCESS 97 Formular ziehe die Fehlermeldung (keine Lizens....)
ich habe mir einen Eintrag für die Regestrierung aus dem Netz geholt ([HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]@ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
) funktioniert aber nicht. Was mache ich falsch ?

Gruß Thomas

Kommentar von Holly am 13.05.2008 um 17:18

Hallo,
dieser Artikel bzw. Seite ist echt gut!!!
Wenn ich das unten angehängte Beispiel in VBA verwende
bekomme ich andauernd Fehlermeldungen kann mir jemand helfen!?!?

Vielen Dank!!!

Holly

Kommentar von Christoph Sattler am 05.04.2008 um 19:36

Hallo,
dieser Artikel ist sehr interessant für mich - leider haben die neuen Rechner kaum noch com-ports - einfach einen Adapter USB-COM an einen USB Anschluss stecken hilft auch nicht wirklich weiter - hat jemand eine Idee?

Vielen Dank!

CS

Kommentar von reiner ruse am 11.02.2008 um 19:58

Hallo,
kann man auch direkt in Excel VBA so ein Programm schreiben.
Ich möchte "nur" eine Waage auslesen.
Leider fällt mir das Lesen in Büchern sehr schwer, da ich hochgradigt sehbehindert bin.

Viele Grüße, Reiner.

Kommentar von reiner ruse am 11.02.2008 um 19:58

Hallo,
kann man auch direkt in Excel VBA so ein Programm schreiben.
Ich möchte "nur" eine Waage auslesen.
Leider fällt mir das Lesen in Büchern sehr schwer, da ich hochgradigt sehbehindert bin.

Viele Grüße, Reiner.

Kommentar von Weber Franz am 23.12.2007 um 14:07

Habe noch immer das Problem mit der übertragung Hex 00-ff
die berücksichtigung mit Discard und XON/OFF ist mir unklar welche veränderungen ich vornehmen soll das Programm ist von Björn Kirsch wie hir dargestellt.
Das einlesen MScomm1.Input habe ich umgestellt auf Mscomm1.InputMode=ComInputmodeBinary
wenn ich AT&F0X3 zum Modem schicke kommt ?????? OK zurück
ich bin unter der Rufnummer 08468/223 zu erreichen

Kommentar von Riesebeck Björn am 10.12.2007 um 11:21

Guten Tag,
ich habe ihr Tutorial auf der ActiveVB Seite gelesen das ist sehr Interessant, aber ganz erlich so richtig verstanden habe ich es nicht. Ich habe ein mir unbekanntes Bus-System und möchte dieses Auslesen kann ich das mit diesem Tool? Und wenn ich die Schritte im Tutorial befolge?

Ich würde mich sehr über Antworten freuen und verbleibe


Mit freundlichen Grüßen

Riesebeck Björn

Kommentar von Philipp Burch am 04.12.2007 um 17:10

@Weber Franz:

Mit dem MSComm-Control können alle ANSI-Zeichen ($00 - $ff) übertragen werden. Aufpassen musst du allerdings mit der Eigenschaft DiscardNull (Verwirft Nullbytes falls aktiviert) und dem Xon/Xoff-Protokoll (Benutzt bestimmte Zeichen zur Flusssteuerung).
Die Umwandlung von einem Zahlenwert in das entsprechende Zeichen (String mit einem Zeichen Länge) geht mit

Dim s As String
s = Chr$(&H10)

und der umgekehrte Weg:
Dim b As Byte
b = Asc("x")


Gruss,
Philipp
ActiveVB Tutorials

Kommentar von Weber Franz am 04.12.2007 um 14:00

Die Schnittstelle Com1 ist mit einen Modem verbunden, und Sendet und Empfängt Daten von einer Siemens SPS mit den Befehlen MSComm1.Output, MSComm1.Input die Befehle Lesen und Empfangen aber nur ASCII von Hex 30-7A wie kann ich ASCII zeichen von Hex 00-FF Senden und Empfangen

Kommentar von Armin Munzert am 30.11.2007 um 13:51

Sehr geehrter Herr Kirsch,
wirklich ein sehr interessanter Beitrag.
Nur, ich bekomme immer "Anhaltesignal"
Hab 2 PC´s mit 0-Modemkabel verbunden.
NT4.0 "echo a >com1"
XP EXCEL2003 VBA MSCOMM

Hilfe!!!!!!!!

Kommentar von Philipp Burch am 29.11.2007 um 16:57

Bitte postet eure Probleme/Fragen im Forum, dort werden sie eher beantwortet!

Kommentar von Uwe am 28.11.2007 um 23:09

Hallo,
ich benutze Excel97 auf einem XP-Windows. Hier funktioniert die Verwendung von MSComm32.ocx zur Steuerung der RS232.
Für ein kleines Projekt möchte ich die geleiche Sequenz auf einem WINDOWS98 PC laufen lassen. Aber bereits der Anfang bringt Probleme. Ich erhalte die Fehlermeldung
Error 429 Objekterstellung durch ActiveX Komponente nicht möglich.
Ich nehme an etwas mit der Registrierung der MSComm32 ist falsch aber was?

Kommentar von Philipp Burch am 26.11.2007 um 18:01

Hallo zusammen,

es wurde nun schon des Öfteren gefragt, ob sich das Comm-Control auch in Microsoft Office Produkten einsetzen lässt (VBA). Das geht problemlos und unterscheidet sich nicht wesentlich von der Verwendung in VB6. In der Steuerelemente-Toolbox gibt es einen Button um weitere Controls hinzuzufügen. Wenn man dort draufklickt erscheint eine Liste mit den verfügbaren externen Steuerelementen. Nach einem Doppelklick auf "Microsoft Communications Control, version 6.0" lässt es sich auf dem Worksheet platzieren.
Alles Weitere ist identisch zur Programmierung in Visual Basic 6.

Ich hoffe, damit gedient zu haben.

Grüsse,
Philipp Burch
ActiveVB Tutorials

Kommentar von Ingolf Bauer am 26.11.2007 um 14:54

Sehr geehrte Damen und Herren,

gibt es auch eine unkomplizierte Möglichkeit das COM-Control unter VB (Excel) einzubinden? Funktioniert dort auch das Starten eines Makros über "CommEvent"?

Mit freundlichen Grüßen
Ingolf Bauer

Kommentar von H.Libowski am 09.11.2007 um 15:01

Ich habe ein Messgerät bekommen, das über RS232 betrieben werden kann. Nur leider fehlt das Kabel! Im Messgerät selbst ist eine 3,5 Klinken-Buchse mit 2 Kontakten. Wie Kann ich mir
ein Kabel selbst bauen? Die Messergebnisse gelangen über ein
Optokoppler zum Ausgang 3,5 Klinken-Buchse Messgerät.
(3,5 Buchse zu COM)

Vielen Dank

Kommentar von rob am 16.10.2007 um 19:37

Hallo
Ich möchte fragen, könnte jemad mir eine funktionirende excel-file per e-mail schicken in dem diese kommunikation funktioniert?

Danke für die hilfe.

Kommentar von Philipp Burch am 05.10.2007 um 11:38

@Carsten:

Bitte poste solche Fragen doch im Forum, da werden sie eher beantwortet.

Im Übrigen solltest du dein Problem etwas genauer schildern. Wenn es darum geht, aus den aktivierten Checkboxen den entsprechenden Wert zum Versenden zu generieren, so kannst du das durch eine einfache Oder-Verknüpfung der einzelnen Stellenwerte realisieren.

Gruss,
Philipp

Kommentar von Carsten am 05.10.2007 um 11:21

Hallo,

ich versuche grade eine 8 fach relaissteuerung zu realisieren. bei der steuerung werden die relais von einem mega48 gesteuert. wenn ich also z.b folgenden text " 01 portc = "über das programm oben sende schaltet relais 1 mit einer 02 das 2 relais mit einer 04 das dritte usw. jetzt möchte ich das ganze aber mittels check boxen schalten können je nachdem welche check box activiert ist sollen ein oder mehrer relais geschaltet werden. bin schon seit tagen am probieren aber kriegs nicht auf die reihe. hat vieleicht jemand einen tip für mich wie ich das ganze am besten löse ??

danke im voraus.

Kommentar von Sven am 22.09.2007 um 02:02

Hallo
ich habe eine Frage zum tut.
Ich will über ein USB-IO24 einzelne Pins mit 0V oder 5V ansteuern können. Ist dies überhaupt mit den COM-Control möglich? Das USB-IO24 verfügt über eine kleine eigene Prog-sprache aber wenn man diese benutzte um einen Pin umzuschalten schickt das USB-IO24 jeweils eine Antwort mit der Bestätigung der Änderung. Das macht leider das schnelle Umschalten von Pins unmöglich.
Wäre echt klasse wenn jemand für mich einen Tipp Hätte...

Kommentar von Dani Wyss am 16.06.2007 um 17:59

Ich lese Daten aus einem Aquarium IKS-Computer ein.
Mit der Zeile
"Case comEvReceive: Me.Text3 = Me.Text3 + MSComm1.Input"
kein Problem außer das alle Empfangenen Daten Zeilenweise in der TextBox3(Multiline=True) in einem String sind.

Da ich die Daten weiter bearbeiten will bräuchte ich Sie in einer Listbox, dort könnte ich sie dann Zeilenweise auslesen.
Ähnlich wie von Dirk Domhoff am 20.06.2005 gestellten Frage.
"Aufteilung in mehrere (Einzel-)Datensätze"
Frage: Wie bekomme ich die Daten Zeilenweise in die ListBox.

Besten Dank
Dani

Kommentar von Philipp Burch am 06.04.2007 um 10:13

Hallo Wolfgang,

ich bin zwar nicht Björn, aber die Frage kann ich dir definitiv mit "Ja" beantworten. Allerdings gibt's in VBA so weit ich weiss keine Labels, das kannst du aber durch die Zellenbeschriftungen gut nachbilden.

Gruss
Philipp

Kommentar von Wolfgang Schmidt am 05.04.2007 um 15:18

Sehr geehrter Herr Kirsch,

kann ich den von Ihnen angegebenen Source Code in Excel-VBA verwenden?

Gruß
W. Schmidt

Kommentar von MaXX am 09.02.2007 um 16:47

Ok, COMPort ist geöffnet und ich empfange auch Daten vom ATmega32-µC.. aber beim Senden hab ich dann immer noch das Problem das ..CTSHolding immer False ist und somit das Program in der Schleife hängen bleibt :( (Kann das sein das das mit meinen µC nicht funzt?)
Wenn ich allerdings einzelne Zeichen gefolgt von 1ms Pause sende geht funktioniert alles aber ob das auch immer so funktioniert weis ich nicht...

Danke! MfG MaXX

Kommentar von Stefan am 09.02.2007 um 16:25

Dann ist entweder der Comport nicht richt initialisiert ( siehe folgende Routine) oder das Kabel ist nicht richtig verdrahtet!

' ComPort öffnen

Call OpenComPort(MSComm, 1,"19200,E,7,2")

Sub OpenComPort(MSComm As MSComm, ComPort%,ComParam$)
On Local Error GoTo FehlerMeldung
If MSComm.PortOpen = True Then MSComm.PortOpen = False
MSComm.CommPort = ComPort%
MSComm.Settings = ComParam$
MSComm.PortOpen = True
MSComm.RTSEnable = True
MSComm.Handshaking = comRTS

Exit Sub

FehlerMeldung:
If MsgBox("In " & Err.Source & " ist ein Fehler aufgetreten !" & vbCr & vbCr & _
Err.Description & vbCr & vbCr & "Fehlernummer: " & Str(Err.Number) & vbCr & vbCr & _
"Setup aufrufen?", vbYesNo Or vbQuestion) = vbNo Then Exit Sub ' CmdBeenden_Click
'CmdSetup_Click
End Sub

Grüße

Stefan

Kommentar von MaXX am 09.02.2007 um 16:02

In der Do-Schleife bleibt mein Programm leider stehen?

Kommentar von Stefan am 09.02.2007 um 15:20

Hallo,
also das Prüfen vor jedem Zeichen ist wichtig weil sonst, vor allem wenn der Empfänger kleinen Puffer hat, zum Überlauf kommt. Ich habe folgende Routine dafür erstellt:

Private Sub ComAusgabe(Zeile$)
Dim Count%, ZeilLen%, AusgabeOK As Boolean
Zeile$ = Zeile$ & vbCrLf ' Linefeed bei manschen Geräten unbedingt erforderlich
ZeilLen% = Len(Zeile$)
For Count% = 1 To ZeilLen%
AusgabeOK = False
Do
AusgabeOK = MSComm.CTSHolding ' vor jedem gesendeten Zeichen Bereitschaft prüfen!
If AusgabeOK = True Then MSComm.Output = Mid(Zeile$, Count%, 1)
Loop Until AusgabeOK = True
Next Count%
End Sub

Viele Grüße

Stefan

Kommentar von MaXX am 09.02.2007 um 14:30

Hallo, bei mir funktioniert das 'MSComm1.Output = "Testtext" + vbCr' auch nicht richtig..

Wie kann man mit -> MSComm1.CTSHolding prüfen ob zB. der µC bereit ist um wieder daten zu empfangen?

Danke
MfG MaXX

Kommentar von Stefan am 29.01.2007 um 19:52

Hallo,

Das mit dem Senden mir MSComm1.Output = "Testtext" + vbCr funktioniert nicht immer! Es kommt darauf an wie der Empfänger mit den Daten umgeht und wie schnell er sie weiter verarbeiten kann. Wenn nicht kommt der Empfänger zum Überlauf. Ich habe lange dazu gebraucht um herauszufinden, dass auf diese Weise der Handshake eigentlich nicht funktioniert! Die Ausgabe muss Zeichen für Zeichen erfolgen und vor jedem Zeichen muss mit MSComm1.CTSHolding geprüft werden ob der Empfänger immer noch bereit ist!

Stefan

Kommentar von Hermann Mungenast am 23.01.2007 um 19:11

Hallo zusammen.
Ich bin Neuling in VB/VBA. Seit ich die MScomm1 benutze ist mir aufgefallen das mein Port-Com1 nach einem Neustart des Rechners deaktiviert ist. Obwohl die Sytemeinstellungen etwas anderes sagen nämlich "Gerät ist Betriebsbereit". Nach einem tatsächlichen deaktivieren und Neustart kann ich sie wieder aktivieren und sie läuft bis zum nächsten Systemstart. Hat jemand eine Erklärung dafür ?

Vielen Dank im Voraus.
Gruß Mungo

Kommentar von Udo am 18.01.2007 um 14:25

Hallo;

Schönes Tutorial für Einsteiger. Ich habe folgende Frage:
Wie kann ich mehr als 16 COM-Ports (z.B. 24) definieren und öffnen. Diese werden mir durch eine SerialOverLan-Hardware und der zugehörigen Treibersoftware zur Verfügung gestellt (und erscheinen als virtuelle COMs im Gerätemanager)

Grüße aus OF,
Udo

Kommentar von Udo am 18.01.2007 um 14:24

Hallo;

Schönes Tutorial für Einsteiger. Ich habe folgende Frage:
Wie kann ich mehr als 16 COM-Ports (z.B. 24) definieren und öffnen. Diese werden mir durch eine SerialOverLan-Hardware und der zugehörigen Treibersoftware zur Verfügung gestellt (und erscheinen als virtuelle COMs im Gerätemanager)

Kommentar von Werner Kräussling am 23.10.2006 um 17:23

Ich verwende das Beispiel unter Win98SE und VB6 und mit MSComm32. Mit dem Port1 funktioniert das Beispiel. Port2 funktioniert nicht, obwohl keine Fehlermeldung ausgegeben wird oder ein RunTime Fehler auftritt. Woran kann das liegen ?

Freundliche Grüße
Werner Kräussling

Kommentar von Patrick am 21.10.2006 um 16:31

Hallo!

Welches Modem wird hier für die Kommunikation verwendet?
Wenn ich zb. ein normales 56K Modem an die serielle Schnittstelle anschließe, was kann ich dann mit dem Program machen?


Danke im Vorraus

Patrick

Kommentar von Konrad am 26.09.2006 um 19:16

Ok, mit dem MSComm bin ich soweit vertraut denke ich.
Nun hab ich hier einen Beitrag gelesen das jemand die Daten seines GPS-Empfängers mittels MSComm ausliest.

Was muss ich denn an den Empfänger senden damit ich überhaupt was zurückbekomme. Schnittstelle öffnen reicht ja nicht...

Gruß, Konrad

Kommentar von schulze achim am 05.09.2006 um 19:25

Hallo,

habe die Sub in das Hauptprogramm eingebunden. Leider läuft das Programm nicht wie erwartet.
Was muß ich tun, das das Programm ständig auf Sendeereignisse reagiert.
Habe es jetzt mit einer Sub Pause erreicht. geht aber sicherlich eleganter.

Bitte antworte mir
Tschüß Achim


Kommentar von Joel am 12.07.2006 um 18:03

Hallo,
ich nehme an einen Projekt teil, und muß für die Datenerfassung mit einer National Instrument-Daten die Aufzeichnung in Visual Basic 6 realisien. Hat jemand da eine Idee wie ich da anfangen kann, oder Beispiele?
Danke

Kommentar von Nicole am 21.06.2006 um 08:52

Hallo Zusammen,

ich habe eine ähnliche Aufgabenstellung wie Thomas. (Siehe unten)
Für eure Hilfe wär ich sehr dankbar.

Grüße Nic

Kommentar von Thomas Ziegler am 14.06.2006 um 13:01

Hallo.
Ich habe folgendes Problem.
Ich muss mit VB daten aus einem Mikrocontroller 80c535 auslesen und diese Daten mittels VB an eine Exceltabelle übertragen und von diesen Daten ein Diagramm erstellen.Hab leider noch keine Ahnung wie ich das anstellen muss.
Könntet Ihr mir da einen kleinen Gedankenanstoß geben, wie dies zu verwirklichen ist.
Wäre dafür sehr dankbar!


gruß thomas

Kommentar von Kriechi am 29.03.2006 um 19:37

wie währs denn die textfelder der ereignisse mitlaufen zu lassen? dann brauch man nicht immer runter scrollen?

Private Sub Text1_Change()
Text1.SelStart = Len(Text1)
End Sub

Private Sub Text3_Change()
Text2.SelStart = Len(Text2)
End Sub

Kommentar von chin am 09.03.2006 um 09:34

VB...

Kommentar von chin am 09.03.2006 um 09:26

Hi,

ich bin Anfänger in VBA und mir hat das Tutorial für mein Projekt sehr geholfen.

Ich habe einen Infrarotempfänger, den ich über ein Adapterkabel auf USB auslese, dies funktioniert im Hyperterminal problemlos. Nur mit diesem Programm erhalte ich keinerlei Daten, was evtl. daran liegen könnte, dass mit der Stromversorgung etwas nicht stimmt. Im Hyperterminal leuchtet meine LED für die Stromversorgung konstant, im obigen Beispielprogramm blinkt sie beim Verbinden mit dem Port nur kurz auf.

Kann mir wer weiterhelfen oder gibt es hier ein grundlegend anderes Problem? Vielleicht überseh ich nur einfach was.

MFG


chin

Kommentar von Michael am 02.02.2006 um 09:29

Hallo,

ich habe ein Problem mit einem Schrittmotorinterface, welches ich über RS232 ansteuern will.
Wenn ich eine Abfrage sende, wird immer ein OnComm-Ereignis ausgelöst (RThreshold = 1, SThreshold = 0), jedoch empfange ich keine Daten, sondern CommEvent hat den Wert comEvRing ("Es wurde ein Anruf erkannt. Einige UART(Universal Asynchronous Receiver/Transmitter) unterstützen dieses Ereignis nicht"). Leider kann ich damit gar nichts anfangen. Die Einstellungen sollten soweit richtig sein und ein anderes Gerät läßt sich mit ähnlichen Einstellungen (Baudrate nach Manual angeglichen) problemlos betreiben.

Vielen Dank für jegliche Hilfe.

Michael Kröger

Kommentar von Bernd Schröder am 27.01.2006 um 13:07

Wo finde ich das MSComm für VBA mit Excel?

EILT !!!!!!!

Kommentar von Uli am 18.01.2006 um 07:10

hi,
wo bekomme ich das com control her, oder ist es identisch mit MSComm. Wie kann ich es dann einbinden, läufte es auch unter VBA-Excel.
vielen Dank für die Mühe.
mfg. uli

Kommentar von Matthias am 30.12.2005 um 15:02

Hallo Miteinandner!!!

Habe das gleich Problem wie der Michael. Ich sende Textdateien über die Seielle Schnittstelle an eine CNC Fräsmaschine. Nur bleibt die Verbingun offen. Muss man irgendwas schicken damit die Maschine weis das die verbindung beendet wurde. Im Hyperterminal unter Windows funktioniert es einwandfrei.

Danke im Voraus für eure hilfe

Kommentar von Matthias am 30.12.2005 um 14:55

Hallo Miteinander!!!

Habe das gleich Problem wie der Michael.
Ich Sende Textdateien über ein Com Port an eine CNC Fräsmaschine. Nur bleibt die Verbidung offen und bei der Übertragenen Textdatei fehlen immer 4 bis 5 Zeilen. Muss Ich der CNC MAschine mitteilen das die verbindung beendet ist. Habe das ganze auch schon am Windows hyperterminal gestestet. Dort funktioniert es einwandfrei.

Kommentar von Timon am 06.12.2005 um 10:07

Es können anstatt Strings auch Byte-Felder (Arrays) empfangen bez. gesendet werden:

Private Sub BytesSenden()

'Dimensionierung des Arrays
Dim data(2) As Byte

'Array mit Werten füllen
data(0) = 170
data(1) = 85
data(2) = &H99

'Sendet das ganze Array
UART.Output = data()

End Sub

Private Sub BytesEmpfangen()

'Darf keine Grösse haben! D.h 'data(1 to 3)' ist nicht erlaubt!
Dim data() As Byte

'Füllt den Inputbuffer in das Array
data() = UART.Input

'...nun kann das Array gearbeitet werden

End Sub


vieleicht könnte ich jemandem helfen...

gruss

Kommentar von Reiner am 18.11.2005 um 16:56

Hallo Dirk Domhoff, ich habe auch einen Handscanner und möchte diesen uber die Serielle Schnittstelle abfragen!
Leider habe ich so wenig wissen über vb, dass ich das nicht gebacken bekomme!

Es wäre super, wenn du dich mit mir per Email in Verbindung setzten könntest!

Email: hasso@familiemitbaby.de

Kommentar von Zoran am 12.09.2005 um 15:32

Hallo Lars,

ich habe gehört, es soll etwas mit dem Timing zu tun haben. Manche schören darauf, dass nach dem öffenen des Ports eine kleine Pause hilft >500 ms.
Versuch das doch mal.
Und wenn zwischendrin noch Zeit ist, kannst du mir ja auch mal den Patch schicken (an mail AT zoran-horvat.de) ;o)

Gruß, Z.

Kommentar von Gerhard Hense am 04.09.2005 um 13:44

Hi Lars
welches Betriebssystem benutzt Du.
Ich habe irgendwo gelesen, dass es bei Win NT und 2000 zu Fehlern kommt und man soll da die ComPorts mit der "Port.dll" ansprechen.
Habe meine Programme mit "MSComm" auch mit verschiedenen PC´s und Windowsversionen getestet und hatte keine Fehler. Das Hex Patch würde mich schon interessieren. (gerhard_hense@yahoo.de)
Viele Grüße und Danke Gerhard

Kommentar von Lars Platzdasch am 03.09.2005 um 13:38

Hallo zusammen,
evtl. hatte jemand schon das gleiche Problem mit dem MSComm
und kann mir helfen.


1. bei manchen Installationen ca 5%, auch identische Hardware, + Software ( z.B. unsere Test PC's ) kommt es immer wieder zu BlueScreens bei der Comport Suche (function Command2_.. ) nach dem hier beschriebenen BSP.

BlueScreen IRQ_NOT_LESS_OR_EQUAL
Hat jemand eine Ideee warum ? bzw.. wie man das vermeinden kann?

2. Comport > 16 = da habe ich mittlerweile einen HEX Patch gefunden und dieses Problem im MSComm.ocx zu beheben. Wer daran Interresse hat, einfach Posten. :-)

Kommentar von am 16.08.2005 um 20:49

@Diana:
Hast du VB Professional?

Kommentar von diana am 05.08.2005 um 13:05

Hallo,

wenn ich das Steuerelement mscomm in die UserForm einbinde kommt die Fehlermeldung: "Das Steuerelement konnte nicht erstellt werden, da es nicht korrekt lizenziert wurde".
Was kann ich tun?

Diana

Kommentar von Dirk Domhoff am 18.07.2005 um 11:47

Hallo,

hier ein kleiner Nachtrag zu meinem Beitrag vom 20.06.2005:

Ich konnte mein Problem nun temporär lösen! Der Fehler lag/ liegt daran, das ich im Private Sub MSComm1_OnComm() nach dem Event "comEvReceive" die weitere Verarbeitung der Daten direkt anschliessend im Code verfasst habe. Deshalb wurde der weitere Code schon ausgeführt, obwohl das Einlesen der Daten noch durchlief!
Jetzt sind diese Aktionen in zwei Sub´s getrennt.
D.h., die Daten werden erst bei Klick auf Button/ Taste
in die Tabelle sortiert abgelegt. Leider kann ich von meinem Barcode-Scanner kein "comEvEOF" empfangen, was bisher eine VOLL-automatische Verarbeitung verhindert und letztendlich aber mein Ziel ist! Der User soll in Zukunft ausschließlich das Formular zur Übertragung aufrufen,
den "Send"-Button auf dem Handscanner betätigen und die Daten in die DB-Tabelle schreiben lassen.
Das soll lt. Vorgabe funktionieren ohne sich zuerst,
wie es zur Zeit der Fall ist, im Textfeld die Daten nach vollständigem Erhalt anzeigen lassen zu müssen (Handscanner gibt akustisches Signal, wenn alle Daten übertragen wurden!)
und dann noch Abfrage und/ oder Klick auf Maus oder Taste über sich ergehen lassen muss. Jetzt zu meiner Frage: Kennt jemand einen eleganten Weg, z.B. per Zeitschleife, oder ähnlich, um diese Aktion automatisieren zu können?
THX for Help, Dirk Domhoff

Kommentar von meier am 15.07.2005 um 11:11

Hallo hier

Kommentar von Gerhard Hense am 26.06.2005 um 09:41

Ich lese Daten aus einem GPS-Empfänger aus.
Mit der Zeile
"Case comEvReceive: Me.Text3 = Me.Text3 + MSComm1.Input"
kein Problem außer das alle Empfangenen Daten Zeilenweise in der TextBox3(Multiline=True) in einem String sind.
Da ich die Daten weiter bearbeiten will bräuchte ich Sie in einer Listbox, dort könnte ich sie dann Zeilenweise auslesen.
Ähnlich wie von Dirk Domhoff am 20.06.2005 gestellten Frage.
"Aufteilung in mehrere (Einzel-)Datensätze"
Frage: Wie bekomme ich die Daten Zeilenweise in die ListBox.

Diese Quellcode hat mir sehr geholfen.

Vielen Dank voraus,
Gerhard Hense

Kommentar von Dirk Domhoff am 20.06.2005 um 11:37

Ich versuche gerade Daten aus einem Handscanner über Com1 auszulesen (Sprache: VB6 bzw. VBA)

Leider bekomme ich nie alle Zeichen angezeigt, es sei denn ich setze RThreshold manuell auf einen bestimmten Wert, der der Anzahl der Zeichen eines einzelnen Datensatzes
(standardmässig 30 - 31 Zeichen) angepasst ist. Zum Beispiel sind es bei einer manuellen Einstellung von RThresold = 1 (bis 14) nur die ersten 14 Zeichen zu sehen!Mein Problem besteht aber darin, daß ich in den wenigsten Fällen einen einzigen Artikel mit dem Scanner erfassen werde, daher ist eine Aufteilung in mehrere (Einzel-)Datensätze aus dem "Gesamt"-String aller von Com1 gesendeten Artikeldaten notwendig!

Sinnvollerweise bräuchte ich eine Funktion, die die Schnittstelle "vollständig" abfragt und alle String-Daten temporär zusammen (wie empfangen) in einem Textfeld ablegt.

Trennzeichen "\" und "/" sind auch im String enthalten,
dürfen aber nicht entfernt werden, wg. Angaben von Menge, Art.-Nr., Uhrzeit und Datum. Die Aufttrennung eines einzelnen Artikelstrings funktioniert mit Hilfe von Mid, Left und Right! Wenn ich jetzt nur wüsste, wie ich meinem Programm beibringen kann, alle Artikeldaten zu empfangen, könnte ich das Thema abschließen. Kann mir jemand einen hilfreichen Tip geben, wie ich das Problem lösen kann?

(Hinweis auf bisherige Konfig. :
RThreshold = 1-14: 14 Zeichen, ab =15: 28 Zeichen;
InputLen = 0; no Handshaking; kein EOFenable)

Vielen Dank vorab für hilf- und geistreiche Anmerkungen,
Dirk Domhoff

Kommentar von Twistri am 09.06.2005 um 21:48

Klasse Tutorial, weiter so. Ich habe ein Problem, daß noch nirgendwo beschrieben wurde:
In alten Basic Sprachen konnte mit folgendem Befehl die RS-232 geöffnet werden:
OPEN"COM1:9600,e,7,2,CS2000,DS,CD,LF" for Random AS #1.
Hierbei hatte die CLS-Leitung 2 sec. Wartezeit. Da ich diese Wartezeit weiterhin benötige ( Gerätebedingt ), muß ich eine Lösung mit VB5 finden. Wer hat eine Idee wie dies gelöst werden kann?

Kommentar von Joddy am 23.05.2005 um 10:24

Hi,
Diese Quellcode hat mir sehr geholfen
Vielen Dank an Author

This CodeSnipet is so helpfull
thanks to author

Joddy

Kommentar von Alexander am 18.05.2005 um 12:25

Hallo,

ich bin gerade dabei ein Excel-Programm zu schreiben, dass mir Daten von der seriellen Schnittstelle ausließt. Die Schnittstelle sollte aber direkt nach dem Starten der Excel-Datei geöffnet werden und Daten auslesen. Kann mir jemand sagen wie man das macht?? Hat vielleicht jemand ein kleines Demo-Programm??? Ich wäre für jede Hilfe dankbar.

mfg
Alex

Kommentar von Hans Paul Gerhard am 28.04.2005 um 12:53

Geiles Beispielprogramm. So übersichtlich und kurzgefasst. Brauchte nur 27 Tage um es durchzulesen.

Kommentar von Ralf Hubert am 11.04.2005 um 09:11

Danke für den guten Beitrag.
Weiss jemand wie man einen USB Port anspricht um
einem LCD Informationen zu senden ?
Danke im voraus,
Ralf Hubert

Kommentar von Michael am 04.04.2005 um 17:16

Das Tutorial hat mir sehr geholfen. Nur hab ich noch ein kleines Problem.
Ich schreibe gerade an einem Tool zur Datenübertragung über die serielle Schnittstelle an eine CNC-Fräsmaschine. Ich muß also eine Datei über den Com-Port schicken. Das fuktioniert auch teilweise, zumindest zeigt die Maschine an, dass sie Daten empfängt. Das Problem ist, sie hört nicht auf zu empfangen.
muss ich der Maschine irgend wie mitteilen dass die Übertragung beendet is????

kann jemand helfen?

Gruß Michael

Kommentar von peter brandt am 18.03.2005 um 04:36

ich möchte mit dem com-control dateien über die serielle schnittstelle übertragen. eine datei wurde dazu in ein byte-datenfeld übertragen und anschließend gesendet. muß das ASCII-zeichen(26)=EOF an dieses datenfeld angehängt werden, damit beim empfangen die CommEvent-eigenschaft ComEvEOF im OnComm-ereignis ausgelöst wird. leider funktioniert dies weder mit noch ohne dem EOF-Zeichen. wer kann mir helfen?

Kommentar von mirmi am 17.03.2005 um 13:15

Hallo Joline :)
Hab so ein Problem eben gelöst.
Schau Dir mal den Thread im .NET Forum an:
http://foren.activevb.de/cgi-bin/foren/view.pl?forum=6&msg=14794&root=14794&page=1

steht jede menge drin, sollte dir aber weiterhelfen :)

grüße
mirmi

Kommentar von joline am 15.03.2005 um 16:11

Hallo,

das Tutorial ist sehr verständlich. Ich habe aber noch eine Frage zum auslesen des Buffers.

Ich lese den Buffer aus, bekomme aber nicht immer alle Daten angezeigt.

Frage:

Wie kann sichergestellt werden, ob der Buffer vollständig ausgelesen wurde?

Eine Tip oder Trick hilft mir bestimmt weiter.

Danke und Gruss
aus DDorf von joline

Kommentar von mirmi am 12.03.2005 um 11:54

Hallo :)
Das Tutorial hat mir schon sehr geholfen. Besonders der Teil über das MSComm-Control
Nun möchte ich die Funtion für die Feststellung des aktiven ComPorts einbauen. Diese hier:
Public Function PortTest(COMPortNummer As Integer) As Boolean
MSComm1.CommPort = COMPortNummer
On Error Resume Next
MSComm1.PortOpen = True

If Err = 0 Then
PortTest = True
MSComm1.PortOpen = False
Else
PortTest = False
MSComm1.PortOpen = False
End If
End Function

Leider wird "Err" unterstrichen dargestellt. Wie muss ich das deklarieren?
Bitte um Antwort :)

Kommentar von Wolfgang Schütze am 18.02.2005 um 17:37

Hallo,
ich habe ein älteres Borland C++ (V5) Projekt, welches gelegentlich noch gepflegt werden muss. Diese Software steuert über die RS232 angeschlossene Geräte. Das funktioniert seit Jahren einwandfrei. Jetzt ist ein Gerät hinzugekommen, welches über
EscapeCommFunction(hCom,CLRDTR); //und
EscapeCommFunction(hCom,SETDTR); // oder oderEscapeCommFunction(hCom,CLRRTS); //und
EscapeCommFunction(hCom,SETRTS);
die Betriebsspannung erhält.
Dabei stellte ich fest, das unter NT,WIN98 und XP dies immer perfekt funktioniert. Leider aber bei der Hälfte der W2000 - PC's nicht. Wer hat da eine Lösung?
Vielen Dank

Kommentar von alireza am 15.02.2005 um 07:59

hi
i cant port=true (error 8012) for win XP

plase help me

Kommentar von Torsten Uhlmann am 11.02.2005 um 23:55

Hallo,
mit Interesse habe ich Ihr Tutorial zu Thema COM-Control gelesen, nur hilft es mir nicht wirklich weiter :-(

Ich möchte eine Access Datenbank programmieren, bei der die Daten von einem Chipdrive gelesen werden...

Die Datenbank soll nun in eine einfache Tabelle die Daten, welche sie vom Chipdrive ausliest eintragen (Name, Vorname, von, bis)

Leider lässt sich ihr Quellcode nicht verwenden und die Beispieldatei nicht importieren, da die "Formularklasse in VBE nicht unterstützt" wird?


Kann mir da irgendwer weiterhelfen?

Vielen Dank

Torsten Uhlmann

PS: Sorry wenn der Kommentar zwei mal erscheint!

Kommentar von am 11.02.2005 um 23:52

Hallo,

mit Interesse habe ich Ihr Tutorial zu Thema COM-Control gelesen, nur hilft es mir nicht wirklich weiter :-(

Ich möchte eine Access Datenbank programmieren, bei der die Daten von einem Chipdrive gelesen werden.

Die Datenbank soll nun in eine einfache Tabelle die Daten, welche sie vom Chipdrive ausliest eintragen (Name, Vorname, von, bis)

Leider lässt sich ihr Quellcode nicht verwenden und die Beispieldatei nicht importieren, da die "Formularklasse in VBE nicht unterstützt" wird

Kann mir da irgendwer weiterhelfen?

Vielen Dank

Torsten Uhlmann

Kommentar von M.Hoffbauer am 07.02.2005 um 11:02

Hallo,

dieser Artikel hat mir bei der Entwicklung eines Messsystems sehr geholfen.
Vielen Dank!

Kommentar von Andreas Falkner am 19.12.2004 um 10:47

Ich möchte gerne ein kleines Programm machen wo ich Werte von der RS232 bekommeund diese als txt datei autmatisch alle 5 sec Abgespeichert werden, das Programm sollte autmatisch starten und die gespeicherte datei jeden Tag neu abspeichern mit dem Datumstag.
Wenn mir da wer witerhelfen kann das wäre super.
Danke für Eure hilfe
mfg Andreas

Kommentar von sven am 07.12.2004 um 19:50

ich bekomme immer die meldung "Anhaltesignal empfangen" woran könnte das liegen? ich versuche befehle per ir-fernbedienung zu senden.

Kommentar von Günter Laudahn am 14.11.2004 um 18:29

Das COMM-Control - ich habe es verstanden dank diesem Artikel.

Vielen Dank

MfG

Günter LAudahn

Kommentar von Carsten.Rust am 08.11.2004 um 07:55

Hallo

Ich muss über VB.net Daten über eine serielle Schnittstelle einlesen. Gelten die Vorgaben aus dem Tutorial Das COM - Control auch für VB.net. Und muss ich dafür noch irgendwelche zusätzlichen Libaries einbinden?

Gruss Carsten Rust

Kommentar von Stefan Bermadinger am 21.10.2004 um 01:55

Hallo!
Wenn im Handbuch für eine digitale Messuhr nur "parity bit" steht, ist dann Gerade, Ungerade, Leerzeichen oder Markierung gemeint? Zweite Frage: Wenn ich in ASCII Daten <PRI> senden will und das ganze mi <CR> enden muss, wie schaut das dann im Programmiertext aus?

Danke für jede Hilfe, beste Grüße, Stefan

Kommentar von Younes Zikkari am 18.10.2004 um 13:06

ich versuche kommunikation mit ein hardware durch
rs232 aber Invrarot IR we kann helfen

Kommentar von Herr Koot am 02.09.2004 um 20:57

Hallo
Schon lange versuche ich MSComm in VBA Excel Office 2000 zu nutzen.
Das Problem was ich nicht löschen kann ist "Set Controll ".
also wie kann mann so etwas wie Dim MSComm1 As MSComm usw machen ? Da ist keiner die dass erklärt. Also deklarierung von den Variabele MSComm1 und Set.
Wenn sie dass wissen, oder ein Excel Datei haben wo dass funktionniert, dann wäre ich Ihnen sehr Dankbar.
Al dass andere auf Ihre Webpage ist klar und sieht gut versorgt aus.
M.fr.Gr.

Kommentar von MVXA am 24.07.2004 um 19:03

Hallo
Kennt jemand ein gutest Tut über den AT befehlssatz für ein ISDN modem ? Wollt bischen mit meinem alten ISDN Modem rumspielen und find in google nix :( (kommen haufen andere Tuts....)

Kommentar von EisCreme am 09.07.2004 um 11:51

sag, es müsst doch reichen, die Empfangs und Sendeleitung auf der Schnittstelle zu verbinden wenn ich ( zu testzwecken ) mit mir selber kommunizieren will oder?

Kommentar von Daniel Barczak am 02.05.2004 um 20:20

Hallo,

ich würde gerne aus vb.net mit einem c-control-Einplatinencomputer über die RS232 kommunizieren. vb.net unterstützt ja von sich aus nicht mehr die serielle Schnittstelle, verschiedene Beispiele die ich im Netz gefunden haben binden alle mehr oder weniger bekannte System-Dateien (wenn ich mich richtig erinnere DLLs) ein. Für welche vb-version ist denn cas COM-Control. Herr Gaethke erwähnt, dass es mit vb.net schon funktioniert. Muss ich da irgendwelche Sachen im Umfeld berücksichtigen?

Gruß Daniel

Kommentar von Günter Bruns am 14.04.2004 um 00:08

Hallo
Sobald ich mscomm.Portopen = true setze "hängt" mein Programm.(Besteht bislang nur aus der .commport und .settings)
(Ich muss dazu sagen, dass an Com3 ein Siemens S25 mit einem
Datenkabel hängt. Per Hyperterminal kann ich das S25 mit
AT-Befehlen ansprechen.(9600,n,8,1))
Wenn ich das Kabel abziehe reagiert das VB-Prg wieder.
Hat jemand dieses Problem bzw hat eine Lösung ?
Mit freundlichen Grüssen

Günter Bruns

Kommentar von Andreas Croonenbroeck am 02.04.2004 um 18:12

Hallo Herr Schäfer !

Irgendwie finde ich die Frage etwas ulkig, jedenfalls an diesem Ort. Noch viel ulkiger fand ich, dass eine gezielte Eingabe bei GOOGLE zig Adressen rausbringt, und einer der ersten Treffer schon die Lösung bringt ;-)

Aber ich will mal nicht so sein :

http://www.kh-gps.de/tegaron.htm

Da dürfte alles stehen, was Sie suchen ...

Achja, bevor ich es vergesse :
Die Suchmaschine hat die URL www.google.de ;-)

Mit freundlichem Gruß
Andreas Croonenbroeck

Kommentar von Markus Schäfer am 02.04.2004 um 16:42

Sehr geehrte Damen und Herren,

ich habe mich sehr über Ihre Homepage gefreut. LEider bin ich auf der Suche nach einer solchen für die Belgung eines 15pol. Steckers. Ich bin der MEinung, dass das auch eine serielle Schnittstelle ist, über die ich Daten einlesen kann. Vielleicht habt ihr ein paar Informationen über die 15pol. Schnittstelle. Das Datenformat ist zwar NMEA, also kein so gängiges, aber das bekomme ich dann schon in den Griff. Zuerst müssen die Daten mal richtig am Port anliegen. Ich wäre Euch dankbar, wenn ihr Infos oder Links für mich hättet.

Vielen Dank im Voraus.

M.Schäfer

Kommentar von David Worms am 08.03.2004 um 18:33

Hallo.
Ich habe dieses Tutorium mit Interesse gelesen. Allerdings hab ich bei der Realisierung von meinem Projekt einige Probleme. Sie haben mit "Case comEvReceive: Eingang = Eingang + MSComm1.Input" die serielle Schnittstelle abgehört und die empfangenen Daten in "Eingang" dargestellt. Ich habe mehrere Textfelder. Ein Microcontroller sendet nacheinander mehrere Daten die in verschiedenen Fenstern angezeigt werden sollen. Wie lässt sich das realisieren?

Kommentar von Andreas Croonenbroeck am 22.02.2004 um 10:54

Hallo !

Ich fange gerade erst an, mit VB zu programmieren, habe aber unter QuickBasic schon einige Erfahrungen sammeln können.

Mit sind in diesem Tutorial beim ersten Überfliegen direkt ein paar kleine Ungereimtheiten aufgefallen :

1. Der serielle Anschluss an einem PC ist keine Buchse, sondern immer ein Stecker ! Ursache hierfür ist wohl, dass der erste serielle PC-Anschluss noch nach der 25-pol. Norm ausgeführt war (die platzsparende 9-pol. kam erst viel später, als keiner mehr wusste, was denn bitte die TTY-Signale in dem 25-pol. bewirken sollen :-) ) und somit eine Verwechslung mit der sehr früh genormten parallelen PC-Schnittstelle (Centronics) zu befürchten war, denn diese verfügt am PC über eine 25-pol. Buchse !

2. Die Aufzählung der Baudraten hat mich etwas verwirrt. Ich kenne weder 56000 noch 128000 (von 256000 mal ganz zu schweigen), dafür fehlen mir 57600 und 115200, wobei letztere meines Erachtens die absolute Obergrenze an der seriellen Schnittstelle nach RS-232 darstellt. Sollte ich mich bzgl. der Obergrenze irren, so bitte ich um Angabe von Bezugsquellen für Schnittstellenkarten, die diese Baudrate mitmachen !

Sicher, beides keine elementaren Fehler für Otto Normaluser, aber für mich stellt sich die Frage, wo denn hier evtl. Fehler drinstecken, die die Funktion betreffen, wenn solche Grundlagen-Statements bereits fehlerhaft sind ?

Ich werde es mal antesten, und wenn es jemanden interessiert, dann werde ich da auch mal was zu schreiben.

Mit freundlichem Gruß
Andreas Croonenbroeck

Kommentar von Soenke Gaethke am 13.02.2004 um 16:16

Hallo,
das funktioniert unter VB.Net ganz gut. Aber ich möchte nur jeweils ein Byte pro Zeichen übertragen. Zum Beispiel die Hexbytes 70 5D 3E. Was ist zu tun?

MfG

Soenke Gaethke

Kommentar von Eric Dellandrea am 10.12.2003 um 17:01

Hallo,

ich habe eine Frage zu dem MSComm.
Ich wollte dieses Element nutzen, um ein GSM-Modem anzusprechen. Nun habe ich eine Programm geschrieben, welches eine SMS über dieses GSM-Modem senden soll.
Nun kommt es zu einem Laufzeitfehler, wenn ich mit der Input-Methode arbeite (Laufzeit 8020: Fehler auslesen des DFÜ-Gerätes). Benutze ich nun ein anderes Modem/Handy, welches über die IR-Schnittstelle läuft, tritt dieser Fehler nicht auf. Arbeite ich nun mit dem Hyperterminal, kann ich ohne weiteres SMS über das GSM-Modem versenden. Ich habe als Betriebssystem Windows2000.
Können Sie mir weiterhelfen ?

MFG
Eric Dellandrea

Kommentar von Dance Commander am 02.12.2003 um 15:01

LAME