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
Sortie impulsionnelle : 0 ou 1
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. Pendant un retour à l’origine, la valeur dans la zone de la valeur courante peut différer de la valeur réelle. Lorsque le retour à l’origine est terminé, la valeur courante passe à 0.
Sélectionnez un des deux modes de fonctionnement :
Type 1 : 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 2 : 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.
Les paramètres suivants peuvent être indiqués dans le DUT : F168_PulseOutput_Home_DUT
Code de contrôle
Vitesse initiale et finale
Vitesse de consigne
Temps d’accélération/de décélération
Arrêt de l’impulsion (fixe)
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.
Définissez un des compteurs rapides affectés à une voie de sortie impulsionnelle sur "Inutilisé" dans les registres système.
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.
Le drapeau de contrôle du compteur rapide (par ex. sys_bIsHscChannel0ControlActive) et le drapeau de contrôle de la sortie impulsionnelle (par ex. sys_bIsPulseChannel0Active) sont affectés au même drapeau interne (par ex. R903A). Par conséquent, lorsqu’une instruction du compteur rapide ou de la sortie impulsionnelle est exécutée, le drapeau de contrôle du compteur rapide (par ex. sys_bIsHscChannel0ControlActive) et le drapeau de contrôle de la sortie impulsionnelle (par ex. sys_bIsPulseChannel0Active) pour la voie utilisée sont sur TRUE. Aucune instruction du compteur rapide ou de la sortie impulsionnelle ne peut être exécutée tant que ce drapeau est sur TRUE.
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.
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.
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.
Pour faire fonctionner le FP0R en mode de compatibilité FP0, vous pouvez transférer un programme FP0 vers le FP0R. Veuillez noter les restrictions suivantes :
Le FP0R prend en charge des données 32-bits avec signe pour les valeurs courantes et les valeurs de consigne, tandis que le FP0 prend en charge des données 24-bits avec signe. En mode de compatibilité FP0, le comptage et la sortie impulsionnelle continuent même lorsque les données sont en dehors de l’intervalle FP0 autorisé.
Le rapport impulsion/pause est toujours de 25% quels que soient les paramètres des instructions. 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.
Le FP0R ne prend pas en charge le paramètre "Pas de comptage". Lorsque les instructions de sortie impulsionnelle FP0 sont définies sur "Pas de comptage", le FP0R exécute un comptage incrémental.
La fréquence de sortie impulsionnelle maximale est de 10000Hz.
Veillez à ce que l’instruction de sortie impulsionnelle n’utilise pas une sortie qui est également utilisée comme sortie normale.
Un programme FP0 ne peut être exécuté en mode de compatibilité FP0, que si les types d’automate (C10, C14, C16, C32 et T32) correspondent exactement. Le mode de compatibilité FP0 n’est pas disponible pour le FP0R de type F32.
Numéros de voies et de sorties impulsionnelles
N° de voie | Sortie impulsionnelle | Type de sortie impulsionnelle |
0 |
Y0 |
Impulsion |
Y2 |
Sens de rotation | |
1 |
Y1 |
Impulsion |
Y3 |
Sens de rotation |
Variables système pour les zones mémoires utilisées. Les valeurs entre parenthèses sont valides pour FP0 T32.
Description |
Variable système |
|
---|---|---|
Sortie impulsionnelle : drapeau de contrôle pour la voie |
0 |
sys_bIsPulseChannel0Active |
1 |
sys_bIsPulseChannel1Active |
|
Sortie impulsionnelle : valeur courante pour la voie |
0 |
sys_diPulseChannel0ElapsedValue |
1 |
sys_diPulseChannel1ElapsedValue |
|
Sortie impulsionnelle : valeur de consigne pour la voie |
0 |
sys_diPulseChannel0TargetValue |
1 |
sys_diPulseChannel1TargetValue |
|
Compteur rapide ou sortie impulsionnelle : code de contrôle |
sys_wHscOrPulseControlCode |
N° de voie | Entrée du point d’origine |
0 |
X0 |
1 |
X1 |
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
dutHome: F168_PulseOutput_Home_DUT:=wControlCode := 16#102,
iInitialAndFinalSpeed := 0,
iTargetSpeed := 0,
iAccelerationAndDecelerationTime := 0;
iInitialAndFinalSpeed: INT:=3000;
iTargetSpeed: INT:=7000;
iAccelerationTime: INT:=300;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 13 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,2,6,4,R);
B(B_F,E_MOVE!,Instance,17,1,23,5,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.iAccelerationAndDecelerationTime,23,3,25,5,);
B(B_F,E_MOVE!,Instance,17,5,23,9,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.iInitialAndFinalSpeed,23,7,25,9,);
B(B_F,E_MOVE!,Instance,17,9,23,13,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHome.iTargetSpeed,23,11,25,13,);
B(B_VARIN,,iAccelerationTime,15,3,17,5,);
B(B_VARIN,,iInitialAndFinalSpeed,15,7,17,9,);
B(B_VARIN,,iTargetSpeed,15,11,17,13,);
L(1,3,4,3);
L(6,3,17,3);
L(8,3,8,11);
L(8,11,17,11);
L(8,7,17,7);
L(1,0,1,13);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,1,6,3,R);
B(B_F,F168_PulseOutput_Home!,Instance,11,0,24,5,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutHome,9,2,11,4,);
B(B_VARIN,,0,9,3,11,5,);
L(1,2,4,2);
L(6,2,11,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(X0_bMotorSwitch) then
dutHome.iInitialAndFinalSpeed:=iInitialAndFinalSpeed
dutHome.iTargetSpeed:=iTargetSpeed
dutHome.iAccelerationAndDecelerationTime:=iAccelerationTime
END_IF;
IF DF(X0_bMotorSwitch) then
F168_PulseOutput_Home(s_dutDataTable := dutHome,
n_iPulseOutputChannel :=0);
END_IF;