10-27-2016 08:01 AM - modifié 10-27-2016 08:04 AM
Bonjour ,
J'ai l'impression que je rencontre des problémes de synchronisation lors l'aquisition tension+courant sur 3 phases avec les modules NI9242 et NI9246, sur un châssis compact DAQ 9174
Pourriez vous svp me confirmer que ces modules sont synchrones "nativement" (les acquisitions des 6 voies sont paramétrées dans la même tache sous MAX).
Dans l'exemple si dessous, je mesure les 3 phases d'un moteur brushless.
Je m'attend à avoir un déphasage entre tension et courant, avec la tension en avance sur le courant.
Hors j'observe l'inverse.
J'aimerai avoir la certitude que ça ne peux pas être un pbm de synchro HW avant d'investiguer les autres causes possibles.
(Note: j'ai double-checké le câblage).
Merci d'avance !
Code :
Avec detail du sous vi "Init des voies" :
et de "Acqui" :
Ainsi que la config de la tache sous MAX :
Résolu ! Accéder à la solution.
le 10-27-2016 09:05 AM
Bonjour,
Il faudrait fournir directement ton VI, cela permettrait d'analyser plus facilement ton programme.
A partir des captures d'écran, voici ce qui me choque :
1- La boucle productrice : Redescend la dans ton main, pas d'intérêt de mettre un sous vi là, et je déconseille vivement l'utilisation d'une variable globale pour l'arrêt, privilégie plutôt l'utilisation d'une référence de bouton
2 - La boucle consommatrice : Tu ne devrais pas mettre une structure séquence et un case côte à côté comme ça, c'est un non sens, puisque cela t'empêchera de prédire ta séquence d'exécution dans la boucle.
Soit tu rentre ton case dans le cas "timeout" de ta boucle évènement, puisque c'est à ce moment qu'elle serait exécuter. Soit tu ajotues une 3eme structure "while" dans ton main pour mettre le "dequeue" completement dissocié, ainsi il tournera indépendemment de ton case, évitant les buffers overflow en cas de conflit avec un évènement utilisateur.3
3- Dans ton VI acqui, il faut que tu cable ton cluster d'erreur à l'arrêt de la boucle, car là en cas d'erreur tu fais tourner le VI en boucle pour rien puisque le registre à décalage va répercuter ton erreur sur les itérations suivantes, inhibant la récupération de tes données.
4- Sous VI "init des voies" : élimine les points de coercitions en cablant le bon type de données.
Concernant ta question première, il faudrait voir sur quel type de cademencement est programmé ta tache, ce qui n'est pas indiquer dnas tes captures.
Cdt,
Michael
le 10-27-2016 09:24 AM
Hello,
Merci pour tes conseils sur l'amélioration du code, je vais mettre ça en pratique.
Concernant la question sur le type de cadencement de la tâche, j'ai laissé la config par défaut (laisser le driver DAQMX choisir)
et l'horloge est l'horloge interne.
Je pense que l'horloge est la même partagée pour ces 2 modules, mais je n'ai pas la certitude, d'ou ma question.
Je posterai le code rapidement dés que j'ai fait les évols que tu cites
Merci de ton aide
le 10-27-2016 09:39 AM
J'ai pour habitude de toujours créer mes taches sous labview, et jamais pas Max donc je suis pas forcément au point, mais j'ai une hypothèse : Vérifier que lorsque tu détermines ta fréquence d'échantillonage, tu choississes bien la source de synchro du DAQ, je me demande si au travers de cette fonction, tu ne bascules pas sur les horloges internes de chaque carte.
10-27-2016 10:51 AM - modifié 10-27-2016 10:53 AM
Merci pour cette piste intérressante
En régle général je n'utilise pas non plus les tâches Max mais code en dur les fonctions DAQMX dans le programme.
Je vais probablement changer ça aussi.
Dans la fonction de cadencement, le seul choix qui ne renvoi pas d'erreur est "onboard clock"
Mais je ne sais pas si cela fait référence à l'horlgoge d'un module ou à celle du châssis.
J'aurrai bien mis la 2 éme ou éme ligne, qui semble faire référence explicitement à l'horloge du chassis, mais cela renvoi un erreur.
Je continu de creuser, merci pour ton aide.
le 11-02-2016 09:53 AM
Je pense avoir trouvé la réponse à ma question ici.
S'agissant de 2 modules ADC delta-sigma, alors ils devraient être synchrones dans la même tache sans pbm.
Pour information, j'ai quand même testé l' acqui codée en DAQmx "pur" (tout dans le code), ou en tache sous MAX "pure" (Juste l'appel dans le code) ou "hybride" (config tache sous max + appel et cadencement dans le code) le resultat semble idhentique, j'ai le même dephasage dans tous les cas.
merci Michael pour la contribution et les conseils de programation.