le 05-17-2016 05:03 AM
Bonjour,
Je souhaiterais savoir si il existe une methode facile, un VI, qui permette, au démarrage de l'application, de lancer une fenetre de dialogue (une sorte de popup) avec des paramètres à initialiser, qui serviront par la suite.
Par exemple : cette fenetre contiendrait un paramètre K, l'utilisateur rentre la valeur de K, clique sur OK et on arrive sur le VI principal. A ce stade il pourrais alors lancer l'acquisition de donnée et le facteur K corrigerai une donnée d'acquisition.
J'espère avoir été assez clair.
Est-ce possible de le faire simplement, par exemple avec les VI boite de dialogue/message ... ? Je dis "simplement", parce que c'est juste une question d'ergonomie, actuellement, il y a un bandeau contenant un cluster et ces différents paramètres en aut de la face avant du VI principal, et je compte sur le professionalisme de l'utilisateur pour completer ce bandeau avant de lancer l'acquisition (via un bouton start).
J'ai pensé à plusieurs idée :
- Un sous VI, qui s'afficherai dans l'état initialisation de la FSM de mon VI principal. Dans ce cas il faudrait faire des sorties à ce sous VI ... cela me parrait complexe mais je pense que c'est faisable.
- Des onglets correspondant à chaque état de ma FSM, on aurait alors l'onglet 1 qui aurait les différents paramètres et il serait le seul accessible dans l'état d'initialisation de la FSM, mais alors la, je ne sais meme pas si c'est faisable.
Merci beaucoup !
NB: Si je n'est pas été assez clair, n'hésitez pas à me le signaler !
Résolu ! Accéder à la solution.
le 05-17-2016 06:06 AM
Sinon, si tu as déjà une interface qui propose une ergonomie agréable, tu peux prendre le partie de désactiver (via noeud de propriété) le bouton "start" au démarrage de ton programme.
Puis le réactiver une fois que l'opérateur aura fait les choix nécessaires dans ton bandeau.
Sinon, tu peux toujours imaginer déporter ce bandeau dans un sous vi, en spécifiant "modale" dans les propriétés d'exécution.
05-17-2016 07:34 AM - modifié 05-17-2016 07:52 AM
Merci de ta réponse !
Concernant le noeud de propriété, je n'ai vraiment aucune idée de comment faire, parce que l'utilisateur doit remplir 3 chaine de caractère et 2 valeurs, je ne vois pas trop comment bloquer le bouton start avant d'etre sur qu'il a "au moins mis quelque chose" dans les champs à remplir, si tu as un petit exemple je suis preneur.
Concernant le sous VI, je ne vois pas trop ou activer cette propriété "modale", meme en cherchant sur internet, je ne trouve pas ... (je fais clic-droit> propriété du VI > exécution et la je ne trouve pas)
Réponse pour les futurs intérressés : pté du VI > apparence de la fenetre > personalisée > comportemement -> Modale
D'ailleurs si tu as 2min pour m'expliquer à quoi cela sers ? Du moins, si j'ai bien compris, modale c'est à dire que seul cette fenetre est accessible, le reste n'est pas cliquable ?
Merci encore !
05-17-2016 08:26 AM - modifié 05-17-2016 08:47 AM
(Je n'ai pas réussis à modifier ma réponse encore une fois, je suis désolé du doublon)
Pour répondre à une de mes questions précédente, après quelques tests, modale signifie bien que la fenetre bloque le reste des autres fenetres, j'ai donc réussis à creer une sorte de fenetre popup comme je le souhaitais ... enfin presque vu que quelquechose me bloque (plus sur la forme).
Je ne comprends pas pourquoi je ne peux pas lier la sortie de mon sous VI, à un ma commande pour ensuite l'afficher dans mon VI principal, je suis obligé de passer par un indicateur intermédiaire .... Je sais que c'est n'est pas très clair, alors voici un schéma :
et pour etre sur que cela ne vient pas de la boucle : (c'est un screen du VI principal)
Je voudrais que dans ma fenetre "popup" l'utilisateur puisse juste remplir les paramètres et cliquer sur ok une fois fait ! Sans avoir un affichage que je juge inutile dans ce cas précis. Après, en soit, ce n'est pas extremement grave, mais quitte à faire une fenetre popup, autant que ça vaille le coup !
Ma seconde question, me parrait etre un problème de logique ... Dans mon projet final, j'ai un boucle while global qui "entoure" ma machine à état, donc si dans mon état Initialisation, je demande l'affichage de cette popup (du sous VI donc), il ne risque pas d'y avoir une sorte de million d'affichage de cette popup ? Je dis il ne risque pas, mais en fait j'ai testé et j'ai bien un souci: à chaque "itération" la fenetre semble se quitter+réapparaitre (ça clignote). Il faudrait en fait avoir ce sous vi,lancer qu'une fois (peut etre un compteur, et si le compteur dépasse 1, le sous vi ne s'exécute pas .... je ne sais meme pas si c'est possible de bloquer ou non l'exécution d'un sous VI) ... ou alors il y a d'autre moyen de faire une machine à états que je ne connais pas encore ? Je dois avouer ne pas avoir encore beaucoup creusé la question, mais si vous avez des pistes, je suis preneur !
Merci encore de l'aide !
Erwan
le 05-17-2016 09:29 AM
C'est un cheminement normal.
Dans le cas idéal, une commande ne peut être qu"'écrite" , et un indicateur que "lu".
Afin de respecter le principe du flux de données, il est tout à fait correcte d'utiliser un indicateur (généralement non apparent sur ta face avant) pour faire "sortir" la valeur de ton sous-vi.
Et comem tu l'as compris toi même, l'intéret du "modale" est de verrouiller les autres faces avant en attendant l'opérateur. Il faut tout de même bien réfléchir quand on utilise cette propriété, car elle bloque tout autre accès.
Donc si tu as une fenêtre modale qui bloque en mode infini, tu ne pourras plus t'en sortir à part avec un ctrl+alt+sup 😄
Cdt,
Michael
le 05-17-2016 12:54 PM
Michael.C a écrit :C'est un cheminement normal.
Dans le cas idéal, une commande ne peut être qu"'écrite" , et un indicateur que "lu".
Afin de respecter le principe du flux de données, il est tout à fait correcte d'utiliser un indicateur (généralement non apparent sur ta face avant)
Ah oui je saisi le truc ! Du coup, je viens de découvrir que l'on pouvait cacher un indicateur !
Reste plus qu'à trouver le moyen d'afficher ou non le sous-VI
le 05-17-2016 05:04 PM
une fenêtre "popup" qui permet de saisir un paramètre... ensuite le popup se ferme ...et le paramètre est utilisé dans le Main.
ici ... K sera le nombre de fois que la led "Led" s'allumera dans le main. (toi, tu en fais ce que tu veux)
essaye pour voir si c'est ce genre de chose que tu recherches.
PS :
cette histoire "d'indicateur intermédiaire" ...
Ce n'est pas un "indicateur intermédiaire" ... cet indicateur matérialise simplement la "broche" de sortie de ton sous-VI
Les "broches-input" sont des Contrôles et les "broches-output" seront des indicateurs.
Et tu n'es pas obligé de les "montrer" quand tu ouvres le FP d'un sous-VI ... question de positionnement et de dimension du FP.
dézippe, lance MAIN et dis moi si cela correspond au comportement que tu recherches.
(je n'ai pas de soucis avec l'étape "init" ... elle ne s'exécute qu'une seule fois (c'est l'étape du popup et de la saisie de "K")
05-18-2016 01:39 AM - modifié 05-18-2016 01:57 AM
ah oui ... c'est exactement quelquechose de ce genre que je recherche !
Mais alors je me rends compte que je suis encore loin de bien comprendre labview, autant le main.vi j'ai bien tout saisi, autant le K.vi ... je suis un peu largué !
(J'ai du mal à comprendre le flux de données, meme en activant l'animation je comprends meme pas comment la fenetre popup peut se quitter alors que le bouton OK n'est connecté à rien ... Je comprends pas trop non plus comment on "attends la réponse" de K.vi dans le main(voir meme dans K.vi direct, à croire que j'ai rien compris aux structures évènements) (cf flèche verte quand j'active l'animation ans main.vi) parce qu'en soit, c'est un peu ça le coeur du problème je suppose !
Après dans K.vi, la ou j'ai le plus de mal à comprendre, je suppose que tout ce qui précède la boucle while correspond à la gestion d'erreur ? Et la boucle while en soit, je suis toujours etonné de ce bouton OK relié à rien ... comment peut il "faire quelque chose" ... je suis perdu )
Je viens de comprendre ! La structure évènement réagis UNIQUEMENT au bouton ok, si il change (en soit si on clique) et quand on "sort" de la structure event, cela "active" le bouton stop de la boucle while ! Jamais j'y aurais pensé ! Merci beaucoup ! Je vais essayer de comprendre ce "flux d'erreur" et je reviendrais vous voir pour dire si j'ai tout bien compris et marqué le sujet comme résolu !
Je vais continuer d'essayer de comprendre mais je veux bien quelques eclaircissement si tu as le temps.
Merci
05-18-2016 02:28 AM - modifié 05-18-2016 02:33 AM
Tout ce qui précède la boucle While sert uniquement pour pouvoir afficher la fenêtre popup proprement.
Ce code précise que l'origine du FP (qui sera visualisé) se trouve aux coordonnées (0,0)
Quant à la dimension de la fenêtre popup en elle-même elle est définie dans : VI properties / Window Run Time Position / Panel size
Le code
ici, le cas est particulier ... la boucle While n'est même pas nécessaire. ( mais j'ai tellement l'habitude de coupler "structure Event + boucle While" que j'en ai mis une)
En principe une structure Event fonctionne toujours en tandem avec une While.
Fonctionnement :
La phase "init" exécute le sous-VI (K.vi) ... et donc le flux de données "entre" dans ce sous-VI.
Le flux arrive "sur" la structure Event ... et là .. le flux stoppe.
Pourquoi ? Parceque c'est une structure Event ... et que le code "attend" un événement (pour le moment il n'y en a pas)
Quel événement ? ici, cette structure Event est paramétrée pour répondre à un seul événement, soit : "stop":value change.
A-t-on appuyé sur le bouton "stop" ? ... non ! ... donc la structure Event "attend" !
Pendant que cette structure Event "attend", tu peux modifier comme tu veux la données qui se trouve dans le Contrôle "K".
PS: notons que tant que le flux se trouve dans ce sous-VI ("K.vi") ... dans le main ... on est "bloqué" dans la phase "init".
Pourquoi ? Parceque dans cette phase "init" se trouve ce fameux VI K.vi ... et que celui-ci est en cours, il n'est pas terminé.
Et tant que K.vi n'est pas terminé ... la phase "init" du Main ne sait pas se terminer non plus.
La phase "init" du Main attend que K.vi se termine et lui envoie une données sur sa sortie "K out".
Le Main attend que le flux de données "sorte de K.vi" et lui rende la main.
Revenons au sous-VI "K.vi"....
Tu changes comme tu veux la donnée (le contenu) du Contrôle K.
Quand tu as terminé ... tu aimerais que cette info "sorte" du sous-VI K (K.vi)
Là ... tu appuies sur le bouton "stop" ... la structure Event réagit ... et exécute le code qui se trouve dans le sous-diagramme "stop:value change".
La valeur du Contrôle K est envoyée vers la sortie "K out" et une constante booléenne à True stoppe la boucle While.
Le code du sous-VI (K.vi) est terminé ... le flux de données "sort" de ce sous-VI ...
le flux de données est maintenant à nouveaux dans le Main ... juste à la sortie "K out" de l'icone du sous-VI (K.vi)
Le sous-VI K.vi est représenté par une icone carrée ... tu te trouvais "dans" le carré ... maintenant tu est resorti du "carré".
C'est comme une porte dans une pièce .... tu te trouves dans la pièce avec la porte devant toi .. ensuite tu est en dehors de la pièce avec la porte derrière toi.
et comme le flux est de retour dans le Main, dans le code de la phase "init" ... "init" peut continuer.
"init" place l'info "Led" pour programmer la prochaine étape ... via le shift registre et la While.
et la donnée "K" est également placée sur un shift registre pour être utilisée dans la phase "Led".
si tu as d'autres questions ... demande !
05-18-2016 02:38 AM - modifié 05-18-2016 02:45 AM
je comprends ce qui te bloque ...
le bouton "stop" ... et le bouton "ok" .... c'est le même bouton !
Il porte le label "stop" ... mais son "booléan text" est "ok"
Quand tu appuies sur le bouton OK (fenêtre popup) .... c'est en réalité sur le bouton STOP "dans le code" que tu appuies. (ok ?)
désolé ... j'aurais du utiliser "ok" pour le label aussi.