Retour à l’origine
Cette instruction exécute un retour à l’origine en fonction des paramètres du DUT indiqué. Les impulsions sont émises en sortie de la voie indiquée lorsque le drapeau de contrôle de cette voie est FALSE et la condition d’exécution est TRUE.
Entrée
Adresse de départ de la zone contenant le tableau de données
Voie de la sortie impulsionnelle :0–3
Après l’activation du servosystème, il y a une différence entre la valeur de la position initiale (valeur courante) et la position mécanique réelle de l’axe, et cette différence ne peut pas être prédéterminée. La valeur interne doit être synchronisée avec la position réelle des axes. La synchronisation est réalisée à l’aide d’un retour à l’origine pendant lequel une valeur de position est enregistrée à un point de référence connu (origine). Lorsqu’une instruction retour à l’origine est exécutée, des impulsions de sortie sont émises jusqu’à ce que l’entrée retour à l’origine soit activée. L’affectation des entrées/sorties est déterminée par la voie utilisée. Pour décélérer le mouvement à l’approche de la position d’origine, désignez une entrée proche de l’origine (near home) et définissez le bit 4 du registre spécial de données, dans lequel le code de contrôle de la sortie impulsionnelle (sys_wHscOrPulseControlCode) est sauvegardé, sur TRUE puis de nouveau sur FALSE. La sortie reset du compteur de déviation peut être définie sur TRUE lorsque le retour à l’origine est terminé.
Sélectionnez un des deux modes de fonctionnement :
Type 0 :
L’entrée du point d’origine est activée indépendamment de la présence ou non d’une entrée proche de l’origine (near home), indépendamment du fait qu’une décélération est en cours ou qu’elle est terminée.
Sans entrée proche de l’origine :
|
Avec entrée proche de l’origine :
|
Type 1 : L’entrée du point d’origine est activée uniquement lorsque la décélération (démarrée par l’entrée proche de l’origine) est terminée.
Utilisez le DUT prédéfini suivant : F177_PulseOutput_Home_Type0_DUT ou F177_PulseOutput_Home_Type1_DUT
Les paramètres suivants peuvent être indiqués dans le DUT :
Code de contrôle
Vitesse initiale
Vitesse de consigne
Temps d’accélération
Temps de décélération
Vitesse de recherche
Signal de réinitialisation du compteur de déviation (temps de sortie)
Caractéristiques de la sortie impulsionnelle
La fréquence de la sortie impulsionnelle change selon les temps d’accélération et de décélération spécifiés.
La différence entre la vitesse de consigne et la vitesse initiale détermine la pente des rampes.
Sorties impulsionnelles avec un rapport impulsion/pause de 25%.
En utilisant le type de sortie impulsionnelle "Impulsionnnelle/sens de rotation", les impulsions sont sorties env. 300ms après que le signal du sens de rotation a été émis. Ce délai peut varier en fonction des caractéristiques du driver.
Informations générales sur la programmation
Définissez "Sortie impulsionnelle" pour la voie souhaitée dans les registres système.
Même lorsque l’entrée du point d’origine est activée, l’exécution de cette instruction déclenche la sortie impulsionnelle.
Si l’entrée proche de l’origine (near home) est activée pendant l’accélération, la décélération commence.
Le signal de réinitialisation du compteur de déviation est affecté aux numéros de sorties dédiées, spécifiques à chaque type d’automate.
Si le programme principal et le programme d’interruption contiennent le code de la même voie, veillez à ce qu’ils ne soient pas exécutés simultanément.
Lorsqu’une instruction de sortie impulsionnelle est exécutée et lorsque des impulsions sont sorties, le drapeau de contrôle de la sortie impulsionnelle (par ex. sys_bIsPulseChannel0Active) de la voie correspondante est TRUE. Aucune autre instruction de sortie impulsionnelle ne peut être exécutée tant que ce drapeau est TRUE.
En cas d’édition en mode RUN, la sortie impulsionnelle est interrompue mais elle reprend lorsque les modifications du programme ont été transférées.
Dans votre programme de positionnement, nous recommandons fortement de permettre un arrêt forcé.
L’état du drapeau de contrôle du compteur rapide ou du drapeau de la sortie impulsionnelle peut changer au cours d’une scrutation. Par exemple, si le nombre d’octets reçus est lu plusieurs fois, il peut y avoir plusieurs états au cours d’une scrutation.
FP0R C16
N° de voie |
Sortie reset du compteur de déviation |
Entrée du point d’origine |
0 | Y6 | X4 |
1 | Y7 | X5 |
2 | – | X6 |
3 | – | X7 |
Possibilité d’utiliser les entrées X4–X7 en tant qu’entrées pour le compteur rapide ou d’entrées du point d’origine.
Possibilité d’utiliser Y7 et Y6 en tant que sorties impulsionnelle pour la voie 3 ou en tant que sorties reset du compteur de déviation pour les voies 0 et 1.
FP0R C32, T32, F32
N° de voie |
Sortie reset du compteur de déviation |
Entrée du point d’origine |
0 | Y8 | X4 |
1 | Y9 | X5 |
2 | YA | X6 |
3 | YB | X7 |
Possibilité d’utiliser les entrées X4–X7 en tant qu’entrées pour le compteur rapide ou d’entrées du point d’origine.
Dans la liste des variables globales, vous définissez des variables qui sont accessibles par tous les POU dans le projet.
Le DUT F177_PulseOutput_Home_Type1_DUT est prédéfini dans la bibliothèque “FP library”.
Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
diInitialSpeed: DINT:=1000;
diTargetSpeed: DINT:=5000;
diAccelerationTime: DINT:=3000;
diDecelerationTime: DINT:=3000;
diCreepSpeed: DINT:=5000;
dutHomeType1: F177_PulseOutput_Home_Type1_DUT:=dwControlCode := 16#0012,
diInitialSpeed := 0,
diTargetSpeed := 0,
diAccelerationTime := 0,
diDecelerationTime := 0,
diCreepSpeed := 0;
(*For ControlCode (16#0012):
1 = Forward
2 = Pulse/Sign forward on*)
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 24 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,1,6,3,R);
B(B_F,E_MOVE!,Instance,17,4,23,8,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,Instance,17,8,23,12,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutHomeType1.diAccelerationTime,23,10,25,12,);
B(B_VARIN,,diAccelerationTime,15,10,17,12,);
B(B_F,E_MOVE!,Instance,17,20,23,24,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diDeviationCounterClearSignalOutputTime,23,22,25,24,);
B(B_VARIN,,0,15,22,17,24,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diInitialSpeed,23,2,25,4,);
B(B_VARIN,,diInitialSpeed,15,2,17,4,);
B(B_F,E_MOVE!,Instance,17,12,23,16,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diDecelerationTime,23,14,25,16,);
B(B_VARIN,,diDecelerationTime,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,16,23,20,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diCreepSpeed,23,18,25,20,);
B(B_VARIN,,diCreepSpeed,15,18,17,20,);
L(7,2,7,6);
L(1,2,4,2);
L(6,2,7,2);
L(7,2,17,2);
L(7,6,17,6);
L(7,10,17,10);
L(7,6,7,10);
L(7,10,7,22);
L(7,22,17,22);
L(7,14,17,14);
L(7,18,17,18);
L(1,0,1,24);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 12 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,8,5,10,7,R);
B(B_VARIN,,dutHomeType1,15,6,17,8,);
B(B_VARIN,,0,15,7,17,9,);
B(B_COMMENT,,Example for home position return,1,2,18,4,);
B(B_F,F177_PulseOutput_Home!,Instance,17,4,30,9,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(10,6,17,6);
L(1,6,8,6);
L(1,0,1,12);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(X0_bMotorSwitch) then
dutHomeType1.diInitialSpeed:=diInitialSpeed;
dutHomeType1.diTargetSpeed:=diTargetSpeed;
dutHomeType1.diAccelerationTime:=diAccelerationTime;
dutHomeType1.diDecelerationTime:=diDecelerationTime;
dutHomeType1.diCreepSpeed:=diCreepSpeed;
dutHomeType1.diDeviationCounterClearSignalOutputTime:=0;
END_IF;
(*Example for home position return*)
IF DF(X0_bMotorSwitch) then
F177_PulseOutput_Home(s_dutDataTable := dutHomeType1,
n_iPulseOutputChannel := 0);
END_IF;