Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Communication port COM [ Windows / Réseau & Internet ] (nicolebarge23)

mardi 6 mai 2008 à 11:40:51 | Communication port COM

nicolebarge23

Bonjour,
Après de nombreuses recherches sur le net, j'ai réussis à lire des données provenant d'un émetteur analogique par l'intermédiaire du port COM (RS232).
Cet émetteur envoie 14 trames de 8bits. Je suis capable de les récupérer et de les lire. J'arrive ainsi à faire la conversion en hexa des octets reçus.

Mon soucis est que maintenant je voudrais envoyer à mon tour, par l'intermédiaire du port COM, 14 trames de 8 bits à un récepteur. Je suis quasiment certain que le buffer utilisé dans la fonction writefile(...) contient les données désirées.
Par contre lorsque je teste ma fonction en reliant 2 PCs par le port COM, je ne reçois pas les mêmes données envoyées.
Les données reçues ont changé. Je suis certain de ma fonction de récupération des trames.

Je voudrais savoir s'il est possible que ce soit ma liaison qui fasse que des données ont changés.

Ci-joint ma fonction de récupération des données avec conversion en hexa. ainsi que ma fonction d'envoi de donnnées !!


#include <iostream.h>  // pour CIN & COUT
#include <iomanip.h>  // pour le format de ces flux
#include <windows.h>  // pour utiliser les API32
#include <stdio.h>   // pour exploiter les Entrées/Sorties standards
#include <conio.h>   // pour exploiter les Entrées/Sorties standards
#include <sstream>
#define aaxan 0x85 //Symbole du "à" en code page 437
#define aigu 0x82 //Symbole du "é" en code page 437
#define grave 0x8A //Symbole du "è" en code page 437
#define cdie 0x87 //Symbole du "ç" en code page 437

