Seriellen Port auslesen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Morgy.

    Seriellen Port auslesen

    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.
    Stütze mich beim Empfangen auf diesem Beispielcode: Klick mich!
    Ich poste einfach mal direkt dazu meinen Code:

    VB.NET-Quellcode

    1. Imports System.IO.Ports
    2. Public Class main
    3. Dim mySerialPort As New SerialPort("COM3")
    4. Dim inputData As String = ""
    5. Public Event DataReceived As SerialDataReceivedEventHandler
    6. Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. mySerialPort.BaudRate = 9600
    8. mySerialPort.Parity = Parity.None
    9. mySerialPort.StopBits = StopBits.One
    10. mySerialPort.DataBits = 8
    11. mySerialPort.Handshake = Handshake.None
    12. End Sub
    13. Public Sub b_connect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_connect.Click
    14. If b_connect.Text = "Verbinden" Then
    15. mySerialPort.Open()
    16. b_send.Enabled = True
    17. b_connect.Text = "Verbindung trennen"
    18. Else
    19. mySerialPort.Close()
    20. b_send.Enabled = False
    21. b_connect.Text = "Verbinden"
    22. End If
    23. End Sub
    24. Private Sub b_send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_send.Click
    25. If tb_input.Text <> "" Then
    26. sendData(tb_input.Text)
    27. End If
    28. End Sub
    29. Public Sub sendData(ByVal data As String)
    30. mySerialPort.Write(data)
    31. End Sub
    32. Private Sub mySerialPort_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
    33. inputData = mySerialPort.ReadExisting
    34. Me.Invoke(New EventHandler(AddressOf DoUpdate))
    35. End Sub
    36. Public Sub DoUpdate()
    37. tb_output.Text = inputData
    38. l_income.Text = l_income.Text + 1
    39. End Sub
    40. End Class


    Also wie gesagt, senden funktioniert einwandfrei, beim Empfangen von Daten passiert allerdings gar nichts.

    Hoffe jemand weiß Rat.

    Mit freundlichen Grüßen,
    Morgy
    Wird überhaupt etwas gesendet (um empfangen zu werden)?

    Wird das Ereignis DataReceived ausgelöst? (Haltepunkt mal gesetzt?)

    Hast du schon einen SerialPortMonitor dazwischen gehängt,
    um den Datenfluß zu beobachten?

    Was bedeutet?:
    l_income.Text = l_income.Text + 1

    Lightsource schrieb:

    Wird überhaupt etwas gesendet (um empfangen zu werden)?

    Alles das, was gesendet wird, schickt der Microcontroller auch direkt zurück.
    Zudem sende ich jede Sekunde ein 'H', nur als Test. :)
    (Funktioniert unter HTerm ja auch wunderbar)


    Lightsource schrieb:

    Wird das Ereignis DataReceived ausgelöst? (Haltepunkt mal gesetzt?)

    Ich weiß nicht genau wie das mit dem Haltepunkt funktioniert, aber wenn ich in der Funktion ein Ereignis versuche aufzurufen (wie z.B. eine MsgBox), dann sehe ich davon gar nichts.
    Ergo wird auf diese Funktion anscheinend gar nicht zugegriffen.


    Lightsource schrieb:

    Hast du schon einen SerialPortMonitor dazwischen gehängt,
    um den Datenfluß zu beobachten?

    Wenn Du so freundlich wärst und mir das einmal kurz beschreibst oder ich gleich selber einmal danach suche, dann kann ich das auch gerne mal ausprobieren.
    Aber zum Datenfluß .. wenn ich das richtig verstehe .. unter HTerm kommt wirklich alles an, was auch ankommen soll.


    Lightsource schrieb:

    Was bedeutet?:
    l_income.Text = l_income.Text + 1

    Ach, da zähle ich nur eine Zahl hoch, war nur ein Test, um zu gucken, ob diese Funktion überhaupt berührt wird, .. leider nicht.

    *EDIT*
    Okay, also ich habe mein Problem gelöst, YEAH!
    Habe meinen eigens definierten SerialPort durch ein Object in VB geändert und alles angepasst.
    Und siehe da.. es funktioniert. :)
    Trotzdem vielen, vielen Dank an euch beide, für die Hilfe!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Morgy“ () aus folgendem Grund: Weil mein Problem gelöst ist und ich keinen neuen Beitrag erstellen wollte.