Interpolation linéaire
Des impulsions sont sorties via deux voies selon les paramètres du bloc fonction et du DUT spécifié, de façon à former une ligne droite. Les impulsions sont renvoyées 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
La condition d’exécution peut être :
Avec déclenchement sur front
Permanent lorsqu’un changement de vitesse est requis
Contrôle de la valeur absolue = TRUE, Contrôle de la valeur relative = FALSE
Vitesse initiale et finale : Vitesse résultante = 1–50000 (1Hz–50kHz)
Vitesse de consigne : Vitesse résultante = 1–50000 (1Hz–50kHz)
Temps d’accélération/de décélération (FPS, FP-X) : 0ms–32767ms
Temps d’accélération (F171_PulseOutput_Trapezoidal) : 0ms–32767ms
Temps de décélération (F171_PulseOutput_Trapezoidal) : 0ms–32767ms
Valeur de consigne (axe X) [impulsions] -8388608–8388607
Valeur de consigne (axe Y) [impulsions] -8388608–8388607
Sortie
TRUE si une valeur d’entrée appliquée est invalide. L’exécution du bloc fonction est arrêtée.
Définie uniquement si la constante globale MC_PulseOutput_Library_Basic_bCheckInputs est définie sur TRUE.
Vitesse initiale et finale (axe X)[Hz]
Vitesse de consigne (axe X)[Hz]
Vitesse initiale et finale (axe Y)[Hz]
Vitesse de consigne (axe Y)[Hz]
Cette instruction non inline fait partie des instructions Tool pour sorties impulsionnelles. Pour en savoir plus sur les instruction(s) utilisées en interne, voir :F175_PulseOutput_Linear
Utilisez PulseInfo_IsActive pour vérifier si le drapeau de contrôle des voies sélectionnées est FALSE.
Un type de données structurées (DUT) peut être composé d’autres types de données. Un DUT est tout d’abord défini dans le gestionnaire de DUT et ensuite traité comme les autres types de données standard (BOOL, INT, etc.) dans la liste des variables globales ou l’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
PulseOutput_Linear: PulseOutput_Linear_FB;
bExecute: BOOL:=FALSE;
bAbsolute: BOOL:=FALSE;
ChannelConfiguration_XY_DUT: PulseOutput_Channel_Configuration_DUT;
bError: BOOL:=FALSE;
rInitialAndFinalSpeed_X: REAL:=0;
rTargetSpeed_X: REAL:=0;
rInitialAndFinalSpeed_Y: REAL:=0;
rTargetSpeed_Y: REAL:=0;
AdditionalOutputs_DUT: PulseOutput_Linear_AdditionalOutputs_DUT;
bConfigureDUT: BOOL:=FALSE;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 31 ;
NETWORK_BODY
B(B_CONTACT,,bConfigureDUT,6,1,8,3,);
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,1,15,2,17,4,);
B(B_F,E_MOVE!,,17,8,23,12,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,15,10,17,12,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardFalse,23,10,25,12,);
B(B_F,E_MOVE!,,17,12,23,16,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,17,4,23,8,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,15,6,17,8,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardTrue,23,6,25,8,);
B(B_VARIN,,TRUE,15,14,17,16,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.iChannel,23,2,25,4,);
B(B_F,E_MOVE!,,17,16,23,20,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,15,18,17,20,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bDutyRatio25,23,18,25,20,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bAccelerationSteps60,23,14,25,16,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bFrequencyRange_191Hz_100kHz,23,22,25,24,);
B(B_VARIN,,TRUE,15,22,17,24,);
B(B_F,E_MOVE!,,17,20,23,24,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,17,24,23,28,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,15,26,17,28,);
B(B_VAROUT,,ChannelConfiguration_XY_DUT.bExecuteInInterrupt,23,26,25,28,);
L(8,2,17,2);
L(12,18,17,18);
L(12,14,17,14);
L(12,10,17,10);
L(12,6,17,6);
L(12,2,12,18);
L(12,18,12,22);
L(12,22,17,22);
L(12,22,12,26);
L(12,26,17,26);
L(1,2,6,2);
L(1,0,1,31);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 12 ;
NETWORK_BODY
B(B_FB,PulseOutput_Linear_FB!,PulseOutput_Linear,15,1,33,12,,?BbExecute?BbAbsolute?BdiInitialAndFinalSpeed?BdiTargetSpeed?BdiAccelerationTime?BdiDecelerationTime?BdiTargetValue_X?BdiTargetValue_Y?BdutChannelConfiguration_X_Y?AbError?ArInitialAndFinalSpeed_X?ArTargetSpeed_X?ArInitialAndFinalSpeed_Y?ArTargetSpeed_Y?AdutAdditionalOutputs);
B(B_VARIN,,bExecute,13,2,15,4,);
B(B_VARIN,,bAbsolute,13,3,15,5,);
B(B_VARIN,,600,13,4,15,6,);
B(B_VARIN,,12000,13,5,15,7,);
B(B_VARIN,,300,13,6,15,8,);
B(B_VARIN,,600,13,7,15,9,);
B(B_VARIN,,1000,13,8,15,10,);
B(B_VARIN,,2000,13,9,15,11,);
B(B_VARIN,,ChannelConfiguration_XY_DUT,13,10,15,12,);
B(B_VAROUT,,bError,33,2,35,4,);
B(B_VAROUT,,rInitialAndFinalSpeed_X,33,3,35,5,);
B(B_VAROUT,,rTargetSpeed_X,33,4,35,6,);
B(B_VAROUT,,rInitialAndFinalSpeed_Y,33,5,35,7,);
B(B_VAROUT,,rTargetSpeed_Y,33,6,35,8,);
B(B_VAROUT,,AdditionalOutputs_DUT,33,7,35,9,);
L(1,0,1,12);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(* Used DUT parameters *)
ChannelConfiguration_XY_DUT.iChannel := 1;
ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardTrue := TRUE;
ChannelConfiguration_XY_DUT.bOutput_Pulse_ForwardFalse := FALSE;
ChannelConfiguration_XY_DUT.bAccelerationSteps60 := FALSE;
ChannelConfiguration_XY_DUT.bDutyRatio25 := TRUE;
ChannelConfiguration_XY_DUT.bFrequencyRange_191Hz_100kHz := TRUE;
ChannelConfiguration_XY_DUT.bExecuteInInterrupt := FALSE;
(* FB *)
PulseOutput_Linear(bExecute := bExecute,
bAbsolute := bAbsolute,
diInitialAndFinalSpeed := 600,
diTargetSpeed := 12000,
diAccelerationTime := 300,
diDecelerationTime := 600,
diTargetValue_X := 150000,
diTargetValue_Y := 10000,
dutChannelConfiguration_X_Y := ChannelConfiguration_XY_DUT,
bError => bError,
diInitialAndFinalSpeed_X => diInitialAndFinalSpeed_X,
diTargetSpeed_X => diTargetSpeed_X,
diInitialAndFinalSpeed_Y => diInitialAndFinalSpeed_Y,
diTargetSpeed_Y => diTargetSpeed_Y,
dutAdditionalOutputs => AdditionalOutputs_DUT);