Forum: PC-Programmierung VB6 MSComm - Protokol erkennen


von Philipp (Gast)


Lesenswert?

Hi,

ich muss im Rahmen eines Schulprojektes Daten, die eine AVR Platine 
sendet, mit VB6 empfangen und auswerten. Wie ich die MSComm 
Schnittstelle konfiguriere und wie ich die Daten im Event auslese weiß 
ich bereits.

Die Nachricht wird mit einer Baud von 250k über einen FT232 gesendet und 
in ASCII übertragen.
Eine Beispiel Nachricht:
"$0,3,4.5352,3.25252,7.456456,3.555532@
Die Anzahl der Parameter zwischen den Kommas ist immer gleich.

Mein Problem ist, dass ich nicht weiß, wie ich in VB6 so ein Frame 
erkennen kann. Wenn ein receive Event ausgelöst wird, sind ja idr. 
mehrere Zeichen im Buffer.

Kann mir da vielleicht jemand einen Ansatz nennen? Oder einen Beispiel 
geben, den man noch irgendwo rumfliegen hat?


Lg
Philipp

von Peter II (Gast)


Lesenswert?

Philipp schrieb:
> Kann mir da vielleicht jemand einen Ansatz nennen?

Das einfachste ist:

lese zeichen

if Zeichen = '$'  { start = 1; puffer leer machen }
if Zeichen = '@'  { auswerten(puffer); start = 0; }
if start = 1 puffer.add( zeichen )


Das ganze musst du nur noch in VB umsetzen.

von Philipp (Gast)


Lesenswert?

Hi,

viel dank. Ich habe jetzt auch endlich rausgefunden, wie ich mit Strings 
arbeite. Hier ist mein Code, ich denke das ganze sollte so passen.
Lg
Philipp
1
Private Function check_buffer(str_data As String)
2
    'Datenpuffer und Kontrollvariable ob ein Startzeichen erkannt wurde
3
    'Frame: $[Int],[Byte],[Byte],[Byte],[Float],[Float],[Float],[Float],[Float]@
4
    'Frame Nummer, Anzahl Zellen, Mosfet aktiv, Fault Pin, Sp1,Sp2,Sp3,Sp4,Strom
5
    Static str_buffer As String
6
    Static b_start As Boolean
7
    
8
    Dim l_tmp As Long
9
    
10
    'Prüfe ob ein Startzeichen erkannt wurde
11
    l_tmp = InStr(str_data, "$")
12
    If l_tmp > 0 Then
13
        'Alles ab dem Startzeichen in den Buffer schreiben
14
        str_buffer = Right$(str_data, Len(str_data) - l_tmp + 1)
15
        'Starterzeichenerkennung
16
        b_start = True
17
        'Prüfe ob auch ein Endzeichen verfügbar ist
18
        l_tmp = InStr(str_buffer, "@")
19
        If l_tmp > 0 Then
20
            'Alles hinter dem Endzeichen abschneiden
21
            str_buffer = Left$(str_buffer, l_tmp)
22
            'Buffer weiterverarbeiten
23
            parse_buffer (str_buffer)
24
            'Startzeichenerkennung auf False und Funktion verlassen
25
            b_start = False
26
            Exit Function
27
        End If
28
        'Funktion verlassen weil die Daten schon verarbeitet wurden
29
        Exit Function
30
    End If
31
    
32
    'Wenn kein Startzeichen erkannt wurde aber Startzeichen schon vorhanden ist
33
    If b_start = True Then
34
        str_buffer = str_buffer + str_data
35
        'Prüfen ob Endzeichen vorhanden ist
36
        l_tmp = InStr(str_buffer, "@")
37
        If l_tmp > 0 Then
38
            'Alles hinter dem Endzeichen abschneiden
39
            str_buffer = Left$(str_buffer, l_tmp)
40
            'Buffer weiterverarbeiten
41
            parse_buffer (str_buffer)
42
            'Startzeichenerkennung auf False und Funktion verlassen
43
            b_start = False
44
            Exit Function
45
        End If
46
    End If
47
    
48
    MsgBox str_buffer
49
    
50
End Function

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.