Operación de JOG
Esta instrucción se usa para la operación de JOG. Se envía el número de pulsos especificado cuando la condición de ejecución del control de posición pasa a TRUE. Se realiza una parada decelerada antes de alcanzar el valor de preselección y detener la salida de pulsos. 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
Salida de pulsos: 0 o 1
Utilizar la siguiente DUT predefinida: F169_PulseOutput_Jog_DUT
Se pueden especificar los siguientes parámetros en la DUT:
Código de control
Velocidad
Diagrama de la salida de pulsos
La frecuencia y el ciclo de trabajo se pueden modificar en cada ciclo de scan. (El cambio se hace efectivo con la siguiente salida de pulsos.)
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.
En los registros del sistema seleccionar como "No usado" cualquier contador de alta velocidad asignado a un canal de 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.
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.
La salida de pulsos se detiene cuando se supera el límite superior del valor actual interno si la rotación se realiza en una sola dirección. Como contramedida, poner el valor actual a 0 antes de ejecutar esta instrucción. La salida de pulsos no se detiene si el FP0R se utiliza en modo compatibilidad con el FP0 porque el rango de datos para el valor actual es un valor de 32 bits con signo.
Cuando se utiliza un contaje incremental, la salida de pulsos se detiene cuando el valor actual supera el valor de 2147483647.
Cuando se utiliza un contaje decremental, la salida de pulsos se detiene cuando el valor actual supera el valor de -2147483648.
Se recomienda encarecidamente proporcionar la posibilidad de una parada forzada en cualquier programa de posicionamiento.
El estado de la bandera de control del contador de alta velocidad o de la bandera de control de la salida de pulsos puede cambiar dentro del ciclo de scan.
Para utilizar el FP0R en modo compatibilidad con el FP0, se puede descargar un programa del FP0 al FP0R. Tener en cuenta las siguientes restricciones:
El FP0R soporta datos de 32 bits con signo para el valor actual y para el valor de preselección, el FP0 soporta datos de 24 bits con signo. En el modo de compatibilidad con el FP0, tanto el contaje como la salida de pulsos continúan si los datos exceden el rango del FP0.
El factor de trabajo es siempre del 25% independientemente de los parámetros de la instrucción. 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.
El FP0R no soporta la opción "sin contaje". En este caso, se ejecutará un contaje incremental si las instrucciones de la salida de pulsos del FP0 están configuradas como "sin contaje".
La frecuencia máxima de la salida de pulsos es 10000Hz.
Comprobar que la instrucción de salida de pulsos no usa una salida que se use también como salida normal.
Para ejecutar un programa del FP0 en modo compatibilidad con el FP0, los tipos de PLC (C10, C14, C16, C32 y T32) deben coincidir exactamente. El modo compatibilidad con el FP0 no está disponible para el FP0R tipo F32.
Canal y número de salida de pulsos
Canal N° | Salida de pulsos | Método salida de pulsos |
0 |
Y0 |
Pulso |
Y2 |
Sentido | |
1 |
Y1 |
Pulso |
Y3 |
Sentido |
Variables del sistema y áreas de memoria utilizadas. Los valores entre paréntesis son válidos para FP0 T32.
Descripción |
Variable del Sistema |
|
---|---|---|
Salida de pulsos: bandera de control para el canal |
0 |
sys_bIsPulseChannel0Active |
1 |
sys_bIsPulseChannel1Active |
|
Salida de pulsos: valor actual para el canal |
0 |
sys_diPulseChannel0ElapsedValue |
1 |
sys_diPulseChannel1ElapsedValue |
|
Salida de pulsos: valor de preselección para el canal |
0 |
sys_diPulseChannel0TargetValue |
1 |
sys_diPulseChannel1TargetValue |
|
Código de control del contador de alta velocidad o salida de pulsos |
sys_wHscOrPulseControlCode |
En la Lista de Variables Globales, se definen las variables a las que pueden acceder todas las POUs del proyecto.
La DUT F169_PulseOutput_Jog_DUT está predefinida en la FP Library.
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_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
END_VAR
VAR
dut_Jog: F169_PulseOutput_Jog_DUT:=wControlCode := 16#110,
iSpeed := 0;
(*Digit2: 1= Duty 10%
Digit1: 1=Incremental counting
Digit0: 0=No direction output*)
@'': @'';
END_VAR
Los campos de comentarios explican la función de este ejemplo.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_COMMENT,,define frequency~ 300Hz,2,1,22,2,);
B(B_F,E_MOVE!,Instance,9,2,15,6,,?DEN?D?AENO?C);
B(B_VARIN,,300,7,4,9,6,);
B(B_VAROUT,,dut_Jog.iSpeed,15,4,17,6,);
B(B_CONTACT,,X0_bMotorSwitch,5,3,7,5,);
L(1,0,1,6);
L(1,4,5,4);
L(7,4,9,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_F,F169_PulseOutput_Jog!,Instance,12,2,25,7,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dut_Jog,10,4,12,6,);
B(B_VARIN,,0,10,5,12,7,);
B(B_CONTACT,,X0_bMotorSwitch,5,3,7,5,);
B(B_COMMENT,,start pulse output to output,2,1,22,2,);
L(1,4,5,4);
L(7,4,12,4);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (X0_bMotorSwitch) then
dutJog.ispeed := 300;
END_IF;
IF (X0_bMotorSwitch) then
F169_PulseOutput_Jog(s_dutDataTable := dutJog,
n_iPulseOutputChannel := 0);
END_IF;