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 6 et antérieur Discussion :

affichage des données reçus sur le port série


Sujet :

VB 6 et antérieur

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut affichage des données reçus sur le port série
    salut,
    j'ai un programme a faire avec le vb6 qui reçoit des données a travers le port série et qui les affiche dans des labels en temps réel .
    ces données sont des valeurs de débits et de températures,j'utilise 2 débitmètres qui donnent 2 valeurs de débit et 3 thermocouples qui donnent 3 valeurs de températures , j'utilise aussi des cartes électroniques qui relient le tous.
    principe de fonctionnement:au début il faut envoyer l'adresse au dispositif et des qu'il reçoit l'adresse il m'envoie une réponse que je dois l'afficher sur un label .
    les adresses sont : !11,f pour le debitmetre1, !12,f pour le debitmetre2,
    !13,f pour le thermocouple1, !14,f pour le thermocouple2, !15,f pour le thermocouple3,
    la réponse reçue comporte l'adresse et la valeur ,par exemple si j'envoie !11,f
    au débitmètre1 il m'envoie !11,f21.23 ,21.23 est la valeur du debit;je dois filtrer la reponse reçue en affichant juste la valeur.
    le principe est le même pour l'autre débitmètre et les 3 thermocouples .
    j'ai fais le programme mais il ne fonctionne pas correctement , le problème c'est que il m'affiche pas correctement les valeurs par exemple il me donne la valeur de débit avec la valeur de temperature au dessous accompagné de l'adresse malgré que j'ai filtré tous les adresses ,des fois il n'affiche pas la valeur de température 2 .........
    voila mon programme :


    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Private Sub Form_Load()
     
     
     
     
    MSComm1.RThreshold = 10
     
     
     
     
    MSComm1.InputLen = 30
    ' 9600 Baud, No Parity, 8 Data Bits, 1 Stop Bit
    MSComm1.Settings = "9600,N,8,1"
     
    ' Disable DTR
    MSComm1.DTREnable = False
     
    ' Open COM1
    MSComm1.CommPort = 1
    MSComm1.PortOpen = True
     
    Private Sub Timer1_Timer()
    MSComm1.Output = "!11,f" & vbCr
    Sleep (200)
    MSComm1.Output = "!12,f" & vbCr
    Sleep (200)
    MSComm1.Output = "!13,f" & vbCr
    Sleep (200)
    MSComm1.Output = "!14,f" & vbCr
    Sleep (200)
    MSComm1.Output = "!15,f" & vbCr
    End Sub
     
    Private Sub MSComm1_OnComm()
    Dim sData As String    ' Holds our incoming data
    Dim lHighByte As Long   ' Holds HighByte value
    Dim lLowByte As Long    ' Holds LowByte value
    Dim lWord As Long       ' Holds the Word result
     
    ' If comEvReceive Event then get data and display
    If MSComm1.CommEvent = comEvReceive Then
     
        sData = MSComm1.Input ' Get data 
      If Mid(sData, 1, 4) = "!11," Then
     
        Label2.Caption = Mid(sData, 5)
        End If
     If Mid(sData, 1, 4) = "!12," Then
     
        Label4.Caption = Mid(sData, 5)
     
        End If
        If Mid(sData, 1, 4) = "!13," Then
     
        Label6.Caption = Mid(sData, 5)
     
        End If
        If Mid(sData, 1, 4) = "!14," Then
     
        Label8.Caption = Mid(sData, 5)
     
        End If
        If Mid(sData, 1, 4) = "!15," Then
     
        Label10.Caption = Mid(sData, 5)
     
        End If
     
     
     
     
    End If
    End Sub
     
    End Sub

    le timer est utilisé pour envoyer les adresse chaque 1seconde
    la fonction sleep sert a faire une pose de 200ms pour ne pas envoyer toutes les adresses en même temps.
    MSComm1 est le port série.
    la fonction mid fait le filtrage de la donnée reçue .
    vbcr est le carriage return (retour a la ligne ).

    Merci d'avance.

  2. #2
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Points : 1 168
    Points
    1 168
    Par défaut
    Moi, j'enverrais la demande à une adresse "!11," et j'attendrais la réponse
    puis la suivante "!12," et j'attendrais la réponse etc etc

    Avec un TimeOut en cas de non réponse pour ne pas bloquer la scrutation

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    comment faire le programme avec le timeout ?

  4. #4
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Points : 1 168
    Points
    1 168
    Par défaut
    Laisse tomber le TimeOUT ..... pour le moment
    C'est une sécurité pour éviter que le programme ne se bloque en cas de non-réponse d'un périphérique

  5. #5
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 627
    Points
    16 627
    Par défaut
    Citation Envoyé par DAUDET78 Voir le message
    Moi, j'enverrais la demande à une adresse "!11," et j'attendrais la réponse
    puis la suivante "!12," et j'attendrais la réponse etc etc.......
    Un code de se genre devrait faire l'affaire
    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
    Private Sub Command1_Click()
    MSComm1.Output = "!11,f" & vbCr
    End Sub
    Private Sub MSComm1_OnComm()
    Dim sData As String    ' Holds our incoming data
    Dim lHighByte As Long   ' Holds HighByte value
    Dim lLowByte As Long    ' Holds LowByte value
    Dim lWord As Long       ' Holds the Word result
     
    ' If comEvReceive Event then get data and display
    If MSComm1.CommEvent = comEvReceive Then
        sData = MSComm1.Input ' Get data
        Select Case Mid(sData, 1, 4)
            Case "!11,"
                Label2.Caption = Mid(sData, 5)
                MSComm1.Output = "!12,f" & vbCr
            Case "!12,"
                Label4.Caption = Mid(sData, 5)
                MSComm1.Output = "!13,f" & vbCr
            Case "!13,"
                Label6.Caption = Mid(sData, 5)
                MSComm1.Output = "!14,f" & vbCr
            Case "!14,"
                Label8.Caption = Mid(sData, 5)
                MSComm1.Output = "!15,f" & vbCr
            Case "!15,"
                Label10.Caption = Mid(sData, 5)
        End Select
    End If
    End Sub
    C'est la réponse de ton périphérique qui te permet de déclencher la demande d'information suivante.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    merci pour code ProgElecT,
    mais comment je fais pour insérer ce code dans une boucle répétitive pour avoir un affichage en temps réel sans utiliser le timer?

  7. #7
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Tu as essayé le code de ProgElect bien sur ? Tu verras qu'à partir du moment où tu as cliqué sur le bouton de commande, ca tourne en boucle.
    L'inconvénient que je vois à ce code (désolé ProgElect ) c'est qu'il se bloque à partir du moment où un capteur ne répond plus.

  8. #8
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 627
    Points
    16 627
    Par défaut
    Salut
    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
    Option Explicit
    Dim Bouclage As Boolean 'drapeau
     
    Private Sub Command1_Click()
    Bouclage = True
    MSComm1.Output = "!11,f" & vbCr
    End Sub
    Private Sub MSComm1_OnComm()
    Dim sData As String    ' Holds our incoming data
    Dim lHighByte As Long   ' Holds HighByte value
    Dim lLowByte As Long    ' Holds LowByte value
    Dim lWord As Long       ' Holds the Word result
     
    ' If comEvReceive Event then get data and display
    If Bouclage = False Then Exit Sub 'pour mettre fin au bouclage
    If MSComm1.CommEvent = comEvReceive Then
        sData = MSComm1.Input ' Get data
        Select Case Mid(sData, 1, 4)
            Case "!11,"
                Label2.Caption = Mid(sData, 5)
                MSComm1.Output = "!12,f" & vbCr
            Case "!12,"
                Label4.Caption = Mid(sData, 5)
                MSComm1.Output = "!13,f" & vbCr
            Case "!13,"
                Label6.Caption = Mid(sData, 5)
                MSComm1.Output = "!14,f" & vbCr
            Case "!14,"
                Label8.Caption = Mid(sData, 5)
                MSComm1.Output = "!15,f" & vbCr
            Case "!15,"
                Label10.Caption = Mid(sData, 5)
                'recommence depuis la 1° adresse (bouclage)
                MSComm1.Output = "!11,f" & vbCr
        End Select
    End If
    End Sub
    Comme tu peux le voir ligne 2, une variable qui permet de mettre fin à la scrutation, ligne 15 pour sortir de la scrutation, ligne 34 pour continuer avec la 1° adresse du périphérique.

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/09/2014, 19h59
  2. Réponses: 0
    Dernier message: 25/10/2013, 22h25
  3. Affichage sur PC des données récupérées sur un port parallele
    Par mic68hc11 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/07/2012, 09h06
  4. Affichage de données reçues sur un port série: problème de type
    Par mah00 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 28/04/2011, 00h42
  5. codage des données à l'entrée du port série
    Par sanatou dans le forum Windows
    Réponses: 4
    Dernier message: 09/11/2006, 11h22

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