12-12-2012 06:59 AM - edited 12-12-2012 07:00 AM
Bonjour,
Je pense effectivement que je risque de compliquer mon application pour pas grand chose en utilisant autre chose que les ActiveX.
Je profite de ce thread pour vous poser une autre question. Jai actuellement un petit soucis avec mon application. J'aimerais en effet réaliser une fonction d'initialisation de la position de mon servo-moteur qui partirait de sa position courante à la position zéro, puis de la position zéro à mi-course. J'ai donc pour cela utilisé une séquence empilée avec à l'étape 0 une méthode MoveHome puis à l'étape 1 une méthode MoveAbsoluteEx pour positionner mon servo-moteur à mi-course.
Lorsque j'exécute mon VI, mon servo-moteur retourne bien à zéro, mais il ne repart pas à mi-course.
J'ai donc procédé autrement en utilisant à la place de la méthode MoveHome (étape 0), la méthode MoveAbsoluteEx avec dAbsPosCh1 = 0, et là ça fonctionne bien. Mais ce qui me gêne avec cette méthode, c'est que je n'utilise pas la méthode MoveHome qui est censé justement réaliser cette séquence de mise à zéro (à moins que je n'ai pas saisi le but de cette méthode).
Une idée ?
12-12-2012 08:19 AM
Bonjour,
Effectivement, la méthode MoveHome est plus qu’une simple fonction ramenant la platine à sa position 0 calculée. Elle permet de ramener la platine à une position 0 en tenant compte du hardware, c'est-à-dire du switch mécanique et de la valeur d’offset du 0 et ainsi d’obtenir une position de référence.
Votre deuxième programmation ne permet pas, comme vous le pensiez, d’obtenir réellement une position de référence. Pour cela, il faut effectivement utiliser votre première programmation à savoir la méthode MoveHome puis la méthode MoveAbsoluteEx.
Si en l’état cela ne fonctionne pas, je pense que cela vient d’une erreur au niveau des paramètres de la méthode MoveHome.
En effet, celle-ci accepte en paramètre d’entrée un Booléen appelé bwait qui indique le mode de retour de la méthode. Lorsqu’il est réglé sur faux (F), la méthode retourne immédiatement après avoir lancé la séquence d’initialisation de la platine ; lorsqu’il est réglé sur vrai (T), la méthode retourne une fois la séquence terminée. Si la méthode MoveAbsoluteEx est appelée avant la fin de la séquence d’initialisation, elle ne s’exécute pas. Je vous conseille donc de passer ce paramètre sur vrai sur toutes les méthodes de déplacement.
Cependant, ce réglage implique un problème : en effet, tant que la platine est en mouvement, la suite du programme ne s’exécute pas et si vous désirez faire d’autres étapes en attendant, elles seront bloquées. Si cela est un problème, il existe une autre méthode qui consiste à utiliser des événements et en particulier celui appelé MoveComplete qui se déclenche lorsqu’une séquence de mouvement est terminée. Dans ce cas, il faut laisser le paramètre bwait sur faux et attendre que l’événement MoveComplete soit déclenché avant de passer à la prochaine méthode de déplacement. Pendant ce temps, le programme Labview continue de tourner.
Pour plus de détails au sujet de l’utilisation des événements, je vous engage à consulter notre guide APT et Labview disponible sur notre site web sur la page suivante : http://www.thorlabs.com/images/TabImages/GuideToLabVIEWandAPT.pdf au Chapitre 7.
Cordialement,
Le support technique.
12-14-2012 04:48 AM
Bonjour,
J'ai suivi votre conseil de passer le paramètres bwait à true. Malheureusement, lorsque je lance ma séquence d'initialisation, le servo-moteur exécute bien le MoveHome mais pas le MoveAbsoluteEx.
Voici des captures d'écran de mon application. Pouvez-vous me dire si vous voyez une erreur ?
Etape 0 :
Etape 1 :
L'étape 2 permet simplement d'afficher une pop-up signalant à l'utilisateur que la séquence d'intialisation s'est réalisée avec succés.
Je vous remercie.
Cordialement,
Che57
12-17-2012 07:47 AM
Bonjour,
Je pense que cela vient d’un problème de câblage entre les méthodes. En effet, ici, les méthodes sont effectuées les une après les autres, en suivant le câblage. Dans votre programme, la méthode MoveAbsoluteEx n’est pas câblée.
Pour cela, il faudrait soit passer par une structure déroulée qui est plus explicite au niveau du câblage comme sur l’image ci-dessous :
Soit passer par une variable locale de séquence (pour cela, il faut faire un clic droit sur le bord de la structure, et cliquer sur « Ajouter une variable locale de séquence). La variable doit être reliée à la sortie de la méthode MoveHome et à l’entrée de la méthode MoveAbsoluteEx comme sur les images ci-dessous. (A noter qu’il est également possible de créer d’abord une séquence déroulée et qu’en la transformant en séquence empilée via un clic droit, Labview créé seul les variables nécessaires)
Cordialement,
Le support technique
12-17-2012 08:30 AM
Bonjour,
J'avais le sentiment que le blox MoveAbsoluteEx n'était pas câblé. J'ai donc transformé ma séquence empilée en une séquence déroulée, et en séquence empilée avec des variables locales de séquence. Malgré ça le moteur ne se déplace pas à mi-course. Néanmoins, la troisième étape (pop-up indiquant que l'actionneur est à mi-course) s'affiche lorsque je teste si la position est zéro absolu.
Encore plus étrange, en supprimant la dernière étape de la pop-up et en exécutant mon VI, les deux méthodes se sont exécutées ! Mais en voulant lancer ma deuxième séquence, il n'y a plus que le MoveHome qui s'exécutait... Bref, il s'agit là d'un comportement aléatoire incompréhensible.
12-18-2012 02:20 AM
Je voulais dire qu'en lançant une deuxième fois la séquence d'initialisation, cela ne fonctionnait plus. Je vais essayer avec un autre servo-moteur.
12-18-2012 07:22 AM
Ne trouveant aucune solution à la première technique (MoveHome suivi d'un MoveAbsoluteEx), je vais me tourner vers la deuxième solution proposée en utilisant l'information HomeComplete.
J'ai suivi la documentation et lorsque la séquence MoveHome est achevée, j'obtiens bien une pop-up qui me le confirme. Je pense donc qu'il faut que j'utilise cette information pour lançer la méthode MoveAbsoluteEx. Je pensais récupérer une information de type booléen du VI Callback énevenement afin de lancer la méthode, mais je ne ne pas comment procéder.
02-06-2013 06:56 AM
Bonjour,
Depuis l'autre post, j'en suis toujours au même point avec ma séquence !
J'ai donc utilisé un VI Callback d'événement, qui me retourne une popup lorsque la méthode MoveHome a été exécutée.
Serait-il possible de récupérer cette information, sous la forme d'un booléen par exemple, de façon à pouvoir lancer l'exécution d'une autre méthode, en l'occurence ici, un MoveAbsoluteEx ?
Merci de votre réponse.
Cordialement,
Che57