From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discussions au sujet de NI LabVIEW

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

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

Résolu !
Accéder à la 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 Compliments
Message 1 sur 7
1 440 Visites

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

0 Compliments
Message 2 sur 7
1 409 Visites

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

0 Compliments
Message 3 sur 7
1 407 Visites

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 Compliments
Message 4 sur 7
1 377 Visites
Solution
Accepté par l'auteur du sujet GDB21

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

Message 5 sur 7
1 362 Visites

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 Compliments
Message 6 sur 7
1 360 Visites

AutreSoluce2.png

 

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

0 Compliments
Message 7 sur 7
1 349 Visites