Calcul CRC

cs_got Messages postés 139 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 15 mars 2016 - 18 févr. 2004 à 09:25
cs_got Messages postés 139 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 15 mars 2016 - 18 févr. 2004 à 13:59
Voila je doit calculer un crc selon la methode suivnat d'apres la doc de mon appareil.. :

Calculate the accumulated sum of the bytes in the vector.
•Get the value of the sum modulo 65536 (10000 hex)
•The CRC is the 2 complement of the result.
o If lSum is a variable holding the accumulated sum, then
o CRC = (Not (lSum Mod &H10000)) + 1 (VB syntax).

donc en gros faire la somme octet à octet des valeurs de ma trame puis en faire le modulo ...

seulement avec tos les exemple fourni dans la meme doc pas moyen de retomber sur mes pattes... si quelqu'un pouvai m'aider ça serait sympa je me tire le cheveu (deja que j'en ai pas bcp ;-)

les exemple fourni... :

06 00 01 FF 01 00 02 00 03 00 04 00 05 00 06 00 03 00
03 FF 06 00 07 00 08 00
donne un CRC de CB FD

00 CE EB CE EB CE EB donne un crc de 95 FA

ou encore

2F 5F 4F 50 4C 43 00 FE 01 01 00 00 4D 00
00 00 00 00 01 00 06 00

donne FO FC

Merci bcp... :-)
A voir également:

5 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
18 févr. 2004 à 09:54
Je viens de te pondre une petite fonction qui semble fonctionner :
Private Function CalcCRC(Valeur As String) As String
Dim L As String, S As Long, i As Long, B As Byte, CRC As Long, R As String
    
    S = 0
    Valeur = Replace$(Valeur, " ", "")
    For i = 1 To Len(Valeur) Step 2
        B = CByte("&h" & Mid$(Valeur, i, 2))
        S = S + B
    Next
    CRC = (Not (S Mod &H10000)) + 1
    CalcCRC = Right$(Hex(CRC), 2) & Mid$(Hex(CRC), 5, 2)
End Function


L'appel suivant ...
CalcCRC("2F5F4F504C4300FE010100004D000000000001000600")

... retourne F0FC.
Alors pour qui, pourquoi !!! La méthode de calcul retourne :
FF FF FC F0
Alors je reprend que les 2 derniers octets que j'inverse (comme cela : CalcCRC = Right$(Hex(CRC), 2) & Mid$(Hex(CRC), 5, 2) et c'est bon)

Ma fonction marche avec tout les exemple que tu as fournis.
Christophe R.
0
cs_got Messages postés 139 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 15 mars 2016
18 févr. 2004 à 10:13
Merci tre bcp christophe
Mais :-p....
ça marche pas avec tous les exemple que j'ai et entre autre

00 CE EB CE EB CE EB donne un crc de 95 FA
qui donne D5FA avec ta methode...
alors soit le pdf d'exemple comporte des erreurs soit y a un pb parce que ça amrche qd meme avec la moité des exemples que j'ai...!

Merci
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
18 févr. 2004 à 10:34
Après vérification à la main (avec la calculatrice Windows), le CRC est bien D5 FA et non 95 FA

Christophe R.
0
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
18 févr. 2004 à 10:58
Tu n'as que ca comme explications ?
Pourrais-tu donner d'autres exemples qui ne marchent pas ?

Mindiell Software
mindiell@free.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_got Messages postés 139 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 15 mars 2016
18 févr. 2004 à 13:59
00 01 FF 01 00 devrait donnée FEFE et donne FFFE

autres exemple non testé :
75 00 D2 04 D7 11 17 131
donnne 85 FD

06 00 83 FF 0D 00
donne :
6B FE

71 00 72 00 73 00 74 00 75 00 76 00
4B FD

2F 5F 4F 50 4C 43 00 FE 01 01 00 00 4D 00 00 00 00 00 03 00
22 00
donne
D2 FC

Merci
0
Rejoignez-nous