Communication avec port COM - C++ - Programmation
Marsh Posté le 27-02-2007 à 09:42:23
Essaye de dévalider le controle de flux
RTS_CONTROL_DISABLE et DTR_CONTROL_DISABLE j'imagine
Marsh Posté le 28-02-2007 à 01:39:16
merci de ta reponse.
Je viens d'essayer mais ca ne marche pas, je ne recoit toujours rien...
Marsh Posté le 28-02-2007 à 09:36:36
Tu ne te sers pas de buildcommdcb ... à tester pour configurer proprement ta structure dcb.
Marsh Posté le 28-02-2007 à 09:37:06
un vieux bout de code:
Code :
|
Marsh Posté le 27-02-2007 à 03:47:01
Bonjour tout le monde,
aidez moi s'il vous plait et si vous avez le temps, je vais craquer.
Alorss voila, je veux communiquer avec un analyseur de spectre branche sur le COM1.
J'ai reussi a taper un petit programme. J'arrive a lui envoyer des informations ( par exemple a changer la langue de l'analyseur en envoyant les bits 16 puis 3)
Jusque la tout va bien. Mais le probleme est que je n'arrive pas du tout a lire les infos qu'il m'envoie.
Quand il faut qu'il m'envoie des series de BYTE, j'ai rien du tout.
Je vous donne un exemple :
Pour avoir l'etat de sa batterie, je dois envoyer le BYTE 78, puis le BYTE 3. il devrait me renvoyer 5 BYTE normalement, mais j'ai rien .
Voila mon programme je code sous Borland C++6.0)
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <windows.h>
#include <windef.h>
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main()
{
HANDLE handle;
DCB dcb;
COMMTIMEOUTS timeouts={0};
BOOL fSuccess;
unsigned long nBytesRead;
int NbOctet;
char c;
int i;
BOOL bResult,PortReady;
char buf2[1024];
DWORD nblu,nbecrit;
int aenvoyer2,aenvoyer3;
/*--------------------------------------------------------------------*/
/* 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;
}
PortReady=SetupComm(handle,5000,5000);
fSuccess = GetCommState(handle, &dcb);
if (!fSuccess)
{
printf("probleme 1" );
getchar();
}
dcb.BaudRate = CBR_9600 ;
dcb.ByteSize =8 ;
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;
PortReady=SetCommState(handle,&dcb);
if(!SetCommState(handle,&dcb))
{
printf("probleme 1" );
getchar();
}
/*-----------------------------------------------------------*/
/* Les timeouts */
/*-----------------------------------------------------------*/
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutMultiplier=8;
timeouts.ReadTotalTimeoutConstant=8;
timeouts.WriteTotalTimeoutMultiplier=8;
timeouts.WriteTotalTimeoutConstant=8;
SetCommTimeouts(handle,&timeouts);
if(!SetCommTimeouts(handle,&timeouts))
{
printf("Impossible d'initialiser les timeouts (erreur %d)\n", GetLastError());
return 0;
}
/*-----------------------------------------------------------*/
/* envoi de donnees et reception */
/*-----------------------------------------------------------*/
aenvoyer2=78;
aenvoyer3=3;
WriteFile(handle,&aenvoyer2,1,&nbecrit,NULL);
WriteFile(handle,&aenvoyer3,1,&nbecrit,NULL);
ReadFile(handle,buf2,13,&nblu,NULL);
printf("\n char2= %s \n ",buf2);
getchar();
CloseHandle(handle);
return(fSuccess);
}
//---------------------------------------------------------------------------