Opération JOG et positionnement
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
F171_PulseOutput_Jog_Positioning_Type0_DUT ou F171_PulseOutput_Jog_Positioning_Type1_DUTVoie de la sortie impulsionnelle :0–3
Sélectionnez un des deux modes de fonctionnement :
Type 0 : La vitesse peut être modifiée dans l’intervalle de la vitesse de consigne spécifiée.
Type 1 : La vitesse de consigne ne peut être modifiée que lorsque l’entrée déclenchement du contrôle de positionnement est passée à TRUE.
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 de la rampe d’accélération.
La différence entre la vitesse de consigne et la vitesse finale détermine la pente de la rampe de décélération.
Lorsque l’entrée déclenchement du contrôle de positionnement devient TRUE, la sortie impulsionnelle continue puis elle décélère et s’arrête lorsque la valeur de consigne est atteinte.
La sortie impulsionnelle peut être arrêtée d’une des façons suivantes :
En activant l’entrée déclenchement du contrôle de positionnement (TRUE). La sortie impulsionnelle continue jusqu’à ce que la valeur de consigne soit atteinte et s’arrête lorsque la décélération est terminée. Le déclencheur du contrôle de positionnement peut également être démarré en activant l’entrée déclenchement du contrôle de positionnement (TRUE) et en définissant le bit 6 du registre de données, dans lequel le code de contrôle de la sortie impulsionnelle est sauvegardé, de FALSE à TRUE (par ex. MOVE(16#140, sys_wHscOrPulseControlCode);
).
Demande d’arrêt décéléré : Pour effectuer un arrêt décéléré, définissez le bit 5 du registre de données, dans lequel le code de contrôle de la sortie impulsionnelle est sauvegardé, sur FALSE puis sur TRUE (par ex. MOVE(16#120, sys_wHscOrPulseControlCode);
). Lorsqu’un arrêt décéléré est demandé pendant l’accélération, la décélération est réalisée avec la même pente que la décélération à partir de la vitesse de consigne.
Exécution d’un arrêt d’urgence : pour effectuer un arrêt d’urgence, définissez le bit 3 du registre de données, dans lequel le code de contrôle de la sortie impulsionnelle est sauvegardé, de FALSE à TRUE (par ex. MOVE(16#108, sys_wHscOrPulseControlCode);
).
En cas d’arrêt, désactivez toutes les fonctions de sortie impulsionnelle pour la voie utilisée dans le programme.
Utilisez le DUT prédéfini suivant : F171_PulseOutput_Jog_Positioning_Type0_DUT
Les paramètres suivants peuvent être indiqués dans le DUT :
Code de contrôle
Vitesse initiale et finale
Vitesse de consigne
Temps d’accélération
Temps de décélération
Valeur de consigne
La vitesse de consigne peut être modifiée pendant la sortie impulsionnelle.Modifier la vitesse de consigne pendant la sortie impulsionnelle
Sans modification de la vitesse de consigne : |
Avec modification de la vitesse de consigne : |
Vitesse initiale et finale
Vitesse de consigne
Valeur de consigne
Temps d’accélération
Temps de décélération
Condition d’exécution
Entrée déclenchement du contrôle de positionnement
Drapeau de contrôle de la sortie impulsionnelle
Pour modifier la vitesse, maintenez la condition d’exécution sur TRUE.
Si la vitesse de consigne est définie sur une valeur supérieure à 50kHz, elle sera corrigée et ramenée à 50kHz.
Si la valeur courante atteint une zone non autorisée au départ de l’accélération (par ex. sys_diPulseChannel0AccelerationForbiddenAreaStartingPosition) l’accélération ne sera pas exécutée.
La vitesse de décélération ne peut pas être inférieure à la vitesse finale corrigée.
La vitesse de consigne ne peut pas être modifiée lorsque l’instruction est exécutée pendant un programme d’interruption.
Utilisez le DUT prédéfini suivant : F171_PulseOutput_Jog_Positioning_Type1_DUT
Les paramètres suivants peuvent être indiqués dans le DUT :
Code de contrôle
Vitesse initiale et finale
Vitesse de consigne1
Temps d’accélération
Vitesse de consigne2
Temps de passage
Temps de décélération
Valeur de consigne
Vitesse de consigne 1 < vitesse de consigne 2 : |
Vitesse de consigne 1 > vitesse de consigne 2 : |
Vitesse initiale et finale
Vitesse de consigne
Vitesse de consigne
Valeur de consigne
Temps d’accélération
Temps de passage
Temps de décélération
Condition d’exécution
Entrée déclenchement du contrôle de positionnement
Lorsque l’entrée déclenchement du contrôle de positionnement devient TRUE, la fréquence de la sortie impulsionnelle est modifiée. En fonction du temps de passage, la fréquence augmente ou diminue jusqu’à atteindre la vitesse de consigne 2. D’autres modifications de la vitesse de consigne sont impossibles. L’entrée déclenchement du contrôle de positionnement n’est pas prise en compte si elle est activée pendant l’accélération.
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.
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.
Paramétrage de l’entrée déclenchement du contrôle de positionnement (X0, X1, X2, X3) dans le registre système 402.
Pour l’entrée déclenchement du contrôle de positionnement, seul le front montant (TRUE) est détecté.
Cette instruction ne peut pas être démarrée lorsqu’un arrêt décéléré a été demandé.
Pour redémarrer après avoir arrêté l’opération, mettez la condition d’exécution sur FALSE et à nouveau sur TRUE.
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.
F171_PulseOutput_Jog_Positioning_Type0_DUT
F171_PulseOutput_Jog_Positioning_Type1_DUT
Écrire le code de contrôle de la sortie impulsionnelle
PulseOutput_Jog_Positioning0_FB Opération JOG et positionnement
PulseOutput_Jog_Positioning1_FB Opération JOG et positionnement
PulseControl_JogPositionControl Démarrer le contrôle de positionnement
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
Start: BOOL:=FALSE;
dutJog: F171_PulseOutput_Jog_Positioning_Type0_DUT:=dwControlCode := 16#010,
diInitialAndFinalSpeed := 1000,
diTargetSpeed := 7000,
diAccelerationTime := 300,
diDecelerationTime := 450,
diTargetValue := 10000;
(*Digit3: 0=Pulse output
Digit2: 1=Fixed
Digit0: 0=CW/CCW2*)
diInitialAndFinalSpeed: DINT:=1000;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,E_MOVE!,Instance,13,0,19,4,,?DEN?D?AENO?C);
B(B_VARIN,,diInitialAndFinalSpeed,11,2,13,4,);
B(B_VAROUT,,dutJog.diInitialAndFinalSpeed,19,2,21,4,);
B(B_CONTACT,,Start,6,1,8,3,);
L(1,2,6,2);
L(8,2,13,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,F171_PulseOutput_Jog_Positioning!,Instance,8,0,24,5,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutJog,6,2,8,4,);
B(B_VARIN,,0,6,3,8,5,);
B(B_CONTACT,,Start,2,1,4,3,);
L(1,2,2,2);
L(4,2,8,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (Start) then
dutJog.diInitialAndFinalSpeed:=diInitialAndFinalSpeed;
END_IF;
IF (Start) then
F171_PulseOutput_Jog_Positioning(s_dutDataTable := dutJog, 0);
END_IF;