Discussions au sujet des autres produits NI

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Synchroniser DO avec acquisition de plusieurs AI

Résolu !
Accéder à la solution

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

0 Compliments
Message 1 sur 9
4 934 Visites

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


0 Compliments
Message 2 sur 9
4 926 Visites

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

0 Compliments
Message 3 sur 9
4 909 Visites

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


0 Compliments
Message 4 sur 9
4 903 Visites

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

 

0 Compliments
Message 5 sur 9
4 887 Visites

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


0 Compliments
Message 6 sur 9
4 884 Visites

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

0 Compliments
Message 7 sur 9
4 879 Visites
Solution
Accepté par l'auteur du sujet Smiral

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


Message 8 sur 9
4 876 Visites

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

0 Compliments
Message 9 sur 9
4 859 Visites