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

Téléchargez C++ Discussion :

classe facilitant les interactions avec un port COM / RS232


Sujet :

Téléchargez C++

  1. #1
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut classe facilitant les interactions avec un port COM / RS232
    Bonjour,

    Je vous propose un nouvel élément à utiliser : classe facilitant les interactions avec un port COM / RS232

    Cette classe (dialogueCOM) permet de faciliter les opérations de lecteur et d'écriture sur les ports COM et RS232. Elle marche aussi bien sur linux que sur Windows. J'ai rajouté un exemple pour montrer comment elle fonctionne.

    Qu'en pensez-vous ?

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    http://www.webalice.it/fede.tft/seri...rial_port.html

    La bas tu as un code de très bonne qualité avec boost::asio et boost::thread.
    A voir si faudrait pas plus héberger ce code (qui est sur github par ailleurs)
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    http://www.webalice.it/fede.tft/seri...rial_port.html

    La bas tu as un code de très bonne qualité avec boost::asio et boost::thread.
    A voir si faudrait pas plus héberger ce code (qui est sur github par ailleurs)
    C'est vrai que je n'ai pas du tout eu l'idee de me servir de boost. L'avantage de ma classe c'est qu'il n'y a pas besoin d'une lib externe pour la faire fonctionner. Mais c'est vrai que ce serait une bonne chose de rajouter la possibilite d'une utilisation asynchrone. Si jamais je le fais je pense que ce sera sans passer par une lib externe.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : ingénieur retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Erreur à la compilation du code
    Je débute en C++. J'ai essayé le code proposé avec CodeBlocks qui me signale l'erreur

    suivante sur la ligne 299.

    F:\Documents\Programmes C\Code Blocks\Programmes console\RS232\COM RS232\dialogueCOM.cpp|173|

    error: cannot convert 'wchar_t*' to 'LPCSTR {aka const char*}' for argument '1' to 'void* CreateFileA(LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE)'|
    La ligne en question contient l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     g_hCOM = CreateFile(buf, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);

    Est-ce dû au compilateur ou y a-t-il un vrai problème ?

    Merci de votre aide

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Mélange entre ASCII et UNICODE, vraisemblablement un problème dans les constantes de compilation.

    L'expansion en ligne de CreateFile montre que la constante de compilation UNICODE n'est pas défini mais la variable buf a un type non compatible.
    La déclaration de la variable buf, SVP.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : ingénieur retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Déclaration de la variable buf
    On trouve cette déclaration juste avant (ligne 296) dans le contexte suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     int len;
    int slength = (int)nId.length() + 1;
    len = MultiByteToWideChar(CP_ACP, 0, nId.c_str(), slength, 0, 0);
    wchar_t* buf = new wchar_t[len];
    MultiByteToWideChar(CP_ACP, 0, nId.c_str(), slength, buf, len);

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Votre code ne semble pas compatible ASCII, définissez la constante compilation UNICODE.
    Avec un peu de chance, le reste de votre code sera compatible UNICODE.

  8. #8
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    @d6bel: je n'ai pas réussi à reproduire ton erreur donc je ne vois pas trop comment t'aider. J'espère que la solution de @bacelar a fonctionné. J'ai mis le code sur github (ici). Si jamais tu as un autre problème, fais moi une issue.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : ingénieur retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut @ bacelar :
    Merci beaucoup de ton intervention. Peux-tu m’aider un peu plus en m'indiquant comment procéder pour définir la constante de compilation "UNICODE".
    Est-ce par une directive de compilation (code ?) ou par une configuration des paramètres du compilateur" ?

    Ce qui est bizarre c'est qu'il n'y a pas d'erreur lors de la déclaration de buf ?!

  10. #10
    Futur Membre du Club
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : ingénieur retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut @imperio
    J'ai testé le même code sur un autre compilateur ( Dev C++) et j'obtiens le même message d'erreur. J'ai récupéré le code sur github (qui est très voisin du tien) je vais le tester, mais je crains de me heurter au même

    problème. Sur quel compilateur travailles-tu? Le système d'exploitation (dans mon cas : W7) peut-il avoir un rôle?

    Merci de ton aide

  11. #11
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    J'ai toujours bossé avec mingw sur windows (7 et 8). Pour les systèmes testés :

    - Windows 7
    - Windows 8
    - OpenSUSE
    - Fedora
    - ElementaryOS
    - Mint

    Ils étaient tous en 64 bits. Donc je t'avoue que ton problème me surprend un peu puisque tu es le premier à l'avoir. Je vais re-tester de mon côté.

  12. #12
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Je viens de tester sur un pc plus récent et en effet il m'a indiqué une erreur que j'ai corrigé (sur github). Tu peux me dire si c'est bon pour toi ?

Discussions similaires

  1. interaction avec le port serie selon le contenu d'un fichier texte
    Par leptitom dans le forum Général Python
    Réponses: 4
    Dernier message: 28/04/2015, 19h51
  2. [Carte mère] Recherche carte mère avec 2 ports COM ou IRQ affectable
    Par ermips dans le forum Composants
    Réponses: 4
    Dernier message: 26/04/2013, 10h27
  3. Problème avec le port COM
    Par francktfr dans le forum VB.NET
    Réponses: 0
    Dernier message: 23/04/2010, 13h16
  4. Un guide de bonnes pratiques pour programmer avec le port COM ?
    Par Chekov dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/03/2008, 17h25
  5. Probleme avec le port com
    Par gedonet dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/03/2007, 00h40

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