Discussions au sujet de NI LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Initialisation des références (controls front panel)

Bonjour,

 

Je voulais savoir quelle était la méthode pour initialiser les références de mes controls de la face avant comme j'ai pu le faire avec la state machine. J'ai pris un projet QDMH suite aux conseils de Luc (dans un  autre sujet) et il proposait dès le début d'utiliser des références.

 

Les references peuvent être pratique car si j'ai bien compris elle permettent à des sous-vi de pouvoir modifier les valeurs de la variable (ici des commandes ...(donc une sorte de pointeur en quelque sorte ?))

 

Et j'imagine que je dois les initialiser. Cependant, vu que je reste dans le main, pour initialiser les boutons j'ai peut être pas à (voir je ne dois pas) passer des references mais faire comme avec la state machine. 

Je découvre les references donc mes questions sont sûrement basiques mais malgré la lecture de nombreux post sur cette "chose", la notion est toujours un peu floue Smiley Sad

 

Merci d'avance pour votre aide Smiley HappyInitialisation des control de la face avant (state machine).PNGQDMH avec références.PNG

0 Kudos
Message 1 of 6
(191 Views)

Ca ne semble pas mal comme tu as fait dans ton QDMH.

 

Juste une note en passant, pour les "label" des controles/indicateurs je te conseille de mettre des noms bcp plus courts, et pour les nom que tu as en ce moment, mets les plutôt comme "caption". En gros sur le diagramme tu auras le label (court et concis) et sur la face avant tu affiches le caption (long et descriptif) plutôt que le label.

 

Maintenant pour l'utilisation des références des controles / indicateurs de l'IHM par les sous VI, en général on essaie de limiter leur utilisation à la modification de l'apparence des controles / indicateurs - par exemple griser un contrôle pour empêcher l'utilisateur de cliquer dessus.

Mais comme tu l'as vu, avec la référence, tu peux ausi modifier la valeur d'un controle / indicateur, ça ouvre bcp de possibilités mais c'est pas toujours la meilleure solution.

Il y a de nombreux cas de figures, de nombreux avis, de nombreuses méthodes.

 

Bonne découverte!


We have two ears and one mouth so that we can listen twice as much as we speak.

Epictetus

Antoine Chalons

Message 2 of 6
(106 Views)

Merci de l'astuce !

C'est vrai que ça pourrait facilement alléger mon diagramme donc je prends Smiley Happy !

 

Alors j'ai quelques questions: premièrement, concernant la state machine, cela fonctionne et répond à mes besoins. Je veux juste m'assurer que la forme n'est pas trop mal. Pour l'instant pas d'erreur mais bon je préfère demander Smiley Happy

 

Pour créer le cluster de paramètres, ce que je fais, c'est que je fais un copier coller de tous mes controls que je transforme en constante. Je change leur nom à l'identique pour qu'ils aient le même nom que leur control correspondant et je les mets dans le cluster de paramètres. Ensuite comme tu as pu le voir je rentre les valeurs d'initialisation (unbundle) et ensuite je les affiche via des variables globales (bundle). Je sais que les var locales sont pas top mais de ce que j'ai lu on peut se permettre de les utiliser pour ce qui est de l'interface.

 

J'ai regardé l'exemple labview concernant les references et c'est vrai que dans cet exemple, les references servent faire une modif visuelle ou une modif de valeur dans un sous VI. Ou peuvent être connecté à des property node sans restriction de type (bool, string, etc)

 

Mais dans mon cas passer par une reference ne marche. 

changer la valeur de mon OK button (validation des paramètres initiaux) et changer l'état (activé, désactivé et grisé) ne marche pas.

Je dois mal m'y prendre mais je n'arrive pas à trouver la bonne manière de faire.

 

Je sais que les button OK sont un peu pénibles : ce ne sont pas vraiment des booléens mais ce sont des variants. On ne peut pas se servir non plus de variables globales car pour "remonter" le bouton après avoir cliqué, il faut que le flux de données le traverse. C'est pour cela que je l'ai mis dans la structure évenement. Je pensais avoir trouvé une "goupille" en initialisant le bouton à l'état off (remonté) grâce à un property node. Cela marchait tant que le bouton n'était pas dans la structure evenement. 

C'est pourquoi je voulais revenir aux references, je pense que cela pourrait être un moyen de résoudre ce problème mais je me retrouve heurté au problème de départ: je n'arrive pas à initialiser mes controls en passant par des references

 

Et pour finir, pour la QDMH, je n'ai pas grand mérite, je l'ai prise depuis les projets proposés par labview. Assez délicat au début mais je commence à voir les (très grands) avantages de cette machine notamment la FIFO queue pour gérer le déroulement des différents états Smiley Very Happy

 

Je mets mon code au cas où.

Et encore merci Smiley Wink

 

 

 

 

0 Kudos
Message 3 of 6
(91 Views)
Highlighted

...Pour créer le cluster de paramètres, ce que je fais, c'est que je fais un copier coller de tous mes controls que je transforme en constante. Je change leur nom à l'identique pour qu'ils aient le même nom que leur control correspondant et je les mets dans le cluster de paramètres...

Il faut personnaliser le cluster en def de typeSmiley Happy

Capture.JPG

ou en faire une def de type directement avec le raccourcie 5éme ligne dans le 1er menu ( je le découvreSmiley Embarassed)

Message 4 of 6
(85 Views)

Je l'ai laissé en "normal" parce que la le fait d'avoir le fil de données du cluster qui passe dans mon QDMH, je n'ai pas besoin d'avoir un type def pour que la mise à jour se fasse (j'ai l'impression que ça marche bien tout cas)

 

J'utilise un type def souvent pour les enum pour qu'ils puissent se mettre à jour tous en mêmes temps (apply changes + save), mais ici en récupérant les données de mon cluster via le fil de données je ne vois pas la plus value d'un type def 

 

Il faut le mettre par sécurité au cas où ? Parce que dans mon cas (attention je vais peut-être dire une bêtise) mais si je ne copie colle pas le cluster à un autre endroit de mon programme je n'en aurait pas besoin si ?

 

Comme je disais je galère un peu avec cette nouvelle structure mais je pensais utiliser toujours la même architecture pour l'ensemble de mon programme donc avec toujours le fil de  données du cluster en haut dans ma structure condition avec tous les états de mon programme.

 

Merci de ton retour !

0 Kudos
Message 5 of 6
(74 Views)

Bonjour, 

 

je reviens vers vous concernant l'initialisation de référence. Le seul moyen que j'ai trouvé est de passer par un noeud de propriété. Je sais que ce moyen n'est pas à privilégier mais existe-t-il un autre moyen plus efficace pour initialiser les references de commande ?

 

Juste un exemple en photo : par exemple j'ai une commande numérique que je veux initialiser à 10. Je passe par une référence et j'initialise la valeur à 10 grâce à un noeud de propriété.

(QDMH de base modifiée juste pour vous montrer cet exemple)

 

Initialisation références.PNG

(PS: j'ai codé la QDMH à l'identique par rapport à la state machine (en passant par des variables locales, comme sur la photo de la state machine que j'avais postée sur le sujet). J'obtiens le résultat souhaité, à savoir l'initialisation de mes control et surtout leur "mise à jour" sur la face avant. Si vous avez une méthode plus efficace, cela m'intéresse Smiley Wink )

 

Je mets la photo en pj si jamais c'est trop petit dans le message

 

Merci ! 

0 Kudos
Message 6 of 6
(38 Views)