CTU

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.

Parámetros

Entrada

CU (BOOL)

contador ascendente

En cada flanco de subida de CV, aumenta en 1 el valor de CU, excepto si se activa la entrada R

R (BOOL)

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.

PV (INT)

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

Q (BOOL)

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.

CV (INT)

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.

Diagrama de tiempos

Ejemplo

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
		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

Cuerpo de la POU

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.

Cuerpo LD

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

Cuerpo en ST

CTU1(CU := sys_bPulse1s, R := bReset, PV := iPresetValue,
     Q => bUpCounting_PV_reached, 
	 CV => iCurrentValue);

Cuerpo IL

Modificado el: 2021-09-27Comentarios sobre esta páginaLínea directa de Panasonic