Control Cam para el FP0R
Esta instrucción realiza un control Cam según los parámetros especificados en la DUT con un máximo de 31 valores de preselección para el contardor de alta velocidad. Se puede ejecutar un programa de interrupción siempre que el valor actual coincida con uno de los valores de preselección.
Entrada
Canal del contador de alta velocidad: 0–5
Dirección de inicio del área que contiene la tabla de datos
Ejemplo: F165_HighSpeedCounter_Cam_8_Values_DUT
Salida
Dirección de inicio (WR) del área que contiene la dirección (palabra), por ejemplo, BOOL32_OVERLAPPING_DUT. Seleccionar el tamaño (16 ó 32 bits) según el número establecido en diNumberOfTargetValuesAndOutputRelays.
Crear su propia DUT utilizando la siguiente DUT como ejemplo: F165_HighSpeedCounter_Cam_8_Values_DUT
Se pueden especificar los siguientes parámetros en la DUT:
Código de control
Dirección (palabra) para las salidas
Número de valores de preselección
Valor de preselección:1
...
Valor de preselección:n
Máximo valor de preselección
y |
Valor actual del contador de alta velocidad | 14000 |
Máximo valor de preselección |
1) |
Condición de ejecución | 10000 |
Valor de preselección:4 |
2) |
Bandera de control del contador de alta velocidad | 8000 |
Valor de preselección:3 |
3) |
Salida0-4 |
4000 |
Valor de preselección:2 |
2000 |
Valor de preselección:1 |
Siempre que el valor actual esté dentro del área del valor de preselección de n a n+1 (contaje incremental) o de n+1 a n, (contaje decremental), la salida correspondiente n pasa a TRUE.
En el ejemplo de arriba, se ha habilitado el control del valor de preselección máximo. Cuando el valor actual alcanza el valor de preselección máximo, el valor actual pasa a 0 y se reinicia el contaje.
Especificar la dirección (palabra) de las salidas en una DUT sobrecargada, por ejemplo, BOOL32_OVERLAPPING_DUT, y asignar esta DUT a dutBitOutputs.
Como máximo se pueden especificar 31 valores de preselección.
Los valores de preselección se pueden ordenar en sentido ascendente. No se puede utilizar un valor dos veces.
Cuando comience la instrucción, todos las salidas están a FALSE, excepto la salida 0, que pasa a TRUE, siempre que el valor actual sea menor que el valor de preselección 1. En caso contrario, la salida correspondiente al área del valor de preselección pasa a TRUE. Por ejemplo: Si el valor actual se encuentra entre el valor de preselección 2 = -4000 y el valor de preselección 3 = +4000, la salida 2 pasa a TRUE. En el siguiente ejemplo, se ha deshabilitado el control del valor de preselección máximo. Cuando el valor actual alcanza el último valor de preselección, continua el contaje y el valor actual no pasa a 0.
y |
Valor actual del contador de alta velocidad | 8000 |
Valor de preselección:4 |
1) |
Condición de ejecución | 4000 |
Valor de preselección:3 |
2) |
Bandera de control del contador de alta velocidad | -4000 |
Valor de preselección:2 |
3) |
Salida0-4 |
-10000 |
Valor de preselección:1 |
INT0 |
Programa de interrupción 0 |
Se puede ejecutar la instrucción utilizando el control del valor de preselección máximo para poner el valor actual a 0 cuando se alcance el valor de preselección máximo. El control del valor de preselección máximo se puede habilitar en el código de control de F165_HighSpeedCounter_Cam_8_Values_DUT. En lugar de utilizar el control del valor de preselección máximo, el valor actual también se puede resetear utilizando una entrada de reset o un reset por software.
Para realizar el control del valor de preselección máximo, se deben especificar números enteros positivos para todos los valores de preselección.
Control del contaje incremental y decremental con el valor de preselección máximo:
y |
Valor actual del contador de alta velocidad | 14000 |
Máximo valor de preselección |
1) |
Condición de ejecución | 10000 |
Valor de preselección:4 |
2) |
Bandera de control del contador de alta velocidad | 8000 |
Valor de preselección:3 |
3) |
Salida0-4 |
4000 |
Valor de preselección:2 |
2000 |
Valor de preselección:1 |
Control del valor de preselección máximo: |
habilitado |
deshabilitado (ver nota) |
---|---|---|
Contaje incremental: El puntero a la tabla de datos se mueve desde el valor de preselección 1 al último valor de preselección. |
Cuando el valor actual alcanza el valor de preselección máximo:
|
Cuando el valor actual alcanza el último valor de preselección:
|
Contaje decremental: El puntero a la tabla de datos se mueve desde el último valor de preselección 1. |
Cuando el valor actual alcanza el valor -1:
|
Cuando el valor actual alcanza el valor -1:
|
Siempre que no se utilice una entrada de reset ni un reset por software.
Canal |
Entrada de reset por hardware |
---|---|
0 |
X2 |
1 |
|
2 |
X5 |
3 |
El programa de interrupción se ejecutará cuando el valor actual alcance el valor de preselección. Cualquier interrupción que se introduzca en la lista de Tareas se activa automáticamente. Se asigna un número de programa de interrupción para cada canal.
Canal |
0 |
1 |
2 |
3 |
4 |
5 |
Programa de interrupción |
0 |
1 |
3 |
4 |
6 |
7 |
Seleccionar la entrada del contador de alta velocidad para el canal determinado en los registros del sistema.
Cuando se ejecuta una instrucción del contador de alta velocidad, la bandera control del contador de alta velocidad (por ejemplo, sys_bIsHscChannel0ControlActive) del canal utilizado pasa a TRUE. No se puede ejecutar otra instrucción del contador de alta velocidad utilizando el mismo canal mientras que la bandera de control esté a TRUE.
Para cancelar la ejecución de la instrucción, poner a TRUE el bit 3 del registro de datos que almacena el código de control del contador de alta velocidad (sys_wHscOrPulseControlCode). La bandera de control del contador de alta velocidad pasa a FALSE. Para habilitar la ejecución de la instrucción del contador de alta velocidad, poner el bit 3 a FALSE.
Sobrescribir el valor actual del canal utilizado en la ejecución de la instrucción puede causar un funcionamiento inesperado.
Asegurarse de que el intervalo de tiempo entre los valores de preselección adyacentes sea mayor que 1ms.
Si la instrucción se ejecuta en el programa principal, asegurarse de que el intervalo de tiempo entre los valores de preselección adyacentes es mayor que el ciclo de scan.
Si la instrucción se ejecuta en un programa de interrupción, asegurarse de que el intervalo de tiempo mínimo entre valores de preselección adyacentes es mayor que el máximo tiempo de ejecución del programa de interrupción.
Se puede ejecutar la instrucción simultáneamente en un máximo de dos canales.
Cuando se utiliza una entrada de reset o un reset por software, comprobar que el valor de preselección 1 es un entero y ³ 1.
Cuando se usa el control de valor máximo junto con una entrada de reset o un reset por software, tener la precaución de no utilizarlos la vez.
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.
si el valor de preselección > el valor de preselección máximo.
si el valor de preselección = 0.
si los valores de preselección no están ordenados en sentido ascendente.
si el valor de preselección > el valor de preselección máximo.
si el valor de preselección = 0.
si los valores de preselección no están ordenados en sentido ascendente.
La DUT FF165_HighSpeedCounter_Cam_8_Values_DUT está predefinida en la FP Library y se puede utilizar como un ejemplo.
En la Lista de Variables Globales, se definen las variables a las que pueden acceder todas las POUs del proyecto.
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
bStartCam: BOOL:=FALSE;
dut_F165_CAM_Example1: F165_Cam_Example1_4_Values_DUT;
END_VAR
VAR_EXTERNAL
WR0_bits_F165_CAM_Examples: BOOL16_OVERLAPPING_DUT;
END_VAR
Cuando la variable bStartCam pasa a TRUE, se ejecuta la función.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,sys_bIsFirstScan,5,2,7,4,);
B(B_F,E_MOVE!,Instance,14,1,20,5,,?DEN?D?AENO?C);
B(B_VARIN,,0,12,3,14,5,);
B(B_VAROUT,,sys_diHscChannel0ElapsedValue,20,3,22,5,);
B(B_COMMENT,,Reset the elapsed value,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,F165_HighSpeedCounter_Cam!,Instance,14,1,28,6,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,3,14,5,);
B(B_VARIN,,dut_F165_CAM_Example1,12,4,14,6,);
B(B_VAROUT,,WR1_dut_CAM1,28,3,30,5,);
B(B_CONTACT,,bStartCam,5,2,7,4,R);
B(B_COMMENT,,Start the cam control,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (sys_bIsFirstScan) then
sys_diHscChannel0ElapsedValue:=0;
END_IF;
IF DF(bStartCam) then
F165_HighSpeedCounter_Cam(iHscChannel := 0,
s_dutDataTable := dut_F165_CAM_Example1,
dutBitOutputs => WR0_bits_F165_CAM_Examples);
END_IF;
La DUT FF165_HighSpeedCounter_Cam_8_Values_DUT está predefinida en la FP Library y se puede utilizar como un ejemplo.
VAR
bStartCam: BOOL:=FALSE;
dut_F165_CAM_Example2: F165_Cam_Example2_4_Values_DUT;
END_VAR
VAR_EXTERNAL
WR0_bits_F165_CAM_Examples: BOOL16_OVERLAPPING_DUT;
END_VAR
Cuando la variable bStartCam pasa a TRUE, se ejecuta la función.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,sys_bIsFirstScan,5,2,7,4,);
B(B_F,E_MOVE!,Instance,14,1,20,5,,?DEN?D?AENO?C);
B(B_VARIN,,0,12,3,14,5,);
B(B_VAROUT,,sys_diHscChannel0ElapsedValue,20,3,22,5,);
B(B_COMMENT,,Reset the elapsed value,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,F165_HighSpeedCounter_Cam!,Instance,14,1,28,6,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,3,14,5,);
B(B_VARIN,,dut_F165_CAM_Example2,12,4,14,6,);
B(B_VAROUT,,WR0_bits_F165_CAM_Examples,28,3,30,5,);
B(B_CONTACT,,bStartCam,5,2,7,4,R);
B(B_COMMENT,,Start the cam control,1,0,21,1,);
L(7,3,14,3);
L(1,3,5,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (sys_bIsFirstScan) then
sys_diHscChannel0ElapsedValue:=0;
END_IF;
IF DF(bStartCam) then
F165_HighSpeedCounter_Cam(iHscChannel := 0,
s_dutDataTable := dut_F165_CAM_Example2,
dutBitOutputs => WR0_bits_F165_CAM_Examples);
END_IF;