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 :

Mise en oeuvre en C# d'un adaptateur USB vers RS-232


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Points : 10
    Points
    10
    Par défaut Mise en oeuvre en C# d'un adaptateur USB vers RS-232
    Bonjour je cherche a utiliser un adaptateur USB vers RS-232.
    Dans Windows 11 l'adaptateur est reconnu comme USB Sérial Port (COM3).
    Quelqu'un a t'il déjà utiliser cet adaptateur pour communiquer à travers le port USB vers une interface série.
    Merci d'avance pour vos réponses.
    astvt

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 208
    Points : 28 140
    Points
    28 140
    Par défaut
    Normalement tu vas l'utiliser comme un port série RS232 classique, avec les outils de la classe System.IO.Port.SerialPort.

    Le fait qu'il soit sur un port usb est, normalement, totalement transparent pour ton code, c'est le driver monté par Windows qui se charge de faire la transformation.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 232
    Points : 1 798
    Points
    1 798
    Par défaut
    tu demandes pour "cet adaptateur" mais on ne sait pas duquel il s'agit
    Mais à partir du moment où il est reconnu comme un port série, il est utilisable comme tel.
    Donc dans ton cas, c'est le port série n°3 ou COM3
    (son numéro peut se modifier dans le gestionnaire de périphérique)

  4. #4
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Bonjour, j'ai fais ceci:
    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
    //sélection du port série
                    switch (choiscom)
                    {
                        case 1:
                            ComPort.PortName = "COM1";
                            break;
                        case 2:
                            ComPort.PortName = "COM2";
                            break;
                        case 3:
                            ComPort.PortName = "COM3";
                            break;
                    }
                    string port = ComPort.PortName;
                    //ouvre le port de communication
                    ComPort.Open();
                    //set RTS enable
                    ComPort.RtsEnable = true;
                    ComPort.DtrEnable = true;
                    //test si la ligne Cts est on
                    bool ctsport = ComPort.CtsHolding;
                    if (ctsport == false)
                    {
                        MessageBox.Show("la ligne CTS de l'interface série n'est pas présente. \n Vérifiez le câble d'interface", "ERREUR", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        ComPort.RtsEnable = false;
                        ComPort.Close();
                        //choiscom = (char)0;
                        return;
                    }
    mais cela ne fonctionne pas.
    Le port série est bien ouvert mais les lignes RTS, DTR, et CTS ne sont pas actives. Pour le vérifier j'ai une oetite boite (NU DATA) qui me permet de visualiser l'état de chaque ligne de l'interface série.
    Aucunes des lignes que je contrôle ne sont actives.
    Il semble que les commandes du ComPort ne fonctionnent pas. Peut être un problème d’accès au driver ? L'adaptateur USB to RS-232 est basé sur un module de FTDI.

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 208
    Points : 28 140
    Points
    28 140
    Par défaut
    Activer les lignes ne suffit pas, il faut aussi configurer le protocole de négociation (Handshake). Par défaut il est configurer sur None pour une connexion dite "3 fils" et un protocole géré par le logiciel.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 232
    Points : 1 798
    Points
    1 798
    Par défaut
    vérifier que la puce FTDI gère aussi le full série.
    Je ne sais plus si c'est celle de FTDI ou de Prolific (l'autre grosse marque de circuit) où il peut y avoir un souci.

  7. #7
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Bonjour j'ai récupéré le dernier driver pour la puce FTDI FT232RL qui est montée sur l'adaptateur USB to RS-232.
    J'ai ajouté dans mon code les paramètres suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     public SerialPort ComPort = new SerialPort();
            public Handshake Handshake { get; set; }
    et
    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
    //sélection du port série
                    switch (choiscom)
                    {
                        case 1:
                            ComPort.PortName = "COM1";
                            break;
                        case 2:
                            ComPort.PortName = "COM2";
                            break;
                        case 3:
                            ComPort.PortName = "COM3";
                            break;
                    }
                    //vérifie le nom du port serie pour test
                    string port = ComPort.PortName;
                    //ouvre le port de communication
                    ComPort.Open();
                    //établie le contrle de Rts
                    //ComPort.Handshake = Handshake.RequestToSend;
                    //set RTS enable
                    ComPort.RtsEnable = true;
                    ComPort.DtrEnable = true;
                    //test si la ligne Cts est on
                    bool ctsport = ComPort.CtsHolding;
                    if (ctsport == false)
                    {
                        MessageBox.Show("la ligne CTS de l'interface série n'est pas présente. \n Vérifiez le câble d'interface", "ERREUR", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        ComPort.RtsEnable = false;
                        ComPort.Close();
                        //choiscom = (char)0;
                        return;
                    }
    La mise à jour du driver et les ajouts dans mon code ne change rien apparemment il n'y a pas de connexion avec l'adaptateur.
    Avez-vous une idée pour vérifier le bon fonctionnement de l'adaptateur USB to RS232

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 232
    Points : 1 798
    Points
    1 798
    Par défaut
    c'est peut-être un problème de niveau électrique.
    A l'origine, sur le port série c'était du +/-12V, avec ces circuits, on est plutôt vers 5V (ou 3.3V/2.8V selon le modèle du câble) Donc si tu cherches à allumer une led sur les sorties, il faut vérifier qu'elle puisse fonctionner avec une tension de 5V.

    Peut-être utiliser PortMon des sysinternals pour voir l'activité sur le port https://learn.microsoft.com/en-us/sy...nloads/portmon

    Après, as-tu vraiment besoin des lignes de contrôles pour ton application ?

    Autre façon de tester, de mettre un "bouchon" pour raccorder les pins qui ont besoin d'être connectées ensembles
    (RX <=> TX, ....) et de passer par un putty (par exemple) et envoyer du texte pour voir si ça fonctionne (on doit voir l'écho de la saisie si c'est OK)

  9. #9
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Bonjour umfred.
    Je n'ai pas vraiment besoin des lignes de contrôle c'est juste pour vérifier que le câble est bien connecté.
    J'ai essayé portmon mais sur un windows11 même en démarrant en mode compatible le programme ne fonctionne pas.
    Ta deuxième proposition me semble intéressante.
    Je comprend qu'il faut relier Transmit data avec recieve data, mais qu'est-ce qu'un putty ?

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 232
    Points : 1 798
    Points
    1 798
    Par défaut
    putty c'est un programme qui fait terminal pour différents types de connexions https://www.putty.org/
    il y a d'autres terminaux comme TeraTerm, cleverTerm, ...
    (dans les anciens windows il y avait hyperterminal qui permettait de tester la communication série)

    PS: dans ton code, tu vérifies quand même les lignes de contrôle CTS...

  11. #11
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Bonjour à tous.
    Mon problème est résolu. Apparemment mon adaptateur USB to RS232 de FTDI est en panne.
    J'ai acheté un nouvel adaptateur USB 2.0 serial câble basé sur un processeur Prolific PL2303GS et mon programme fonctionne.
    Merci pour vos conseils et vos aides.
    Je ferme ce problème.
    astvt

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 20/11/2016, 07h42
  2. adaptateur usb vers IDE : n'existe pas ?
    Par Invité dans le forum Windows XP
    Réponses: 10
    Dernier message: 18/03/2012, 18h51
  3. Mise en oeuvre d'une standby
    Par armando123 dans le forum Oracle
    Réponses: 1
    Dernier message: 17/10/2005, 12h18
  4. [JMS] Mise en oeuvre
    Par tery dans le forum Java EE
    Réponses: 4
    Dernier message: 21/02/2005, 13h35

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