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 :
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 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
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
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
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.
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
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
Partager