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 : 

Face Avant bloquée - structure évènement

Résolu !
Accéder à la solution

As tu bien vérifié la cohérence de tous tes noeuds de propriétés activé /désactivé ?


Au pire si tu peux me fournir juste ce VI, même sans l'arborescence complète, je pourrais l'ouvrir sna squ'il soit exécutable, juste pour jeter un oeil au condition.

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
0 Compliments
Message 11 sur 19
1 221 Visites
0 Compliments
Message 12 sur 19
1 220 Visites

et les deux derniers

Tout télécharger
0 Compliments
Message 13 sur 19
1 219 Visites

Je viens de regarder ton programme, et il est agréable de voir que des efforts sont faits pour garantir la lisibilité du code.

Toutefois, je ne suis pas du tout en adéquation avec ta façon d'utiliser le principe de machine à état.

Je pense que ton système de tableau avec indexation pour sélectionner l'état est nuisible à la lecture de ton code.

Il serait plus simple de mettre directement la constante souahitée, cela apportera une meilleure lisibilité, et n'impliquera pas de vérifier toutes les constantes tableaux au moindre changement de définition.


De plus, il est nécessaire de revoir l'utilisation des structures event, utilisez celle-ci juste comme temporisation, n'est pas logique, et va être sujet à des instabilités de ton code.


En l'état, je ne suis pas capable d'identifier l'origine de ton problème.
Voici, dans l'ordre de priorité, les modifications que je ferais sur ton code :

1- Utilisation de constante simple pour la sélection de l'état suivant (utilisation de tableau uniquement dans le cas où un choix utilisateur génère plusieurs étapes / cf. exemple lavomatic dans préparation CLD)

2 - utilisation correcte des structures évènements (la totalité du code doit se trouver dans la structure, et non en dehors) /

Si la structure sers juste de temporisation, mettre une boucle while avec sortie temporisé

3- Cablage des fils d'erreurs jusqu'à un afficheur en face avant, pour savoir réellement si des erreurs se produisent.


Cdt,

Michael

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
0 Compliments
Message 14 sur 19
1 215 Visites

Salut Michael,

 

bon j'ai suivi tes conseils et je suis en train de remettre un peu d'ordre dans la sélections des différents états et effectivement en supprimant tous les tableaux, on y voit/comprend un peu mieux !

 

