Problème d'ouverture de port COM

Problème d'ouverture de port COM - C++ - Programmation

Marsh Posté le 06-11-2013 à 10:51:29    

Bonjour,  
 
j'espère que mon message et bien au bon endroit sinon je fais confiance aux modérateurs pour me rediriger.  
 
Voila mon problème ne semble pas être de programmation mais plus une erreur de windows ou matériel, mais pour être sur je poste mon CODE quand même.  
 
SUr une fonction Windows mon code plante. Je tente d'ouvrir une connection avec un certain nombre de ports COM ( pour être exacte avec 5 port COM)  
 
Or de manière aléatoire mon Code boucle sur une certaine ligne.  
 
Voici ma façon d'initialisé ma convection aux ports COM :  
 

Code :
  1. bool clPORT_COM::Init_LectureEcriture(void)
  2. {
  3. DCB dcb = {0};
  4. BOOL OK;
  5.     hPortCom = CreateFile(Nom_Port.c_str(),
  6.                            GENERIC_WRITE | GENERIC_READ,
  7.                            0,
  8.                            NULL,
  9.                            OPEN_EXISTING,
  10.                            0,
  11.                            NULL);
  12.         if(hPortCom != INVALID_HANDLE_VALUE)
  13.         {
  14.             OK = GetCommState(hPortCom, &dcb);
  15.             if(OK)
  16.             {
  17.                 dcb.BaudRate = Vitesse;
  18.                 dcb.ByteSize = NbDataBit;
  19.                 dcb.Parity = NOPARITY;
  20.                 dcb.StopBits = ONESTOPBIT;
  21.         OK = SetCommState(hPortCom, &dcb);
  22.                         if (OK)
  23.                         {
  24.                                 COMMTIMEOUTS timeout;
  25.                                 timeout.ReadIntervalTimeout = MAXDWORD;
  26.                                 timeout.ReadTotalTimeoutMultiplier = MAXDWORD;
  27.                                 timeout.ReadTotalTimeoutConstant = 300;
  28.                                 timeout.WriteTotalTimeoutConstant = 300;
  29.                                 timeout.WriteTotalTimeoutMultiplier =  MAXDWORD;
  30.                                 OK = SetCommTimeouts(hPortCom, &timeout);
  31.                         }
  32.             }
  33.         }
  34.         else
  35.         {
  36.             OK = false;
  37.         }
  38.        return OK;
  39. }


et voici comment j'appelle ma fonction :  
 
 

Code :
  1. bool CModule::Init()
  2. {
  3.         if (com != NULL)
  4.         {
  5.                 com->Fermer_Port();
  6.                 delete com;
  7.         }
  8.         lock = new TCriticalSection();
  9.         com = new clPORT_COM(numPortCom, vitesse);
  10.         bool connectionOuverte = com->Init_LectureEcriture();
  11.         if (connectionOuverte)
  12.         {
  13.                 AnsiString msg = "C0\r\n";
  14.                 Send( msg);
  15.                 Sleep(100);
  16.                 SetSoftIsReady(true);
  17.         }
  18.         else
  19.         {
  20.                 AFermer = true;
  21.         }
  22.         moduleConnected = connectionOuverte;
  23.         return connectionOuverte;
  24. }


Or comme je vous l'ai déjà dis mon programme plante ( c'est a dire reste coincé dans la fonction ) a la ligne :  
 
 

Code :
  1. OK = SetCommState(hPortCom, &dcb);


de ma fonction clPORT_COM::Init_LectureEcriture(void)
 
Or cette fonction est une fonction Windows et comme je ne sort pas de la fonction je ne peut pas faire le fameux : GetLastError() me permettant de récupérer la cause de l'erreur.  
 
Quel sont les causes qui pourrait faire planté cette fonction?  
 
J'ai tenté de communiquer avec ces port COM avec un hyperterminal ( TERMITE) celui ci galère a ouvrir le port COM, il arrive même que cela plante.  
 
Mais une fois arrivé a les ouvrir avec l'hyperterminal je n'ai aucun problème a les ouvrir avec mon logiciel.
 
 
EDIT : Je suis sous un PC Win 7 64 bits des fois que ça soit utile :p

Reply

Marsh Posté le 06-11-2013 à 10:51:29   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed