vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - G?nnen Sie Ihrem SQL-Kommando diesen kr?nenden Abschlu?!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2014
 
zurück

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

VB.NET - Ein- und Umsteiger
Serielles Protokoll ohne Handshake empfangen 
Autor: Laserbrenner
Datum: 16.02.12 19:42

Hallo Liebes Forum,
ich brauche mal wieder eure Hilfe.
Ich bekomme von einen Gerät ein serielles Protokoll über RS485 zugeschickt.
Dieses wandel ich auf RS232 auf die Com1.

Das Protokoll ist wie folgt aufgebaut:

1.Byte „Start“ 0hFF
2.Byte „Version“ 0h30
3.Byte „Ziel“ 0h01
4.Byte „Quelle“ 0hFD
5,6. Byte „Anzahl der Parameter“ 0hFF
7.Byte „Kommando“ 0h66
8 bis n.Byte „Parameter“ 0hxx
n+1.Byte „Checksumme“ 0hxx

Dabei kann die Anzahl der Parameter variieren.

Kurz gesagt ich habe kein Hard- u. Soft Handshake und keine feste Paketgröße.

Mit folgenden Code habe ich leider vergleich versucht das Protokoll zu empfangen:
'Einrichten der Com
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 = 100                ' 1000 ms = 1 Sek.
                    .ReadTimeout = 100                 ' 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
 
...
Me.SerialPort1.ReceivedBytesThreshold = 1  'nach 1 Bytes DataReceived Event 
' auslösen
...
   Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As _
     System.IO.Ports.SerialDataReceivedEventArgs) Handles _
     SerialPort1.DataReceived
        With SerialPort1
            Try
                Bufferbyte = .ReadByte
                Select bytezähler
                    Case 0
                        If Bufferbyte = &HFF Then  'Start
                            bytezähler = 1
                        End If
                    Case 1
                        If Bufferbyte = &H30 Then   'Version
                            bytezähler = 2
                        Else
                            bytezähler = 0
                        End If
                    Case 2
                        If Bufferbyte = &H1 Then    'Ziel
                            bytezähler = 3
                        Else
                            bytezähler = 0
                        End If
                    Case 3
                        quelle = Bufferbyte         'Quelle
                        bytezähler = 4
                    Case 4
                        anzahlpara = Bufferbyte * 255
                        bytezähler = 5
                    Case 5
                        anzahlpara = anzahlpara + Bufferbyte
                        bytezähler = 6
                        zahler = 0
                    Case 6
                        ByteArray(zähler) = Bufferbyte
                        zähler += 1
                        Debug.Print(zähler)
                        If zähler = anzahlpara - 1 Then
                            MsgBox("hallo")
                        End If
                End Select
 
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Fehler beim Empfangen ComPort...")
                If SerialPort1.IsOpen Then .DiscardInBuffer()
            End Try
        End With
    End Sub
Der Debug.Print zeigt mir an das ich nur bis zum 3 oder 5 Parameter komme obwohl ich h33 = 21 Parameter erhalten sollte, die auch per hTerm immer ankommen.

So jetzt zu meinen Fragen
- ist der Lösungsansatz von mir für so ein Problem (kein Handshake) richtig? oder macht man das anders?
- könnt Ihr euch erklären warum ich nur bis zu 5 Parameter empfange?
- habt Ihr oder kennt Ihr ähnliche Projekte?
- seit Ihr so NETT mir zu helfen?

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

Top-Weihnachtsangebote!!
An Weinachten denken ... sich Freude schenken!
Top-Angebote - Sparen Sie bis zu 130,- EUR
 ThemaViews  AutorDatum
Serielles Protokoll ohne Handshake empfangen959Laserbrenner16.02.12 19:42
Re: Serielles Protokoll ohne Handshake empfangen602sv0001018.02.12 12:13
Re: Serielles Protokoll ohne Handshake empfangen563Laserbrenner19.02.12 13:09
Re: Serielles Protokoll ohne Handshake empfangen617ModeratorDaveS19.02.12 13:10
Re: Serielles Protokoll ohne Handshake empfangen618Manni0119.02.12 16:02
Re: Serielles Protokoll ohne Handshake empfangen533Laserbrenner20.02.12 12:18
Re: Serielles Protokoll ohne Handshake empfangen566Laserbrenner21.02.12 17:57
Re: Serielles Protokoll ohne Handshake empfangen588Preisser21.02.12 20:08
Re: Serielles Protokoll ohne Handshake empfangen560Manni0121.02.12 20:30
Re: Serielles Protokoll ohne Handshake empfangen516Laserbrenner22.02.12 14:51
Re: Serielles Protokoll ohne Handshake empfangen519Laserbrenner23.02.12 20:50
Re: Serielles Protokoll ohne Handshake empfangen496Laserbrenner23.02.12 20:52
Re: Serielles Protokoll ohne Handshake empfangen543Laserbrenner23.02.12 20:53
Re: Serielles Protokoll ohne Handshake empfangen502Laserbrenner28.02.12 07:42
Re: Serielles Protokoll ohne Handshake empfangen497Laserbrenner19.03.12 06:43
Re: Serielles Protokoll ohne Handshake empfangen484ModeratorDaveS19.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-2014 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