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

Windows Discussion :

Détecter débranchement port COM


Sujet :

Windows

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 75
    Points : 76
    Points
    76
    Par défaut Détecter débranchement port COM
    Bonjour,

    Je code actuellement un programme qui me détecte et lit les évènements du port COM à l'aide de l'API Windows. Pas de pbs pour l'ouverture, la détection, la lecture et l'écriture mais un léger pb pour la détection de la fermeture. En effet j'utilise WaitCommEvent mais si je débranche "à l'arrache" le µC qui lui envoie les données bin il n'y a rien qui est détecté, so comment faire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    HANDLE hserial;
    
    initialisation(hserial);
    initialisation(evenement, hserial);
    
    res = WaitCommEvent(...)
    if(res!=0){
        traitement
        ResetEvent(...)
    }
    else{
        pas d'évènement
    }
    J'ai vu qu'il y a la fonction WaitForSingleObject(evenement, timeout); qui a l'air sympa pour ce que je cherche mais si je la mets, est-ce à la place du waitcommevent ou en plus (ca ferait trop d'attente dans ce cas-là...).J'ai déjà essayé de la placer dans le if(res!=0) avec un timeout de 5000ms, puis j'ai débranché le port mais nada mon programme ne détecte pas l'inactivité du port pdt les 5s, donc que puis-je faire pour remédier à cela?

    De plus pour lire le port COM j'utilise ReadFile mais elle lit pas toujours des bons trucs les 5-10 ères itérations, dois-je laisser tourner mon code à vide pdt 5-10s au début le temps qu'il se cale ou bien purger le buffer du port com (PurgeComm ne m'a rien fait du tout avec les options PURGE_RXCLEAR et PURGE_TXCLEAR)...


    Voilà si qqn est un peu plus expert que moi en la matière, je serai reconnaissant de son aide. Bonne soirée

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    ? Personne ne saurait m'aiguiller ou ma question est tellement bête qu'elle n'en vaut pas le détour? Je me suis peut-être mal expliqué donc je refais une tentative...J'aimerai pouvoir lire des données sur le port COM tant que celui-ci en envoie et s'il n'y a pas eu de données pendant 10s je le détecte et arrête mon programme. Pour le moment, il reste bloqué dans le ReadFile qui ne voit que le caractère vide mais continue. Je remets un psudo-code plus détaillé, si cela peut vous parler plus

    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
    int res;
    HANDLE mon_port;
    OVERLAPPED evenement;...
    SetCommEvent(evenement_port.hEvent);
    SetCommMask(mon_port, EV_DSR|EV_BREAK|EV_RXCHAR|EV_ERR);
    
    while(activité_du_port){
         res = WaitCommEvent(mon_port, &edw, &evenement);
         if(res != 0){
    
              if(edw & EV_RXCHAR){
                 if(!ReadFile(mon_port, Buffer, 1,dwb, NULL){
                     printf("Erruer blablabla\n");
                     exit(EXIT_FAILURE);
                 }
                 Traitement();
              }
              else{
                  printf("Erreur blablabla...\n");
              }
         }
         else{
               printf("Erreur blablabla...\n");
         }
    }

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 126
    Points
    13 126
    Par défaut
    A partir du moment où un port COM n'est pas plug'n'play, je ne vois pas ce que tu peux espérer...

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 75
    Points : 76
    Points
    76
    Par défaut
    Ok tanpis je mettrai don un chrono en parallèle. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détecter le dernier port COM
    Par K.A.POL dans le forum LabVIEW
    Réponses: 3
    Dernier message: 04/03/2009, 13h48
  2. comment détecter l'absence de connexion sur port COM ?
    Par nicoboud2 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/04/2006, 14h41
  3. [debutant][Port COM]
    Par Shooter dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/07/2004, 09h43
  4. [javaComm]Communication port COM
    Par gui4593 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 04/06/2004, 12h35
  5. port com
    Par jeremi dans le forum C
    Réponses: 12
    Dernier message: 16/09/2002, 11h37

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