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 :

Besoin d'un tuto pour l'utilisation du port COM


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut Besoin d'un tuto pour l'utilisation du port COM
    Bonjour a vous,

    J'aurais besoin d'un bon tuto pour m'expliquer comment utilisé le port serie
    pour que je puisse envoyer et recevoir des chaines de caractères.

    J'aimerais utilisé les fonctions de visual studio 2008, car j'ai trouvé quelque exemple pour le moment mais pas concluant

    Je continu a chercher

    Merci

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    c'est la classe serialport qui fait ca, tu trouveras des exemples sur google

    http://www.google.fr/search?hl=fr&q=...chercher&meta=
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    c'est la classe serialport qui fait ca, tu trouveras des exemples sur google

    http://www.google.fr/search?hl=fr&q=...chercher&meta=
    bonjour, j'ai bien vu que c'était cette classe mais pour le moment je trouve pas d'exemple concret qui pourrais me convenir , mais je continu a chercher bien sur. si des fois vous avez des piste je suis preneur.

    ha j'oubliai, pour le moment je recherche pas trop en anglais car je suis trop limite dans cette langue, faut que je mis fasse tout de même, j'espère que le greta pourra me donnée des cours accélérer en anglais (oui je sais.... en français aussi )

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    l'utilisation ressemble à ca :

    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
     
    Public Class Form1
     
        Private _com As System.IO.Ports.SerialPort
     
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            _com = New System.IO.Ports.SerialPort
            ' paramétres à trouver en général sur la doc de la chose avec laquelle on veut dialoguer
            _com.PortName = "COM1"
            _com.BaudRate = 9600
            _com.DataBits = 8
            _com.StopBits = IO.Ports.StopBits.One
            _com.Parity = IO.Ports.Parity.None
     
            ' démarrage du thread de réception
            Dim th As New System.Threading.Thread(AddressOf receive)
            th.IsBackground = True
            th.Start()
        End Sub
     
     
        Private Sub send(ByVal str As String)
            Dim octets(str.Length) As Byte
            For i As Integer = 0 To str.Length - 1
                octets(i) = CByte(Asc(str(i)))
            Next
     
            _com.Write(octets, 0, octets.Count)
        End Sub
     
     
        Private Sub receive()
     
            While True
                If _com.BytesToRead = 0 Then
                    System.Threading.Thread.Sleep(100)
                    Continue While
                End If
     
     
                Dim str As String = _com.ReadExisting
     
                'traitement de str
            End While
     
        End Sub
     
     
    End Class
    on définit le paramétrage du port com
    j'ai mis un sub qui sert à envoyer un string (je traduit au passage en octet, j'ai dejà eut des soucis en envoyant un string directement)
    et on démarre un thread qui sert à vérifier ce qu'il y a

    sinon il y a un évènement de réception, mais je ne l'ai jamais utilisé, peut etre qu'il fonctionne bien

    le problème de la communication c'est que ce n'est pas totalement fiable
    en général il y a des caractères de fin de commandes sur lesquels il faut se baser, et il faut aussi vérifier l'intégrité de la trame

    parce que si on truc renvoie une commande du type A>0145Cr
    et qu'il y a des parasites, tu peux très bien recevoir 14eH47
    ce qui n'a rien à voir !!!

    donc il faut en général vérifier que ca correspond à ce que t'attends, si ca ne correspond pas, tu recommence l'envoie de la trame de question et tu attends une nouvelle réponse
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    l'utilisation ressemble à ca :

    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
     
    Public Class Form1
     
        Private _com As System.IO.Ports.SerialPort
     
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            _com = New System.IO.Ports.SerialPort
            ' paramétres à trouver en général sur la doc de la chose avec laquelle on veut dialoguer
            _com.PortName = "COM1"
            _com.BaudRate = 9600
            _com.DataBits = 8
            _com.StopBits = IO.Ports.StopBits.One
            _com.Parity = IO.Ports.Parity.None
     
            ' démarrage du thread de réception
            Dim th As New System.Threading.Thread(AddressOf receive)
            th.IsBackground = True
            th.Start()
        End Sub
     
     
        Private Sub send(ByVal str As String)
            Dim octets(str.Length) As Byte
            For i As Integer = 0 To str.Length - 1
                octets(i) = CByte(Asc(str(i)))
            Next
     
            _com.Write(octets, 0, octets.Count)
        End Sub
     
     
        Private Sub receive()
     
            While True
                If _com.BytesToRead = 0 Then
                    System.Threading.Thread.Sleep(100)
                    Continue While
                End If
     
     
                Dim str As String = _com.ReadExisting
     
                'traitement de str
            End While
     
        End Sub
     
     
    End Class
    on définit le paramétrage du port com
    j'ai mis un sub qui sert à envoyer un string (je traduit au passage en octet, j'ai dejà eut des soucis en envoyant un string directement)
    et on démarre un thread qui sert à vérifier ce qu'il y a

    sinon il y a un évènement de réception, mais je ne l'ai jamais utilisé, peut etre qu'il fonctionne bien

    le problème de la communication c'est que ce n'est pas totalement fiable
    en général il y a des caractères de fin de commandes sur lesquels il faut se baser, et il faut aussi vérifier l'intégrité de la trame

    parce que si on truc renvoie une commande du type A>0145Cr
    et qu'il y a des parasites, tu peux très bien recevoir 14eH47
    ce qui n'a rien à voir !!!

    donc il faut en général vérifier que ca correspond à ce que t'attends, si ça ne correspond pas, tu recommence l'envoie de la trame de question et tu attends une nouvelle réponse
    Merci pour cette aide, j'était justement sur la fonction de reception et cela a l'air de marcher pas trop mal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    et en fin de compte cela crée un thread car a l'intérieur de cette méthode je ne pouvais pas ajouter le texte reçus dans une listBox de la form.

    Maintenant j'ai effectivement des soucis de décomposition de la trame reçu a cause des caractère de fin qui me son envoyer par le simulateur (logiciel simulant mon système) car la lecture de la trame par ReadLine s'arrête trop top le système m'envoyant plusieurs caractère d'arrêt si bien que je retrouve le ou les caractère manquant lors de ma prochaine réception.

    Soit faut que je décompose la trame caractère par caractère puis arrêter au dernier caractère de fin. Sois faut que je vide le buffer avant une nouvelle réception.

    En tout cas merci je prend note et garde sa dans mon pense bête

  6. #6
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    En vidant le buffer avec la commande DiscardInBuffer cela marche nickel mais je viens d'apprendre que je risque d'avoir plusieurs ligne en retour donc il faut que je fasse différemment avec la commande read tout simplement jusqu'au buffer vide.

Discussions similaires

  1. Besoin d'un tuto pour les bases de données
    Par rj450 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 14/06/2010, 09h59
  2. Un guide de bonnes pratiques pour programmer avec le port COM ?
    Par Chekov dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/03/2008, 17h25
  3. comment utiliser le port com a mes application?
    Par zakichanedz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2007, 20h03
  4. Besoin d'un tuto pour réaliser un jeu 2D
    Par luffydu22 dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 21/04/2006, 10h13
  5. Utilisation du port COM
    Par chourmo dans le forum Composants VCL
    Réponses: 10
    Dernier message: 13/06/2005, 11h09

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