Lesen von RS-232

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von fraju.

    Lesen von RS-232

    Nachdem ich nun seit Oktober letzten Jahres nichts mehr weiter programmiert habe, habe ich nun mein Prokjekt wieder hervorgeholt und auch inzwischen VB2010 installiert. Jetzt bin ich wieder am Thema RS-232.
    Ich habe folgendes Testprogramm erstellt und bekomme einfach das "Me" nicht vorgeschlagen bei "Me.Invoke(New EventHandler(AdressOf updateData)). Wenn ich es mit Form1 versuche dann kommt folgende Meldung "Invoke oder BeginInvoke kann für ein Steuerelement erst aufgerufen werden, wenn das Fensterhandle erstellt wurde."
    Ich weis leider nur nicht so recht was ich da falsch mache.
    Wie kann ich Ereignisgesteuert Daten empfangen wenn ich nicht weis wieviel Bytes ankommen? Ich weis nur, daß am Ende der gültigen Bytes "255" gesendet wird.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Shared ByteIn(255) As Byte
    3. Private Shared count, bytesImBuffer As Integer
    4. Private Shared angefordeteBytes As Integer = 10
    5. Private Shared comOpen, Datenfehler As Boolean
    6. Private Shared WithEvents SerialPort1 As New IO.Ports.SerialPort
    7. Private Shared Timer1 As New Timer
    8. Private Shared Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    9. SerialPort1.PortName = "COM1"
    10. SerialPort1.Handshake = IO.Ports.Handshake.None
    11. SerialPort1.BaudRate = 9600
    12. SerialPort1.Parity = IO.Ports.Parity.None
    13. SerialPort1.DataBits = 8
    14. SerialPort1.StopBits = IO.Ports.StopBits.One
    15. SerialPort1.RtsEnable = True
    16. SerialPort1.DtrEnable = True
    17. SerialPort1.Open()
    18. comOpen = SerialPort1.IsOpen
    19. End Sub
    20. Private Shared Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    21. Timer1.Enabled = False
    22. bytesImBuffer = SerialPort1.BytesToRead
    23. If bytesImBuffer < angefordeteBytes Then
    24. MsgBox(("Datenübertragungsfehler " & _
    25. angefordeteBytes - bytesImBuffer).ToString & _
    26. " Bytes verloren", MsgBoxStyle.Critical)
    27. SerialPort1.DiscardInBuffer()
    28. Datenfehler = True
    29. Exit Sub
    30. End If
    31. SerialPort1.Read(ByteIn, 0, bytesImBuffer)
    32. Form1.Invoke(New EventHandler(AddressOf updateData))
    33. End Sub
    34. Private Shared Sub updateData()
    35. For i As Integer = 0 To angefordeteBytes - 1
    36. count += 1
    37. Dim _str = String.Format("{0} >> {1:X}", count, ByteIn(i))
    38. Form1.ListBox1.Items.Add(_str)
    39. Next
    40. End Sub
    41. Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    42. If comOpen Then
    43. SerialPort1.ReceivedBytesThreshold = angefordeteBytes
    44. SerialPort1.Write(Chr(&H14))
    45. Timer1.Interval = 5000
    46. Timer1.Enabled = True
    47. Datenfehler = False
    48. count = 0
    49. End If
    50. End Sub
    51. End Class


    wäre schön wenn ich da Hilfe bekommen könnte.

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()