Forum: PC Hard- und Software Visual Basic: Empfangen über COM-Port


von Manu N. (avr-manu)


Lesenswert?

n´Abend,

Ich besitze Visual Basic 2008 Express Edition
und habe heute zum ersten mal versucht damit Daten
über die serielle Schnittstelle zu Senden.
Das klappt auch so weit. Hier mein einfacher Code:

1
 ser.Close()
2
        ser.Open()
3
        ser.Write("asdf")
4
        ser.Close()

Nun möchte ich aber einfach einen Text empfangen,
so wie bei einem AVR.(In Bascom: Input)
Wie bewerkstellige ich das mit Visual Basic.
Welchen Befehl muss ich da verwenden?
Ich will also das z.B. mein AVR "Hallo Welt" sendet,
und das dann in meiner Anwendung angezeigt wird.

Vielen Dank schonmal,
Manu

Tante Edit:
Oh mist, ins falsche Forum. Gehört eigentlich in PC-Programmierung.
Könnte das bitte jemand verschieben ?

von Jonas G. (jonny)


Lesenswert?

Hallo,

das hier hilf schonmal weiter, wenn du es ohne ein Steuerelement machst: 
http://support.microsoft.com/kb/904795

Ansonsten:
Wenn du auf das Symbol für den Serialport auf deinem Formular klickst, 
kannst du das Event für den Empfang in deinem Code benutzen.

Dann kannst du dort auf die Empfangenen zeichen zurückgreifen.

von Manu N. (avr-manu)


Lesenswert?

Igergend wie funktioniert das bei mir nicht.
Dieses Port Symbol hab ich schon reingepackt.
Kannst du mal den kompletten Code Posten ?
Wie gesagt, ich benutze die Express Edition.
Wie mache ich z.B. das der Empfangene Text
(in einem LAbel) Dargestellt wird ?
Also wie in einem Terminalprogramm.

von Jonas G. (jonny)


Lesenswert?

Tut mit leid ich arbeite z.Z. an meinem MAC und jetzt Windows über 
VMware zu starten... Nein.

Aber ich versuche es dir nochmal zu erklären.

Schritt 1: SerialPort Steuerelement auf das Formular ziehen (hast du ja)
Schritt 2: Auf das Symbol klicken. Im Eigenschaften-Fensteter 
(http://openbook.galileocomputing.de/visual_basic/bilderklein/klein02_13.gif) 
kann man jetzt Einstellungen vornehmen.
In der Symbolleiste auf den Blitz klicken.

Schritt 3: Das Event fürs empfangen auswählen. (Name weiß ich nicht 
genau)
Durch einen Doppelklick auf den Namen des Events, springt man 
automatisch in den Code und zwar in die Methode, die aufgrufen wird, 
wenn die Schnittstelle etwas empfängt.

Schritt 4: Über die Methoden, die im Link (in meinem erster Post) 
stehen, die empfangene Zeile auslesen.

Schritt 5: Text des Labels setzten...

Grundlagen
Siehe: http://openbook.galileocomputing.de/visual_basic/index.htm
Das meisnte gilt auch für VB 2008

von juppi (Gast)


Lesenswert?

Wenn du den Text direkt ins Label laden willst ,mußt du mit invoke 
arbeiten.

Als Test ,setze einen Timer auf 100 ms
im TimerTick kannst du die eingelesene Variable in eine Textbox oder 
Label Laden.

von tobiasr (Gast)


Lesenswert?

Hallo,

ich ahbe was ähnliches, allerdings in VB6, realisiert.
Funktioniert so weit auch ganz gut!

Leider hängt sich der Port von Zeit zu Zeit auf was das Empfangen 
angeht.
Senden ist dann weiterhin möglich.

Hat jemand ne Idee woran das liegt?

Hier mein Code:

***
Private Sub MSComm1_OnComm()

On Error GoTo Fehlerliste


  Select Case MSComm1.CommEvent

   Case comOverrun:   MsgBox "Datenverlust!"
    Case comRxOver:    MsgBox "Datenverlust!"
    Case comEvReceive:  Me.Text1 = Me.Text1 + MSComm1.Input
    Case comEventBreak:     MsgBox " 1001 Es wurde ein Anhaltesignal 
(Break-Signal) empfangen."
    Case comEventFrame: MsgBox " 1004 Datenblockfehler (Framing Error). 
Die Hardware hat einen Datenblockfehler entdeckt."
    Case comEventRxParity: MsgBox " 1009 Paritätsfehler (Parity Error). 
Die Hardware hat einen Paritätsfehler entdeckt."
    Case comEventTxFull: MsgBox " 1010 Sendepuffer voll (Transmit Buffer 
Full). Bei dem Versuch, ein Zeichen in die Warteschlange aufzunehmen, 
wurde festgestellt, daß der Sendepuffer voll war."
    Case comEventDCB: MsgBox "1011 Unerwarteter Fehler beim Abrufen des 
Device Control Block (DCB) für den Anschluß. "

  End Select

Debug.Print MSComm1.Input

vari1ende = InStr(Me.Text1, "#")

If vari1ende > 20 Then

Haus.ComEingang = Me.Text2
Me.Text2 = Left(Me.Text1, vari1ende)
Me.Protokoll1 = Time & " - " & Me.Text2 & Me.Protokoll1

von Tobias R. (elkokiller)


Lesenswert?

Sorry, war nicht angemeldet. Der letzte Beitrag war von mir....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.