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 :

Serial port timeout sur un write


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut Serial port timeout sur un write
    Bonjour

    J'utilise pour la première fois .NET pour faire une communication avec une carte électronique via un port com virtuel sur USB et ça ne veut pas fonctionner alors que ce même port fonctionne à merveille avec un quelconque terminal. et que mon code c# semble fonctionner sur un port série non virtuel.

    voici mon code, qui n'a rien de bien particulier puisque tiré des exemples les plus basiques sur le sujet.
    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
     
    try
    {
                    SerialPort sp =  new SerialPort("COM29", 115200, Parity.None, 8, StopBits.One);
                    sp.Handshake = Handshake.None;
                    sp.ReadBufferSize = 2048;
                    sp.WriteBufferSize = 2048;
     
                    // Set the read/write timeouts
                    sp.ReadTimeout = 500;
                    sp.WriteTimeout = 500;
     
                    sp.Open();
                    richTextBox1.AppendText("Port com ouvert");
     
                    sp.Write("Toto va bien"); // ici j'ai timeout
                    String rep = sp.ReadExisting();
                    richTextBox1.AppendText(rep);
     
                    sp.Close();
     
     
                }
                catch (ManagementException ex)
                {
                    MessageBox.Show(ex.Message);
                }
    Ça saute en timeout systématiquement quelque soit les tailles de buffer et de WriteTimeout

    Je trouve des tonnes et des tonnes de posts sur différents forums anglais qui parlent de ce problème présent sur les port com virtuels mais soit il n'y a pas de réponses, soit les réponses m'apparaissent tellement vides que je n'y vois pas de solution .)
    Vu le nombre de personnes qui ont eu le problème et comme aujourd'hui 99% des ports séries sont virtuels je suis très étonné d'avoir un soucis avec une telle classe !

    Pourquoi ai-je ce timeout sur write sur un port com virtuel ?
    Comment contourner le problème ?
    Existe t-il une classe plus efficace/fiable pour exploiter un port COM ?

    Merci par avance.

  2. #2
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut
    Bonjour

    J'ai fini par trouver une astuce qui fonctionne (et qui semblerait confirmer que la classe serialPort déconne^1024 avec les port com virtuels)

    il suffit d'ajouter

    (pour activer la ligne DTR alors qu'elle n'est pas utilisée)
    et hop ça se met à fonctionner.

    Sans cette astuce, j'ai aussi eu des cas ou le write fonctionnait et ne sautait pas en timeout (donc un write qui fonctionne pour visual studio) mais avec aucuns caractères envoyés en pratique

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/10/2015, 08h28
  2. [Débutant] Serial.Port.Write - Deux appels
    Par herr_inspektor dans le forum C#
    Réponses: 1
    Dernier message: 03/12/2014, 14h03
  3. Réponses: 4
    Dernier message: 21/03/2014, 15h16
  4. Réponses: 0
    Dernier message: 25/04/2011, 15h25
  5. [Sockets] Timeout sur accept() ?
    Par MikB dans le forum Développement
    Réponses: 2
    Dernier message: 30/12/2003, 17h22

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