transmission de donnees via le port serie - C++ - Programmation
MarshPosté le 22-02-2007 à 06:45:34
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 ne bouge pas d'un pouce AVez vous des idees ?
Mon programme en entier donne ca : //---------------------------------------------------------------------------
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 */ /*-----------------------------------------------------------*/
/*-----------------------------------------------------------*/ /* on applique les changements au port COM1 */ /*-----------------------------------------------------------*/ PortReady=SetCommState(handle,&dcb);
/* 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 */ /*-----------------------------------------------------------*/
Marsh Posté le 22-02-2007 à 06:45:34
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 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);
}
//---------------------------------------------------------------------------