Ouverture d'un port serie

Signaler
Messages postés
7
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
21 août 2006
-
Messages postés
11
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
25 juillet 2006
-
bonjour tout le monde,

j aurai besoin d aide pour le projet que je suis entrain de programmer.
je souhaite ouvrir un port serie sous visual studio C++, je me suis inspirer des codes presents sur d autre parties du site mais ca ne marche pas... en fait les dialogues box indique que tout fonctionne correctement mais en fait ca serai plus comme si rien n 'etait envoyer sur le port... Quelqu'un a une idee?
merci d avance

void CVersusDlg::OnInitPort()
{
 // TODO: Add your control notification handler code here
 BOOL     fSuccess;
//DWORD    nb;int      virgule 0, cpt 0;
 
  /* Ouverture du fichier du port de communication */
   hCom = CreateFile ( "COM1",
                       GENERIC_READ | GENERIC_WRITE,
                       0,                // comm devices must be opened w/exclusive-access
                       NULL,          // no security attributes
                       OPEN_EXISTING,    // comm devices must use OPEN_EXISTING
                       0,                // not overlapped I/O
                       NULL              // hTemplate must be NULL for comm devices
                     );


   /* Erreur si problèmes d'ouverture du com */
   if ( hCom == INVALID_HANDLE_VALUE )
   {
      MessageBox("Error While Openning","Erreur",MB_OK);
   }


  
   /* Taille des buffers */
   fSuccess = SetupComm ( hCom, INPUT_BUFFER, OUTPUT_BUFFER );
   if ( !fSuccess ) 
   { 
     MessageBox("Error While init of buffers","Erreur",MB_OK);
   }




   /* Allocation de mémoire pour le dcb et initialisation à 0 */
   FillMemory ( &dcb, sizeof ( dcb), 0 );
   dcb.DCBlength = sizeof ( dcb );
  
  
   /* Test de l'état du port com */
   fSuccess = GetCommState ( hCom, &dcb );
   if ( !fSuccess ) 
   { 
     MessageBox("Unabble to receive informaions of the port","Erreur",MB_OK);
   }
   
   /* Paramètres de configuration du port de communication */
   dcb.BaudRate = CBR_4800;      // Vitesse de transmission
   dcb.ByteSize = 7;             // Taille des données reçues et transmises
   dcb.Parity   = EVENPARITY;      // Bit de parité
   dcb.StopBits = TWOSTOPBITS;    // Bit de stop
  
  
   /* Configuration du port de communication */
   fSuccess = SetCommState( hCom, &dcb );
   if ( !fSuccess ) 
   { 
     MessageBox("Unabble to Init the serial port","Erreur",MB_OK);
   }
  
  
   /* Configuration des temps de réponse du port com */
   m_commtimeouts.ReadIntervalTimeout         = 100;
   m_commtimeouts.ReadTotalTimeoutMultiplier  = 100;
   m_commtimeouts.ReadTotalTimeoutConstant    = 3000;
   m_commtimeouts.WriteTotalTimeoutMultiplier = 100;
   m_commtimeouts.WriteTotalTimeoutConstant   = 500;
  
   /* Mise en sevice des temps */
   SetCommTimeouts ( hCom, &m_commtimeouts );


 MessageBox("connexion",MB_OK);


}


CVersusDlg::~CVersusDlg()
{
CloseHandle ( hCom );
}


 


void CVersusDlg::OnInitClock()
{
 // TODO: Add your control notification handler code here
 DWORD nb;
 int i=0;


 trame = "<SET?>";
 nb = trame.GetLength ();
 char * bufferclock = (char *) malloc(sizeof(char)*(nb+2));
 bufferclock[nb] = 0x0A;
 bufferclock[nb+1] = 0x0d;
 for(i=0;i<(long)nb;i++)
  {
  bufferclock[i]=trame[i];
  }
 WriteFile ( hCom, bufferclock, nb+2, &nb, NULL );
 Sleep(1000);


 trame = "";
 nb = trame.GetLength ();
 bufferclock = (char *) malloc(sizeof(char)*(nb+2));
 bufferclock[nb] = 0x0A;
 bufferclock[nb+1] = 0x0d;
 for(i=0;i<(long)nb;i++)
  {
  bufferclock[i]=trame[i];
  }
 WriteFile ( hCom, bufferclock, nb+2, &nb, NULL );
 Sleep(1000);


/nb = 42;
ReadFile ( hCom, bufferclock, nb, &nb, NULL );




for(i=0;i<(int)nb;i++)
{
 m_edit_clock += bufferclock[i];
}
UpdateData(TRUE);




//UpdateData(FALSE);




free(bufferclock);
MessageBox("clock set",MB_OK);


}

2 réponses

Messages postés
7
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
21 août 2006

re bonjour,

je pensai y a t'il un moyen d'inclure un petit morceau de code en visual basic dans un programme en visal c++ comme c possible en C avec de l' asembleur?
( #asm
   Code en asm
   #end asm)
merci d avance
Messages postés
11
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
25 juillet 2006

Non je crois pas, le mieux c 'est de faire une dll en basic et de réutiliser en c