//********************************************************************
// Test des API32 de gestion du port série
//********************************************************************
void receptionTrame(void)
{
 int NbDonnees;
 int Vitesse;
 unsigned char Parite;
 char NomPort[4+1];
 int NoPort  ;
 BOOL retour;
 COMSTAT EtatCom;
 DWORD CodeErreur ;
 //NbOctetsEcrits ;
 DWORD NbOctetsALire=NULL;
 DWORD NbOctetsLus,i ;
 //LPCVOID buffer;
 int Nbstop;
 BYTE BufferOut[10]={1,5,9,11,18,14,55,127,19,24};
 BYTE *BufferIn;
 HANDLE hCom;  // le port est référencé avec un identifiant de type HANDLE

 printf("\nEntrer le num%cro du port s%crie ",aigu,aigu);
 scanf("%d",&NoPort);


 //----------- Ouverture du port ------------------
 sprintf(NomPort,"COM%d",NoPort);

 hCom=CreateFile(NomPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING ,0,NULL);
 if (hCom == INVALID_HANDLE_VALUE)
 {
  // Handle the error.
       printf ("CreateFile failed with error %d.\n", GetLastError());
       return ;
 }

 //------------Config du port----------------------


 Vitesse=9600;
 NbDonnees=8;
 Parite=NOPARITY;
 Nbstop = 1 ;

 //-------------- Initialisation -----------------------------

 DCB dcb;             //Une structure "Device-Control Block" definit
               //l'initialisation
              // d'un périphérique de communications.
 retour = GetCommState(hCom,&dcb);           // Lecture des paramétres physiques.
 if (retour == 0)
 {
      // Handle the error.
      printf ("GetCommState failed with error %d.\n", GetLastError());
      return ;
 }    // Si rien, alors pas de  périphérique.
 else         // Si présence port, alors définir :
 {
  dcb.ByteSize=NbDonnees;        // -Nombre de bits de Données
  dcb.StopBits=Nbstop;       // -Nombre de bit(s) de Stop
  dcb.Parity=Parite;       // -Type de parité
  dcb.BaudRate=Vitesse;     // -Vitesse de transfert des données
  retour = SetCommState(hCom,&dcb); // Ecriture de ces paramètres.
 }

 


 getch();

 

 retour = ClearCommError(hCom,&CodeErreur,&EtatCom);
 if (!retour)
 {
      // Handle the error.
      printf ("ClearCommError failed with error %d.\n", GetLastError());
      return ;
 }    // Si rien, alors pas de  périphérique.
 else         // Si présence port, alors définir :
 {
  NbOctetsALire = EtatCom.cbInQue;
 }

 

 //--------- Lecture de tous les octets reçus et stockage dans le tableau BufferIn---
 BufferIn=new BYTE[NbOctetsALire];
 // Allocation dynamique
 retour=ReadFile(hCom , BufferIn , NbOctetsALire , &NbOctetsLus , NULL);
 if (!retour)
 {
        printf("Could not read to file (error %d)\n", GetLastError());
        return;
    }
  

 cout<<"NbOctetsLus : "<<NbOctetsLus<<endl;
 cout<<"NbOctetsALire : "<<NbOctetsALire<<endl;
 cout<<"BufferIn : "<<BufferIn<<endl;
 cout<<"BufferIn : "<<(DWORD)BufferIn<<endl;


 //--------- Affichage des octets reçus ---------
 int k=1;
 for (i=0 ; i<NbOctetsLus;i++)   //boucle sur le nombre d'octetsreçus
 {
  
  BYTE octet1;      //octet numéro 1 de la trame
  BYTE octet2;      //octet numéro 2 de la trame
  BYTE tableau[sizeof(BYTE)];

  int binaire = (DWORD)BufferIn[i]/16;

  
  //--------- en fonction de binaire on crée le chiffre hexa de l'octet 1
  if ( binaire == 0 ) octet1= '0';
  else if ( binaire == 1)  octet1 = '1';
  else if ( binaire == 2 ) octet1 = '2';
  else if ( binaire == 3 ) octet1 = '3';
  else if ( binaire == 4 ) octet1 = '4';
  else if ( binaire == 5 ) octet1 = '5';
  else if ( binaire == 6 ) octet1 = '6';
  else if ( binaire == 7 ) octet1 = '7';
  else if ( binaire == 8 ) octet1 = '8';
  else if ( binaire == 9 ) octet1 = '9';
  else if ( binaire == 10 ) octet1 = 'A';
  else if ( binaire == 11 ) octet1 = 'B';
  else if ( binaire == 12 ) octet1 = 'C';
  else if ( binaire == 13 ) octet1 = 'D';
  else if ( binaire == 14 ) octet1 = 'E';
  else if ( binaire == 15 ) octet1 = 'F';


  //-------- en fonction de binaire on crée le chiffre hexa de l'octet 2
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 0 ) octet2 = '0';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 1 ) octet2 = '1';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 2 ) octet2 = '2';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 3 ) octet2 = '3';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 4 ) octet2 = '4';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 5 ) octet2 = '5';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 6 ) octet2 = '6';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 7 ) octet2 = '7';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 8 ) octet2 = '8';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 9 ) octet2 = '9';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 10 ) octet2 = 'A';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 11 ) octet2 = 'B';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 12 ) octet2 = 'C';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 13 ) octet2 = 'D';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 14 ) octet2 = 'E';
  if ( ( (DWORD)BufferIn[i] - 16*binaire) == 15 ) octet2 = 'F';

 


  tableau[i,1]=octet1;
  tableau[i,2]=octet2;

  if (i == 0 ) cout<<"\t\t\ttrame : 1"<<endl;
  if ( i == 14*k )
  {
   k++;
   cout<<"\t\t\ttrame : "<<k<<endl;
  }

  cout<<"buffer["<<i<<"]"<<" : "<<(DWORD)BufferIn[i]<<endl;
  cout<<sizeof(BufferIn[i])<<endl;


  if (i==14*k-14) cout<<"SYNC_BYTE1 \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-13) cout<<"SYNC_BYTE0 \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-12) cout<<"H_SEQ LENGTH \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-11) cout<<"ORG \t\t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-10) cout<<"DATA_BYTE3 \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-9) cout<<"DATA_BYTE2 \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-8) cout<<"DATA_BYTE1 \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-7) cout<<"DATA_BYTE0 \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-6) cout<<"ID_BYTE3 \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-5) cout<<"ID_BYTE2 \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-4) cout<<"ID_BYTE1 \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-3) cout<<"ID_BYTE0 \t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-2) cout<<"STATUS \t\t: "<<tableau[i,1]<<tableau[i,2]<<endl;
  if (i==14*k-1) cout<<"CHEKSUM \t: "<<tableau[i,1]<<tableau[i,2]<<endl<<endl;

  cout<<""<<endl;

 }
 cout<<""<<endl;
 cout<<""<<endl;
 printf("\n\n");
 system("pause");
// delete [] buffer;
 delete [] BufferIn;     // libération mémoire
 CloseHandle(hCom);    // Fermeture du Handle hCom.
 system("pause");

 
}

FONCTION D'EMISSION DE DONNEES


#include <windows.h>
#include <tchar.h>
#include <iostream.h>  // pour CIN & COUT
#include <iomanip.h>  // pour le format de ces flux
#include <windows.h>  // pour utiliser les API32
#include <stdio.h>   // pour exploiter les Entrées/Sorties standards
#include <conio.h>   // pour exploiter les Entrées/Sorties standards
#include <sstream>
#include <string>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

EmissionTrame::EmissionTrame()
{

}

EmissionTrame::~EmissionTrame()
{

}

HANDLE hFile;

void emissionTrame()
{
 LPCVOID TEST_STR;
    DWORD dwResult;
 TCHAR PORT[5];
 char PORTNOM[5];
 DCB dcb;

 cout<<"Entrez le nom du port desire :"<<endl;
 scanf("%s",&PORTNOM);
 strcpy(PORT,PORTNOM);

 TEST_STR = "1253";

    hFile = CreateFile(PORT,                // name of the write
                       GENERIC_WRITE,          // open for writing
                       0,                      // do not share
                       NULL,                   // default security
                       CREATE_ALWAYS,          // overwrite existing
                       FILE_ATTRIBUTE_NORMAL,  // normal file
                       NULL);                  // no attr. template

 

   if (hFile == INVALID_HANDLE_VALUE)
   {
       // Handle the error.
       printf ("CreateFile failed with error %d.\n", GetLastError());
       return ;
   }

   // Build on the current configuration, and skip setting the size
   // of the input and output buffers with SetupComm.

   dcb.DCBlength = sizeof(DCB);

   if (!GetCommState(hFile, &dcb))
   {
      // Handle the error.
      printf ("GetCommState failed with error %d.\n", GetLastError());
      return ;
   }

   // Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.

   dcb.BaudRate = 9600;     // set the baud rate
   dcb.ByteSize = 8;             // data size, xmit, and rcv
   dcb.Parity = NOPARITY;        // no parity bit
   dcb.StopBits = ONESTOPBIT;    // one stop bit


   if (!SetCommState(hFile, &dcb))
   {
      // Handle the error.
      printf ("SetCommState failed with error %d.\n", GetLastError());
      return ;
   }

   _tprintf (TEXT("Serial port %s successfully configured.\n"), PORT);

 

 

 

    //création de la trame à envoyer
 DWORD trame[sizeof(DWORD)];

 int binaire0;
 int binaire1;
 
 DWORD octet1;
 DWORD octet2;


 char MESSAGE[sizeof(char)];


//Génération du tableau
 for (int i=0;i<28
  ;i++)
 {
  cout<<"trame [ "<<i<<" ] :"<<flush;
  scanf("%s",&MESSAGE);

  if ( MESSAGE[0]=='F' ) binaire0=15;
  if ( MESSAGE[0]=='E' ) binaire0=14;
  if ( MESSAGE[0]=='D' ) binaire0=13;
  if ( MESSAGE[0]=='C' ) binaire0=12;
  if ( MESSAGE[0]=='B' ) binaire0=11;
  if ( MESSAGE[0]=='A' ) binaire0=10;
  if ( MESSAGE[0]=='9' ) binaire0=9;
  if ( MESSAGE[0]=='8' ) binaire0=8;
  if ( MESSAGE[0]=='7' ) binaire0=7;
  if ( MESSAGE[0]=='6' ) binaire0=6;
  if ( MESSAGE[0]=='5' ) binaire0=5;
  if ( MESSAGE[0]=='4' ) binaire0=4;
  if ( MESSAGE[0]=='3' ) binaire0=3;
  if ( MESSAGE[0]=='2' ) binaire0=2;
  if ( MESSAGE[0]=='1' ) binaire0=1;
  if ( MESSAGE[0]=='0' ) binaire0=0;

  if ( MESSAGE[1]=='F' ) binaire1=15;
  if ( MESSAGE[1]=='E' ) binaire1=14;
  if ( MESSAGE[1]=='D' ) binaire1=13;
  if ( MESSAGE[1]=='C' ) binaire1=12;
  if ( MESSAGE[1]=='B' ) binaire1=11;
  if ( MESSAGE[1]=='A' ) binaire1=10;
  if ( MESSAGE[1]=='9' ) binaire1=9;
  if ( MESSAGE[1]=='8' ) binaire1=8;
  if ( MESSAGE[1]=='7' ) binaire1=7;
  if ( MESSAGE[1]=='6' ) binaire1=6;
  if ( MESSAGE[1]=='5' ) binaire1=5;
  if ( MESSAGE[1]=='4' ) binaire1=4;
  if ( MESSAGE[1]=='3' ) binaire1=3;
  if ( MESSAGE[1]=='2' ) binaire1=2;
  if ( MESSAGE[1]=='1' ) binaire1=1;
  if ( MESSAGE[1]=='0' ) binaire1=0;

  octet1=binaire0*16;
  octet2=binaire1;
  
  trame[i] = octet1+octet2;

 }

 BYTE *BufferOut;
 BufferOut = new  BYTE[28];
 for (i=0;i<28;i++)
 {
  BufferOut[i] = trame[i];
 };
 getch();
 cout<<"BufferOut final :"<<BufferOut<<endl;
 cout<<"BufferOut final :"<<(DWORD)BufferOut<<endl;


 DWORD NbOctetsaEcrire;

 NbOctetsaEcrire = i;

 cout<<"nb octets a ecrire :"<<NbOctetsaEcrire<<endl;

 getch();
    if(!WriteFile (hFile, &BufferOut, NbOctetsaEcrire, &dwResult, NULL))
    {
        printf("Could not write to file (error %d)\n", GetLastError());
        return;
    }
 getch();

 cout<<"Wrote to "<<!PORTNOM<<" successfully"<<endl;
 cout<<"nombre de bits ecrits :"<<dwResult<<endl;

 

 


    CloseHandle(hFile);
}

 


