Contador ascendente
El bloque de función CTU (contador ascendente) permite programar procesos de contaje.
El contador comienza en cero hasta que se alcanza el valor máximo 32767. Cada flanco de subida en el contador ascendente CU aumenta el valor actual CV en 1.
Entrada
contador ascendente
En cada flanco de subida de CV, aumenta en 1 el valor de CU, excepto si se activa la entrada R
Reset
Un flanco ascendente en R pone a cero el valor actual CV y el contaje se detiene. La salida Q pasa a FALSE.
El siguiente flanco descendente en R reinicia el contaje.
Valor de preselección
si CV es mayor o igual que PV, Q pasa a TRUE
Si no se establece ningún valor de preselección o el valor de preselección es cero, la salida Q pasa a TRUE inmediatamente después de iniciarse el contaje.
Salida
señal de salida
pasa a TRUE si el valor de CV es mayor o igual que PV
pasa a FALSE cuando se detecta el flanco de subida en R.
Valor actual
Contiene el resultado de la suma
If CV reaches the preset value PV, the output Q is set to TRUE, pero el contaje continúa hasta que se alcanza el límite máximo de 32767.
El valor se puede cambiar durante la operación de contaje escribiendo en la variable desde el editor de programación.
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
CTU1: CTU;
bReset: BOOL:=FALSE;
(*sets CV to zero if TRUE*)
iPresetValue: INT:=3;
(*if CV reaches this value,
output Q is set*)
bUpCounting_PV_reached: BOOL:=FALSE;
(*is set, if CV reaches PV*)
iCurrentValue: INT:=0;
(*contains the current value*)
END_VAR
Si bReset está a TRUE, se reseteará el valor actual de iCurrentValue (CV). Si se detecta un flanco de subida en CU, se incrementa en 1 el valor de iCurrentValue. Este procedimiento se repite en cada flanco de subida de CU, hasta que el valor de iCurrentValue sea mayor o igual que iPresetValue. Después, bUpCounting_PV_reached pasará a TRUE.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_CONTACT,,sys_bPulse1s,5,2,7,4,);
B(B_FB,CTU!,CTU1,12,1,17,6,,?BCU?BR?BPV?AQ?ACV);
B(B_COIL,,bUpCounting_PV_reached,23,2,25,4,);
B(B_CONTACT,,bReset,5,4,7,6,);
B(B_VAROUT,,iCurrentValue,18,4,20,6,);
B(B_VARIN,,iPresetValue,7,6,9,8,);
L(1,0,1,8);
L(1,3,5,3);
L(7,3,12,3);
L(17,3,23,3);
L(9,4,12,4);
L(9,4,9,5);
L(17,4,17,5);
L(1,5,5,5);
L(7,5,9,5);
L(10,5,12,5);
L(17,5,18,5);
L(10,5,10,7);
L(9,7,10,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
CTU1(CU := sys_bPulse1s, R := bReset, PV := iPresetValue,
Q => bUpCounting_PV_reached,
CV => iCurrentValue);