05-24-2016 02:15 AM - modifié 05-24-2016 02:21 AM
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.
Résolu ! Accéder à la solution.
05-24-2016 03:24 AM - modifié 05-24-2016 03:27 AM
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.
le 05-24-2016 03:39 AM
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.
le 05-24-2016 03:50 AM
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.
le 05-24-2016 04:47 AM
Sinon ma méthode t'évite de gérer toi même une FIFO de plus, vu que LV le fait pour toi ^^
le 05-24-2016 04:57 AM
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
le 05-24-2016 05:39 AM
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 😉
le 05-24-2016 07:57 AM
Ok merci !