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 :

lecture du port série


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut lecture du port série
    Bonjour,
    mon problème est le suivant:
    j'ai une sonde de température reliée à un boitier qui affiche la température sur l'écran du boitier.Je relie le boitier au port usb de mon ordi (win98) et j'aimerais lire la température et l'afficher grâce à une interface faite en vb6.
    J'arrive à afficher dans une textbox plein de températures d'un coup, en stockant les données arrivant du port série dans une variable de type chaine de caractères.Dans mon textbox ca ressemble un peu à ca :
    1: 20,5 1:21,0 1:21,0 1:20,5 1:21,0 1:21,0
    les 20,5 ou 21,0 représentant bien sûr la température.
    Pour avoir ca j'ouvre le controle mscomm et je stocke dans ma variable :
    temperature$=MScomm1.input
    ensuite j'affiche temperature$.

    Le problème c'est que je ne sais pas comment traiter les données arrivant sur le port série, je voudrais pouvoir stocker juste les caractères correspondant aux chiffres d'une température dans une variable, avec la fréquence que je souhaite (utilisation de timers?),mais je ne sais pas comment faire.

    Si quelqu'un pouvait me donner des conseils ou des liens vers des sites expliquant comment stocker des données provenant du port série, ca m'aiderait bien!

    ps: Avec hyperterminal je peux voir les températures qui s'affichent les unes après les autres avec un saut à la ligne suivante après chaque affichage :
    1:21,0
    1:20,5
    1:20,5
    ... Environ une seconde s'écoule entre chaque mesure.

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    voir peu-être :

    http://grafikm.developpez.com/portcomm/

    et la communication évenementielle... qui devrai te permettre de séparer tes trames...!

  3. #3
    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 veux enregistrer les températures dans un fichier avec date et heure, juste les températures ? Tu ne veux pas enregistrer mais juste mémoriser au fur et à mesure ?
    Sois le plus précis possible stp pour que l'on puisse t'aider le mieux possible
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    bonjour je suis un collègue de joooooo
    oui en fait l'affichage ds le TextBox ressemble à ca :
    2: 22.5 C|| 2:22.7 C|| 2:22.6 C|| ...
    où le "C" représente "degrés Celcius", les "||" seraient la conversion du retour chariot en fichier texte et le "2:" on se sait pas vraiment...
    nous voudrions seulement pouvoir afficher une température à la fois (avec rafraichissement au bout d'un certain temps), et enregistrer cette température (pour peut-être tracer un graphique...).
    ainsi ds le textbox devait s'afficher une valeur du type :
    22.5
    sans les "2:", "C", "||".
    merci d'avance pr votre aide

  5. #5
    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
    Si ta variable s'appelle disons T$, il suffit de chercher ":" dans la chaine et de chercher le "C" dans la chaine et tu prends ce qu'il y a entre les 2, donc un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     i=instr(T$,":")
    j=instr(T$,"C")
     
    T$ = mid(T$,i+1,j-i-1)
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  6. #6
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 078
    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 078
    Points : 17 065
    Points
    17 065
    Par défaut
    Pour ce qui est de l'appel tous les ? Secondes
    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
    Option Explicit
    Dim TimeInterogerPort As Variant
    Dim AttentEnScondes As Integer
     
    Private Sub Form_Load()
    AttentEnScondes = 5 'Sc
    'ajout de 5 Sc à la date et heure system
    TimeInterogerPort = DateAdd("s", AttentEnScondes, Now)
    'pour essais
    'Text1 = Format(TimeInterogerPort, "dddd dd mmmm yyyy hh:mm:ss") & vbCrLf & Time
    'Text1 = TimeInterogerPort & vbCrLf & Now
    End Sub
     
    Private Sub MSComm1_OnComm()
    If MSComm1.CommEvent = 2 Then
     If Now >= TimeInterogerPort Then
      ' ce qui a été proposé par OhMonBato
      ' .......................
      'ajout de 5 Sc à la date et heure system
      'pour le prochain enclanchement, lecture des données serie apres 5 Sc
      TimeInterogerPort = DateAdd("s", Attente, Now)
     End If
    End If
    End Sub
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Je vous remercie pour vos réponses,c'est sympa de m'aider un peu.
    Je testerai demain cette idée de se décaler par rapport à l'heure actuelle pour créer des points de mesure à intervalle régulier.

    J'ai testé l'affichage mais le retour chariot ne fonctionne pas, je ne sais pas pourquoi, dans la ligne suivante :
    Text1 = Format(TimeInterogerPort, "dddd dd mmmm yyyy hh:mm:ss") & vbCrLf & Time

    Ce n'est pas vraiment le sujet d'ailleurs mais je vous le signale quand meme:le vbcrlf ne me permet pas d'afficher ce qui est à la suite dans une autre ligne (pas plus que & Chr(13) & ou encore & vbnewline & que j'ai pu trouvé sur le net).

    De plus, je ne comprends pas la ligne suivante :
    If MSComm1.CommEvent = 2 Then

    Peut-etre que ca a un lien avec ce problème que je crains d'avoir : à quel moment ouvre-t-on le port série? Je garde toujours mon bouton marche/arrèt qui ouvre ou ferme le port série? ---->MSComm1.PortOpen = True/False

    Je ne comprends pas pourquoi vous mettez les instructions dans la Sub MSComm1_OnComm() car je ne vois pas comment cette même sub va se déclencher.

    Merci encore, notamment pour la fonction lnStr qui est bien pratique pour ce qu'on veut faire ici.

  8. #8
    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
    Pour que vbCRLF soit actif dans un controle text, il faut mettre la propriété Multiline à True.

    L'événement OnComm se déclenche dès que xxx caractères sont présents dans le buffer d'entrée du port comm, xxx étant défini par la propriété RTreshold, il ne faut donc pas laisser cette propriété à 0 si tu veux utiliser l'événement OnComm.

    Personnellement, dans le principe, je mettrais Rthreshold à 1 et je lirais le buffer du port comm à chaque fois que l'événement OnComm se produit. Je stockerais la variable de température en mémoire.

    Par ailleurs j'aurais un timer réglé sur l'intervalle de lecture voulu (5 secondes, 10 secondes, ce que tu veux).

    Au déclenchement de ce timer, je ne ferais qu'afficher la dernière température lue.

    En code ça se traduit comme ça (j'ai pas testé) :

    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
     Option Explicit
    Dim Temperature As String
     
    Private Sub MSComm1_OnComm()
    Static Ch As String
    Dim i As Byte
     
    'On lit le buffer du port com et on l'ajoute à ce qu'on a déjà en mémoire dans Ch
    Ch = Ch + MSComm1.Input
    'On recherche A PARTIR DE LA FIN le caractère ":" et on coupe ce qu'il y a avant
    'car seule la dernière température nous intéresse si jamais il y en a plusieurs
    'dans le buffer
    i = InStrRev(Ch, ":")
    If i > 0 Then Ch = Mid(Ch, i + 1)
    'On cherche le caractère "C"
    'Si il y e a un, on a une chaine complète qu'on peut décoder
    'On met la chaine en mémoire dans la variable Temperature
    i = InStr(Ch, "C")
    If i > 0 Then Temperature = Trim(Left(Ch, i - 1))
    End Sub
     
    Private Sub Timer1_Timer()
    'Quand ce timer se déclenche on affiche la dernière température en mémoire
    Label1 = Temperature
    End Sub
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

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

Discussions similaires

  1. Lecture du port série
    Par fngakodj dans le forum C++
    Réponses: 0
    Dernier message: 04/10/2010, 11h28
  2. Lecture du port série incohérente
    Par L-F-an dans le forum Qt
    Réponses: 4
    Dernier message: 25/03/2010, 16h34
  3. Lecture sur port série sous Linux
    Par DangerousBowlOfJelly dans le forum C
    Réponses: 6
    Dernier message: 28/03/2008, 17h00
  4. Pb lecture sur port série sous XP SP2
    Par ViveLesQuads dans le forum Delphi
    Réponses: 7
    Dernier message: 09/06/2006, 17h12
  5. [C#] lecture sur port série
    Par Iokanaan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/05/2005, 13h50

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