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 Discussion :

Problème : Communication Série


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 31
    Points : 21
    Points
    21
    Par défaut Problème : Communication Série
    je travaille sur un simulateur des Trames CAN, pour cela j'utilise 2 pc l'un émetteur et l'autre récepteur, donc j'ai fait la configuration de communication nécessaire à travers la structure DCB. quand je débuge je recoit la donnée exact( voir code:packet valide), mais quand je lance le while (j'aurais packet non valide). est ce que quelqun peut m'aider à résoudre ce problème.


    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
    50
    51
    52
     
            SetCommMask(g_hCOM,EV_RXCHAR);
    	memset(&ov,0,sizeof(ov));
    	ov.hEvent = CreateEvent( 0,true,0,0);
     
    while(1)
    	{
    		int iSomme = 0;
    		char* pPoint = NULL;
    		BOOL   bwait  =TRUE ;
    		Sleep(100);
    		bSucces1 = 0;
     
    		WaitCommEvent( g_hCOM, &dwEvtMask, &ov);
    		bwait = WaitForSingleObject(ov.hEvent ,INFINITE);
    		if(bwait == WAIT_OBJECT_0)
    		{
    			printf("ok\n");
    			bSucces1 = ReadFile(g_hCOM, pBuffer, 14, &dwBytesRead, &ov);
     
    			if(bSucces1 == 1)
    			{
    				if(*(pBuffer+1)&(1<<0))
    				{
    					iSomme += pow(2,3);
    				};
     
    				iSomme+=*(pBuffer+2)>>5 &0x07;
                                    int iTeste = 0;
     
    				iTeste = *(pBuffer+iSomme+4)<<4 & 0x70;
    				iTeste+= *(pBuffer+iSomme+5)>>4 & 0x0F;
     
     
     
    			}
     
     
    				if(iTeste == 127)
    				{
    					printf("packet valide \n");
     
    				}
    				else
    				{
    					printf("packet non  valide\n");
    				}
    			}
    		}
     
     
    	}

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    A première vue comme ça :

    La fonction ReadFile te retourne la quantité d'octets reçus (via le paramètre dwBytesRead). Tu ne vérifies pas ce paramètre, donc tu ne peux pas être certain que tu as bien reçu 14 caractères. Si ce n'est pas le cas, alors le buffer de réception contient une partie de "n'importe quoi". Heureusement, l'opération de checksum que tu fais sur ce n'importe quoi détecte qu'il y a un problème, d'où ton message "packet non valide".

    Quand tu lances ton programme en mode debug, si tu fais du pas à pas, tu laisses plus de temps à ton programme pour que les données arrivent. Du coup le problème ne se présente pas.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Bonjour,
    J'ai résolu le problème, c'était dans le mode avec lequel j'ai ouvert le port
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreateFile(m_szPortName, GENERIC_READ, 0,0 ,  OPEN_EXISTING,  FILE_FLAG_OVERLAPPED,  NULL)
    , au début j'ai utilisé le mode OVERLAPPED, quand je l'ai changé ça marché bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreateFile(m_szPortName, GENERIC_READ, 0,0 ,  OPEN_EXISTING,  NULL,  NULL)
    est ce que quelqu'un peut me donner une explication entre les deux mode?

Discussions similaires

  1. Problème communication série Java.
    Par dubser dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 06/04/2010, 02h36
  2. Problème communication série
    Par KissCoul dans le forum Langage
    Réponses: 3
    Dernier message: 01/10/2009, 13h04
  3. Problème de communication série
    Par djyoyo01 dans le forum MATLAB
    Réponses: 2
    Dernier message: 14/12/2007, 10h21
  4. Problèmes avec la communication série
    Par rzayani dans le forum Windows
    Réponses: 3
    Dernier message: 18/06/2007, 11h57
  5. [communication série] problème lecture/écriture
    Par davinout dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 01/06/2005, 13h14

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