Du coup, ça me permet également de faire une relecture/peaufinage de mon code. Effectivement je suis en train de supprimer les structures event qui ne servent que de timeout (mais j'en avais pas non plus mis à la pelle), mais par contre je ne vois pas comment procéder sans structure event pour les choix du cycles/paramètres/sauvegarde...

 

Bref, je verrai ça plus tard mais quoiqu'il en soit je viens de découvrir un nouveau truc bizarre au niveau des boutons de consigne qui me posaient problème. Dans l'idle, effectivement je les désactivais (et je les ractivais juste après le choix de la sauvegarde et avant le départ de l'essai -- s'il l'opérateur voulait changer la consigne qui par défaut se trouve à 22.7). J'ai maintenant essayé de les activer dès l'idle, et avant même d'appuyer sur mon bouton Mise sous tension, j'ai de nouveau tenté de changer la consigne plusieurs fois et de nouveau le même problème : je peux changer cette commande uniquement la première fois et après y'a tout qui se bloque, alors que nous ne sommes pas du tout en présence d'une structure event (en effet, celle-ci arrive au cycle d'apres "Choix du cycle"). Et je sus en train de me demandais s'il n'y a pas une option ou quelque chose comme qui permette de modifier une commande seulement une fois, enfin j'en sais rien..

 

Je te joins l'état  "Mise sous Tension" dans lequel je me trouve lorsque j'essaye de modifier plusieurs fois cette consigne; la condition faux étant juste le cable du boolean qui traverse le case jusqu'au sélecteur.

 

 

0 Compliments
Message 15 sur 19
1 204 Visites

Pourrais tu faire une capture d'écran du diagramme en mode exécution, voir sur quel fil cela tourne.

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
0 Compliments
Message 16 sur 19
1 195 Visites

VICTOIIRE, j'ai enfin réussi à identifier la source de mon problème! Après concernant l'explication, c'est autre chose...

Dans l'état "Vidange/Purge" puis dans le sous-état "Sécurités", j'avais dans ma boucle event une action liée à cette commande : "Consigne interne purge (L/min) FIC2":Valeur changée (tu peux regarder toi aussi, tu dois l'avoir dans le main que je t'ai envoyé!. Du coup j'ai supprimé cette condition et je peux de nouveau modifier ma consigne quand j'éxecute mon programme (avant d'appuyer sur mon bouton de MST, juste après que l'état "Idle" se soit effectué).

 

Mais par contre, je suis dans l'incapacité totale d'expliquer la cause de ce problème : pour moi cette boucle event se trouvant dans le "grand" état "Vidange / Purge", elle ne devrait pas à mon sens affecter la commande; d'autant que j'initialisais bien l'activation de la commande dans l'idle... As-tu une idée d'où cela peut venir?

 

Et en fait, j'utilisais cet event pour permettre à l'opérateur de pouvoir changer la consigne même quand l'essai est en cours! En fait, au moment où l'opérateur appuie sur le bouton 'START', un timer se déclenche et je passe dans l'état "Marche pompe temps "  où je viens régulièrement checker que je ne dépasse pas le temps (de purge par exemple) et je viens switcher très vite entre cet état et celui d'après "Sécurités" où je viens scruter qu'aucune sécurité de s'est déclenché (dans le timeout). Et par la même occasion, je voulais en profiter pour utiliser cette structure event pour pouvoir permettre à l'opérateur de zoomer sur le graphe pendant l'essai (à l'appui du bouton zoom) et de pouvoir changer la consigne (grâce là aussi à la commande en FA). Bref, mon bouton zoom (tu peux regarder mon code, on en avait déjà parlé d'ailleurs) me permettait d'agrandir le graphe dans un sous-vi en mode pop-up sauf qu'une fois cette fenêtre fermée, j'avais déjà remarqua que je perdais la main sur la FA et qu'elle se bloquait.

 

Bref j'ai compris maintenant qu'il ne faut pas utiliser de structure event car c'est de là que me viennent tous mes bus mais je n'ai aucune idée de comment procéder sans celle-ci pour arriver à ce que je dois obtenir (càd détecter en permanence le changement de consigne et l'appui du bouton zoom pour agrandir le graphe)..

 

Merci d'avance pour ta réponse 🙂

0 Compliments
Message 17 sur 19
1 192 Visites
Solution
Accepté par l'auteur du sujet Canister31

En fait, ce qu'il faut savoir, c'est que toute action sur une commande est stocké en mémoire tant que celle-ci n'est pas consommé (exemple lecture de la valeur de la commande).


Donc dans ton cas, ce qui se passait ,c 'est qu'une fois arriver sur la structure "event", celle-ci détecté une modification de la consigne même si la valeur a été modifié avant que l'on arrive à cette étape, générant le blocage.

 

C'est pour ça que comme indiqué précédemment, il ne faut jamais utilisé plusieurs structures évènements dans un diagramme. Il faut se dire que si on arrive pas à faire autrement, c'est que l'architecture de départ du programme est à revoir.

 

Tu trouveras en pièce jointe, un sous vi qui pourrait te permettre de répondre à ton besoin (si je l'ai bien compris).


Cdt,
Michael

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Message 18 sur 19
1 189 Visites

Ok, tout s'éclaire! effectivement avec ton sous vi, je vais pouvoir traiter mon cas de la consigne changée pendant l'éxecution du test et la modification qui s'en suit grâce au booléen 'Valeur changées?' et avec une structure case, jer pourrai agir sur mon sous-vi (celui s'occupant de chanegr la consigne à mes régualteurs) le cas échéant.

Pour le bouton zoom, c'est le même principe sauf qu'au lieu d'utiliser des valeurs, je prendrai simplement l'état du boolean en question non? ou alors je boucle dans mon état "Marche Pompe Temps" par exemple le temps que le temps ne se soit pas entièrement écoulé et dans cet état je scrute en permanence l'état du bouton Zoom (et dès qu'il est à true, j'affiche ma pop-up), exact?

 

Et concernant les utilisations de mes boucles event (j'en décompte maintenant 3 au total : une pour le choix du cycle, une pour le choix des paramètres et une dernière pour le choix de la sauvegarde), je ne vois pas bien comment faire autrement sachant que je désactive/active certaines commandes en fonction du choix de l'user, et utiliser les structures event pour ce genre de cas me semblaient idéales (par exemple dans l'état Choix du cycle, en fonction de ce que l'utilisateur choississait les bouléans 'Volume d'air cumulé', 'Durée' ou 'Delta WE1', seuls les commandes respectives à ces boutons s'affichaient). Je ne sais pas si j'ai été très clair....

 

Bon quoi qu'il en soit, ça m'aura en tout cas bien débloqué! Je te remercie des efforts que tu auras fourni à m'aider!:)

0 Compliments
Message 19 sur 19
1 186 Visites