Hallo Peter,
habe mir noch mal Gedanken gemacht,
die Checksumme werde ich als Option verwenden,
diese kann mit übertragen werden muss aber nicht,
wird eine Nachricht mit CS übertragen muss diese natürlich auch stimmen ...
Beispiel :
#zzaakk|F1|F2|F3|....|Fx [13] .... ohne CS wie gehabt
#zzaakk|F1|F2|F3|....|Fx [30] CS [13] .... mit CS = (HEX)
als Trennzeichen habe ich mich für chr(30) "Record Separator" entschieden.
Die Checksumme könnte durch aufaddieren der Bytes bebildet werden, mit Überlauf bei 255 ... Bascom cs = checksum(string)
zusätzlich addiert man noch die Anzahl der Übertragenen Bytes auf ...
Bedeute aber das nicht alle Fehler erkannt werden ...
Beispiel
"#325501|01|01|02|02|" CS = 69 +20
"#325501|00|00|04|02|" CS = 69 +20
mann müsste eigentlich noch ein zweites Verfahren anwenden z.B. XOR
oder gleich Bascom cs = csc8(string) verwenden, beinhaltet bereits alles ...
in VB würde das dann so aussehen:
Bascom cs = csc8(string)Function Docrc8(s As String) As ByteDim j As Byte
Dim k As Byte
Dim crc8 As Byte
crc8 = 0
For m = 1 To Len(s)
x = Asc(Mid(s, m, 1))
For k = 0 To 7
j = 1 And (x Xor crc
crc8 = Fix(crc8 / 2) And &HFF
x = Fix(x / 2) And &HFF
If j <> 0 Then
crc8 = crc8 Xor &H8C
End If
Next k
Next
Docrc8 = crc8
End Function
Beispiel
"#325501|01|01|02|02|" CS = 238
"#325501|00|00|04|02|" CS = 228
Lesezeichen