Transmission de donnees via port serie

seignseifer Messages postés 5 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 5 mars 2007 - 22 févr. 2007 à 06:33
seignseifer Messages postés 5 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 5 mars 2007 - 26 févr. 2007 à 01:46
Bonjour tout le monde,
j'ai fait un petit programme en  C++ sous Borland C++6.0, car je veux envoyer via le port serie, des information a un analyseur de sprectre. Le but est de pouvoir le commander a partir de l'ordi. ( et apres de recevoir les info qu'il envoie)
Par exemple, la doc de programmation de l'analyseur , me dit " Send the enter remotemode Byte #69, to the spectrum analyser to enter remote mode.
Donc j'ai tape la ligne de code suivante :
 WriteFile(handle,"69",2,&nbecrit,NULL);


Mais rien ne se passe.L'analyseur de spectre ne bouge pas d'un pouce...
AVez vous des idees ?


Mon programme en entier donne ca :
//---------------------------------------------------------------------------


#include <vcl.h>
#include <stdio.h>
#include <windows.h>
#include <windef.h>
#include <stdlib.h>


#pragma hdrstop


//---------------------------------------------------------------------------


#pragma argsused
int main()
{


 HANDLE handle;
 DCB dcb;
 COMMTIMEOUTS timeouts={0};
 BOOL fSuccess;




 unsigned long nBytesRead;
 int NbOctet;
 char c;
 BOOL bResult,PortReady;
 char *inBuffer;
 
 /* pour le remote mode */
 char buf[56];
 char buf2[56];
 DWORD nblu=0,nbecrit;


 


 /*--------------------------------------------------------------------*/
 /*   Ouverture du port de communication pour l'ANALYSEUR DE SPECTRE   */
 /*--------------------------------------------------------------------*/




 handle = CreateFile(
    "COM1",
    GENERIC_READ | GENERIC_WRITE , // acces pour lire et ecrire sur le port
    0,
    NULL,
   OPEN_EXISTING,
    0,
    NULL
    ) ;




 if(handle == INVALID_HANDLE_VALUE)
  {
   printf("Impossible d'ouvrir le port  (erreur %d)\n", GetLastError());
    return 0;




  }
  
/*-----------------------------------------------------------*/
/*                  Ajustement des parametres                */
/*-----------------------------------------------------------*/




PortReady=SetupComm(handle,5000,5000);




fSuccess = GetCommState(handle, &dcb);


 if (!fSuccess)
  {
    printf("probleme 1");


      getchar();
  }


     
dcb.BaudRate = CBR_9600 ;   /*  vitesse */
dcb.ByteSize =8 ; /* nombre de bits */
dcb.Parity=NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fNull=FALSE;
dcb.fRtsControl=RTS_CONTROL_ENABLE;
dcb.fInX=FALSE;
dcb.fOutX=FALSE;
dcb.fDtrControl=DTR_CONTROL_ENABLE;




/*-----------------------------------------------------------*/
/*     on applique les changements au port COM1              */
/*-----------------------------------------------------------*/
PortReady=SetCommState(handle,&dcb);


if(!SetCommState(handle,&dcb))
{
   printf("probleme 1");
      getchar();


}


 


 


/*-----------------------------------------------------------*/
/*                  Les timeouts                             */
/*-----------------------------------------------------------*/


timeouts.ReadIntervalTimeout=MAXDWORD;
timeouts.ReadTotalTimeoutMultiplier=0;
timeouts.ReadTotalTimeoutConstant=0;
timeouts.WriteTotalTimeoutMultiplier=0;
timeouts.WriteTotalTimeoutConstant=0;


/* On applique ces changements au port COM1*/
 SetCommTimeouts(handle,&timeouts);
if(!SetCommTimeouts(handle,&timeouts))
                {
                  printf("Impossible d'initialiser les timeouts  (erreur %d)\n", GetLastError());
                  return 0;
                }


                     


  
/*-----------------------------------------------------------*/
/*             test du remote mode                           */
/*-----------------------------------------------------------*/




 WriteFile(handle,"69",2,&nbecrit,NULL);




 getchar();
        CloseHandle(handle);
 return(fSuccess);
}
//---------------------------------------------------------------------------

3 réponses

HCJarod Messages postés 221 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 11 décembre 2008 1
23 févr. 2007 à 11:06
salut la doc te dit d'envoyé le BYTE 69 (l'octet 0x69) et pas la chaine "69".
essai plutot :  WriteFile(handle,'\x69',1,&nbecrit,NULL);

Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
a+
0
seignseifer Messages postés 5 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 5 mars 2007
26 févr. 2007 à 01:42
ok merci, ca marche . L'analyseur de spectre se met bien en mode remote. Mais maintenant, le probleme est qu'il devrait me renvoyer son numero de serie ( entre autre : MDS234598) quand je lui dit de se mettre en remote mode. Mais mon programme m'affiche n'inporte quoi.
Il doit y avoir un probleme avec mon "buf2", mais j'arrive pas a voir quoi.
Merci 
0
seignseifer Messages postés 5 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 5 mars 2007
26 févr. 2007 à 01:46
ah j'ai oublie d'ajouter la ligne dans mon programme du dessous, desole :

/*-----------------------------------------------------------*/
/*             test du remote mode                           */
/*-----------------------------------------------------------*/


aenvoyer=69;


WriteFile(handle,&aenvoyer,3,&nbecrit,NULL);


ReadFile(handle,buf2,56,&nblu,NULL);


printf("\n char2= %s \n ",buf2);
getchar();
CloseHandle(handle);
0
Rejoignez-nous