VB2005 - SerialPort1 einlesen

Gast #919136
Lesenswert?

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!
Gast #921134
Lesenswert?

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ß
#921260
Lesenswert?

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
Gast #921924
Lesenswert?

@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ß
#922388
Lesenswert?

..... 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.).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren