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

VB.NET Discussion :

Serialport pas patient


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 71
    Par défaut Serialport pas patient
    Bonjour à tous !
    Je débute en programmation et j'aimerai faire un code propre et fiable.


    J'utilise l'objet "serialport" dans ma fonction, elle ne fonctionne mais pas tout le temps


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub bActualiser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bActualiser.Click
     
            SerialPort1.Write("u")    'envoie d'une requete sur le port
            While SerialPort1.BytesToRead < 0  'attente de byte dans le buffer
            bActualiser.Text = "attente..."
            End While
     
     
           tTrame.Text = SerialPort1.ReadLine()
     
     
            bActualiser.Text = "Actualiser"
     
        End Sub

    Je crois avoir identifier le problème, ma boucle while "bloque" la procédure jusqu'a ce qu'il y ai au moins 1 byte dans le buffer mais déclanche parfois la lecture de la ligne avant que celle ci n'ai été transmise ... d'ou un plantage sur SerialPort1.ReadLine

    J'aimerai donc trouver un "déclencheur" autre que SerialPort1.BytesToRead < 0, genre serialport1."linetoread" < 0
    J'ajoute que le nombre de byte reçu est variable.
    J'espere avoir été suffisament clair.
    Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 94
    Par défaut
    Bonjour,

    Tu peux écrire caractères par caractères.
    Sinon, tu dois pouvoir attendre la tag NewLine (à partir du framework 2.0)
    http://msdn.microsoft.com/fr-fr/libr...8VS.80%29.aspx

    Comme cela tu seras sûr d'avoir une ligne complète dans ton tampon.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 71
    Par défaut
    Citation Envoyé par cougarg Voir le message
    Bonjour,


    Sinon, tu dois pouvoir attendre la tag NewLine (à partir du framework 2.0)
    http://msdn.microsoft.com/fr-fr/libr...8VS.80%29.aspx

    Comme cela tu seras sûr d'avoir une ligne complète dans ton tampon.
    Salut, merci pour ta réponse mais je n'ai pas l'impression que ce soit un flag pour signaler une ligne à lire mais plutot pour definir le caractère de "linefeed".

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 94
    Par défaut
    Citation du msdn de ReadLine
    Par défaut, la méthode ReadLine bloque jusqu'à ce qu'une ligne soit reçue. Si vous ne souhaitez pas ce type de comportement, affectez à la propriété ReadTimeout n'importe quelle valeur non nulle pour forcer la méthode ReadLine à lever un TimeoutException si aucune ligne n'est disponible sur le port.
    Normalement, ton readLine devrait attendre la fin de ta ligne.
    Vérifie la valeur de ReadTimeOut. Met à null si besoin est.

    Tu peux en plus protéger ta lecture avec un try/catch pour récupérer les exceptions levées et gérer les erreurs comme tu le souhaites (relecture ligne - signalement de l'erreur ...)

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 71
    Par défaut
    Merci, voila ce que j'ai fait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            While SerialPort1.BytesToRead < 0 'on attend les bytes !
            End While
     
            System.Threading.Thread.Sleep(100)
            Try
                serinstring = SerialPort1.ReadLine()
     
     
              Catch ex As Exception
                msgbox( ex.Message)
     
            End Try

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

Discussions similaires

  1. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  2. Gif pour patienter fonctionne pas avec IE
    Par Sub0 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 18/05/2008, 11h36
  3. Réponses: 1
    Dernier message: 17/07/2007, 15h45

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