J'ai réalisé un petit programme qui traite des trames reçu sur un port serie pour en extraire les données importantes !
J'arrive à traiter toutes les trames une par une mais j'ai un problème sur la longueur des trames quand je veut les traiter en une fois.
Exemple des trames que je traite
Donc on voit que les trames ne font pas toutes la même taille (par exemple la première 64, la troisième 21,...) si la trame est trop longue ou trop courte par rapport à la taille que j'indique dans mon code le programme plante !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $GPRMC,123943.000,A,5022.6010,N,00304.2600,E,0.00,334.30,160112,,,A*68 $IIMWV,191.0,R,003.60,N,A $IIVHW,,,,,1.3,N,,*2b
Ma méthode pour récupérer ma trame :
Je ne trouve pas de solution à comment faire pour avoir la bonne taille de chaque, car si je n'indique pas de taille il n'y a pas de fin et si je met la mauvaise ça plante !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 bool WM918::RecupData() { bool RecupOk=false; const int TAILLETRAME=21; DWORD NbCar=0; int Compteur=0; AnsiString Trame; TrameBrute=""; LExtract->OuvrirPort(Erreur); do { Trame =""; bool BufReaded = LExtract->ReadBuffer(Trame,Erreur); NbCar = Trame.Length(); if(NbCar>0) { RecupOk=true; Compteur=Compteur+NbCar; TrameBrute=TrameBrute+Trame; } } while(Compteur<TAILLETRAME); LExtract->FermerPort(Erreur); cout<<"Trame analyse : \n"<<TrameBrute.c_str()<<endl; return RecupOk; }
Merci d'avance pour votre aide
Partager