Cours N°1
Votre discussion me fait penser à l'apprenti sorcier. De plus, malgré mon acharnement à tenter de vous suivre, je n'y comprends strictement rien. Tous ces codes en série de chiffres et ces abréviations...
C'est finalement assez difficile pour le profane que je suis.
Mais je suis persévérant, je m'accroche...
Je prends un exemple, la température du moteur en °F. Si tu t'accroches bien c'est facile !
Le code, c'est :
0031 010082390000 1008 005A00050140 etf °F temp of engine
Il y a quatre suites de chiffres hexadécimaux, trois lettres, puis du blabla qui ne sert que d'information.
Les quatre suites sont nommées TXD, RXF, RXD, MTH mais peu importe.
0031, c'est une suite courte. Elle veut donc dire que scangauge sait écouter passivement
le bus CAN. Une suite longue aurait voulu dire que scangauge doit utiliser cette suite pour coder un message et attendre la réponse.
Pour comprendre ce que veut dire le
TXD 0031, il faut ajouter 8 si le dernier chiffre est plus petit que 8, et retrancher 8 s'il est plus grand. Techniquement, on utilise la fonction
"xor 0008". Cela donne donc 0039. Si on avait eu 003C, on aurait obtenu 0034. Parce que C en hexa c'est 12 en décimal.
Cette valeur 0031 xor 0008 = 0039, c'est le
PID, l'identificateur du paquet d'information qui circule sur le bus CAN.
Le
RXF 010082390000 comment sélectionner le paquet. Il faut couper cette chaîne en 6 morceaux :
1-> 0
2-> 1 00
3-> 8
4-> 2 39
5-> 0
6-> 0 00
Le morceau 2 indique que le paquet doit avoir en position 1 l'octet 00
Le morceau 4 indique que le paquet doit avoir en position 2 l'octet 39
Donc le paquet doit commencer par 0039. Logique, c'est le PID qu'on attend.
Le morceau 3 vaut 8. Il faut conserver précieusement cette valeur pour la fin, elle veut dire qu'il faut diviser la présentation par 10. Ainsi 1004 sera affiché 100.4
Pour savoir ce qui correspond au PID 0039, on va consulter une bible des PID passifs de P2, par exemple
http://xomti.com/CAN_NHW20.html#sec-1-10 et on trouve que c'est un PID issu du moteur, et qu'il contient plusieurs informations. Il contient 3 octets donc 24 bits.
Comment lire les bons bits est fourni par les 4 chiffres hexa du
RXD : 1008.
On coupe en deux. D'abord 10, puis 08. Le premier morceau, 10 c'est une valeur hexa. C'est donc 16 en décimal. Elle dit : décale-toi de 16 bits. Le second morceau, 08, est aussi hexa et dit : prends 8 bits. Pour le décalage, il faut toujours enlever 16 bits par rapport à ma bible. Donc il faut prendre 8 bits, un octet, à partir de l'octet 0. Chance, il est repéré comme "octet 0" : température moteur (int8 ) en °C".
La dernière suite,
MTH, vaut 005A00050140. Il faut la couper en 3
005A 0005 0140 pour obtenir quatre valeurs.
005A en hexa, c'est 5×16+10 = 90 en décimal
0005 en hexa, c'est 5 en décimal
0140 en hexa, c'est 1×16×16 + 4×16 + 0 = 320
Il faut utiliser ces trois nombres pour modifier la valeur. Supposons que la température soit de 38°C. Le PID 039 octet 0 vaut donc 38. Il faut multiplier par le premier morceau 38×90 = 3420, puis diviser par le deuxième : 3420/5 = 684, puis ajouter le troisième : 684 + 320 = 1004.
Voilà, c'est presque fini. On avait noté la valeur 8 dans le morceau 3 du RXF. Elle signifie qu'il faut afficher 100.4 ; avec la valeur 4 on aurait eu 10.04 ; avec la valeur 2 on aurait eu on ou off ; avec la valeur 1, de l'hexa, probablement 03EC ; avec la valeur 0, directement 1004.
100.4 °F, c'est bien l'équivalent de 38 °C, à peu près la température d'un cheval dont une légende dit qu'elle a servi à définir 100°F.
Les 3 lettres
etf, c'est pour entrer le nom du paramètre. Majuscules et minuscules comptent :
"etf", "Etf" ce n'est pas la même chose. Une tradition affecte un code en minuscules aux PID passifs.
Voilà, c'est finalement très simple. La gestion des valeurs négatives n'est pas très claire. C'est pourquoi j'attends vos expériences sur mon wtr.