Discussions au sujet de NI LabVIEW

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

Problème registre à décalage

Résolu !
Accéder à la solution

Bonjour, 

 

Je souhaite faire l'acquisition de mes données en fonction de la mesure du codeur. 

Je m'explique : je dois enregistrer les données tous les 5 cm (mesure par codeur). J'essaye d'utiliser un registre à décalage mais les deux valaurs sont identiques. 

Donc quand je les compares pour savoir si la nouvelles valeur est sup de 5 cm c'est faux du coups je rentre jamais dans ma boucle condition. 

 

Je joins juste le VI, ou ce test doit se faire, si je dois envoyer le projet en entier merci de me le dire. 

 

Merci par avance a tous ! 

0 Compliments
Message 1 sur 7
1 443 Visites

Bonjour Loic,

 

Je vois que tu veux faire tourner ta boucle toutes les 100 ms. Ta valeur évolue-t-elle aussi vite ?

Autre remarque sur ta boucle condition.  Si on appelle x0 la valeur qui vient de ton registre à décalage et x1 la valeur qui vient de ton VI, je vois :

 

test x0 > x1 :

  • si VRAI : test x1 >= x0 + 0.05, cas impossible
  • si FAUX : test x1 <= x0 - 0.05, que se passe-t-il ?

A mon avis, il faut que :

  1. Tu vérifies à l'aide de sondes ou d'indicateur si la valeur en entrée et en sortie de ton registre évolue, et comment,
  2. Tu testes un peu plus en profondeur ta condition sur x0 et x1n pour t'assurer qu'elle fait bien ce que tu veux.

 

Restant dispo 😉

CLAMaxime -- Kudos are a great way to say thank you
0 Compliments
Message 2 sur 7
1 384 Visites

Bonjour, 

 

Désolé pour la réponse tardive, j'étais en déplacement. 

Oui oui ma valeur évolue rapidement.

 

Ensuite, c'est un petit algo à méttre en place pour déterminner si j'avance ou recule.

Pour cela si ma valeur NEW est > ANC cela veut dire que j'avance et que pour enregistrer ma donnée, NEW doit être >= ANC + 0.05 cm

Par contre si NEW <ANC cela signifie que je recule et que pour enregistrer mes données, NEW doit être <= ANC - 0.05 cm.

 

Cet algo me parait juste, j'ai effectué plus de test et on va dire que ca marche de temps en temps. Pour l'instant ca fonctionne que dans un sens pas dans l'autre. 

Je te joins mes avancées.

 

0 Compliments
Message 3 sur 7
1 349 Visites
Solution
Accepté par loic_1704

Attention au registre à décalage non initialisé, on ne sait pas trop ce qui se passera lors de la première itération.

 

Pour i=0 (index de la boucle While), tu devrait ignorer la valeur provenant du registre à décalage et utiliser la valeur lue comme référence, enregistrer cette valeur et la relier au registre à décalage. Ici on ne peut pas déterminer si on avance ou recule.

 

Pour les autres itérations compare la valeur lue à la référence, si l'écart absolu est >= 0.05 enregistre la valeur et relie cette valeur au registre à décalage, si le signe de l'écart (en valeur non absolue) est > 0 on avance, sinon on recule (ou on est immobile).

 

Voici un exemple:

 

comparaison position.png

 

Ben64

Message 4 sur 7
1 335 Visites

Bonjour, 

 

J'effectue certainnement une grosse erreur mais je n'arrive pas à enregistrer mes valeurs. 

En PJ, mon vi. 

 

Merci, 

0 Compliments
Message 5 sur 7
1 308 Visites

Tu envois toujours la dernière valeur de position lue dans le registre à décalage, donc tu compare la valeur actuelle à la valeur précédente. À mois de parcourir plus de 5 cm entre deux itérations de ta boucle While tu n'enregistreras jamais de valeur. Dans le cas Faux de mon exemple c'est la valeur de "position ref" que tu dois retourner dans "ref out", dans ton code c'est "position" que tu envois dans le registre à décalage c'est le problème.

 

Ben64

0 Compliments
Message 6 sur 7
1 303 Visites

Merci j'ai réussis !

Par contre c'est pas tout le temps 0.05 cm mais c'est pas grave. 

 

Merci 🙂

 

0 Compliments
Message 7 sur 7
1 301 Visites