Traiter Trame météo URGENT !!!!!

Signaler
Messages postés
8
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
19 mai 2005
-
Messages postés
59
Date d'inscription
dimanche 19 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2006
-
Bonjour à tout le monde !

Je suis sur un projet informatique sur une station météo WMR928. Mon but est de traiter chaque trames envoyer par cette station.

J'aimerais avoir des renseignements surla conversion ascii héxa ainsi que la désencapsulation de trame.
Il y a 9 trames différentes : pluie, vent, temperature,etc...
Les trames se composent différement selon lur donner mais commence toujours par l'en-tête 'FF FF' et le sixième octets ds chaque trame spécifie la trame.
Ex: si l'octet 6 = '0' c'est la trame pour le vent
si l'octet 6 = '1' c'est la trame pour le pluie,etc...

ensuite selon la trame on a des données qui sont soit de type entier (int) soit de type flottant (float)

Exemple d'une trame vent:
FF FF 00 40 53 03 00 00 56 70 BG

FFFF: en-tête
00: capteur vent
40: etat batterie capteur -> OK
353: direction du vent en °
etc...

A l'aide pour le desencapsulation des données tableau ? pointeurs ?
Merci d'avance pour votre aide ...

1 réponse

Messages postés
59
Date d'inscription
dimanche 19 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2006

#include <cstdlib>
#include


using namespace std;
#define TYPE1 0x00
#define TYPE2 0x01


int main(int argc, char *argv[])
{
//...

unsigned char test[15];
test[0]=0xFF;
test[1]=0xFF;
test[2]=0x00;
test[3]=0x40;
test[4]=0x53;
test[5]=0x03;
test[6]=0x00;
test[7]=0x00;
test[8]=0x56;
test[9]=0x70;
test[10]=0xBF;


unsigned char *test2;
//...
test2 = test;
for(;;)
{//Boucle de parcours de la chaine jusqu'à fin de chaine...a completer bien sur
if((test2[0]==0xFF)&&(test2[1]==0xFF))
{
test2 = test2+2;//passe à la suite
}
else
{
switch(test2[0])
{
case TYPE1 ://Agit en fonction du type
{
short valint;
test2++;//Positionnement sur 40
if(test2[0]==0x40)
{
//capteur OK
}
test2++;//positionnement sur 53, je dois récupérer un int...?
//ok, j'y vais
valint = (short)&test2[0];
//postionnement suivant...
test2 += 2;//Puisqu'on a traité 2 octets
//...
}
break;
case TYPE2 :
break;
default:
break;
}
}
}

system("PAUSE");
return EXIT_SUCCESS;
}

Comme ça...?

Au fait, j'aime bien les valeurs exa 0xBG......;)