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 :

Ecriture et lecture sur un port serie


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 22
    Points
    22
    Par défaut Ecriture et lecture sur un port serie
    Bonjour,
    je débute en VB.NET et j'aimerai savoir comment faire pour communiquer depuis un pc vers un appareil en utilisant le port série.

    tout ce que j'arrive à faire pour l'instant c'est le configurer:
    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
            Dim portSerie As System.IO.Ports.SerialPort
     
            portSerie = New System.IO.Ports.SerialPort
     
     
            portSerie.BaudRate = 9600
            portSerie.DataBits = 8
            portSerie.Parity = 0
            portSerie.StopBits = 1
     
            portSerie.Open()
     
            Try
                TextBox1.Text = portSerie.Read(30, 0, 0)
            Catch ex As Exception
                MsgBox("erreur")
            End Try
    j'ai un petit soucis avec la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Text = portSerie.Read(30, 0, 30)

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 22
    Points
    22
    Par défaut
    bon j'ai quelque peu modifier mon code mais j'ai encore des erreurs:

    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
            Dim portSerie As System.IO.Ports.SerialPort
     
            portSerie = New System.IO.Ports.SerialPort
     
     
            portSerie.BaudRate = 9600
            portSerie.DataBits = 8
            portSerie.Parity = 0
            portSerie.StopBits = 1
     
            portSerie.Open()
     
     
            Dim bufferin() As Char = New Char(512) {}
            TextBox1.Text = ""
     
            Try
                    portSerie.Read(bufferin, 0, 512)
                    TextBox1.Text = TextBox1.Text & bufferin
            Catch ex As Exception
     
            End Try
    le soucis c'est qu'il ne me lit que le premier caractère que je recois

    j'aimerai pouvoir lire en continu ce que je recois pour tous les afficher

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 23
    Points : 25
    Points
    25
    Par défaut
    Voici l'ensemble des méthodes de la classe http://msdn.microsoft.com/en-us/libr...erialport.aspx

    Je te conseil d'essayer avec la fonction Readline()

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 22
    Points
    22
    Par défaut
    merci du conseil mais c'est la premiere chose que j'ai fais et ca ne m'a pas trop aider :S...

    j'ai encore modifié mon code mais je sa plante complet:

    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
        Private Sub reception_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles reception.Click
     
            'Dim bufferin() As Char = New Char(4096) {}
     
            Dim buffer() As Byte = New Byte(4096) {}
            Dim offset As Integer = 0
            Dim count As Integer = Buffer.Length
            Dim text As String
     
            text = &HAA + &HAA + &H43 + &H0 + &H0 + &H0 + &H14 + &H0 + &H0 + &H0 + &H0 + &H1 + &H0 + &H0 + &H0 + &H14 _
                        + &H0 + &H0 + &H0 + &H0 + &H0 + &H0 + &H0 + &H0 + &H0 + &H0 + &H0 + &H0 + &H56 + &H14
     
            portSerie.Write(text)
     
            Dim returnValue As String
     
            Try
                returnValue = portSerie.Read(Buffer, offset, count)
                TextBox1.Text = returnValue
            Catch ex As Exception
                MsgBox("erreur")
            End Try
     
        End Sub
    sa plante au niveau de la récéption :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    returnValue = portSerie.Read(Buffer, offset, count)
    des que je passe à la ligne d'apres sa plante

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Si ça peut t'aider voilà comment je me sert du port série :

    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
            Try
                serialPort = New System.IO.Ports.SerialPort(My.Settings.nameplatePrinterPort)
                serialPort.Open()
                Dim ligne1 As String = ""
                Dim ligne2 As String = ""
                Dim ligne3 As String = ""
     
                serialPort.WriteLine("~HS")
                serialPort.ReadTimeout = 500
     
                ligne1 = serialPort.ReadLine
                ligne2 = serialPort.ReadLine
                ligne3 = serialPort.ReadLine
            Catch ex As Exception
     
                ok = False
     
            Finally
                If serialPort IsNot Nothing AndAlso serialPort.IsOpen Then
                    serialPort.Close()
                End If
            End Try
    Donc ici je déclare mon port, je lui envoie une instruction, et à réception de cette instruction il me renvoie 3 lignes.
    Si je n'ai pas de réponse au bout d'une demi seconde je sort dans le catch
    My.Settings.nameplatePrinterPort vaut "COM1"
    En éspérant que ça puisse t'aider.

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 22
    Points
    22
    Par défaut
    enfait d'un coté j'ai mon appli, et de l'autre j'ai une carte mère qui est dans un appareil.

    Depuis mon appli j’envoie des trames de longueur fixe qui font 30 octet...et la carte mère me répond elle aussi avec une trame de longueur fixe qui fait 30 octets.

    seulement je ne sais pas comment faire pour envoyer ma trame de 30 octet et je ne sais pas comment faire pour la réceptionner...

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 22
    Points
    22
    Par défaut
    voila j'ai enfin résolu mon probleme de lecture et d'écriture.j'ai mi le code complet (ouverture du port, écriture, lecture et fermeture), sa peut toujours servir à d'autre .

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
        Private Sub connexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles connexion.Click
     
            portSerie.Open()
            connexion.Enabled = False
            deconnexion.Enabled = True
            TextBox1.Text = "connecté"
     
        End Sub
     
     
        Private Sub deconnexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles deconnexion.Click
     
            portSerie.Close()
            connexion.Enabled = True
            deconnexion.Enabled = False
            TextBox1.Text = "déconnecté"
     
        End Sub
     
        Private Sub reception_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles reception.Click
     
            'déclaration tableaux de bytes
            Dim bufferin() As Byte = New Byte(29) {}
            Dim bufferout() As Byte = New Byte(29) {TRAME_DEBUT1, _
                                                    TRAME_DEBUT2, _
                                                    TRAME_COMMANDE, _
                                                    TRAME_IDENTIFIANT_3, _
                                                    TRAME_IDENTIFIANT_2, _
                                                    TRAME_IDENTIFIANT_1, _
                                                    TRAME_IDENTIFIANT_0, _
                                                    TRAME_MDP_3, _
                                                    TRAME_MDP_2, _
                                                    TRAME_MDP_1, _
                                                    TRAME_MDP_0, _
                                                    TRAME_NB_DATA, _
                                                    TRAME_DATA0_3, _
                                                    TRAME_DATA0_2, _
                                                    TRAME_DATA0_1, _
                                                    TRAME_DATA0_0, _
                                                    TRAME_DATA1_3, _
                                                    TRAME_DATA1_2, _
                                                    TRAME_DATA1_1, _
                                                    TRAME_DATA1_0, _
                                                    TRAME_DATA2_3, _
                                                    TRAME_DATA2_2, _
                                                    TRAME_DATA2_1, _
                                                    TRAME_DATA2_0, _
                                                    TRAME_DATA3_3, _
                                                    TRAME_DATA3_2, _
                                                    TRAME_DATA3_1, _
                                                    TRAME_DATA3_0, _
                                                    TRAME_CHECKSUM1, _
                                                    TRAME_CHECKSUM2}
     
            Try
                'envoi de la trame (écriture)
                portSerie.Write(bufferout, 0, 30)
                portSerie.ReadTimeout = 500
                TextBox1.Text = ""
                'réception de la trame(lecture)
                portSerie.Read(bufferin, 0, 30)
                TextBox1.Text = TextBox1.Text & portSerie.Read(bufferin, 0, 30)
            Catch ex As Exception
                MsgBox(ex.ToString())
            End Try

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

Discussions similaires

  1. Ecriture / Lecture sur le port parallèle
    Par steeray dans le forum Windows
    Réponses: 11
    Dernier message: 05/08/2006, 18h56
  2. lecture & ecriture sur le port serie
    Par anouar dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 08/07/2005, 17h15
  3. evenement sur le port serie !
    Par Stopher dans le forum Windows
    Réponses: 10
    Dernier message: 27/01/2005, 22h12
  4. Comment déterminer la fin d'un message sur le port serie ?
    Par zeddy23 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 11/01/2005, 05h12
  5. [Kylix] Lecture sur le port série en C++
    Par MD Software dans le forum EDI
    Réponses: 1
    Dernier message: 08/05/2004, 12h52

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