Writefile et transmition de trame en hexadécimal

Signaler
Messages postés
7
Date d'inscription
dimanche 20 janvier 2008
Statut
Membre
Dernière intervention
3 septembre 2009
-
Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011
-
bonjour,

je transforme un programme de comRS232 que j'ai eu ici sur ce site il es très bien il gère les paramètres du
port, fermeture ouverture. Moi je souhaite envoyer une série de trame
en hexa pour un appareil de mesure et en retour recevoir  les hexa. J'ai vu beaucoup de commentaire la dessus mais mon probléme c'est que je doit avoir un probléme de place memoire car le programme plante dès que j'envoie la valeur.

   DWORD NumBytes;
   unsigned char trame[] ={0x2F,0x00,0x00,0x00,0x00};
   int Tailletrame=sizeof(trame);
                                                                                             //int Tailletrame= strlen(trame); 
                                                                                             // printf("\n Taille de la chaine : %d \n", Tailletrame) ;   
   if(g_hCom != NULL)
   {
      //Emission de la Chaine
      if  (WriteFile(g_hCom,trame,sizeof(trame),&NumBytes,NULL)==0)
      {
         printf ("\n Erreur emission.\n") ;
         return FALSE ;
      }
      else
      {
         printf("\n Chaine envoyee : %x.\n",Tailletrame) ;
         return TRUE ;
      }  
   }
   else
      return FALSE ;

pouriez vous me dire comment faire pour gérer cette émission de chaine ?
merci

8 réponses

Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011

Salut,

Il plante  à quel moment ton programme ?

Cordialement,
Sébastien.
Messages postés
7
Date d'inscription
dimanche 20 janvier 2008
Statut
Membre
Dernière intervention
3 septembre 2009

j'ai trouvé l'erreur, il faut remplacer strlen par sizeof.

 char trame10[16] = {0x68,0x0A,0x0A,0x68,0x73,0x01,0x00,0xCC,0x01,0x05,0x01,0x00,0x86,0x01,0xCE,0x16};
  
   DWORD NumBytes=0;
   int TailleChaine=0;
   switch(i)
   {         
              case 10:
              TailleChaine = sizeof(trame10);
              printf("\n Taille de la chaine : %d \n", TailleChaine) ;
     
              if(g_hCom != NULL)
              {
              //Emission de la Chaine
                         if  (WriteFile(g_hCom,trame10, TailleChaine,&NumBytes,NULL)==0)
                         {
                            printf ("\n Erreur emission.\n") ;
                             return FALSE ;
                         }
                         else
                         {
                             printf("\n Chaine envoyee : %c.\n", trame10) ;
                             return TRUE ;
                         } 
     
              }
              else   return FALSE ;
            
             break;
Messages postés
3
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
3 septembre 2009

Salut,

comment fais tu pour décoder ce que tu recois en ASCII ?
Messages postés
7
Date d'inscription
dimanche 20 janvier 2008
Statut
Membre
Dernière intervention
3 septembre 2009

je reçois des hexa et pas des ascii dsl
Messages postés
3
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
3 septembre 2009

Désolé, ma question n'était pas claire.

Je recois aussi de l'héxadécimal, mais comment tu procèdes pour l'afficher par exemple.
J'ai pa pu faire fonctionner le ReadFile
Merci
Messages postés
7
Date d'inscription
dimanche 20 janvier 2008
Statut
Membre
Dernière intervention
3 septembre 2009

je ne l'ai pas affiché je mettais mes trames au fur et a mesure dans un tableau et traitait certaines infos de la trame par des calcules et j'affichai seulement ce que j'avais besoin. Si tu me laisses ton adresse mail je peux t'envoyer mon prog j'aurai enlever certaine partie qui sont propre a mon étude et ne doive pas etre utilisé mais ce prog a été fait en tres peux de tps et est plein de bug il faudrai le retaper en C++.
Messages postés
3
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
3 septembre 2009

Merci

Mon problème provient du ReadFile, car il s'arrete qd il croise un "00". Je suis sur de recevoir les trames mais je dois les consulter en entier.
Et pour le moment j'ai pas pu mettre ma trame entière dans un fichier et la visualiser.


mon mail: weilbs@hotmail.fr
Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011

Salut,

En langage C:

pour afficher un caractère ASCII a partir d'un caractère Hexadécimal,
il faut faire:
printf("Ma chaine Hexa en ASCII: %x\n",ValeurEnHexa);

pour l'écrire das un fichier:
FILE *fp;
fp = fopen(...,a);
fprintf(fp,"Ma chaine Hexa en ASCII: %x\n",ValeurEnHexa);

Cordialement,
Sébastien.