Discussions au sujet de NI LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Les commandes façade avant

Solved!
Go to solution
Spoiler
 

Bonjour,

 

Je recherche comment détecter le changement un état et ensuite de remettre dans son état par défaut une commande, ci-joint la copie d'écran. Sur la façade avant il y a deux boutons valider et annuler, dans le diagramme lorsque le cluster(valider et annuler) est à l'intérieur de la boucle while aucun souci cela fonctionne mais lorsque je sors de la boucle While pour mettre à complément à l'extérieur afin de pouvoir accéder dans toutes les étapes des structures, c'est là que cela ne fonctionne pas. Merci d'avance pour des éléments de réponses.    

Download All
0 Kudos
Message 1 of 10
(3,673 Views)

Bonjour,

 

Je n'ai pas compris l'ensemble de votre post, cependant :

Il est normal au vu de votre architecture qu'une fois le cluster sortie de la boucle while cela ne fonctionne plus. En effet, les données du cluster vont être lu avant l'entrée de la boucle while, puis la boucle va s'exécuter, mais si vous ne forcer pas de relire le cluster cela ne fonctionnera pas.

 

Connaissez vous la structure événements? Elle permet de détecter un changement d'un objet de la face avant. Cela pourrait être utile dans votre cas . Je joins un petit exemple d'utilisation de la structure événements dans une machine à états.

 

Cdlt

0 Kudos
Message 2 of 10
(3,661 Views)

Bonjour,

 

si vous pouvez sauvegarder sous la version 2010 votre exemple cela sear bien.

0 Kudos
Message 3 of 10
(3,657 Views)
0 Kudos
Message 4 of 10
(3,645 Views)

Bonjour fab1,

Merci par contre cela ne correspond pas exactement par rapport ce que je recherche, ci joint un vi simplifié. J'arrive à faire une lecture du cluster pour la première fois mais pas le deuxième fois. En faite, j'ai mis dans un registre de décalage pour pouvoir récupérer les données à tout moment des étapes mais lorsque je récative le bouton je modifie le cluster et la suivante je ne récupère pas. Avez vous une idée?     

0 Kudos
Message 5 of 10
(3,621 Views)
Solution
Accepted by topic author GSXR100038

Bonjour,

 

Dans votre exemple lorsque vous dites que vous arrivez à faire une première lecture du cluster, ce que vous faites, c'est une lecture des données au démarrage dans le cluster. Essayez de démarrer votre exemple, puis changer les valeurs dans le clusteur et après cliquer sur le bouton : Les valeurs lus sont bien celle de l'initialisation,et pas celle que vous venez de modifier.

 

De plus lorsque vous faites un "désassembler par nom" pour reassembler ensuite dans le cluster, vous ne venez pas relire les nouvelles valeurs du clusteur, mais les valeurs présente dans le registre à décalage, donc les données à l'initialisation du programme.

 

Je l'ai modifié afin qu'il relise bien les nouvelles valeurs. Mais en gardant votre structure, à moins de me tromper , il faut passer par une variable locale, afin de relire la valeur effectivement présente dans le clusteur.


Faite attention à ce genre de structure. Vous faites une lecture continue du booleen pour vérifier si il passe à vrai. Vous faites du polling dessus; si votre programme doit effectuer d'autres choses demandant des ressources, cela risque de poser problèmes.

 

Cdlt

 

0 Kudos
Message 6 of 10
(3,609 Views)

Bonjour,

J'avais effectivement fait en passant par une variable locale mais je veux éviter cette méthode pour le flux des données. Un registre à décalage relise bien l'étape en cours d'exécution (comme vous avez fait pour la machine état Initialize, Wait,  Do Action...) donc ce n'est pas seulement à l'initialisation. A moins que ce n'est pas valable pour les clusters mais pour les enums seulement? Peut-on s'affranchir des variables locales pour faire la même chose de ce que vous proposez? Merci d'avance.         

0 Kudos
Message 7 of 10
(3,603 Views)

Bonjour,

 

J'apporte juste une autre possibilité que de le faire par la variable locale c'est d'utiliser le noeud de propriété de valeur du cluster cela évite peut-être les situations de compétitions. Bon je pense qu'il y a rien à dire sur ce sujet. Merci  

0 Kudos
Message 8 of 10
(3,596 Views)

Je ne comprends pas tout mais :

 

Effectivement garder le flux de données est une bonne idée, mais si vous n'allez pas relire la variable, la valeur ne sera pas rafraîchi. J'essaye d'expliquer différemment : Lorsque vous allez changer la valeur dans l'indicateur sur la face avant, cela ne va pas rafraîchir automatiquement la valeur présente dans votre clusteur. Celui ci contient toujours l'ancienne valeur. Avez vous fait le test que j'avais décrit?

 

Votre machine à état est correct, mais sans aller relire la valeur du clusteur vous n'aurez pas la nouvelle donnée. Et le faites de désassembler le clusteur ne vient pas relire les valeur présente sur la face avant, mais juste désassembler ce qu'il y a dans la variable du diagramme.

 

Dans l'exemple que je vous avait fournit, j'utilisait la structure événement. Je récupérais "nouvelle valeur" du clusteur. A ce moment la je venais donc relire les valeurs des éléments a l'intérieur.

 

Dans votre cas, en câblant le clusteur avec un registre a décalage, si vous voulez relire les nouvelles valeur présente a l'intérieur de celui ci (sur la face avant) il faut réactualiser les valeurs, soit par une variable locale, soit par un noeud de propriété.

 

Pour vous affranchir des variable locales, il va falloir utiliser une structure événement. SInon c'est variable locale ou noeud de propriété

0 Kudos
Message 9 of 10
(3,594 Views)

Bonjour fab1,

 

Merci pour des précisions de l'utilisation du cluster, je valide votre solution. Bonne journée.  

0 Kudos
Message 10 of 10
(3,589 Views)