Vuelta al origen
Esta instrucción ejecuta una vuelta al origen según los parámetros especificados en el bloque de función y en la DUT especificada. Se envían pulsos desde el canal especificado si la bandera de control para ese canal es FALSE y la condición de ejecución es TRUE.
Entrada
Un flanco de subida activa el bloque de función
Dirección de desplazamiento: Hacia adelante = FALSE, Hacia atrás = TRUE
Velocidad inicial/Velocidad máxima: Establecer este valor conforme al rango de frecuencias seleccionado en PulseOutput_Channel_Configuration_DUT:
FPS, FP-X: 1 a 9800 (1,5Hz–9,8kHz)
48 a 100000 (48Hz–100kHz)
191 a 100000 (191–100kHz)
F171_PulseOutput_Trapezoidal: de 1 a 50000 (1Hz–50kHz)
FP0, F168_PulseOutput_Trapezoidal: 40 a 5000 (40Hz–5kHz)
Tiempo de aceleración/deceleración (FPS, FP-X):
En 30 intervalos: 30ms–32760ms (especificar 30 intervalos)
En 60 intervalos: 60ms–32760ms (especificar 60 intervalos)
Tiempo de aceleración/deceleración (FP0, F168_PulseOutput_Trapezoidal): 30ms–32760ms
Tiempo de aceleración (F171_PulseOutput_Trapezoidal): 1ms–32760ms
Tiempo de deceleración (F171_PulseOutput_Trapezoidal): 1ms–32760ms
Velocidad de seguimiento (F171_PulseOutput_Trapezoidal): 1 a 50000 (1Hz–50kHz)
Salida
TRUE si un valor aplicado no es válido. Se detiene la ejecución del bloque de función.
Esta instrucción forma parte de las instrucciones Tool de salida de pulsos. Para obtener información más detallada sobre las instrucciones que utiliza internamente, consultar la:
FPS, FP-X: F171_PulseOutput_Home
FP-e, FP0: F168_PulseOutput_Home
Utilizar PulseInfo_IsActive para comprobar si la bandera de control del canal seleccionado está a FALSE. Utilizar PulseInfo_IsHomeInputTrue para comprobar que la vuelta al origen es TRUE.
Evitar errores de operación o un mal funcionamiento :
Comprobar que el registro del sistema está en modo salida de pulsos cuando se utiliza la entrada de vuelta al origen.
La entrada de vuelta al origen no debe estar asignada a otras instrucciones como la entrada de captura de pulsos, la entrada de interrupción o el contador de alta velocidad.
Con un Tipo de Datos Estructurados (DUT) se puede definir un tipo de dato compuesto por otros tipos de datos. Una DUT se define primero en el repositorio de DUTs y, seguidamente, se procesa como los tipos de datos estándar (BOOL, INT, etc.) en la lista de variables globales o la cabecera de la POU.
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
VAR
PulseOutput_Home: PulseOutput_Home_FB;
bExecute: BOOL:=FALSE;
bReverse: BOOL:=FALSE;
bError: BOOL:=FALSE;
ChannelConfiguration_DUT: PulseOutput_Channel_Configuration_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 := 32 ;
NETWORK_BODY
B(B_CONTACT,,bConfigureDUT,4,1,6,3,);
B(B_F,E_MOVE!,,15,0,21,4,,?DEN?D?AENO?C);
B(B_VARIN,,1,13,2,15,4,);
B(B_F,E_MOVE!,,15,8,21,12,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,13,10,15,12,);
B(B_VAROUT,,ChannelConfiguration_DUT.bOutput_Pulse_SignReverse,21,10,23,12,);
B(B_F,E_MOVE!,,15,12,21,16,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,,15,4,21,8,,?DEN?D?AENO?C);
B(B_VARIN,,TRUE,13,6,15,8,);
B(B_VAROUT,,ChannelConfiguration_DUT.bOutput_Pulse_SignForward,21,6,23,8,);
B(B_VARIN,,TRUE,13,14,15,16,);
B(B_VAROUT,,ChannelConfiguration_DUT.iChannel,21,2,23,4,);
B(B_F,E_MOVE!,,15,16,21,20,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,13,18,15,20,);
B(B_VAROUT,,ChannelConfiguration_DUT.bDutyRatio25,21,18,23,20,);
B(B_F,E_MOVE!,,15,20,21,24,,?DEN?D?AENO?C);
B(B_VAROUT,,ChannelConfiguration_DUT.bAccelerationSteps60,21,14,23,16,);
B(B_VAROUT,,ChannelConfiguration_DUT.bFrequencyRange_191Hz_100kHz,21,22,23,24,);
B(B_VARIN,,TRUE,13,22,15,24,);
B(B_F,E_MOVE!,,15,24,21,28,,?DEN?D?AENO?C);
B(B_VARIN,,FALSE,13,26,15,28,);
B(B_VAROUT,,ChannelConfiguration_DUT.Home_bEnableHomeOnlyAfterNearHomeDeceleration,21,26,23,28,);
B(B_F,E_MOVE!,,15,28,21,32,,?DEN?D?AENO?C);
B(B_VAROUT,,ChannelConfiguration_DUT.Home_iDeviationCounterClearSignalOutputTime_in_0p5ms,21,30,23,32,);
B(B_VARIN,,5,13,30,15,32,);
L(10,2,10,6);
L(10,10,10,14);
L(10,6,10,10);
L(10,14,10,18);
L(10,18,10,22);
L(10,22,10,26);
L(6,2,10,2);
L(1,2,4,2);
L(10,26,10,30);
L(10,30,15,30);
L(10,26,15,26);
L(10,22,15,22);
L(10,18,15,18);
L(10,6,15,6);
L(10,14,15,14);
L(10,10,15,10);
L(10,2,15,2);
L(1,0,1,32);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 11 ;
NETWORK_BODY
B(B_FB,PulseOutput_Home_FB!,PulseOutput_Home,15,1,28,11,,?BbExecute?BbReverse?BdiInitialAndFinalSpeed?BdiTargetSpeed?BdiAccelerationTime?BdiDecelerationTime?BdiCreepSpeed?BdutChannelConfiguration?AbError);
B(B_VARIN,,bExecute,13,2,15,4,);
B(B_VARIN,,bReverse,13,3,15,5,);
B(B_VARIN,,1500,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,,500,13,8,15,10,);
B(B_VARIN,,ChannelConfiguration_DUT,13,9,15,11,);
B(B_VAROUT,,bError,28,2,30,4,);
L(1,0,1,11);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(* Used DUT parameters *)
ChannelConfiguration_DUT.iChannel := 1;
ChannelConfiguration_DUT.bOutput_Pulse_ForwardTrue := TRUE;
ChannelConfiguration_DUT.bOutput_Pulse_ForwardFalse := FALSE;
ChannelConfiguration_DUT.bAccelerationSteps60 := FALSE;
ChannelConfiguration_DUT.bDutyRatio25 := TRUE;
ChannelConfiguration_DUT.bFrequencyRange_191Hz_100kHz := TRUE;
ChannelConfiguration_DUT.Home_bEnableHomeOnlyAfterNearHomeDeceleration := FALSE;
ChannelConfiguration_DUT.Home_iDeviationCounterClearSignalOutputTime_in_0p5ms := 5;
ChannelConfiguration_DUT.bExecuteInInterrupt := FALSE;
(* FB *)
PulseOutput_Home(bExecute := bExecute,
bReverse := bReverse,
diInitialAndFinalSpeed := 1500,
diTargetSpeed := 12000,
diAccelerationTime := 300,
diDecelerationTime := 600,
diCreepSpeed := 500,
dutChannelConfiguration := ChannelConfiguration_DUT,
bError => bError);