le 09-13-2011 02:34 AM
Bonjour,
Apres plusieurs recherches infructueuses, je poste mon probleme dans ce forum.
Je travaille sous Labview 10 avec une carte PCI-6321.
Mon objectif est d'arriver à synchroniser les sorties numériques avec l'acquisition de plusieurs voies analogiques.
Autrement dit j'envoie un pattern numérique sur les DO (qui à terme, vont piloter l'état d'un multiplexeur) et je souhaite faire l'acquisition de plusieurs AI à chaque nouveau bit généré.
Je poste mon programme actuel qui est une adaptation de l'exemple "Correlated AI AO DI DO".
Celui-ci fonctionne très bien pour plusieurs voies DO et 1 seule voie AI.
Lorsque j'essaie de faire l'acquisition de plusieurs voies AI, l'acquisition perd quelques points et les AI et DO se désynchronisent de temps a autre.
Ce problème est persistant si: je change la fréquence d'acquisition, la taille du buffer pour les voies numeriques.
J'espere avoir été clair et que quelqu'un pourra m'éclairer.
Merci
Smiral
Résolu ! Accéder à la solution.
le 09-13-2011 04:12 AM
Salut,
La première chose qui m'étonne, c'est que tes commandes sont définies sur Dev9, mais que ta constante pour l'horloge partagée est sur Dev1. Est-ce normal?
Ensuite, si j'ai bien compris, j'ai l'impression que c'est plutôt ta génération de signaux numériques qui doit contrôler le cadencement de ton acquisition, non?
Du coup,pourquoi n'utilises-tu pas plutôt la DO/Sample Clock? Ainsi, tu aurais une impulsion générée à chaque émission d'un bit numérique, qui déclencherait l'acquisition.
Sinon, comme ça, je ne vois pas d'autres incohérences. Aurais-tu des informations plus précises sur les moments et les codnitions où la synchronisation ne se fait plus?
Cordialement,
Olivier L. | Certified LabVIEW Developer
le 09-13-2011 07:24 AM
Bonjour,
Pour ta premiere question, les commandes sont definies sur Dev9 simplement parce que j'ai oublié de définir par défaut Dev1. Pas d'inquiétude à ce sujet.
Ensuite, si j'utilise DO/Sample Clock, l'acquisition ne démarre tout simplement pas. Et a priori, le résultat devrait etre le meme qu'avec AI/Sample Clock puisque je démarre d'abord la tache lié aux sorties numériques puis l'acquisition des entrées analogiques.
D'apres mes divers essais, l'acquisition décroche pendant une dizaine de points avant de se resynchroniser et ce, à des moments plus ou moins réguliers (environ toutes les 2 secondes quelque soit la freq d'échantillonage (...?))
Merci de votre réponse, si vous avez d'autres propositions de solutions ou d'autres questions, je suis preneur.
Smiral
le 09-13-2011 07:42 AM
Bonjour,
Je ne sais pas si on s'est bien compris: Dans le cas où tu utiliserais la Do/Sample clock, il faut que tu définisse la fréquence sur la DO et non plus sur l'AI, et que le routage de DOSample clock se fasse sur la tache AI. Ensuite, il est mieux de démarrer la tache AI avant la tache DO dans ce cas si (on va toujours démarrer la tache esclave d'abord); a mon avis tu n'as pas fait tous ces changements,ce qui explique que ton acquisition ne démarre pas.
Ensuite, peux-tu mettre un Tick Count avec un registre à décalage dans ta boucle afin de mesurer le temps d'exécution de ta boucle?
Quelle est la fréquence d'acquisition définie pr ton système?
Cordialement,
Olivier L. | Certified LabVIEW Developer
le 09-13-2011 10:26 AM
Bonjour,
J'ai changé la Sample Clock pour utiliser celle de la DO comme vous me l'avez conseillé.
Apres avoir changé egalement l'ordre de démarrage des taches, l'acquisition démarre bien mais le problème reste inchangé. Il manque des points sur le signal échantillonné.
La plage de fréquence de travail sera entre 5 et 8 kHz. Ce qui est largement convenable pour avoir le temps d'enregistrer quelques voies analogiques (jusqu'a 5) pour chaque bit numérique.
Pensez vous que la boucle d'écriture des données s'effectue trop lentement par rapport à la fréquence d'échantillonnage? Y a t-il une solution pour ce probleme?
Cordialement,
Smiral
le 09-13-2011 10:32 AM
En fait, je n'arrive pas à identifier ce qui peut gêner.
Du coup, je me demandais si la boucle ne mettais pas trop de temps à se réitérer, et posait des légers soucis au niveau de la récupération du buffeur DAQmx, ce qui aurait pu être une explication possible à ce phénomène qui semble assez régulier à en croire votre précédent post.
Le problème est que je n'ai pas de matériel DAQ pour faire de tests de mon côté.
Le phénomène est-il visible directement dans le graphe ou seulement dans le fichier? Si c'est visible directement sur le graphe, on peut imaginer d'enlever l'écriture sur fichier de la boucle histoire de voir si il y'a une différence ou pas!?
Cordialement,
Olivier L. | Certified LabVIEW Developer
le 09-13-2011 10:47 AM
Je pensais aussi que ca pouvait venir du temps de régénération du buffer. Cependant, si on change la taille du buffer cela ne change pas le probleme et la frequence des points manquants est tout aussi réguliere.
Je suis assez perplexe.
L'erreur est visible sur le graphe donc je peux effectivement essayer d'enlever l'ecriture sur fichier pour vérifier si cela vient de la.
C'est quand meme étonnant que cela fonctionne avec l'écriture d'une seule voie mais pas avec 2 ou plus.
Je reviendrai vers vous demain pour effectuer ces tests.
Je vous remercie de votre rapidité.
Cordialement,
Smiral
le 09-13-2011 11:09 AM
Pouvez-vous également vérifier la charge processeur?
En effet, je viens de me rendre compte que vous lisiez tous les échantillons disponibles à chaque itération, et que vous n'avez aucun Vi de cadencement dans votre boucle. J'imagine alors que votre processeur doit être assez occupé. je vous conseille de mettre une fonction Wait avec 100ms dans votre boucle. Je pense que ca pourrait déjà aider au fonctionnement du code, même si ca m'étonne que cela impacte l'acquisition.
Cordialement,
Olivier L. | Certified LabVIEW Developer
le 09-14-2011 07:33 AM
Bonjour,
Je viens de régler le problème. Effectivement la boucle tournait a toute vitesse et il arrivait de sauter des points.
Le processeur était également très sollicité pour cette opération.
J'ai donc mis comme vous m'avez conseillé un wait de 100 ms dans la boucle de lecture écriture et tout fonctionne tres bien.
Je vous remercie pour vos conseils.
Cordialement,
Smiral