Discussions au sujet de NI LabVIEW

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

machine d'états: re-passer par un état particuliier

Résolu !
Accéder à la solution

Bonjour,

 

J'ai réalisé un VI avec différents états. Or parfois je perds la connexion avec mon appareil.

J'interroge mon appareil 4 fois dans mon VI. L'enchainement des états est bon sauf en cas de problème.

Je souhaiterais savoir s'il existe une technique simple pour repasser par l'état "connnexion" en cas de soucis? 

 

Par exemple, l'enchainement est le suivant initialisation/ connexion/ mesure 1/ mesure 2/ mesure 3/ mesure 4/ fermeture des ports

Si la mesure 2 bloque car j'ai perdu la connexion, est ce possible de repasser par l'état connexion et surtout de revenir ensuite à la mesure 2 puis suivre l'enchainement des états?

 

Dans les états "mesure" je mets comme états suivants soit de passer à l'état suivant soit revenir à l'état connexion. 

Mais je bloque pour l'état "connexion" comment faire pour revenir au dernier état avant le passage par l'état "connexion" ?

 

J'espère être clair...

 

Merci d'avance.

 

0 Compliments
Message 1 sur 8
4 042 Visites
Solution
Accepté par Marcelito

Si à l'aide de la souris tu étires ton registre à décalage, soit vers le haut ou le bas, alors tu as accès  à sa valeur à N-1.

Ainsi après ton passage à l'étape de connexion sur erreur, il te suffit de passer à n-1.

“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 2 sur 8
4 033 Visites

une machine à états avec une Queue.

 

au lieu de passer l'étape suivante "simplement" par un shift registre ... tu passes par une Queue.

L'état (n) "enqueue" l'état (n+1)) ... et à "l'entrée" de ta machine à états tu "déqueue"

Si à l'état (n) tu as un soucis (connexion perdue) ... au lieu de faire un "enqueue" de l'état (n+1) ... tu fais un "enqueue" de "connexion" + un "enqueue" de l'état (n)

Ta machine à états repassera alors par "connexion" ... ensuite "état (n)"

... et ensuite s'il n'y a plus de soucis ... état(n) fera le "enqueue" de (n+1) ... et le processus reprendra sa séquence normale.

0 Compliments
Message 3 sur 8
4 029 Visites

si soucis à l'état (n), j'ai écris : " tu fais un "enqueue" de "connexion" + un "enqueue" de l'état (n) "

 

c'est l'inverse ... 1) tu enqueue "état (n)" 2) ensuite tu enqueue "connexion"

 

au tour suivant la machine dépilera "connexion" ... et ensuite elle dépilera à nouveau "état (n)" .. et s'est reparti là où elle se trouvait au moment du soucis.

 

 

Message 4 sur 8
4 026 Visites

Sinon ma méthode t'évite de gérer toi même une FIFO de plus, vu que LV le fait pour toi ^^

“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 5 sur 8
4 015 Visites

Merci à vous!

La solution de Michael me parait plus simple. Je regarderai Ouadji comment faire des "queues" plus tard.

J'ai adapté à mon cas. Ca à l'air de fonctionner correctement 

 

 

 

 

0 Compliments
Message 6 sur 8
4 013 Visites

Je viens de regarder ton code.

Pour ma part, je me méfie toujours de la fonction "premier appel", dans le cas de Vi réentrant, ou d'appels successifs, il se peut que ca ne réponde pas à ton besoin.


Je serais plus du genre à me baser sur l'index de la boucle "while".
S'il est à 0, alors c'est la première fois que j'entame mon cycle, et donc je vais à test 1 après le connexion.

Sinon, tu peux aussi initialiser le cas n-1 à "test1", comme tu initialises ton état de départ, en cablant l'enum dessus.


Ainsi plus besoin de faire devérification 😉

“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 7 sur 8
3 991 Visites

Ok merci !

0 Compliments
Message 8 sur 8
3 982 Visites