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 port COM


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 5
    Par défaut Problème port COM
    Bonjour,

    Je vous demande votre aide car j'ai un problème.
    J'ai un programme en C++ qui me permet d'intéroger des compteurs électrique via RS485 en MODBUS.
    Mon programme fonctionne mais uniquement si, avant de compiler, j'utilise l'utilitaire du fabriquant du compteur pour sélectionner mon COM 10 et cliquer sur connect puis disconnect.
    Si je ne fais pas cette manipulation mon programmene va pas plus loin que le ReadFile.

    Mon but est de faire en sorte de ne plus avoir à passer par l'utilitaire pour faire fonctionner mon programme.

    Merci d'avance pour toute aide!

    Lucas B

    PS: voici mon constructeur:
    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
    Serie::Serie(int ad_client)
    {
        DCB dcbSerialParams;
        COMMTIMEOUTS timeouts;
        hSerial = CreateFile( L"\\\\.\\COM10",
                             GENERIC_READ | GENERIC_WRITE,
                             0,
                             0,
                             OPEN_EXISTING,
                             FILE_ATTRIBUTE_NORMAL,
                             0);
     
       if(hSerial!= INVALID_HANDLE_VALUE){
            cout << "Connecter au port COM\n" << endl;
       }else{
            cout <<"Impossible de ce connecter au port COM\n" <<endl;
            exit(0);
       }
            GetCommState(hSerial,&dcbSerialParams);
            dcbSerialParams.BaudRate=CBR_9600;
            dcbSerialParams.ByteSize=8;
            dcbSerialParams.StopBits=ONESTOPBIT;
            dcbSerialParams.Parity=NOPARITY;
     
            timeouts.ReadIntervalTimeout=100;
            timeouts.ReadTotalTimeoutConstant=10000;
            timeouts.ReadTotalTimeoutMultiplier=1;
            timeouts.WriteTotalTimeoutConstant=50;
            timeouts.WriteTotalTimeoutMultiplier=10;
     
            if(!SetCommTimeouts(hSerial,&timeouts)){
                cout << "Timeouts: FAIL" << endl;
            }
            PurgeComm(hSerial,10);
            Sleep(1000);
            set_ad(ad_client);
    }

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Es-tu sûr que l'utilitaire ne sert pas à faire exister le COM10?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 5
    Par défaut
    Non l'utilitaire sert à donner la consommation électrique

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 751
    Par défaut
    Médinoc voulait dire de faire une boucle for de 1 à 255 (ou 35) pour détecter quel port est attribué pour la communication (en envoyant un PING ou une requête de détection).

    Parce que ta manipulation "sélectionner mon COM 10 et cliquer sur connect puis disconnect" permet peut-être- sûrement d'attribuer le port 10.

    Mais attention, la détection du port COM est longue

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Citation Envoyé par foetus Voir le message
    Médinoc voulait dire de faire une boucle for de 1 à 255 (ou 35) pour détecter quel port est attribué pour la communication (en envoyant un PING ou une requête de détection)
    Non, je n'ai rien voulu dire de tel.
    C'est juste que COM10 n'est pas un port série qui existe par défaut, et donc je soupçonnais que ce soit un port COM virtuel créé par le logiciel...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 751
    Par défaut
    Je travaille actuellement avec un ftdi (un pont USB vers COM) et je vois mon périphérique dans les ports COM (dans le gestionnaire de périphériques) et j'y accède également avec un CreateFile sans problème (aux paramètres du port près)

  7. #7
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    Comme le RS485 n'est pas non plus une interface standard du PC, je suppose que tu as un boitier d'interface entre ton PC et le compteur électrique. La méthode pour accéder à ton port dépend du raccordement de ton boitier au PC.

    J'ai par le passé travaillé avec des boitiers ethernet <-> RS232. J'avais le choix entre créer un port com virtuel (ton com10) en utilisant l'utilitaire fournit avec le boitier, ou ouvrir un socket sur le port ethernet et d'y envoyer les même données que j'aurai envoyé sur le port com virtuel.

    A toi de voir dans la doc de ton boitier quel utilitaire, pilote ou autre tu disposes.

Discussions similaires

  1. [WM17] Problème Port COM GPS
    Par PaulNero dans le forum Windev Mobile
    Réponses: 2
    Dernier message: 25/05/2012, 09h07
  2. BV6: Problème Port Com
    Par Luc Lejeune dans le forum Composants
    Réponses: 0
    Dernier message: 22/02/2010, 13h19
  3. TComport et problème de disparition d'un port com
    Par Akeon dans le forum C++Builder
    Réponses: 0
    Dernier message: 26/02/2008, 09h55
  4. Problème de lecture sur port COM
    Par Marthym dans le forum MFC
    Réponses: 10
    Dernier message: 11/04/2006, 15h36
  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