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,
.
je code sous Borland C++6.0)
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
//---------------------------------------------------------------------------
#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);
}
//---------------------------------------------------------------------------