Discussions au sujet de NI LabVIEW

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

Machine d'état et structure événement: valeurs non mise à jour

Highlighted

Bonjour,

 

j'ai un programme utilisant une machine d'état.

Dans un des états, j'ai une structure d'événement. Je n'arrive pas à ce que mes variables soient mises à jour dans cette boucle.

Je vous joins un exemple (Example_StateMachine.vi) avec des sous-vis associés.

Merci pour votre aide.

Capture.PNG

0 Compliments
Message 1 sur 5
705 Visites
Highlighted

Malheureusement je n'ai pas Labview 2018, seulement le 2017.

0 Compliments
Message 2 sur 5
652 Visites
Highlighted

Le fil rose (cluster contenant les clusters 1 et 2) est mis-à-jour lors de l'état "wait". Même si tu modifies le contenu des cluster 1 et 2 lorsque tu es dans l'état "live" ce sera toujours les valeurs de l'état "wait" préalable qi seront affichées. Une solution simple est d'utiliser directement les terminaux "cluster 1" et "cluster 2" dans l'état "live".

 

State Machine mod.png

Ben64

--------------------------------------------------
The best way to say thanks is to give kudos!
0 Compliments
Message 3 sur 5
635 Visites
Highlighted

Je viens faire un tour sur ce sujet car il m'intéresse fortement, n'étant pas très à l'aise avec les clusters (mais j'y travaille !) 🙂

 

Alors je ne sais pas trop ce que l'auteur du post entend par valeurs mises à jour (je n'ai que Labview 2017). De ce que je vois j'ai l'impression que le but serait d'actualiser les controls présents dans les clusters. Ma méthode (qui fonctionne mais n'est peut-être pas la plus optimisée) est de modifier les variables grâce au bundle by name, et ensuite je les "mets à jour" grâce au unbundle by name qui envoie les données sur les variables locales des controls. (Chaque control étant dans un des états de la structure évènement). Je glisse une image qui sera peut-être plus parlante.

 

Si des méthodes sont plus efficaces, je suis preneur !

 

Initialisation des control de la face avant (state machine).PNG

0 Compliments
Message 4 sur 5
578 Visites
Highlighted

La solution qui m'apparait la plus robuste est l'élimination de la double boucle (une seule boucle est nécessaire) et d'utiliser le shift register pour storer les données. La double boucle rend la compréhension de la logique difficile. L'image ci-dessous montre l'exemple qui est aussi ci-joint. Notez que je n'ai pas testé l'application mais la logique est bonne.

 

Example_StateMachine (mod)_BD.png

 

Une approche similaire serait de créer une variable (enum) "État" dans un cluster qui contiendrait aussi cluster1 et cluster2 pour le shift register. Cette variable "État" prendrait les valeurs "Live" et "Wait" et d'utiliser une case structure pour chacun des cas; mais toujours avec une seule boucle.

Marc Dubois
HaroTek LLC
www.harotek.com

Message 5 sur 5
464 Visites