mardi 6 mai 2008 à 15:55:56 | Re : Communication port COM

DeAtHCrAsH

Salut,
Je ne pense pas que ton problème soit liés à ta liaison. En RS232 la com ne se fait que sur 1broche donc quasi aucune chance pour que les données soient altérées.
Pour en etre sure recupere un des codes sources de ymca2003 sur ce site et testes ta com entre tes deux PC.

Shell

mardi 6 mai 2008 à 15:55:57 | Re : Communication port COM

DeAtHCrAsH

Salut,
Je ne pense pas que ton problème soit liés à ta liaison. En RS232 la com ne se fait que sur 1broche donc quasi aucune chance pour que les données soient altérées.
Pour en etre sure recupere un des codes sources de ymca2003 sur ce site et testes ta com entre tes deux PC.

Shell



Cette discussion est classé dans : message, binaire, cout, dword, if


Répondre à ce message

Sujets en rapport avec ce message

besoin d'eclaircissement sur les classes et pointeurs [ par oliarn ] bonjour,je fais un programme en c++ pour la fac e tj'aimerai savoir comment manipuler mes classes dans mon programmes.voila une fonction par exemple m problème de IF [ par ichigoZ710 ] Bonjour,je voulais avoir votre avis sur une partie de mon code qui fait des choses vraiment bizarre...disons que la condition d'un if ne se fait pas . multicast en c sous windows [ par tenrod ] Bonsoir a tous,voila j'ai un petit (voire un gros) pb avec le développement d'une application me permettant de faire du multicast en c sous windows.J' Base de registre [ par tribord10 ] Bonjour, j'ai vu se code sur le site:#include #include "resource.h" HWND hE Segmentation fault sur un tableau de char [ par MaxSoldier ] Bonsoir tout le monde !Je me suis mis au C/C++ sous linux il y a quelques jours et j'ai de nombreuses erreur de dépassement de tampon (segmentation fa Grave problème de lecture d'un tableau string [ par alincoln54 ] Bonjour à tous,Le code suivant ne fonctionne pas (BCB C++) :#include #include #include #include #include < triangularisat [ par desco182 ] Salut a quiconque  sur le forum qui aimerait porter des corrections svp#include#include#include#include#define max 10float A[max][max], B[max], Problème sur un programme en cours [ par LyoNell ] Bonjour tout le monde !! Je suis en Terminal S-Si ET notre professeur d'éléctronique nous à donnez un travail à faire pendant le week-end. Il a pris u affichage contenue de MessageBox [ par bonapart002 ] Bonsoir :le code de dll suivant permet de détecter le le création ,réduction ou un agrandissement d'une fenêtre :----------------------------#include arbre binaire [ par marouaton ] bonjourSVP, je veux avoir des exercices concernants le parcours des arbres binaires


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 4,352 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.