akuvido
Messages postés13Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention18 avril 2006
-
12 avril 2006 à 11:26
akuvido
Messages postés13Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention18 avril 2006
-
18 avril 2006 à 14:52
Bonjour,
J'essaie de le resoudre un probleme depuis deja 2 semaines sans resultats ...
Je dois pour un projet, Créer une commnication seriel entre un pc et un automate satchwell.
J'ai reussi apres longue recherche à comprendre les differents octets du message à recréer.
Malgré tout ca, j'ai du soutirer quelque information pour comprendre 3 octets dont je ne comprennais pas la logique.
On ma alors dit que le message contennant un CRC- 8 et un CRC 16.
Le message se decompose ainsi :
Octet 0 à Octet 13 : Information propre au protocole (header)
Octet 14 : CRC - 8 portant sur les octets de 0 à 13
Octet 15 à X( longeur non constante) : Information propre au protcole (data)
Octet (N-1) : CRC16 (poids faible) portant sur les octects 16 à (N-2)
Octet (N) : CRC (poids fort)
Le polynome du CRC 8 est : X^8 + X^7 + 1
Le polynome du CRC 16 est : X^16 + X^12 +X^5 + 1
On m'as egalement fourni des petites routines en mais pas dans le language que je comprends :
public function calcHeaderCRC (datavalue as integer, crcvalue as integer) as integer
dim crc as integer
crc = crcvalue xor datavalue
crc = crc xor (crc *2) xor (crc*4) xor (crc*8) xor (crc*16) xor (crc*32) xor (crc*64) xor (crc *128)
calcHeaderCRC = (crc and &HFE) Xor ((crc * 256) And 1)
end function
Merci de m'aider
Et si pour ceux qui ont quelque chose pour tester le C pouvais voir si ca donne vraiment le bon crc avec la trame d'origine ..
akuvido
Messages postés13Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention18 avril 2006 14 avril 2006 à 19:18
Je refléchissant a ce que vpoyo m'as dit :
"regarde plutot ta trame comme une chaine de caractère et tu fais le traitement caractère par caractère"
Je vois pas ce que traité partie par partie ferait.
L'overflow disparaitrais surement mais le but de ce calcul est de combiner toute les infomations pour trouver le Crc et je ne pense pas que ce soit la bonne solution de le faire comme tu le propose.
Merci de m'aider.
Peut etre qu'une erreure s'est glissé dans la converssion du language C en basic, car casy n'a pas le probleme d'overflow en utilisant la version C.
Je suis vraiment dessesperé et le temps commence a etre compté.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 14 avril 2006 à 19:28
Non akuvido, je n'ai pas le problème d'overflow, car je traite caractère par caractère en faisant une boucle et donnant en paramètre pour le caractère suivant, le calcul du crc sur le caractère précédent. Tout comme l'a dit vpoyo (j'avoue que ça m'a sembler tellement logique que je ne me suis même pas posé la question).
C'est ce que suggère les fonctions C qui t'ont été passées puisque'elles prenne un crc en paramètre.
Le problème c'est qu'en faisant le même code sous .NET et sous VS6, je trouve 2 résultats totalement différents. 3 si je tient compte du changement de formet des types de variables en .NET.
Aucun des résultats ne correspondent aux crc de tes trames.
En résumé, je suis pas capable de dire si tes algos sont corrects (le polynomme n'est peut-etre pas le bon), et je n'ai toujours pas trouver de solutions à mes propres problèmes.
cs_vpoyo
Messages postés363Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention20 avril 20106 14 avril 2006 à 19:28
l'algo je le connais pas !
par contre tu gères ca comme une "chaine de caractère" ou un tableau de
Byte (ou octet) et tu calcul toujours par rapport avec résultat courant
premier octet tu as une valeur, ensuite tu fais le second par rapport
au premier, puis le troisième par rapport au résultat des deux
précédents, et ainsi de suite jusqu'à la fin.
akuvido
Messages postés13Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention18 avril 2006 18 avril 2006 à 10:12
Ca serai sympa que de regarder mon code pour voir si ca vous semble coherant comme approche car je suis vraiment mal barrer et ca va bientot faire un mois que je suis bloqué ladessus.