Lecture port série

Signaler
Messages postés
31
Date d'inscription
lundi 27 mai 2002
Statut
Membre
Dernière intervention
24 novembre 2004
-
Messages postés
7
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
21 mars 2011
-
Bonjour voici mon code et je souhaiteras récupérer ce que je lis sur le port dans la variable retour en chaine de caractère mais là ça renvoi n'importe quoi.

BOOL Test_Imprimante()
{
// Variables de COM
HANDLE hComm;
CString portname = "//./COM1";
char test1[3];
DWORD lp ;
DWORD error;
DCB dcb;
BOOL fSuccess;
char retour ;
//Ouverture du Port
hComm = CreateFile(portname,GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
fSuccess = GetCommState(hComm,&dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
fSuccess = SetCommState(hComm, &dcb);
// ecriture sur le port

test1[0] = 0x01;
test1[1] = 'A';
test1[2] = NULL;
BOOL etat = WriteFile(hComm,&test1,4,&lp,NULL);

// lecture du port
BOOL etat2 = ReadFile(hComm,&retour,50,&lp,NULL);
error = GetLastError();

return TRUE;
// Fermeture du port
CloseHandle(hComm);

}

9 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
retour est un simple octet et tu demande d(aller en stocker 50 => ca va aller ecarser ce qui suit, il faut déclarer char[50] dans ce cas. Ton port n'est pas ouvert en lecture. Pour le nom du port "COM1" devrait suffir. Ne pas oublier d'affecter les COMMTIMEOUTS pour gérer le temps d'attente des données sur le port.

tu peut jeter un oeil la si tu veux :
http://www.cppfrance.com/code.aspx?ID=22441
Messages postés
31
Date d'inscription
lundi 27 mai 2002
Statut
Membre
Dernière intervention
24 novembre 2004

pour faire une ecriture et une lecture l'une apres l'autre faut que je géré obligatoirement le timeout?
Messages postés
31
Date d'inscription
lundi 27 mai 2002
Statut
Membre
Dernière intervention
24 novembre 2004

pour faire une ecriture et une lecture l'une apres l'autre faut que je géré obligatoirement le timeout?
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
la structure COMMTIMEOUTS permet de gérer principalement la fonction de lecture. En effet, lorsque tu appel ReadFile, tu ne sait pas s'il y a des données reçus (y'a un moyen, mais faisons simple). Selon les paramètres de cette structure, ReadFile peut attendre indéfiniement que le nombre d'octets spécifié arrive. Par défaut, si tu demmande de lire 50 octets, ReadFile ne retournera pas tant que 50 octets n'auront pas été reçu (pendant ce temps la, l'appli est bloquée). Tu peut donc spécifié le temps max à attendre pour l'arrivée du premier octet (ReadTotalTimeoutConstant) puis le temps max entre 2 octets consécutifs (ReadIntervalTimeout).

En ce qui concerne l'écriture, c'est moins grave, tu peut attendre que tous les octets spécifiés soient envoyés avant de poursuivre (à moins que tu en ai une foultitude mais dans ce cas, il y a d'autres technique plus compliquées pour ne pas bloquer l'appli pendant ce temps).
Messages postés
7
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
21 mars 2011

bande de
Messages postés
7
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
21 mars 2011

bande de
Messages postés
7
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
21 mars 2011

bande de
Messages postés
7
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
21 mars 2011

dtyhdsrtsjerhqhsedfaezqyg
Messages postés
7
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
21 mars 2011

allez vous fairer encilspço_yier v