vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Serielles Protokoll ohne Handshake empfangen 
Autor: Laserbrenner
Datum: 23.02.12 20:50

So,
dank euch habe ich zwei neu Lösungen für mein Problem
und auch gleich ein paar neu Fragen
Hier erstmal die Lösung nach Preisser und Manni01:
 Private Sub verbinden_Click(ByVal sender As System.Object, ByVal e As _
   System.EventArgs) Handles verbinden.Click
        With SerialPort1
            If Not .IsOpen Then
                Try
                    .PortName = ComboBox1.Text
                    .BaudRate = 38400
                    .DataBits = 8
                    .Parity = Parity.None
                    .StopBits = StopBits.One
                    .WriteTimeout = 1000               ' 1000 ms = 1 Sek.
                    '.ReadTimeout = 1000             ' 1000 ms = 1 Sek.
                    .Open()
                    verbinden.BackColor = Color.Green
                    verbinden.Text = "Verbunden"
                Catch ex As Exception
                    MessageBox.Show(ex.Message, "Fehler beim Open", _
                      MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Exit Sub
                End Try
            End If
        End With
    End Sub
 
 Private Sub Start_Click(sender As System.Object, e As System.EventArgs) _
   Handles Start.Click
        Dim start As New ParameterizedThreadStart(AddressOf ReadSerialPort)
        Dim empfangen As New Thread(start)
        empfangen.Start(SerialPort1)
    End Sub
 
   Private Sub ReadSerialPort(port As SerialPort)
        ' Lesen
        Do
            ' 7 Bytes Head lesen
            Dim head_array As Byte() = New Byte(6) {}
            Dim headBytesRead As Integer = 0
 
            While headBytesRead < head_array.Length
                Dim read As Integer = port.Read(head_array, headBytesRead, ( _
                  head_array.Length - headBytesRead))
                headBytesRead += read
            End While
 
            If head_array(0) = &HFF And head_array(1) = &H30 And head_array(2) _
              = &H1 Then
                Dim parameterlänge As Integer = (head_array(4) * 255) + _
                head_array(5) + 1
                Dim body_array As Byte() = New Byte(parameterlänge - 1) {}
                Dim bodyBytesRead As Integer = 0
 
                While bodyBytesRead < parameterlänge
                    Dim read As Integer = port.Read(body_array, bodyBytesRead, _
                      parameterlänge - bodyBytesRead)
                    bodyBytesRead += read
                End While
                If Checksumme(head_array, body_array) = False Then
                    MsgBox("nicht ok")
                    port.DiscardInBuffer()
                Else
                    'GUI-Thread benachrichtigen, dass Telegramm empfangen wurde
                    BeginInvoke(New Action(Of Byte(), Byte())(AddressOf _
                      TelegramEmpfangen), head_array, body_array)
                End If
            Else
                port.DiscardInBuffer()
            End If
       Loop
    End Sub
 
 Function Checksumme(ByVal Hader_Daten As Array, ByVal Body_Daten As Array) As _
   Boolean
        Dim summe As Integer = 0
        For zähler As Integer = 2 To 6
            summe = summe + (Hader_Daten(zähler))
        Next
        For zähler As Integer = 0 To Body_Daten.Length - 2
            summe = summe + (Body_Daten(zähler))
        Next
        summe = summe Mod 256
        If summe = 255 Then summe = 0
        If Body_Daten(Body_Daten.Length - 1) = summe Then
            Checksumme = True
        Else
            Checksumme = False
        End If
    End Function
 
'Wird im GUI-Thread aufgerufen, wenn Telegramm empfangen wurde
Private Sub TelegramEmpfangen(head As Byte(), body As Byte())
        empfänger += 1
        TextBox1.Text = empfänger
End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Serielles Protokoll ohne Handshake empfangen4.292Laserbrenner16.02.12 19:42
Re: Serielles Protokoll ohne Handshake empfangen2.908sv0001018.02.12 12:13
Re: Serielles Protokoll ohne Handshake empfangen3.068Laserbrenner19.02.12 13:09
Re: Serielles Protokoll ohne Handshake empfangen2.920ModeratorDaveS19.02.12 13:10
Re: Serielles Protokoll ohne Handshake empfangen2.958Manni0119.02.12 16:02
Re: Serielles Protokoll ohne Handshake empfangen2.998Laserbrenner20.02.12 12:18
Re: Serielles Protokoll ohne Handshake empfangen3.065Laserbrenner21.02.12 17:57
Re: Serielles Protokoll ohne Handshake empfangen2.993Preisser21.02.12 20:08
Re: Serielles Protokoll ohne Handshake empfangen2.889Manni0121.02.12 20:30
Re: Serielles Protokoll ohne Handshake empfangen2.875Laserbrenner22.02.12 14:51
Re: Serielles Protokoll ohne Handshake empfangen2.851Laserbrenner23.02.12 20:50
Re: Serielles Protokoll ohne Handshake empfangen2.829Laserbrenner23.02.12 20:52
Re: Serielles Protokoll ohne Handshake empfangen2.878Laserbrenner23.02.12 20:53
Re: Serielles Protokoll ohne Handshake empfangen2.845Laserbrenner28.02.12 07:42
Re: Serielles Protokoll ohne Handshake empfangen2.798Laserbrenner19.03.12 06:43
Re: Serielles Protokoll ohne Handshake empfangen2.786ModeratorDaveS19.03.12 07:19

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel