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

LabVIEW Discussion :

Labview 2010 - problème de buffer de lecture


Sujet :

LabVIEW

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 15
    Points
    15
    Par défaut Labview 2010 - problème de buffer de lecture
    Bonjour,

    j'ai un petit soucis de buffer de lecture, j'ai un VI comme celui ci :
    Nom : Capture.PNG
Affichages : 1755
Taille : 124,3 Ko


    Depuis une liaison série j'entre dans cette boucle while qui :
    -associe un bouton à l'envoie du caractère "A" dans une structure événement (quand j'appuie sur le bouton "rotation anti-horaire" il envoie un A sur la RS232)
    -lit les données que mon PIC renvoie sur la même liaison (quand je reçois le "A", mon pic me renvoi des données via un printf que j'affiche sur le buffer de lecture "affichage rotation")


    Le problème c'est que mon buffer de lecture ne lit pas directement les données, je pense que les données sont mises dans un buffer et attendent le prochain coup pour être lues. Normalement, ca devrait se passer comme ceci :
    -si j'appuie sur le bouton qui envoie un "A", mon PIC va renvoyer des données à travers un prinft qui devraient s'afficher directement sur le buffer de lecture de la face avant

    or actuellement les choses se passent comme cela :
    -j'appuie sur le bouton qui envoie un "A", mon PIC renvoie les données via un printf mais les données ne s'affichent pas sur le buffer, il faut que je clique deux fois pour qu'elles soient lues (il y a un retard)
    En gros au premier clique sur le bouton, mon buffer va rester blanc (alors que les données venant du PIC sont bien transmises (vérifié avec un analyseur logique) et quand je vais ré-appuyer le buffer va afficher les données qui auraient du s'afficher au premier clique.

    Je ne sais pas si je me fais comprendre, je pense que les données sont envoyées mais qu'elles "attendent" dans un buffer et qu'au deuxième appuie sur le bouton elles s'affichent. Je ne sais pas comment résoudre cela étant donné que je suis obligé de mettre mon buffer de lecture dans la meme boucle while que mon "VISA write".


    Merci

  2. #2
    Membre éprouvé Avatar de reg64
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    959
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 959
    Points : 1 255
    Points
    1 255
    Par défaut
    Salut,
    D'après ton code. Le buffer d'entrée n'est lu qu'après appuie sur le bonton rotation et envoi des données sur le buffer de sortie, voir le principe du flux de données.
    Si tu souhaite lire le port série en temps réel, utilise le cas TimeOut de la structure évènement (500ms par exemple) : en gros la structure évènement doit gérer deux événement :
    - cas appuie sur le bonton comme tu as fais.
    -Cas qui s'exécute tout les x temps (500ms?) pour lire le buffer.
    Tu dois également gérer la sortie de la boucle While via la structure évènement (Bouton stop)
    A+
    Reg
    CLAD

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Salut,

    merci pour la réponse tout d'abord.

    J'ai essayé ce que tu m'as dis mais je n'ai pas réussi, peut-être aurai-je du préciser que j'ai plusieurs code de ce genre (avec à chaque fois un buffer de lecture, c'est ce qui pourrait poser problèmes non?).

    J'ai ajouté un timeout à la structure événement, j'ai donc aussi ajouté une condition à la boucle (timeout + le clique sur le bouton) et le problème c'est que le clic sur le bouton ne faisait rien et ma boucle s'activait quand même malgré mes deux conditions, meme si je ne cliquais pas sur le bouton. Dès que je lançais le programme la boucle s’exécutait à cause du timeout je pense et du coup mes autres fonctions étaient toutes bloqués car la boucle envoyait des données toutes les 500ms

    Sinon j'ai certaines boucles qui possèdent deux structures événements en 1 seule. Par exemple sur mon screen, sous la boucle "rotation anti-horaire" il y a une boucle du meme genre avec un write "rotation horaire", et je viens de lire ceci :
    http://zone.ni.com/reference/fr-XX/h...vntstrctonelp/

    Je ne peux pas tester actuellement mais penses-tu que je devrais mettre ces deux structures événements séparées dans deux boucles while? (meme si je ne suis pas sur que ca résolve le problème étant donné qu'une de mes autres fonctions a aussi mon problème initial et est dans une boucle simple :/ )

    Merci

  4. #4
    Membre éprouvé Avatar de reg64
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    959
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 959
    Points : 1 255
    Points
    1 255
    Par défaut
    Salut,
    Pourquoi veux-tu utiliser deux structures événement?
    Poste ton code simplifié du problème en format .vi
    A+
    Reg
    CLAD

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Salut,

    J'utilise plusieurs structures événements car c'est le seul moyen que j'ai trouvé pour associer des boutons à un envoie de caractères. Par exemple je dois gérer la vitesse de rotation de la machine, j'ai une boucle avec 2 structures événements :
    - la première structure gère le bouton "augmenter vitesse"
    - la seconde structure gère le bouton "diminuer vitesse"
    - les deux structures sont dans la même boucle while car le PIC renvoie les données concernant la vitesse dans le même buffer de lecture pour les deux.

    Voici mon VI avec les structures événements que je possède (j'ai un petit point rouge avec "fichier non valide" quand je met mon .vi, je l'upload sur mega si ca ne dérange pas :/ ) :
    https://mega.co.nz/#!29Zx3Azb!Oum50Y...F-c-l2lk8ouEVc

    Merci.

  6. #6
    Membre éprouvé Avatar de reg64
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    959
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 959
    Points : 1 255
    Points
    1 255
    Par défaut
    En principe 1 IHM=1 structure événement
    Dans ton cas, il est possible de gérer les commandes avec une seule structure événement.
    Ci-joint un exemple, qui permet de gérer plusieurs commandes de l'IHM. Dans la structure événement je ne gère que les boutons:
    • Envoie date
    • Envoie heure
    • Rotation horaire
    • Stop: Permet de fermer le port série et de quitter la boucle while

    Tu peux t’inspirer de ça pour gérer les autres cas.
    http://dl.free.fr/mLMmqR5RN
    Cdt
    Reg
    Reg
    CLAD

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Bonjour, encore merci pour ton aide.

    J'ai essayé la structure que tu m'as proposé mais j'ai toujours un problème, je dois mettre :
    - 1 buffer de lecture pour la rotation horaire
    - 1 buffer de lecture pour la rotation anti-horaire

    Je ne peux pas mettre les deux commandes dans le même buffer de lecture du coup :/ J'ai essayé en mettant un buffer commun aux deux commande en dehors de la structure événement mais le problème est identique du coup, j'ai toujours un coup de retard.

    En tout cas merci, le diagramme est beaucoup plus clair au moins et je vais m'en inspirer pour continuer.

    HS : petite question, comment tu as lié le bouton stop général avec la boucle while de l'affichage date et heure (le petit stop avec un petit logo de maison)?

    Merci.

  8. #8
    Membre éprouvé Avatar de reg64
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    959
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 959
    Points : 1 255
    Points
    1 255
    Par défaut
    Citation Envoyé par Anarandel Voir le message
    Bonjour, encore merci pour ton aide.

    J'ai essayé la structure que tu m'as proposé mais j'ai toujours un problème, je dois mettre :
    - 1 buffer de lecture pour la rotation horaire
    - 1 buffer de lecture pour la rotation anti-horaire
    Et pourquoi est-ce un problème? ça ne fonctionne pas?

    Citation Envoyé par Anarandel Voir le message
    HS : petite question, comment tu as lié le bouton stop général avec la boucle while de l'affichage date et heure (le petit stop avec un petit logo de maison)?
    C'est une variable locale
    Dans mon dernier poste j'ai oublié de préciser qu'il faut cadencer ta boucle Affichage Date-Heure (tempo), sinon ton vi tournera à fond et occupera 100% du CPU ce qui ne sert à rien à part faire ramer le PC.
    Reg
    CLAD

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par reg64 Voir le message
    Et pourquoi est-ce un problème? ça ne fonctionne pas?


    C'est une variable locale
    Dans mon dernier poste j'ai oublié de préciser qu'il faut cadencer ta boucle Affichage Date-Heure (tempo), sinon ton vi tournera à fond et occupera 100% du CPU ce qui ne sert à rien à part faire ramer le PC.


    Hello, non ca ne fonctionne pas, j'ai toujours besoin d'un deuxième appui pour afficher l'information :/


    Sinon quand tu parles de tempo, tu veux dire que je devrais mettre un delai?

    merci.

  10. #10
    Membre éprouvé Avatar de reg64
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    959
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 959
    Points : 1 255
    Points
    1 255
    Par défaut
    Tempo =délai: voir vi Attendre ms dans la boucle Affichage date&heure.
    En ce qui concerne la lecture du buffer série, as-tu rajouté un délai entre l'écriture et la lecture du buffer (voir mon commentaire dans la structure évènement)?
    Reg
    CLAD

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    J'ai mis à 1 seconde le delay dans la boucle de date/heure (de toute façon ça ne compte pas les secondes)

    Sinon pour le delay entre l'écriture et la lecture, c'est celui ci qu'il faut utiliser ?
    Nom : Capture.PNG
Affichages : 1106
Taille : 20,2 Ko

    Et si oui je ne comprend pas trop à quoi sert la liaison "erreur" (fil jaune) si tu pouvais m'éclairer, je pensais qu'elle servait uniquement à détecter les erreurs présentes, mais si on met le delay ici c'est qu'elle communique les données, je me trompe?

    Encore merci !

  12. #12
    Membre éprouvé Avatar de reg64
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    959
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 959
    Points : 1 255
    Points
    1 255
    Par défaut
    Reg
    CLAD

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Bonjour

    C'est bon ca fonctionne avec la tempo (même une tempo de 0.2s), sinon pour afficher la diminution et l'augmentation de la vitesse ou le sens de rotation sur la meme fenetre j'ai crée une variable locale qui renvoie sur mon premier buffer de lecture.

    Le problème en mettant deux buffers c'est que c'était illisible car, par exemple, j'envoyais :
    -la vitesse augmente de 1 tr/min
    -la vitesse diminue de 1 tr/min


    Et du coup les deux étaient affichés ce qui faisait qu'on ne savait pas où on en était.


    Merci en tout cas je met le sujet en résolu

  14. #14
    Membre éprouvé Avatar de reg64
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    959
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 959
    Points : 1 255
    Points
    1 255
    Par défaut
    Reg
    CLAD

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

Discussions similaires

  1. [Labview 2010] Mettre des espaces dans un buffer?
    Par Anarandel dans le forum LabVIEW
    Réponses: 2
    Dernier message: 07/05/2015, 15h07
  2. Réponses: 0
    Dernier message: 08/04/2015, 23h29
  3. [labview 7.0] problème de buffer
    Par Sloubinette dans le forum LabVIEW
    Réponses: 4
    Dernier message: 15/12/2010, 14h05
  4. Problème d'attribut de lecture seule sur des dossiers
    Par Redbull dans le forum Sécurité
    Réponses: 2
    Dernier message: 09/08/2005, 09h52
  5. [XSLT]Problèmes d'ordre de lecture et d'écriture
    Par leup dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/07/2005, 10h36

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