Discussions au sujet de NI LabVIEW

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

Optimiser la vitesse d'éxecution de boucles While pour un asservissement plus rapide

Bonjour,

 

je cherche à asservir un système qui est le suivant :

je créé deux sinusoïdes d'amplitude V et Vref qui sont appliquées à une carte analogique à l'aide d'une carte NI 6212, à cause de la carte analogique l'amplitude des deux sinusoïdes est modifiée (A*V et B*Vref), en sortie de la carte j'ai une mesure que je lis avec DAQmx représentant la différence qui est elle même amplifiée ( soit C*(A*V-B*Vref), avec du traitement du signal je récupère cette valeur que j'ajoute ou soustrait afin que C*(A*V-B*Vref)= 0 V. Jusque là l'asservissement fonctionne correctement : le problème est qu'il est lent, le système répond dans l'ordre de la seconde.

 

Le but étant d'avoir un système capable d'asservir lorsque V subit des variations d'amplitude, pour des variations de 500Hz mon système doit aller plus rapidement que cette variation c'est à dire s’exécuter en moins de 1/500 soit en moins de 2 ms. Je joint mon VI, je travaille en LabVIEW 2012, le problème est que mes boucles s'exécute trop lentement la génération et le traitement de mes signaux prend beaucoup de temps. Quelqu'un a-t-il un moyen de considérablement augmenter la vitesse d'exécution du programme/d'optimisation ?

 

PS : je ne sais pas comment joindre le VI pour des versions récentes de LabVIEW.

0 Compliments
Message 1 sur 6
2 762 Visites

Je viens d'essayer de moduler V et comme je le pensais le système n'arrive pas à asservir a delà de 1Hz environ comme vous pouvez le voir sur l'image joint du diagramme de Bode du système.

0 Compliments
Message 2 sur 6
2 744 Visites

Bonjour Nicolas_Cn,

 

Quelle est la configuration de votre ordinateur (OS, Processeur, RAM)?

Par ailleurs quelle version de DAQmx utilisez-vous?

Quelle horloge utilisez-vous pour vos tâches de Génération/Acquisition?

Retrouvez-vous les résultats observés si vous benchmarkez vos boucles comme suit?

https://forums.ni.com/t5/Example-Programs/Benchmark-Loop-Iteration-Time-with-Tick-Count-Timer/ta-p/3...

 

Belle journée,

 

ArmandoF

0 Compliments
Message 3 sur 6
2 727 Visites
Révélation
Bonjour,

je ne m'y connait pas vraiment mais d'après l'étiquette je travaille sur un ordi portable assez ancien (qui rame pas mal Smiley indifférent):
Windows 10 / INTEL Core I3 / 4GB DDR3 Memory

En ce qui concerne l'asservissement ce qui ralentit est le fait que je suis obligé d'acquérir puis d'attendre l'écriture pour pouvoir asservir, autrement dit si une des boucles tourne très rapidement et l'autre lentement je suis limité à la vitesse de la plus lente, il faut optimiser la durée des deux boucles.

J'utilise la version 15.1 de DAQmx il me semble.
A vrai dire je ne précise pas la source d'échantillonnage de l'horloge car dès que que je spécifie AOSampleClock / 20MHzTimeBase / PFIO ... je ne génère rien.
Pour faire mon programme j'y suis allé à tâtonnements, en regardant des exemples... Le fonctionnement exact m'est encore très flou si vous pouvez regarder mon VI histoire de me dire comment cadencer correctement ma génération et mon acquisition je suis preneur.
Je vais regarder le lien que vous m'envoyez mais benchmarquer, je suppose "étalonner" des boucles ne me dit absolument rien.



0 Compliments
Message 4 sur 6
2 718 Visites

Nicolas_Cn,

 

Les performances de votre PC ne sont effectivement pas extrêmement hautes.

Votre modèle dont vous avez besoin correspond tout à fait à celui de Producteur/Consommateur qui est sensé garantir une conservation de la fréquence des Boucles While afin que la plus lente ne retarde pas la plus rapide.

Voici une documentation concernant ce modèle:

http://www.ni.com/tutorial/3023/en/

 

Vous pouvez aussi vous inspirer du Projet Exemple "Gestionnaire de messages dans une file d'attente" disponible lors dela création d'un nouveau projet.

 

Bonne journée à vous,

Armando

Message 5 sur 6
2 716 Visites

Merci de la réponse,

 

j'irais voir ça dès demain, j'ai d'ailleurs ajouté la mesure des durées de mes boucles et dans le pire des cas je trouve 4 ms pour l'une et 2ms pour l'autre, ce qui est bizarre vu que mon asservissement que je vois directement à l'aide d'un oscilloscope virtuel et des sondes prend au moins 500 ms à se faire la preuve j'arrive encore à le voir à l’œil nu comme si il fallait énormément d'itérations au programme pour trouver la bonne valeur d'asservissement alors que pourtant je règle le gain de mon système pour avoir un système qui répond rapidement avec le moins de dépassements possibles, cela reste inexpliqué

 

Le modèle consommateur / producteur ne pose t il pas de problème vu que les données produites (écrites) sont consommées par l'acquisition et le traitement mais elles doivent être en plus ramenées au producteur afin de l'asservir, de simples nœuds de propriété comme j'utilise actuellement suffiraient pour asservir le producteur dans ce modèle ?

 

 

0 Compliments
Message 6 sur 6
2 710 Visites