Discussions au sujet de NI LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Event Struct - Activer uniquement sur un front montant et front descendant une valeur ?

Solved!
Go to solution

Bonjour,

J'aimerais comme le titre l'indique activer un événement uniquement lorsque je suis en front descendant ou montant d'une certaine variable. Naturellement, si la valeur reste constante à 1, elle ne devrait pas activer cet événement. Malheureusement le "Value change" de l'Event struct le prend en compte comme un changement d'état de 1 à 1 ... Bascule RS pour l'effet mémoire ? ...

Merci pour votre aide !

 

0 Kudos
Message 1 of 7
(253 Views)

La valeur précédente d'une variable est accessible dans la structure événement

Value change.png

Attention si ta variable est de type dbl la valeur peut sembler la même mais diffère à la 15ième décimale. En général on essait d'éviter d'utiliser l'égalité sur des dbl.

 

Ben64

--------------------------------------------------
The best way to say thanks is to give kudos!
0 Kudos
Message 2 of 7
(222 Views)

Voici un petit exemple d'égalité avec des double. Si on affiche x-y avec 20 décimales on observera que ça ne donne pas 1 (c'est causé par la façon dont les double sont gardé en mémoire par le PC)

 

Egalite avec double.png

 

Ben64

--------------------------------------------------
The best way to say thanks is to give kudos!
0 Kudos
Message 3 of 7
(220 Views)

Merci Ben,

J'avais déjà testé cette solution (https://forums.ni.com/t5/Discussions-au-sujet-de-NI/mesure-de-front-montant-sur-contact-sec/td-p/298...) mais sans succès.

Mon problème est le suivant, j'ai un capteur de pluie qui scrute chaque 10sec. Quant il détecte quelque chose il active un indicateur pluie (Boolean) qui va arrêter les instruments et écrire dans un fichier Log, le moment quand il a plu. Évidement, s'il écris chaque 10sec c'est remplir inutilement le fichier log. Alors je me suis dis quand ne prenant en compte que les fronts descendant et montant je réduirai l’événement pluie au début et fin de la période uniquement.

 

En testant, je m’aperçois que le premier coup n'est pas détecté par la boucle Event. Enfin que la LED ici ne s'allume jamais.

 

Ici je teste avec un nombre aléatoire compris entre 0 et 1 mais en réalité c'est un Booléen que j'utilise pour tester l'égalité.

 

Front.png

0 Kudos
Message 4 of 7
(190 Views)
Solution
Accepted by topic author GDuBois

Voici une version qui fonctionne.

 

Quelques commentaires:

  • Ne met pas un Wait de 10 secondes dans une boucle while avec structure événement car l'événement ne sera réalisé que 10 secondes après avoir été déclenché (en fait je recommende de ne jamais utiliser un Wait de 10 secondes de cette façon)
  • Utilise l'événement Timeout au lieu d'un Wait (dans mon l'exemple j'utilise 2 secondes pour générer des changements plus fréquents)
  • La raison pourquoi ça ne fonctionnait pas est subtile: c'est parce que tu reliais la sortie de la fonction Random Number à la propriété value(signaling) ET au terminal. À cause de ça dans l'évenement Value Change on a OldValue (valeur actuelle du terminal) et NewValue (valeur inscrite dans value signaling) seront toujours égales. Dans mon exemple value signaling est dans l'événement Timeout et le terminal est dans l'événement Value Change mais il aurait pu être n'importe où.

Value change.png

 

Ben64

--------------------------------------------------
The best way to say thanks is to give kudos!
Message 5 of 7
(175 Views)

Ok super ça marche !

Je voulais tenter aussi avec une autre variable d'état pour faire la même chose. Je vais revenir la publier ensuite.

0 Kudos
Message 6 of 7
(173 Views)

AutreSoluce2.png

 

PS : j'ai testé sans tempo ...

0 Kudos
Message 7 of 7
(162 Views)