Control Trapezoidal
Esta instrucción ejecuta automáticamente un control trapezoidal según los parámetros especificados en la DUT. 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
Dirección de inicio del área que contiene la tabla de datos
FP-S, FP-X:
F171_PulseOutput_Trapezoidal_DUT
FP0R:
F171_PulseOutput_Trapezoidal_Type0_DUT
F171_PulseOutput_Trapezoidal_Type1_DUT
Canal de salida de pulsos:
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
Utilizar la siguiente DUT predefinida: F171_PulseOutput_Trapezoidal_DUT.
Se pueden especificar los siguientes parámetros en la DUT:
Velocidad inicial y final
Velocidad máxima
Tiempo de aceleración/deceleración
Valor de preselección:
Bandera de control de la salida de pulsos
Condición de ejecución
La frecuencia de salida de pulsos pasa desde la velocidad inicial a la velocidad final según el tiempo de aceleración/deceleración.La diferencia entre la velocidad de preselección y la velocidad actual determina la pendiente de la rampa..
FP-X: Durante la salida de pulsos, la bandera de control (por ejemplo sys_bIsPulseChannel0Active) del canal correspondiente está a TRUE. No se puede ejecutar ninguna otra instrucción de salida de pulsos mientras esta bandera sea TRUE
FPS: La bandera de control del contador de alta velocidad (por ejemplo sys_bIsHscChannel0ControlActive) y la bandera de control de la salida de pulsos (por ejemplo sys_bIsPulseChannel0Active) están asignadas al mismo relé interno especial (R903A). Por lo tanto, cuando se ejecuta una instrucción del contador de alta velocidad o de salida de pulsos, tanto la bandera de control de contador de alta velocidad (por ejemplo sys_bIsHscChannel0ControlActive) como la bandera de control de la salida de pulsos (por ejemplo sys_bIsPulseChannel0Active) para el canal especificado, están a TRUE. No se puede ejecutar ninguna otra instrucción del contador de alta velocidad o de salida de pulsos mientras que está bandera esté a TRUE.
FPS: Al ejecutar la instrucción de interpolación circular F176_PulseOutput_Center la bandera de control de interpolación circular (sys_bIsCircularInterpolationActive) pasa a TRUE. Se mantiene el estado de la bandera hasta que se alcanza el valor de preselección (incluso si la condición de ejecución ya no es TRUE). En este intervalo, no se puede ejecutar otra función de salida de pulsos.
FPS: En los registros del sistema seleccionar como "No usado" cualquier contador de alta velocidad asignado a un canal de salida de pulsos.
FP-X: Seleccionar en los registros del sistema, "Salida de pulsos " para el canal deseado.
Se recomienda encarecidamente proporcionar la posibilidad de una parada forzada en cualquier programa de posicionamiento.
Utilizar la siguiente DUT predefinida: F171_PulseOutput_Trapezoidal_Type0_DUT (velocidad máxima = primera velocidad de preselección) o F171_PulseOutput_Trapezoidal_Type1_DUT (velocidad máxima = 50kHz).
La velocidad máxima puede ser modificada durante la salida de pulsos.
Están disponibles dos métodos de control:
Tipo 0: La velocidad puede ser modificada dentro del rango de velocidad de preselección especificado.
Tipo 1: La velocidad puede ser modificada dentro del rango de velocidad máxima (50kHz).
Se pueden especificar los siguientes parámetros en la DUT:
Diagrama de la salida de pulsos
Velocidad inicial y final
Velocidad máxima
Tiempo de aceleración
Tiempo de deceleración
Valor de preselección:
Bandera de control de la salida de pulsos
Condición de ejecución
Petición de parada decelerada
Tipo 0:
La diferencia entre la velocidad inicial y la velocidad máxima determina la pendiente de la rampa de aceleración.La diferencia entre la velocidad máxima y la velocidad final determina la pendiente de la rampa de deceleración.
Tipo 1:
La diferencia entre la velocidad máxima de 50kHz y la velocidad inicial determina la pendiente de la rampa de aceleración.La diferencia entre la velocidad máxima de 50kHz y la velocidad final determina la pendiente de la rampa de deceleración.
Se envían pulsos con un rendimiento del 25%.Con el método de salida de pulsos "pulso/dirección", los pulsos se envía aproximadamente 300ms después de enviar la señal de dirección, donde se tienen en cuenta la curva característica del driver del motor.
Parada decelerada
Para realizar una parada decelerada, pasar de FALSE a TRUE el bit 5 de los registros de datos que almacenan el código de control de la salida de pulsos (por ejemplo MOVE(16#120, sys_wHscOrPulseControlCode);
).Cuando se solicita una parada decelerada durante la aceleración, la deceleración se realiza con la misma pendiente que la deceleración desde la velocidad de preselección.
Modificación de la velocidad de preselección durante la salida de pulsos
Tipo 1: La velocidad puede ser modificada dentro del rango de velocidad máxima (50kHz).
Velocidad máxima
Primer cambio de velocidad de preselección
Segundo cambio de velocidad de preselección
Tiempo de aceleración
Aceleración
Deceleración
Tiempo de deceleración
Bandera de control de la salida de pulsos
Condición de ejecución
Para modificar la velocidad, mantener la condición de ejecución a TRUE.
Tipo 0:
Si se especifica un valor mayor que la velocidad de preselección, este se corregirá a la velocidad de preselección al arrancar.
Tipo 1:
Si la velocidad de preselección tiene un valor mayor de 50kHz, este se ajustará a 50kHz.
Si el valor actual sobrepasa el posición inicial del área de aceleración prohibida (por ejemplo, sys_diPulseChannel0AccelerationForbiddenAreaStartingPosition) durante la aceleración, no se puede ejecutar la aceleración.
La velocidad de deceleración no puede ser inferior a la velocidad final corregida.
Tan pronto como comience a editar online (es decir, en modo RUN) un programa que utiliza esta instrucción, se detendrá la salida de pulsos.
Si tanto el programa principal como el programa de interrupción contienen código para el mismo canal, asegurarse de que no se ejecutan simultáneamente.
Se recomienda encarecidamente proporcionar la posibilidad de una parada forzada en cualquier programa de posicionamiento.
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
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;