F171_PulseOutput_Trapezoidal

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

s_dutDataTable (DUT)

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

n_iPulseOutputChannel (constante décimale)

Voie de la sortie impulsionnelle :

FP-XH C30 T/P: 0–3

FP-XH C60 T/P: 0–5

FP-S0, 2

FP-X R0, 1

FP-XC14T0, 1, 2

FP-X C30T/C60T0, 1, 2, 3

FP0R0, 1, 2, 3

Description pour FP-Sigma, FP-X

Utilisez le DUT prédéfini suivant : F171_PulseOutput_Trapezoidal_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/de décélération
  • Valeur de consigne
  • Arrêt de l’impulsion
Caractéristiques de la sortie impulsionnelle
  1. Vitesse initiale et finale

  2. Vitesse de consigne

  3. Temps d’accélération/de décélération

  4. Valeur de consigne

  5. Drapeau de contrôle de la sortie impulsionnelle

  6. 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.

  • 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.
  • 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.

  • 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.
  • 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é.

  • 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.

Description pour FP0R

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 :

  • 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

Caractéristiques de la sortie impulsionnelle

  1. Vitesse initiale et finale

  2. Vitesse de consigne

  3. Temps d’accélération

  4. Temps de décélération

  5. Valeur de consigne

  6. Drapeau de contrôle de la sortie impulsionnelle

  7. Condition d’exécution

  8. 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).

  1. Vitesse de consigne

  2. 1ère modification de la vitesse de consigne

  3. 2ème modification de la vitesse de consigne

  4. Temps d’accélération

  5. Accélération

  6. Décélération

  7. Temps de décélération

  8. Drapeau de contrôle de la sortie impulsionnelle

  9. 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.

  • 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.
  • 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.
  • L’instruction est exécutée plus rapidement la seconde fois si les paramètres de positionnement restent inchangés. Ceci s’applique également même lorsque les paramètres du fonctionnement de la sortie (sortie impulsionnelle ou calcul uniquement) ont été modifiés.
  • 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.

Exemple

En-tête du POU

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

Corps en LD

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

Corps en ST

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;

Modifié le : 2023-03-16Commentaires sur cette pageAssistance téléphonique