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 8.5][Débutant] Problème file d'attente


Sujet :

LabVIEW

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 96
    Points : 59
    Points
    59
    Par défaut [LabView 8.5][Débutant] Problème file d'attente
    Bonjour,
    Je réalise une acquisition toutes les 1ms pendant 30s. Je veux donc utiliser un systéme de file d'attente de façon à traiter les données au bout de trente seconde et ainsi de suite. Or dans le deuxieme passage dasn la boucle d'acquisition j'ai une erreur, -200279, et je comprend pas. J'ai récuperer aucune données même de la première acquistion.
    Je pose mon diagramme si quelqu'un pouvait m'aider.
    Merci.

  2. #2
    Membre averti Avatar de VictorNet
    Profil pro
    Inscrit en
    Février 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 275
    Points : 382
    Points
    382
    Par défaut
    je pense que c'est à cause de ton attente de 30s dans la boucle du haut que tu te chope une erreur, tu ne vide pas le FIFO de ta carte à temps

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    Comment je dois faire alors parce que je voudrais garder cette tempo de 30s, c'est ce qui me permet de controler mon temps d'acquisition.
    Merci

  4. #4
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Hello,

    Tu ne peux physiquement attendre 30 secondes avant de vider le buffer. Tu dois modifier ta routine pour le vider toutes les secondes et mettre les datas dans un tableau temporaire pour les traiter globalement au bout de 30 secondes.

    a+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    OK mais la un autre probleme reviens. Si je fixe m'a boucle d'acquisition toutes les trentes secondes c pour respecter le temps d'acquisition. Je realise une acquisition toutes les 1 ms et si je realise une boucle de 1seconde il y a un decalage. Ce decalage, d'apres les ingenieurs de chez NI, vient de window et donc je suis oblige de faire des acquisition toutes les1 ms pendant 30seconde.
    Donc je voi suis un peu embete.

  6. #6
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Hello,

    Je reviens sur les fondamentaux de l'acquisition. Le principe d'origine est de lire une valeur à une periode d'echantillonnage precise. Or, quand cette periode diminue, on se heurte au multitache de Windows qui est incapable de te fournir une base de temps precise a moins de 10 ms. Donc, on a transferé le probleme au niveau des cartes d'acquisitions. Ce sont maintenant elles qui gerent l'acquisition avec des bases de temps inferieures a la microseconde et qui mettent les points a disposition dans un buffer circulaire qu'il faut vider de temps en temps sinon une erreur owerflow apparait ( ton erreur de depart). C'est la que reside l'utilité de DAQ.

    Ainsi, le principe d'acquisition devient: tu configure ta carte ( voies, periode d'echatillonnage = 1ms,...) et tu lances l'acquisition. Ensuite tu viens vider toutes les secondes le buffer qui contient environ 1000 points que tu traites. Dans ton cas, tu les mets dans un tableau a attendant le traitement post acquisition.

    J'espere avoir été clair sur le principe.

    De memoire, la fonction a utiliser est "Read N Ech" a laquelle il faut passer -1 en parametre pour tout le buffer.
    Regarde dans les exemples, il y a tous les cas possibles.
    a+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    Je suis d'accord mais quand je realise une acquisition toutes les 1 ms pendant 1 seconde, j'ai un decalage de plusieur milisecondes en fin de boucle. L'inge de chez NI m'a donc conseille de faire une acquisition de 30000 echantillon pour une vitesse de 1000. A partir de ce moment je n'ai plus de decalage mais je ne peux plus realiser ma file d'attente pour effectuer le traitement ds une autre boucle.
    Je suis bloque.
    De plus pourquoi tu me di ENVIRON 1000 points, une acquisition toutes les 1 ms pendant 1 seconde, on devrait avoir 1000 mesures?

  8. #8
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    J'ai ecris environ car il faut prendre en compte le multitache qui peut interrompre a n'importe quel moment ton programme: tu attends 1 seconde puis tu fait l'acquisition. Imagine que le multitache t'interrompe entre ces 2 actions: tu recuperera la main quelques millisecondes apres, et pendant ce temps, la boucle d'acquisition tourne et quelques points ont été ajoutés d'où le Environ.

    En ce qui me concerne, ma boucle de 500ms avait de 470 a 1000 points !!!!

    De plus, il faut parler du temps de traitement: ta boucle de gestion des datas doit etre inferieur a ta frequence d'echantillonnage.


    Pour resumer tout ce que j'ai dit, tu devrais modifier ton programme pour lire le buffer complet toutes les secondes et ainsi t'affranchir des problemes Windows.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    Lire le buffer complet? c'est à dire?

  10. #10
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    la fonction "Read N Ech" lit tout ce qu'il y a dans le buffer

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    En fait j'utilise cette fonction pour faire mon acquisition. Pour realiser mon acquisition, j'initialise ma carte et je cadence mon acquisition à une vitesse de 1000 et pour acquisition de 30000points. Puis je rentre dans ma boucle et j'utilise la fonction read N ech dans une boucle de 30secondes.
    Et donc apres j'ai voulu mettre ça dans une file d'attente de façon à devoir le traitement à part et des le deuxième tours ça m'affiche une erreur.

  12. #12
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Hello,

    Tu attends simplement trop longtemps avant de vider ton buffer.
    Peux tu donner la reference de ta carte?
    Connais-tu sa taille de buffer? (il me semble qu'il y a une fonction DAQmx bas niveau pour ca).
    Peux tu reposter ton code ( juste la partie acquisition) pour que je vois comment tu fais?
    a+

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    Ma carte est une carte PCMCIA NI6024E.
    Je vous joins mon diagramme.
    Merci

  14. #14
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    OK, j'essaierai de regarder ca ce midi ou ce soir car je n'ai pas de LV ici.

  15. #15
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Hello,

    Je viens de regarder sur le site de NI: ta carte stocke 2048 échantillons soit 2 secondes de points.
    Tu dois donc modifier ton vi pour boucler à moins de 1 seconde et lire tous les points ( passe -1 en paramètre d'entrée de la fonction read).

    Juste pour ma culture personnelle, que vaut ta carte a l'utilisation?

    Je ne vois pas de StartDaqmx, c'est normal?

    a+

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    Merci pour tes réponses.
    Pour ma carte je peux pas comparer vu que c'est la seule que je connaisse, mais c'est assez simple d'utilisation sauf si l'on veut effectuer une acquisition toutes les 1ms pendant moult temps. Son côté bien pratique est comment le fait que c'est une carte pcmcia donc très pratique ac une pc portable.
    Sinon pour le StartDaqmx je l'utilise pour envoyer un ordre sur mes sorties numériques mais pour l'acquisition je ne l'utilise pas.
    Tchao

  17. #17
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    tu ne pourras jamais boucler assez vite pour faire une acquisition toutes les ms quelque soit le carte et le PC. C'est a la carte de le faire et de te retourner le resultat.
    Pour info, j'avais develloppé un programme avec une periode d'echantillonnage de 10 µs pendant 2h30. J'allais chercher les points toutes les 0.5 secondes environ pour les traiter( calcul de depassements, ...) et ca marchait tres bien

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    Salut,
    Serait-il possible que tu me montre ton programme, si tu l'as encore, pour voir la méthode que tu utilise.
    Merci.

  19. #19
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Desolé mais je n'ai pas gardé les sources ( le client etait tres sensible la-dessus) mais de memoire il ressemblait pas mal au tien sur le principe
    J'avais juste integré toute la partie acquisition dans une grosse boucle evenementielle ( un while et un case a 50 cas qui me permettait de coordonner les actions a faire)

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 96
    Points : 59
    Points
    59
    Par défaut
    Salut,
    Qu'est ce que tu appel un case à 50 cas??
    Merci

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/09/2008, 09h17
  2. Réponses: 5
    Dernier message: 26/06/2008, 14h26
  3. [LabView 6.1][Débutant] Problème héxadécimal/VISA
    Par grimor57 dans le forum LabVIEW
    Réponses: 3
    Dernier message: 30/01/2008, 18h09
  4. [LabView 7.0][Débutant] Problème du .vi DAQ Assistant
    Par mateo2486 dans le forum LabVIEW
    Réponses: 5
    Dernier message: 23/07/2007, 23h19
  5. [Labview 8.2][Débutant] Problème acquisition données
    Par JeanMetzz dans le forum LabVIEW
    Réponses: 1
    Dernier message: 14/06/2007, 10h16

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