Hallo!
Ich möchte mit Visual Basic 2005 meinen SerialPort1 einlesen.
Wie mache ich das , damit ich keinen timer benötige, der ständig 
abfrägt, ob bereits Daten im Empfangsbuffer angekommen sind?! Dieses 
Byte soll er dann in eine Textbox schreiben.
Ich möchte es mit der "ReadByte()"methode vom Objekt "SerialPort1" 
machen, da ich immer nur ein Byte einlesen will.
Etwa so:
    TextBox1.Text = SerialPort1.ReadByte
Vielen Dank!
  DataReceived Event behandeln und dann mit ReadExisting einlesen. Das Update der TextBox muss dann mit Invoke erfolgen, da das Event aus einem anderen Thread kommt.
hm danke erstmal, versteh ich nicht so ganz wie das mit dem Update funktionieren soll von der Textbox.... Kannst mir das mal anhand eines kurzen Codes erklären? Danke!
Roger G. (Gast
Ziehe 3 Labels ,Timer und Com  auf die Form
Der Timer schreibt nur die Daten in das Label(textbox)
Imports System
Imports System.Text    ' <=== !
Public Class Form1
    Dim daten As Byte
    Dim t_zahl, zahl As Integer
    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles Timer1.Tick
        t_zahl = t_zahl + 1
        If t_zahl = 100 Then
            t_zahl = 0
        End If
        Label3.Text = "Datenempfang Aktiv   " & zahl
        Label1.Text = "Datenwert"
        Label2.Text = daten
    End Sub
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e 
As System.IO.Ports.SerialDataReceivedEventArgs) Handles 
SerialPort1.DataReceived
        zahl = zahl + 1
        If zahl = 100 Then
            zahl = 0
        End If
        daten = SerialPort1.ReadByte()
        SerialPort1.DiscardInBuffer()
        '   Label2.Text = daten     'fehler
    End Sub
    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As 
System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        SerialPort1.Close()
    End Sub
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As 
System.EventArgs) Handles Me.Load
        SerialPort1.Open()
    End Sub
End Class
Vielleicht hilft es ?
Gruß
  Müsste in VB ungefähr so aussehen (wenn die Syntax stimmt, arbeite normalerweise nicht mit VB)
| 1 | public class MyForm | 
| 2 | Dim WithEvents serialPort As New IO.Ports.SerialPort | 
| 3 | |
| 4 | Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived | 
| 5 |         MyTextBox.Invoke(New MyUpdateDelegate(AddressOf UpdateText), New Object() {})
 | 
| 6 | End Sub | 
| 7 | |
| 8 | Public Delegate Sub MyUpdateDelegate() | 
| 9 | Public Sub UpdateText() | 
| 10 | MyTextBox.Text = serialPort.ReadExisting | 
| 11 | End Sub | 
@Arc Net (arc) Habe das als Denkanstoß genommen. Nach einigen Änderungen und Versuchen konnte ich ASCII werte bis 127Dez einlesen. Jetzt habe ich Urlaub,danach greife ich dies noch einmal auf, um alle Werte einlesen zu können (0-255). Manchmal ist es gut ohne Timer zu arbeiten. Roger G. (Gast) Gib nicht so schnell auf. VB.Net ist anfangs schwer zu verstehen. Gruß
..... wrote: > @Arc Net (arc) > > Habe das als Denkanstoß genommen. > Nach einigen Änderungen und Versuchen konnte ich ASCII werte bis 127Dez > einlesen. > Jetzt habe ich Urlaub,danach greife ich dies noch einmal auf, um alle > Werte einlesen zu können (0-255). > Manchmal ist es gut ohne Timer zu arbeiten. > > Roger G. (Gast) > > Gib nicht so schnell auf. > > VB.Net ist anfangs schwer zu verstehen. > > Gruß SerialPort verwendet als Standard ASCIIEncoding d.h. nur Werte von 0-127 kommen durch. Also SerialPort.Encoding mit Encoding.GetEncoding(28591) (iso-8859-1) umstellen, oder mit den entsprechenden "Byte-Routinen" arbeiten (BytesToRead, Read, Write etc.).
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
Mit Google-Account einloggen
  Noch kein Account? Hier anmelden.
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten