Opération JOG
Cette instruction est utilisée pour l’opération JOG. Le nombre d’impulsions indiqué est sorti lorsque l’entrée déclenchement du contrôle de positionnement devient TRUE. La sortie impulsionnelle décélère jusqu’à ce que la valeur de consigne soit atteinte puis elle s’arrête. 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
Utilisez le DUT prédéfini suivant : F169_PulseOutput_Jog_DUT
Les paramètres suivants peuvent être indiqués dans le DUT :
Code de contrôle
Vitesse
Caractéristiques de la sortie impulsionnelle
La fréquence et le rapport impulsion/pause peuvent être modifiés à chaque scrutation. (La modification devient effective avec la sortie impulsionnelle suivante.)
Dès que vous éditez un programme utilisant cette instruction en mode en ligne (c.à-d. en mode RUN), la sortie impulsionnelle s’arrête.
Définissez un des compteurs rapides affectés à une voie de sortie impulsionnelle sur "Inutilisé" dans les registres système.
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.
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.
La sortie impulsionnelle s’interrompt lorsque la limite supérieure de la valeur courante interne est dépassée et lorsque la rotation est en sens unique. Comme contre-mesure, réinitialisez la valeur courante sur 0 avant d’exécuter cette instruction. La sortie impulsionnelle ne s’arrête pas lorsque le FP0R est utilisé en mode de compatibilité FP0 puisque l’intervalle de données pour la valeur courante est une valeur de 32 bits avec signe.
Avec un comptage incrémental, la sortie impulsionnelle s’arrête lorsque la valeur courante dépasse 2147483647.
Avec un comptage décrémental, la sortie impulsionnelle s’arrête lorsque la valeur courante dépasse -2147483648.
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 |
Dans la liste des variables globales, vous définissez des variables qui sont accessibles par tous les POU dans le projet.
Le DUT F169_PulseOutput_Jog_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;
END_VAR
VAR
dut_Jog: F169_PulseOutput_Jog_DUT:=wControlCode := 16#110,
iSpeed := 0;
(*Digit2: 1= Duty 10%
Digit1: 1=Incremental counting
Digit0: 0=No direction output*)
@'': @'';
END_VAR
La fonction de cet exemple est décrite dans les zones de commentaires.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_COMMENT,,define frequency~ 300Hz,2,1,22,2,);
B(B_F,E_MOVE!,Instance,9,2,15,6,,?DEN?D?AENO?C);
B(B_VARIN,,300,7,4,9,6,);
B(B_VAROUT,,dut_Jog.iSpeed,15,4,17,6,);
B(B_CONTACT,,X0_bMotorSwitch,5,3,7,5,);
L(1,0,1,6);
L(1,4,5,4);
L(7,4,9,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_F,F169_PulseOutput_Jog!,Instance,12,2,25,7,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dut_Jog,10,4,12,6,);
B(B_VARIN,,0,10,5,12,7,);
B(B_CONTACT,,X0_bMotorSwitch,5,3,7,5,);
B(B_COMMENT,,start pulse output to output,2,1,22,2,);
L(1,4,5,4);
L(7,4,12,4);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (X0_bMotorSwitch) then
dutJog.ispeed := 300;
END_IF;
IF (X0_bMotorSwitch) then
F169_PulseOutput_Jog(s_dutDataTable := dutJog,
n_iPulseOutputChannel := 0);
END_IF;