none
Seriellen Port auslesen RRS feed

  • Frage

  • Guten Tag,

    ich versuche gerade mittels Visual Basic Application einen Microcontroller zu steuern.

    Das senden von Daten funktioniert bereits hervorragend, beim Empfangen treten allerdings einige Probleme auf.

    Habe mich auch schon durch einige Seiten und Beiträge, sogar Beispiellösungen gekämpft, doch bin bisher zu keinem Ergebnis gekommen.

    In einer Konsolenanwendung kriege ich das Empfangen auch zum Laufen, bei einer Application scheitert es dann allerdings leider.

    Benutze Visual Basic 2010 Express, liegt es vielleicht daran Beispiele, wie [url=http://social.msdn.microsoft.com/Forums/de-CH/dotnetframeworkde/thread/fb78cbd4-7d47-4ae1-b3e8-21e5c15b4142]hier[/url] nicht so funktionieren, wie erhofft?

     

    Ich hoffe allerdings auf jemanden, der mir hierbei helfen kann.

     

    Mit freundlichen Grüßen,

    Morgy93

    Mittwoch, 22. Juni 2011 20:33

Antworten

Alle Antworten

  • Hallo,

    zunächst: Mit den Express Editionen kannst Du das .NET Framework und so auch SerialPort vollständig nutzen,
    daran liegt es also nicht - auch die Version 2008 oder 2010 ist dabei nicht wichtig.

    Grundsätzlich ist beim SerialPort zu beachten, dass die Ereignisse wie DataReceived
    auf einem Hintergrund-Thread erfolgen, weswegen der Einsatz von Control.Invoke bei Windows Forms
    zwingend ist, wie es auch Robert Breitenhofers Beispiel im von Dir zitierten Thread zeigt,
    siehe dazu: Gewusst wie: Threadsicheres Aufrufen von Windows Forms-Steuerelementen

    Für eine stabile Übertragung wiederum ist eine korrekte Konfiguration des Ports wichtig,
    Handshake usw. sollten richtig eingestellt sein.
    Einige Tipps (engl.) für einen "besseren Empfang" findest Du unter Top 5 SerialPort Tips [Kim Hamilton]

    Gruß Elmar

    Mittwoch, 22. Juni 2011 22:24
    Beantworter
  • Gut, also ich habe jetzt einfach mal diese "Beispiellösung" so und hoffentlich richtig auf mein Beispiel angepasst und präsentiere das Ganze hier auch noch:

     

    Imports System.IO.Ports
    
    Public Class main
    
      Dim mySerialPort As New SerialPort("COM3")
    
      Dim inputData As String = ""
      Public Event DataReceived As SerialDataReceivedEventHandler
    
      Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        mySerialPort.BaudRate = 9600
        mySerialPort.Parity = Parity.None
        mySerialPort.StopBits = StopBits.One
        mySerialPort.DataBits = 8
        mySerialPort.Handshake = Handshake.None
      End Sub
    
      Public Sub b_connect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_connect.Click
        If b_connect.Text = "Verbinden" Then
          mySerialPort.Open()
          b_send.Enabled = True
          b_connect.Text = "Verbindung trennen"
        Else
          mySerialPort.Close()
          b_send.Enabled = False
          b_connect.Text = "Verbinden"
        End If
      End Sub
    
      Private Sub b_send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_send.Click
        If tb_input.Text <> "" Then
          sendData(tb_input.Text)
        End If
      End Sub
    
      Public Sub sendData(ByVal data As String)
        mySerialPort.Write(data)
      End Sub
    
      Private Sub mySerialPort_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
        inputData = mySerialPort.ReadExisting
        Me.Invoke(New EventHandler(AddressOf DoUpdate))
      End Sub
    
      Public Sub DoUpdate()
        tb_output.Text = inputData
        l_income.Text = l_income.Text + 1
      End Sub
    
    End Class
    
    
    

    Zu meinem schon funktionierendem (wenn auch nicht gut geschrieben) Programm habe ich einfach mal die paar Codeschnipsel aus dem Beispiel mit eingefügt, sehe allerdings keinerlei Reaktionen.

    Die Funktion wird ja nichtmal ansatzweise berührt. Nur warum?

    Donnerstag, 23. Juni 2011 12:18
  • Die Funktion wird ja nichtmal ansatzweise berührt. Nur warum?

    Hallo morgy,

    Demo project zum download hier:

    http://code.msdn.microsoft.com/SerialPort-Sample-in-VBNET-fb040fb2

    schöne Güsse Ellen


    Ich benutze/ I'm using VB2008 & VB2010
    • Als Antwort markiert Morgy93 Donnerstag, 23. Juni 2011 21:04
    • Bearbeitet Brent Serbus Freitag, 24. Juni 2011 18:00 li issue
    • Bearbeitet Ellen Ramcke Samstag, 5. Mai 2012 19:13 lonk
    Donnerstag, 23. Juni 2011 19:54
  • Okay, ich habe mein Problem nun gelöst. Ich habe einfach den eigenen definierten SerialPort durch das VB Object ersetzt und es funktioniert prima. Die Beispiellösung hat mich auf das Ergebnis gebracht, vielen, vielen Dank dafür!
    Donnerstag, 23. Juni 2011 21:05