Contrôle trapézoïdal
Cette instruction exécute automatiquement un contrôle trapézoïdal 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
FP-S, FP-X :
F171_PulseOutput_Trapezoidal_DUT
FP0R :
F171_PulseOutput_Trapezoidal_Type0_DUT
F171_PulseOutput_Trapezoidal_Type1_DUT
Voie de la sortie impulsionnelle :
FP-XH C30 T/P: 0–3
FP-XH C60 T/P: 0–5
FP-S : 0, 2
FP-X R : 0, 1
FP-XC14T : 0, 1, 2
FP-X C30T/C60T : 0, 1, 2, 3
FP0R : 0, 1, 2, 3
Utilisez le DUT prédéfini suivant : F171_PulseOutput_Trapezoidal_DUT.
Les paramètres suivants peuvent être indiqués dans le DUT :
Vitesse initiale et finale
Vitesse de consigne
Temps d’accélération/de décélération
Valeur de consigne
Drapeau de contrôle de la sortie impulsionnelle
Condition d’exécution
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.
FP-X : 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.
FPS : 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.
FPS : L’exécution de l’instruction de contrôle de l’interpolation circulaire F176_PulseOutput_Center définit le drapeau de contrôle de l’interpolation circulaire (sys_bIsCircularInterpolationActive) sur TRUE. L’état de ce drapeau est maintenu jusqu’à ce que la valeur de consigne soit atteinte (même si la condition d’exécution n’est plus TRUE). Pendant ce temps, les autres instructions de sortie impulsionnelle ne peuvent pas être exécutées.
FPS : Définissez un des compteurs rapides affectés à une voie de sortie impulsionnelle sur "Inutilisé" dans les registres système.
FP-X : Définissez "Sortie impulsionnelle" pour la voie souhaitée dans les registres système.
Dans votre programme de positionnement, nous recommandons fortement de permettre un arrêt forcé.
Utilisez le DUT prédéfini suivant : F171_PulseOutput_Trapezoidal_Type0_DUT (vitesse maximale = première vitesse de consigne) ou F171_PulseOutput_Trapezoidal_Type1_DUT (vitesse maximale = 50kHz).
La vitesse de consigne peut être modifiée pendant la sortie impulsionnelle.
Deux méthodes de contrôle sont disponibles :
Type 0 : La vitesse peut être modifiée dans l’intervalle de la vitesse de consigne spécifiée en premier.
Type 1 : La vitesse peut être modifiée dans l’intervalle de la vitesse maximale (50kHz).
Les paramètres suivants peuvent être indiqués dans le DUT :
Caractéristiques de la sortie impulsionnelle
Vitesse initiale et finale
Vitesse de consigne
Temps d’accélération
Temps de décélération
Valeur de consigne
Drapeau de contrôle de la sortie impulsionnelle
Condition d’exécution
Demande d’arrêt décéléré
Type 0 :
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.
Type 1 :
La différence entre la vitesse maximale de 50kHz et la vitesse initiale détermine la pente de la rampe d’accélération.La différence entre la vitesse maximale de 50kHz et la vitesse finale détermine la pente de la rampe de décélération.
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.
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.
Modifier la vitesse de consigne pendant la sortie impulsionnelle
Type 1 : La vitesse peut être modifiée dans l’intervalle de la vitesse maximale (50kHz).
Vitesse de consigne
1ère modification de la vitesse de consigne
2ème modification de la vitesse de consigne
Temps d’accélération
Accélération
Décélération
Temps de décélération
Drapeau de contrôle de la sortie impulsionnelle
Condition d’exécution
Pour modifier la vitesse, maintenez la condition d’exécution sur TRUE.
Type 0 :
Si une valeur supérieure à la valeur de consigne au démarrage est spécifiée, elle sera corrigée et ramenée à la valeur de la vitesse de consigne au démarrage.
Type 1 :
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.
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.
Dans votre programme de positionnement, nous recommandons fortement de permettre un arrêt forcé.
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
bMotorSwitch: BOOL:=FALSE;
dutTrapez: F171_PulseOutput_Trapezoidal_DUT:=dwControlCode := 16#1100;
(*Control code:
Digit 3: 1=Duty ratio 25%
Digit 2: 1=Frequency range 48Hz-100kHz
Digit 1: 0=Relative value control
Digit 0: 0=CW/CCW*)
END_VAR
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
diInitialSpeed: DINT:=100;
diTargetSpeed: DINT:=2000;
diAccelerationTime: DINT:=300;
diTargetValue: DINT:=10000;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 16 ;
NETWORK_BODY
B(B_CONTACT,,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,,dutTrapez.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutTrapez.diAccelerationAndDecelerationTime,23,10,25,12,);
B(B_VARIN,,diAccelerationTime,15,10,17,12,);
B(B_F,E_MOVE!,Instance,17,12,23,16,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.diTargetValue,23,14,25,16,);
B(B_VARIN,,diTargetValue,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.diInitialAndFinalSpeed,23,2,25,4,);
B(B_VARIN,,diInitialSpeed,15,2,17,4,);
L(7,2,7,6);
L(7,6,7,10);
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,10,7,14);
L(7,14,17,14);
L(1,0,1,16);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,bMotorSwitch,4,2,6,4,R);
B(B_VARIN,,dutTrapez,14,3,16,5,);
B(B_VARIN,,0,14,4,16,6,);
B(B_F,F171_PulseOutput_Trapezoidal!,Instance,16,1,31,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(6,3,16,3);
L(1,3,4,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bMotorSwitch) then
dutTrapez.diInitialAndFinalSpeed:=diInitialSpeed;
dutTrapez.diTargetSpeed:=diTargetSpeed;
dutTrapez.diAccelerationDecelerationTime:=diAccelerationTime;
dutTrapez.diDeviationCounterClearSignalOutputTime:=10;
END_IF;
IF DF(bMotorSwitch) then
F171_PulseOutput_Trapezoidal(s_dutDataTable := dutTrapez,
n_iPulseOutputChannel :=0);
END_IF;