vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 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:53

Dim WithEvents BGW As New System.ComponentModel.BackgroundWorker With _
  {.WorkerReportsProgress = True, .WorkerSupportsCancellation = True}           _
   ' BackgroundWorker deklarieren
 
 Private Sub verbinden_Click(ByVal sender As System.Object, ByVal e As _
   System.EventArgs) Handles verbinden.Click
        With SerialPort1
            If verbinden.Text = "Verbinden" Then
                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()
                    Catch ex As Exception
                        MessageBox.Show(ex.Message, "Fehler beim Open", _
                          MessageBoxButtons.OK, MessageBoxIcon.Error)
                        Exit Sub
                    End Try
                End If
                If Not BGW.IsBusy Then      'wenn BackgroundWorker aus -> Starten
                    BGW.RunWorkerAsync(SerialPort1)
                End If
                verbinden.BackColor = Color.Green
                verbinden.Text = "Verbunden"
            Else    'Verbindung abbrechen
                If BGW.IsBusy Then      'wenn BackgroundWorker an
                    BGW.CancelAsync()   'BackgroundWorker abbrechen
                End If
                verbinden.BackColor = Color.Red
                verbinden.Text = "Verbinden"
            End If
        End With
    End Sub
 
 Private Sub BGW_DoWork(sender As Object, e As _
   System.ComponentModel.DoWorkEventArgs) Handles BGW.DoWork
        '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 = e.Argument.Read(head_array, _
                  headBytesRead, (head_array.Length - headBytesRead))
                headBytesRead += read
                If BGW.CancellationPending Then         'BackgroundWorker 
                ' abbrechen
                    Exit Do
                End If
            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 = e.Argument.Read(body_array, _
                      bodyBytesRead, parameterlänge - bodyBytesRead)
                    bodyBytesRead += read
                    If BGW.CancellationPending Then         'BackgroundWorker 
                    ' abbrechen
                        Exit Do
                    End If
                End While
                If Checksumme(head_array, body_array) = False Then
                    MsgBox("nicht ok")
                    e.Argument.DiscardInBuffer()
                Else
                    'Daten an Form geben
                    BGW.ReportProgress(Nothing, New BGWUserState With _
                      {.BGW_head_array = head_array, .BGW_body_array = _
                      body_array})
                End If
            Else
                e.Argument.DiscardInBuffer()
            End If
        Loop
    End Sub
 
Class BGWUserState
        Public BGW_head_array() As Byte
        Public BGW_body_array() As Byte
 End Class
 
    Private Sub BGW_ProgressChanged(sender As Object, e As _
      System.ComponentModel.ProgressChangedEventArgs) Handles _
      BGW.ProgressChanged
        Dim UserState As BGWUserState = DirectCast(e.UserState, BGWUserState)
        If UserState.BGW_head_array(0) = 255 Then
            empfänger += 1
            TextBox1.Text = empfänger
        End If
    End Sub
 
    Private Sub BGW_RunWorkerCompleted(sender As Object, e As _
      System.ComponentModel.RunWorkerCompletedEventArgs) Handles _
      BGW.RunWorkerCompleted
        SerialPort1.DiscardInBuffer()
        SerialPort1.Close()
        ' MsgBox("BGW abgebrochen")
    End Sub
 
Function Checksumme(ByVal Hader_Daten As Array, ByVal Body_Daten As Array) As _
  Boolean
       ... 
End Function
Die Frage könnt Ihr euch bestimmt schon denken
wo liegen die Vor und Nachteile der beiden Metoden, wann wendet man welche an?
Leider habe ich nichts gefunden was mir meine Fragen beantwortet, daher hoffe ich das Ihr kurz was dazu sagen könnt.
Ach ja verbesserungs Vorschläge zum Code sind immer herzlich willkommen.

gruß
Matthias
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Serielles Protokoll ohne Handshake empfangen4.296Laserbrenner16.02.12 19:42
Re: Serielles Protokoll ohne Handshake empfangen2.911sv0001018.02.12 12:13
Re: Serielles Protokoll ohne Handshake empfangen3.072Laserbrenner19.02.12 13:09
Re: Serielles Protokoll ohne Handshake empfangen2.923ModeratorDaveS19.02.12 13:10
Re: Serielles Protokoll ohne Handshake empfangen2.961Manni0119.02.12 16:02
Re: Serielles Protokoll ohne Handshake empfangen3.001Laserbrenner20.02.12 12:18
Re: Serielles Protokoll ohne Handshake empfangen3.068Laserbrenner21.02.12 17:57
Re: Serielles Protokoll ohne Handshake empfangen2.996Preisser21.02.12 20:08
Re: Serielles Protokoll ohne Handshake empfangen2.892Manni0121.02.12 20:30
Re: Serielles Protokoll ohne Handshake empfangen2.879Laserbrenner22.02.12 14:51
Re: Serielles Protokoll ohne Handshake empfangen2.854Laserbrenner23.02.12 20:50
Re: Serielles Protokoll ohne Handshake empfangen2.833Laserbrenner23.02.12 20:52
Re: Serielles Protokoll ohne Handshake empfangen2.882Laserbrenner23.02.12 20:53
Re: Serielles Protokoll ohne Handshake empfangen2.848Laserbrenner28.02.12 07:42
Re: Serielles Protokoll ohne Handshake empfangen2.801Laserbrenner19.03.12 06:43
Re: Serielles Protokoll ohne Handshake empfangen2.789ModeratorDaveS19.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