Hallo, auf Empfehlung bin ich nun hier gelandet - wenn es hier keine Lösung gibt geht es nicht, hieß es ;-) Mein Problem: Ich muss eine CRC-Checksumme nach SAE J1850-Standart über 10 Datenbytes erstellen. Die Bascom-CRC-Routine kann ich nicht nehmen weil sie 8C (Dallas) als Generatorpolynom nimmt. Nach Wiki muss ich 1D als Polynom nehmen. Also hab ich mir eine Routine geschrieben bei der ich das Polynom frei einsetzen kann: [quote] Dim Ar(10) As Byte Dim Temp1 As Byte ' Temporäre Variable Dim Temp2 As Byte ' Temporäre Variable Dim X As Byte Dim Crc As Byte Dim Crcpoly As Byte Dim Bytecounter As Byte Dim Bitcounter As Byte Ar(1) = &HB2 Ar(2) = &HD0 Ar(3) = &HE0 Ar(4) = &H70 Ar(5) = &H00 Ar(6) = &H00 Ar(7) = &H00 Ar(8) = &H00 Ar(9) = &H00 Ar(10) = &H00 Crcpoly = &H1D Gosub Calc_crc Print Hex(crc) Crc = Crc8(ar(1) , 10) Print Hex(crc) End Calc_crc: Crc = 0 For Bytecounter = 1 To 10 Temp2 = Ar(bytecounter) For Bitcounter = 0 To 7 Temp1 = Temp2 Xor Crc Temp1 = 1 And Temp1 Shift Crc , Right Crc = Crc And &HFF Shift Temp2 , Right Temp2 = Temp2 And &HFF If Temp1 <> 0 Then Crc = Crc Xor Crcpoly End If Next Next Return [/quote] Die Routine funktioniert, wenn ich 8C einsetzte bekomme ich das gleiche Ergebnis wie die CRC8-Routine berechnet. Setze ich aber die 1D ein bekomme ich nicht das richtige Ergebnis nach J1850 zurück. Hat SAE J1850 noch andere Eigenheiten von denen ich nichts weiß? Habe hier noch zwei Beispiele von kompletten Datensätzen, das letzte Byte ist die CRC die zurückkommen [i]müsste[/i]. [quote] 'A2 82 50 00 00 00 00 00 00 00 4D 'B2 D0 E0 70 00 00 00 00 00 00 88 [/quote] Bitte helft mir - Google ist schon heißgelaufen und in der Suche hab ich auch nichts weiteres gefunden. Gruß Frank
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.