IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Probl�me de lecture de trame sur port COM !


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par d�faut Probl�me de lecture de trame sur port COM !
    Bonjour � tous,

    Voici mon soucis : j'ai une fonction de lecture du port com (celui-ci est bien d�tect�), il y a bien des infos qui circule sur le port mais cela ne vient pas dans mon appli !!!

    Je vous post le code de lecture :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    ErrCom Com::LectureCom (void *lpBuf,unsigned int nCountMax, unsigned int* pCountRead)
    {
     
    	COMSTAT Stat;
    	DWORD Errors;
    	unsigned int nCarALire;
    	NCarLus = 0;
     
    	if(hdl!=NULL)
    	{
    		//on pari sur pas d'erreur
    		EtatCom = ErrCom_None;
     
    		//Pour éviter de gérer un time out
    		//Sleep((unsigned long)500);
     
    		int TimeoutRead=500;
    		timeouts.ReadIntervalTimeout=MAXWORD;
    		timeouts.ReadTotalTimeoutMultiplier=0;
    		timeouts.ReadTotalTimeoutConstant=TimeoutRead;
    		timeouts.WriteTotalTimeoutMultiplier=0;
    		timeouts.WriteTotalTimeoutConstant=0;
     
     
    		//Pour connaitre le nombre d'octets dans le buffer d'entrée
    		ClearCommError(hdl,&Errors,&Stat);
    		nCarALire=Stat.cbInQue;
     
    		//On effectue la lecture si il y a des caractères présents
    		if( (nCarALire>0)&&(nCarALire<=nCountMax) )
    		{
    			if(ReadFile(hdl,lpBuf,nCarALire,&NCarLus,NULL)==0)
    			{
    				EtatCom = ErrCom_Reception;
    			}
     
    		}
    		*pCountRead=NCarLus;
    	}
    	else
    		//Le port n a pas été ouvert
    		EtatCom = ErrCom_Creation;
     
    	//Compte rendu de l'exécution
    	return EtatCom;
     
     
    }
    et voici l'appe de la fonction situ�e dans un thread :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    do
    		{
    			Nblu = laCom.NCarLus;
    			laCom.LectureCom(buf,sizeof(buf), &Nblu);
    		}
    		while (Nblu!=18);
    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    D�tails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par d�faut
    J'ai pas le temps de trop regarder ton code en d�tail, mais tu pourrais aller le site Web suivant: http://maikel.galeon.com/serie/bcbcomm.html

    Sinon tu peux toujours utiliser le composant TComPort: http://trote.developpez.com/tutoriel...ear-rad-studio

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par d�faut
    Bonjour Crayon et merci d'avoir r�pondu.

    Pour mieux comprendre, je post mon fichier qui g�re la Com s�rie :
    UCom.cpp

    UCom.h

    et je fais appel aux fonctions de ce fichier dans un thread :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
            Com laCom;
     
    	AnsiString COM = laCom.InitCom();
    	laCom.ConnectCom(COM.c_str(),38400,8,0,1);
     
     
    	while (Suspended == false)
    	{
     
    		do
    		{
     
    			laCom.LectureCom(buf,sizeof(buf), &Nblu);
    		}
    		while (Nblu!=18);
    J'ai test� avec un "sniffer" de port et il y a bien des infos qui arrivent du port, cependant je n'ai rien qui vient sur mon appli : le programme n'arr�te pas de boucler au niveau de la lecture !!!

  4. #4
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    D�tails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par d�faut
    Un petit conseil rapide, tu devrais regarder en premier lieu si cette commande fonctionne:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    	laCom.ConnectCom(COM.c_str(),38400,8,0,1);
    Si la valeur de retour est ErrCom_None, alors tu peux aller dans le while.

  5. #5
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par d�faut
    Bonjour,

    J'ai v�rifi� la valeur de retour de cette fonction et j'ai bien "ErrCom_None" !!!

    Je pense vraiment que le probl�me vient de ma boucle while et/ou de ma fonction de lecture.

    Vraiment l� je suis � court d'id�es, je ne sais pas comment r�soudre ce probl�me.


  6. #6
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    Hello,
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    		//On effectue la lecture si il y a des caractères présents
    		if( (nCarALire>0)&&(nCarALire<=nCountMax) )
    		{
    			if(ReadFile(hdl,lpBuf,nCarALire,&NCarLus,NULL)==0)
    			{
    				EtatCom = ErrCom_Reception;
    			}
     
    		}
    Question: Que vaut nCountMax ?? Et que se passe-t'il s'il y a plus de nCountMax octets dans le buffer du port COM ?

Discussions similaires

  1. R�ponses: 3
    Dernier message: 08/06/2015, 15h56
  2. R�ponses: 0
    Dernier message: 26/09/2012, 16h49
  3. Probl�me de lecture sur port COM
    Par Marthym dans le forum MFC
    R�ponses: 10
    Dernier message: 11/04/2006, 15h36
  4. Write puis read sur port com
    Par chourmo dans le forum API, COM et SDKs
    R�ponses: 34
    Dernier message: 21/06/2005, 17h36
  5. Probl�me de reception sur Port COM
    Par Revan777 dans le forum C
    R�ponses: 9
    Dernier message: 19/04/2005, 21h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo