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 :

Reception Données RS232 VB


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut Reception Données RS232 VB
    Bonjour,

    Je suis étudiant et je me lance dans le langage de programmation Visual basic. J'ai pour projet de lire les données d'une carte RFID via un lecteur en RS232. J'ai donc commencer à écrire mon code. J'arrive à lui envoyer une trame mais impossible d'afficher la réception des trames. Je sais que c'est un problème pas compliquée mais cela fait 2 jours que je tourne en rond sur les forums donc voici mon code:
    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
    Public Class Form1
     
        Dim a As Integer
     
        Public Event DataReceived As IO.Ports.SerialDataReceivedEventHandler
     
        ' -------------------------   Fenetre du Programme -------------------------------
        Private Sub Form1_Load() Handles MyBase.Load
     
            Try                     'Ouverture du port serie
                SerialPort1.Open()
            Catch ex As Exception
                MessageBox.Show("Impossible d'ouvrir le port ")
            End Try
     
        End Sub
        '---------------------------------  Bouton pour l'arret du Port---------------------------
     
        Private Sub BP_arret_Click() Handles BP_arret.Click
            SerialPort1.Close()
     
        End Sub
        '-------------------------------Reception des données du port série -----------------------
        Private Sub SerialPort1_DataReceived() Handles SerialPort1.DataReceived
            Dim inputData As Byte
            inputData = SerialPort1.ReadExisting
            Me.Invoke(New EventHandler(AddressOf DoUpdate))
     
        End Sub
        '------------------------------Envoie d'une Trame avec un Bouton -------------------
        Private Sub donnee_Click() Handles donnee.Click
     
            SerialPort1.Write(Chr(18) & Chr(1) & Chr(32)) 
     
        End Sub
     
        Public Sub DoUpdate()
            TextBox1.Text = TextBox1.Text & inputData
        End Sub
     
    End Class
    Voila mon problème vient de la réception des données je souhaite les afficher dans un TextBox en Hexadecimal.

    Je remercie d'avance celui qui prendra le temps de m'aider.

    A bientôt ....

  2. #2
    Membre éprouvé Avatar de Anklor
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 76
    Par défaut
    Il faut que tu sorte ta variable inputData de la procédure SerialPort1_DataReceived et que tu la mette en dessous de ta variable a (qui ne sert pas en passant )

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Oui j'avais trouvé et cela marche mais pas tout à fait ^^ J'obtient que le premier Octet. Je dois recevoir en hexa "88 88 88 00" et avec cette méthode je recois 136 -> (88 en hexa) Donc ma question est comment pouvoir récupérer toute ma trame ainsi que l'afficher en Hexa dans ma fenetre VB.

    Merci

    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
    Public Class Form1
        Dim inputData As Byte
     
        Public Event DataReceived As IO.Ports.SerialDataReceivedEventHandler
     
        ' -------------------------   Fenetre du Programme -------------------------------
        Private Sub Form1_Load() Handles MyBase.Load
     
            Try                     'Ouverture du port serie
                SerialPort1.Open()
            Catch ex As Exception
                MessageBox.Show("Impossible d'ouvrir le port ")
            End Try
     
        End Sub
        '---------------------------------  Bouton pour l'arret du Port---------------------------
     
        Private Sub BP_arret_Click() Handles BP_arret.Click
            SerialPort1.Close()
     
        End Sub
        '-------------------------------Reception des données du port série -----------------------
        Private Sub SerialPort1_DataReceived() Handles SerialPort1.DataReceived
     
        End Sub
        '------------------------------Envoie d'une Trame avec un Bouton -------------------
        Private Sub donnee_Click() Handles donnee.Click
     
            SerialPort1.Write(Chr(18) & Chr(1) & Chr(32)) 
            inputData = SerialPort1.ReadByte
            Me.Invoke(New EventHandler(AddressOf DoUpdate))
     
     
        End Sub
     
        Public Sub DoUpdate()
            TextBox1.Text = TextBox1.Text & inputData
     
        End Sub
     
     
    End Class

  4. #4
    Membre éprouvé Avatar de Anklor
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 76
    Par défaut
    Tu dois rien recevoir, vu que tu as vidé ta procédure SerialPort1_DataReceived . Tu recois qu'un seul caractère car tu lis aussitôt après l’écriture mais après il y a rien.
    En passant, évite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Text = TextBox1.Text & inputData
    choisie plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.AppendText(inputData)
    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
    Public Class Form1
     
        Dim inputData As Byte
     
        Private Sub Form1_Load() Handles MyBase.Load
     
            Try                     'Ouverture du port serie
                SerialPort1.Open()
            Catch ex As Exception
                MessageBox.Show("Impossible d'ouvrir le port ")
            End Try
     
        End Sub
     
        Private Sub BP_arret_Click() Handles BP_arret.Click
     
            SerialPort1.Close()
     
        End Sub
     
        Private Sub SerialPort1_DataReceived() Handles SerialPort1.DataReceived
     
            inputData = SerialPort1.ReadExisting
            Me.Invoke(New EventHandler(AddressOf DoUpdate))
     
        End Sub
     
        Private Sub donnee_Click() Handles donnee.Click
     
            SerialPort1.Write(Chr(18) & Chr(1) & Chr(32)) 
     
        End Sub
     
        Public Sub DoUpdate()
     
            TextBox1.AppendText(inputData)
     
        End Sub 
     
    End Class

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Merci pour ton aide.

    Avec ta modification de programme j'arrive maintenant à avoir les 2 premiers octets de ma trame, mais il m'en manque 2 ... Je ne comprend pas pourquoi. En bouinnant(^^) un peu avec le programme j'arrive a recevoir mes 4 octets sur ma trame RS232 (observer grâce à un logiciel espion RS232) mais bien sûr mon programme ne les reçoit pas, et avec le programme ci-dessus je n'en reçois que 2 octets. Donc je pense que cela vien de la maniére de vouloir lire les données dans le programme?? qu'en pensez vous?

    Merci

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Voici plus en detaille mon problème:

    Je veux recevoir ces données :

    Port ouvert par le processus "T5557bis.vshost.exe" (PID: 2328)
    Requête: 12 01 20 ..
    Réponse: 88 88 88 00 ˆˆˆ.
    Port fermé

    Je les recois lorsque j'envoie le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub SerialPort1_DataReceived() Handles SerialPort1.DataReceived
            inputData = SerialPort1.ReadLine
            Me.Invoke(New EventHandler(AddressOf DoUpdate))
    Mais rien ne s'affiche dans ma TextBox1
    Alors que sur la liaison RS232 je les reçois bien

    Port ouvert par le processus "T5557bis.vshost.exe" (PID: 2328)
    Requête: 12 01 20 ..
    Réponse: 88 88 88 00 ˆˆˆ.
    Port fermé



    Lorsque j'envoie ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub SerialPort1_DataReceived() Handles SerialPort1.DataReceived
            inputData = SerialPort1.ReadByte
            Me.Invoke(New EventHandler(AddressOf DoUpdate))
    Sur ma Liason Rs232 je reçois cette fois que

    Port ouvert par le processus "T5557bis.vshost.exe" (PID: 2328)
    Requête: 12 01 20 ..
    Réponse: 88 88 ˆˆˆ.
    Port fermé

    Et dans ma TextBox s'affiche les données réponse..

    Voila j'espere m'avoir bien exprimer ^^ ce n'est pas toujours facile.

    Merci d'avance

  7. #7
    Membre éprouvé Avatar de Anklor
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 76
    Par défaut
    Quelle valeur as tu mis dans ta mémoire tampon ??

    ReadLine lira jusqu'à ce que tu es une nouvelle ligne : Chr(13) & chr(10)
    Comme ton périphérique n’envoie pas de NewLine, il est normal que rien ne s'affiche.

    ReadByte lit 1 octet (le premier reçu qui reste en mémoire tampon)

    Ce que je comprend pas c'est ce cas : tu dis que ça s'affiche bien dans ta textbox mais que ton logiciel espion RS232 ne voit que 2 octets ??

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Bonjour,

    Bon alors j'ai avancé j'arrive à avoir un peu plus d'octets mais toujours pas la totalité cette fois j'en veux 24 je crois et j'en é que 5-6. je te redonne le code que j'ai modifié et regarde le montage que j'ai fait sa va surment mieu t'éclairer. Mon but et de recréer le programme qui et en chinoi en un programme français ^^. J'utilise donc le logiciel espion RS232 pour retrouver les commandes à envoyer. Peut être que tu aura un déclique en regardant le code et les trames sinon ben ..... ^^

    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
    Public Class Form1
            Dim inputData As Long
     
        ' -------------------------   Fenetre du Programme -------------------------------
        Private Sub Form1_Load() Handles MyBase.Load
     
            Try                     'Ouverture du port serie
                SerialPort1.Open()
            Catch ex As Exception
                MessageBox.Show("Impossible d'ouvrir le port ")
            End Try
     
        End Sub
        '---------------------------------  Bouton pour l'arret du Port---------------------------
     
        Private Sub BP_arret_Click() Handles BP_arret.Click
            SerialPort1.Close()
        End Sub
        '-------------------------------Reception des données du port série -----------------------
        Private Sub SerialPort1_DataReceived() Handles SerialPort1.DataReceived
            inputData = SerialPort1.ReadByte
            Me.Invoke(New EventHandler(AddressOf DoUpdate))
     
        End Sub
        '------------------------------Envoie d'une Trame avec un Bouton -------------------
        Private Sub donnee_Click() Handles donnee.Click
     
            SerialPort1.Write(Chr(18) & Chr(8) & Chr(32)) ' & Chr(8) & Chr(128) & Chr(232) & Chr(0))
     
        End Sub
     
        Public Sub DoUpdate()
            TextBox1.AppendText(Hex(inputData))
     
        End Sub
     
    End Class



    Merci ENCORE ^^
    Bonne Journée

  9. #9
    Membre éprouvé Avatar de Anklor
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 76
    Par défaut
    Donc apparemment, ton programme marche bien, il affiche bien ce que tu reçois. Par contre ce qui n'est pas normal, c'est qu'il y a un affichage "brut" du code Hexa dans ta "textbox" sauf "00" remplacé en "0"

    Regarde aussi au niveau de ton DTR, il se peut que le périphérique n’envoie plus de données car ton DTR n'est pas activé. (on le voit avec ton logiciel chinois qui active le DTR)

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Ben oui et non je n'ai pas encore toute ma trame entière je devrait avoir
    " 88 88 88 00 00 00 00 00 01 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 01 23 45 67"
    mais je n'obtient que
    " 88 88 88 00 00 00 00 00"

    Mais bien observer je n'avait pas vu les leds en bas du logiciel espion.
    Mais sais tu l'activer avec Visual Basic car faut l'activer dans le programme car jutilise toujours le même matériel.

    Merci

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Escuse moi je suis encore allé trop vite .... J'ai reussi à activer le DTR mais Cela n'a rien changer.

    Je comprend pas trop la, Pour moi cela vien de la commande pour lire les données car avec un "ReadLine" le logiciel espion m'envoie bien toutes les données mais rien ne s'affiche dans mes TextBox .

    A tu une idée?

  12. #12
    Membre éprouvé Avatar de Anklor
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 76
    Par défaut
    non mais si tu compares ton logiciel espion et ton soft, tout fonctionne.

    maintenant, si tu n'as pas la même chose entre ton soft et le logiciel chinois il y a des chances que se soit pour les raisons invoqués : DTR

    il suffit d'informer le SerialPort avec DtrEnabled

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Donc j'ai essayer de bidouiller touts les paramétres du port voir si quelquechose changer mais pour moi cela fonctionne le "Hic" c'est que je veux une Grande Trame pour cela il me faudrait la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Private Sub SerialPort1_DataReceived() Handles SerialPort1.DataReceived
            Try
                inputData = SerialPort1.ReadLine
                Me.Invoke(New EventHandler(AddressOf DoUpdate))
            Catch ioEx As System.IO.IOException
            End Try
    End Sub
    Mais voila le Hic Pourquoi cela ne s'affiche pas ....
    Un problème de définition de variable ...
    Tu en pense quoi?


    Merci encore

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

Discussions similaires

  1. Reception données JSON méthode PUT
    Par charles888 dans le forum REST
    Réponses: 2
    Dernier message: 17/01/2014, 23h43
  2. [XL-2010] Récupération données RS232
    Par adoulsan dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/10/2013, 15h58
  3. Reception données AJAX/PHP
    Par Guignon dans le forum jQuery
    Réponses: 15
    Dernier message: 15/07/2013, 09h34
  4. [XL-2003] Récupérer données RS232 dans Excel 2003
    Par fizzzico dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/02/2011, 19h42
  5. Acquisition de données RS232 via USB
    Par woimanu dans le forum LabVIEW
    Réponses: 0
    Dernier message: 11/06/2009, 11h25

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