Discussions au sujet de NI LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Problème registre à décalage

Solved!
Go to 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 Kudos
Message 1 of 7
(1,519 Views)

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 Kudos
Message 2 of 7
(1,460 Views)

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 Kudos
Message 3 of 7
(1,425 Views)
Solution
Accepted by topic author 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 of 7
(1,411 Views)

Bonjour, 

 

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

En PJ, mon vi. 

 

Merci, 

0 Kudos
Message 5 of 7
(1,384 Views)

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 Kudos
Message 6 of 7
(1,379 Views)

Merci j'ai réussis !

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

 

Merci 🙂

 

0 Kudos
Message 7 of 7
(1,377 Views)