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 :

existe t'il un tampon dans la gestion du port série ?


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut existe t'il un tampon dans la gestion du port série ?
    Bonjour,

    Je reçois des données par le biais du port série COM1, que j'affiche dans une textbox, avec ce code :

    au chargement de ma fenêtre je configure le port com :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Test_RS232_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'configuration du port RS232
            RS232.BaudRate = 19200 'vitesse du port
            RS232.Parity = IO.Ports.Parity.None 'pas de parité
            RS232.StopBits = IO.Ports.StopBits.One 'un bit d'arrêt par octet
            RS232.DataBits = 8 'nombre de bit par octet
            RS232.RtsEnable = False 'ligne Rts désactivé
            RS232.DtrEnable = False 'ligne Dtr désactivé
            RS232.PortName = "COM1"
            RS232.Open()
    End Sub
    Je gère la réception des données dans le datareceived :
    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 RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
            Dim nb_octet As Integer = RS232.BytesToRead ' on récupère le nombre d'octet présent dans le tampon
            Dim trame(nb_octet - 1) As Byte ' Tableau acceuillant les données au format byte
     
            RS232.Read(trame, 0, nb_octet) 'on lit le port
     
            Dim donnee As String = System.Text.Encoding.ASCII.GetString(trame) ' on récupère les données au format ASCII
     
            'L'évènement DataReceived se situe sur un thread différent que le form, nous devons donc appelé un délégué pour afficher le résultat à l'écran
            If Me.InvokeRequired Then
                Me.Invoke(New _Affiche_ASCII(AddressOf Affiche_ASCII), donnee)
            End If
     
        End Sub
    Et ici j'affiche mes données dans la textbox2 sur la quelle je remplace les caractère illisible et enfin j'affiche le tout dans textbox1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Affiche_ASCII(ByVal donnee As String)
            TextBox2.Text = TextBox2.Text & donnee
            For Each ligne As String In TextBox2.Text
                Try
                    TextBox1.Text = TextBox2.Text.Replace(Chr(10), ControlChars.CrLf).Replace("W1", "").Replace("W1", "").Replace("W1E", "").Replace("W1E", "").Replace("W0F", "").Replace("E", "").Replace("F", "")
                Catch ex As Exception
     
                End Try
            Next
        End Sub
    Donc pas de soucis, les données arrivent bien, mais pas totalement, car je n'obtient qu'une partie des données, c'est à dire les 5 premières lignes environ (50 caractère ASCII), et après plus rien.
    Alors que lorsque j'utilise hyperterminal je reçois la totalité des données plus de 60 lignes (+ de 900 caractères ASCII)
    Donc je me demande si il existe un tampon d'entrée sur le portcom ou un autre moyen d'attendre la réception totale de la trame ?

    Merci pour votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    J'ai essayé en rajoutant ici la ligne de code :
    mais rien n'y change, je pensais que avec cette ligne je pouvais augmenter la taille du buffer !

    quelqu'un a déjà rencontré le même probléme !!!

  3. #3
    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
    attendre la réception de la trame entière, ca va être dur
    sur le port ne transitent que des bits, une fin de trame est quelque chose de subjectif

    le buffer, en théorie une fois que tu lis des octets, le tampon est vidé, et si d'autres octets arrivent l'évènement devrait se redéclencher

    à tout hasard, après le .read, regarde si RS232.BytesToRead vaut bien 0
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    et est ce que lorsque l’événement se redéclenche, il efface alors ce qu'il y avait dans ma textbox pour écrire ce qu'il reçoit à nouveau ?

    oui il vaut bien 0 donc le buffer est vidé !
    dans msdn il été expliqué que readbuffersize augmente la taille du buffer, il s'agit bien du buffer du réception ou je me trompe ?
    question béte mais est il possible de recevoir tous les données d'un coup dés le début de de la réception jusqu’à ce que aucune trame n'arrive sans passé par le buffer ?

  5. #5
    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
    non il efface rien du textbox et tu concatène bien

    après pour le reste je ne sais pas trop quoi te dire, moi j'ai utilisé un serialport j'ai toujours tout reçu ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. PHP et gestion de port série
    Par timbs dans le forum Langage
    Réponses: 3
    Dernier message: 19/06/2008, 21h17
  2. Réponses: 6
    Dernier message: 05/06/2008, 23h04
  3. Api pour la gestion du port série et JRE sur un ancêtre
    Par Orian dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 29/01/2007, 18h22
  4. [CCom] Gestion du port série
    Par Marthym dans le forum MFC
    Réponses: 6
    Dernier message: 23/11/2005, 09h53
  5. Gestion du port série
    Par Aradesh dans le forum MFC
    Réponses: 5
    Dernier message: 18/10/2005, 16h43

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