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.
wäre schön wenn ich da Hilfe bekommen könnte.
*Topic verschoben*
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
- Public Class Form1
- Private Shared ByteIn(255) As Byte
- Private Shared count, bytesImBuffer As Integer
- Private Shared angefordeteBytes As Integer = 10
- Private Shared comOpen, Datenfehler As Boolean
- Private Shared WithEvents SerialPort1 As New IO.Ports.SerialPort
- Private Shared Timer1 As New Timer
- Private Shared Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
- SerialPort1.PortName = "COM1"
- SerialPort1.Handshake = IO.Ports.Handshake.None
- SerialPort1.BaudRate = 9600
- SerialPort1.Parity = IO.Ports.Parity.None
- SerialPort1.DataBits = 8
- SerialPort1.StopBits = IO.Ports.StopBits.One
- SerialPort1.RtsEnable = True
- SerialPort1.DtrEnable = True
- SerialPort1.Open()
- comOpen = SerialPort1.IsOpen
- End Sub
- Private Shared Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
- Timer1.Enabled = False
- bytesImBuffer = SerialPort1.BytesToRead
- If bytesImBuffer < angefordeteBytes Then
- MsgBox(("Datenübertragungsfehler " & _
- angefordeteBytes - bytesImBuffer).ToString & _
- " Bytes verloren", MsgBoxStyle.Critical)
- SerialPort1.DiscardInBuffer()
- Datenfehler = True
- Exit Sub
- End If
- SerialPort1.Read(ByteIn, 0, bytesImBuffer)
- Form1.Invoke(New EventHandler(AddressOf updateData))
- End Sub
- Private Shared Sub updateData()
- For i As Integer = 0 To angefordeteBytes - 1
- count += 1
- Dim _str = String.Format("{0} >> {1:X}", count, ByteIn(i))
- Form1.ListBox1.Items.Add(_str)
- Next
- End Sub
- Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
- If comOpen Then
- SerialPort1.ReceivedBytesThreshold = angefordeteBytes
- SerialPort1.Write(Chr(&H14))
- Timer1.Interval = 5000
- Timer1.Enabled = True
- Datenfehler = False
- count = 0
- End If
- End Sub
- 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“ ()