Discussions au sujet des autres produits NI

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

Quelle structure pour mon programme

Résolu !
Accéder à la solution

Je suis d'accord avec Simon,

 

Tu ne dois pas avoir un etat qui prend du temps, normalement, si tu dois faire un déplacement, tu dois t'arranger pour avoir un état "déplacement" qui envoie une info de position, puis un etat de test de position, et qui renvoie vers l'etat déplacement quand le premier est atteint (ou quelque chose du genre).

De la même facon, l'état de test ne doit pas attendre que la fin de position soit atteinte, mais définir que le prochain état est lui-même si la position n'est pas atteinte, ainsi, tu ne bloques pas ta machine d'état.

 

Enfin, pour le Stop, ce que tu peux faire c'est empiler la consigne de stop au début de la file et non à la fin, voir même faire un flush pour annuler toutes les autres commandes qui seraient encore présentes dans la file.

 

Cordialement,

Olivier L. | Certified LabVIEW Developer


0 Compliments
Message 11 sur 21
1 356 Visites

J'utilise justement cette méthode de tester si la cible est atteinte ou pas lorsque je fais des petits déplacements.

 

Cependant, il me semble que je ne peux pas l'appliquer lors du déplacment rapide car, et comme je le disais avant, lorsque je donne une position au vi de déplacement du moteur, celui-ci ne libère sa sortie que lorsque la position est atteinte (ci-joint, un print du vi). Du coup je ne peux pas tester si j'ai atteint la cible...  J'ai peux être mal saisi ce que tu me dis...

 

Pour au moins pouvoir stopper la séquence lors des avances par petits pas, j'ai rajouté un evenement stop dans la séquence d'avance par petit pas pour au moins pouvoir stopper le programme à ce moment là. Mais c'est un peu de la bricole.

 

Quoi qu'il en soit, je libère d'ores et deja la solution car mon soucis initial quant à l'architecture à adopter est résolu.

 

Un grand merci à vous deux.

 

Tout télécharger
0 Compliments
Message 12 sur 21
1 356 Visites

Effectivement, si c'est directement la fonction qui bloque, et que tu n'as pas d'autre fonction existante pour changer le comportement, ce sera un peu plus dur.

 

Pour ce qui est du stop, j'avais cru comprendre que tu utilisais une machine d'état mêlée à un producteur/consommateur. C'est pourquoi je parlais d'une condition  stop qui  serait envoyée par le producteur en tête de la file d'attente, et qui serait lue par le consommateur pour aller dans un etat "STOP".

 

Dans un premier temps, c'est important d'avoir un code fonctionnel même si il n'est pas optimal. Tu pourras ensuite passer plus de temps sur des optimisations de structures lorsque tu auras bien assimilé le focntionnement de ton système.

 

Cordialement,

 

 

Olivier L. | Certified LabVIEW Developer


0 Compliments
Message 13 sur 21
1 350 Visites

Merci Olivier pour ces précieuses infos.

 

Effectivement, j'utilise une machine état mêlée à un producteur / consommateur. Cependant, je ne comprend pas trop quand tu dis qu'il faut  envoyer une condition STOP en tête de la file d'attente.

 

J'ai bien un état STOP dans le consommateur mais je n'arrive pas à y accéder.

0 Compliments
Message 14 sur 21
1 341 Visites

Sur l'image que tu as envoyé, je ne vois pas le producteur/consommateur.

 

Normalement tu dois avoir une boucle productrice qui gère tes événements (même le STOP, celui là ne devrait pas être géré dans ta machine d'état).

Ensuite, lorsque tu recois un événement, tu envoies par la file d'attente une information à ta machine d'état du prochain état dans lequel rentrer.

 

Dans la boucle consommatrice, tu lis ta file d'attente, et c'est cette lecture qui commande les états de la machine.

Si tu recois une info de la boucle productrice, tu fais l'action  désirée.

Si tu dois gérer le prochain état directement à partir d'un etat précédent, tu mets l'info dans la file d'attente depuis cet état (cela remplace le noeud de rétro-action d'une machine d'état standard).

Et tu peux même gérer un Timeout sur la lecture de la file d'attente et avoir un état "Idle" qui fait des opérations classiques, ou rien du tout.

Olivier L. | Certified LabVIEW Developer


Message 15 sur 21
1 338 Visites

Bonjour,

 

Désolé de ne répondre que maintenant, je faisais des tests avec ce que vous m'avez expliqué hier.

 

Je ne savais pas qu'il était possible de gérer une séquence en remplaçant les shifts register par l'envoi d'état directement dans la file d'attente.

En modifiant mon programme ainsi et en rajoutant un FLUSH dans l'état STOP, il fonctionne correctement et je peux stopper ma séquence proprement pour attendre un nouvel evennement.

 

Le seul petit soucis mais qui vraisemblablement ne peut être résolu vient du mouvement rapide qui comme je l'indiquais garde la main tant que la position n'est pas atteinte. Je vais fouiller dans les fonctions de bas niveau du moteur pour voir ce que je peux faire.

 

En tout cas, un grand merci. Smiley clignant de l'œil

 

J'aurais juste une dernière question Olivier:

Quel est l'avantage d'utiliser la méthode d'envoi d'état via la file d'attente plutôt que par un shift register classique?

0 Compliments
Message 16 sur 21
1 329 Visites

Bonjour,

 

La réponse à ta question est assez simple et logique:

- Si tu utilises des shift register, tu ne peux controler l'enchainement de tes états que depuis la boucleprincipale de ta machine d'état.

- Dans le cas où tu utilises des files d'attentes, cela te permet de gérer tes états depuis d'autres boucles (comme par exemple la boucle consommatrice qui gère les événements utilisateurs).

 

Un autre avantage est que si tu as défini un timeout infini pour ta lecture de queue, tu peux très bien n'avoir aucune action à effectuer, dans ce cas, ta dernière opération n'a rien mis en file d'attente, et ta boucle est en pause (0% CPU), alors que dans une machine d'état classique, tu seras obligé de fournir une valeur à ton registre à décalage, ce qui t'obligera à créer un état "Idle" qui attendra une action pour relancer la suite des opérations (polling: utilisation de CPU)

 

Cordialement,

Olivier L. | Certified LabVIEW Developer


Message 17 sur 21
1 327 Visites

Merci pour ces infos Olivier.

 

Je manque encore d'experience et je crois que vais demander à mon chef de me payer la suite des cours LabView... Smiley clignant de l'œil

 

A + et bonne journée.

0 Compliments
Message 18 sur 21
1 324 Visites

bonjour tout le monde 🙂

je suis stagiaire et je travail sur labview et je suis nouveau dans ce logiciel, mon travail de réaliser un organigramme de 8moteur de déplacement suivant un axe donné et un seul moteur angulaire alors je souhaite bien si quelqu'un qui peut m'aider parce que là je suis perdu.

merci pour tout le monde 🙂

 

0 Compliments
Message 19 sur 21
1 211 Visites

bonjour tout le monde

j'att toujour une reponse de votre part si qlq1 peut m'aider s'il vous plais :((

merci

 

0 Compliments
Message 20 sur 21
1 196 Visites