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 :

Probleme sur la lecture du port serie


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Probleme sur la lecture du port serie
    Bonjour a tous,

    Je suis nouveau sur ce forum et je viens a vous pour resoudre un probleme que je n'arrive pas a solutionner depuis plusieurs jours:

    je suis en train de m'initier a apprendre visual basic express 2010,j'ai développer une toute petite application qui doit permettre d envoyer et de recevoir une chaine de caractère a travers le port série vers une carte électronique que j'ai conçue:

    Pour être plus précis j'envoie le caractère "D" a ma carte en cliquant sur un bouton de mon appli vb et ma carte me renvoie les caractère "abc" ainsi que le symbole " \0 " indiquant la fin de la chaine que je visualise cote vb dans une text box .

    J'ai essayer ma carte avec hyperterminal de Windows et cela fonctionne parfaitement bien.

    Avec mon code vb ci dessous l'octet est bien envoyer a ma carte par contre je ne recoit rien!et le seul message qui s'affiche est "faux" (dépassement du timer max)

    voici mon code:

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Public Class Form1
     
        Dim data As String
        Dim reponse As String = ""
     
        Function ReceiveSerialData() As String          'recoit la chaine
     
            Dim com1 As IO.Ports.SerialPort = Nothing
            Try
                com1 = My.Computer.Ports.OpenSerialPort("COM1")
                com1.ReadTimeout = 5000
                Do
                    Dim Incoming As String = com1.ReadLine()
                    If Incoming Is Nothing Then
                        Exit Do
                    Else
                        reponse &= Incoming & vbCrLf
     
                    End If
                Loop
     
            Catch ex As TimeoutException
                reponse = "faux"
            Finally
                If com1 IsNot Nothing Then com1.Close()
            End Try
     
            Return reponse
     
     
     
     
        End Function
     
     
     
        Sub SendSerialData(ByVal data)      'envoie l'info "D"
     
            Using com1 As IO.Ports.SerialPort =
                    My.Computer.Ports.OpenSerialPort("COM1")
                com1.WriteLine(data)
            End Using
     
        End Sub
     
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            data = "D"
            SendSerialData(data) 'envoi la donnee 
            ReceiveSerialData()  'recoit la donnee
            Me.temperature.Text = reponse 'ecrit la donnee dans une text box
        End Sub
     
     
    End Class

    j'ai mis en pièce jointe ma fenêtre avec les paramètres du port série,j'ai trouver le code pour utiliser le port serie sur ce lien
    http://msdn.microsoft.com/fr-fr/library/7ya7y41k.aspx


    Merci d'avance pour vos réponse car je commence a désespérer de ne pas pouvoir avancer davantage.

    fred
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    déjà fermer le port série après avoir envoyé puis le réouvrir dans la foulée n'est pas une bonne idée
    si ta carte répond durant ce lapse de temps (certes court) tu ne verras jamais la réponse, il faut une seule variable serialport pour la classe

    après il faut attendre la réponse
    http://msdn.microsoft.com/fr-fr/libr....readline.aspx
    ici il est précisé qu'un timeout exception peut etre levé dans les cas suivant
    L'opération ne s'est pas terminée avant la fin du délai d'attente.
    - ou -
    Aucun octet n'a été lu.
    et ce n'est pas parce qu'aucun octet n'a été lu qu'il faut en déduire qu'il n'y en aura pas à lire quelques millisecondes plus tard

    apprendre le vb.net en commencant par les ports séries n'est pas forcément la meilleure chose, en théorie pour utiliser le serialport il faut faire du multithreading pour ne pas bloquer l'interface le temps que la réponse arrive
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ta méthode de réception doit être inclue dans une boucle qui doit s’arrêter avec un time out.
    Sinon tu peux aussi créer un événement qui est déclenché dés qu'un caractère est arrivé dans le buffer de réception du port série.

    Et comme là dit Pol63, il ne faut surtout pas fermé le port série entre l'envoi et la réception, ton appli doit avoir une instance globale pour accéder au port série.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonsoir a tous,

    J ai fait la modif sur mon programme j'ouvre une seule fois le port com pour l'envoie et la reception et fait la lecture octet par octet et tout marche
    Merci de vos reponse
    a bientot

  5. #5
    Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Quel est ton nouveau code fonctionnel?

    Merci

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

Discussions similaires

  1. Lecture du port serie USB/RS232
    Par FlyByck dans le forum Général Python
    Réponses: 2
    Dernier message: 26/08/2012, 18h03
  2. Réponses: 0
    Dernier message: 13/09/2008, 17h42
  3. Probleme sur la lecture d'un fichier
    Par Iskander81 dans le forum C
    Réponses: 10
    Dernier message: 10/05/2007, 14h51
  4. probleme avec une carte pci port serie(netmos 9835)
    Par chiroke dans le forum Composants
    Réponses: 1
    Dernier message: 03/05/2006, 13h01
  5. Réponses: 2
    Dernier message: 27/02/2003, 01h33

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