[VB] Emission et réception du port série

Fermé
Dolichotis Messages postés 42 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 11 février 2014 - 5 févr. 2009 à 20:37
 melkos - 22 mai 2010 à 13:30
Bonsoir,

J'essaie d'établir un code qui me permettrait de recevoir des données sur le port série. Mais le débogage bloque sur SerialPort1.ReadLine() quand le port reçoit des données.

Deuxièment quand je teste l'émission de données en écrivant sur le port1 (avec SerialPort1.WriteLine()), la réception ne marche pas (quand je récupère avec ReadLine())

J'ai deux questions : est-ce qu'il est possible d'envoyer et de récupérer les données sur un même port (d'un ordinateur) ?
Comment faire pour lire les données envoyées sur un port série ?

J'ai essayé plusieurs façons : avec serialPort, avec Mscomm, de nouveau avec serialPort...
Y a-t-il quelque chose qu'il faut rajouter ? (ou supprimer ?)

Voici une version avec serialPort...

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'vérifier sur le port com est ouvert
        Try
            SerialPort1.Open()
        Catch ex As Exception
            MessageBox.Show("Impossible d'ouvrir le port ")
        End Try
    End Sub

    'quand le port 1 recoit des données
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        'si des données sont reçues dans le buffer d'entrée
        If SerialPort1.BytesToRead > 0 Then
            Do
                myRxData(SerialPort1.ReadByte)
                If SerialPort1.BytesToRead = 0 Then
                    Exit Do
                End If
            Loop
        End If
    End Sub

    Private Sub myRxData(ByVal mydata As Integer)
        Dim ascChar As String
    
        CheckForIllegalCrossThreadCalls = False

        'format des données du port 1
        ascChar = CChar(ChrW(mydata))
        TextBox1.Text &= ascChar
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'données écrites sur le port 1
        SerialPort1.Write(TextBox2.Text & vbCrLf)
    End Sub


Merci de votre aide !
A voir également:

2 réponses

essai avec ceci :

Private Sub Reception_Trame(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles portComVirtuel.DataReceived

Dim strTmp As String = ""

Try
If portComVirtuel.ReadBufferSize > 0 Then

'Recupere les donnees
strTmp = portComVirtuel.ReadExisting

'Vide le buffer
portComVirtuel.DiscardInBuffer()

myRxData(strTmp)

End If
Catch ex As Exception
MsgBox("Erreur durant la réception" & vbCrLf & vbCrLf & ex.ToString)
End Try

End Sub
2
le probleme c'est que tu dois utiliser Read existing au lieu de read line
0