deja un petit résumé du protocole defini pour transferer les données de la boiboite au soft ou a la carte memoire :
http://www.billyocte...prtcl_prft1.htm
Exemple de convertion valeur de donnée vers valeur reele
J'entend par valeur de donnée la valeur directe issue de la convertion analogique/digitale et par valeur reele la valeur explicite a afficher
representation des variables (ne sont pas toutes utilisée dans l'exemple):
_ValDataMin (long) : Valeur de donnée minimum pouvant etre renvoyé par le capteur
_ValDataMax (long) : Valeur de donnée maximum pouvant etre renvoyé par le capteur
_ValDataAmp (long) : Amplitute de valeur de donnée (= _ValDatamax - _ValDataMin)
_ValReelMin (double) : Valeur reele minimum du capteur
_ValReelMax (double) : Valeur reele maximum du capteur
_ValReelAmp (double) : Amplitude de valeur reele ( = _ValReelMax - _ValReelMax)
_ValData (long) : valeur resultante de la convertion A/D
_ValReel (double) : Valeur explicite
Exemple simple de procedure de convertion
Private Sub Calcul_ValReel()
Dim Coef As Double = CDbl(_ValDataAmp / (_ValData - _ValDataMin))
_ValReel = (_ValReelAmp / Coef) + _ValReelMin
End Sub
Si par exemple on a un capteur de position de papillon de gaz qui fourni une tension de 1 volts quand les papillons sont complement fermés et de 4 volts quand ils sont complement ouvert et que l'on veux convertir en une valeur allant de 0 a 100% d'ouverture (Rappel : la tension de référence est de 5 volts et les données sont converties sur 10 bits):
(jutilise l'arrondi par defaut pour stocker le resultat des divisions dans les long)
_ValDataMin = (1023/5 volts) * 1 volt = 204
_ValDataMax = : (1023/5 volts) * 4 volt = 818
_ValDataAmp (long) : 818 - 204 = 614
_ValReelMin (double) : 0 (%)
_ValReelMax (double) : 100 (%)
_ValReelAmp (double) : 100 - 0 = 100
Si par exemple le capteur renvois une tension de 2,9 volts, les valeurs converties seront donc les suivantes :
_ValData = (1023/5 volts) * 2.9 volt = 593
Valeur de la variable 'coef' de la procedure = 614 / ( 593 - 204) = 1,57840616966581
_Valreel = (100/1,57840616966581) + 0 = 63% d'ouverture des papillons
Bien que la valeur reele retournée soit un double, on fait la part des chose en s'affranchissant des decimales suivant les capteurs. Dans le cas de ces papillons de gaz, si on est a 50% d'ouverture et que l'on a arrondi par defaut pour les long, le resultat mathématique sera de 50,1628664495114 %
Exemple d'extraction 'bit mapping' (voir definition du protocole PerfTracker)
Si on prend les par exemple les caracteres 9,10,11,12 d'un paquet de données on va en extraire les valeurs 10 bits des capteurs analogique 4 et 5 et la valeur 8 bits de la variable d'etat
et en supposant qu'ils aient respectivement les valeurs suivante :
asc(Char 9): 2
asc(Char 10) : 123
asc(Char 11) : 161
asc(Chat 12) : 25
On commence par former la variable d'etat . Elle est contenue dans les 4 bits superieur de char 9 qui seront les 4 bit de poids fort et les 4 bit superieur de char 11 qui seront les 4 bit de poids faible :
asc(char 9) toBin = 00000010
asc(char 11)toBin = 10100001
La valeur de l'octet d'etat recomposée est donc : 00001010 = 10
La valeur du capteur Analogique 4 est contenu dans les 2 bits low de (char 9) pour les bits superieurs et des 8 bit de char 10 pour les bits inferieurs
asc(char 9) toBin = 00000010
asc(char 10) toBin = 01111011
ce qui fait : 1001111011 = 635
On realise la meme operation pour recuper la valeur du capteur Analogique 5 qui est stockée dans les 2 bit low de char 11 et dans les 8 bit de char 12 :
asc(char 11)toBin = 10100001
asc(char 12) toBin = 00011001
ce qui donne : 0100011001 = 281
Voici le code qui me fait l'extraction d'un datagramme brut entrant (en VB6).
Je passe en parametre mon datagramme composé de l'entete (facultative) et des 16 octets de paquet contenant les données et en sortie j'ai une liste de 11 valeurs en Hexa que je stock dans un tableau,un controle,un objet ou un fichier suivant les besoins.
Vala, Simple mais bigrement efficace
Z'inquietez pas, c'est juste pour faire remonter le post pour ne pas avoir a le chercher vu que je reecrit le protocole dans d'autres langage.
Quand je vois la date, ca me fait bizard ... J'ai ecrit le protocole PerfTracker il y a déja 3 ans

