vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 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
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

 ThemaViews  AutorDatum
Serielles Protokoll ohne Handshake empfangen4.297Laserbrenner16.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.855Laserbrenner23.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