CTUD

Contador ascendente/descendente

El bloque de función CTUD (contador ascendente/descendente) permite programar procesos de contaje.

  • Contador ascendente (CU está a TRUE)

    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.

  • Contador descendente (CD está a TRUE)

    El contador comienza en cero hasta que se alcanza el valor mínimo -32768. Cada flanco de subida en el contador descendente CD reduce 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 las entradas R y/o LD.

CD (BOOL)

contador descendente

En cada flanco de subida de CD, se resta 1 del valor de CV, excepto si se activa R y/o LD.

Si CU y CD pasa a TRUE al mismo tiempo, no se realiza ninguna operación de contaje.

R (BOOL)

Reset

CV se pone a cero en cada flanco de subida de R y el contaje se detiene. La salida QU/QD pasa a FALSE.

El siguiente flanco descendente de R reinicia el contaje.

LD (BOOL)

Carga en el acumulador

si se activa LD, el valor de PV se copia en CV y QU pasa a TRUE. No obstante, esto no se aplica si R se activa simultáneamente. En este caso, se ignorará LD.

PV (INT)

Valor de preselección

define el valor de preselección en el caso de incrementar o el valor inicial si se produce el decremento

Si no se establece ningún valor de preselección o si el valor de preselección es cero, la salida QU pasa a TRUE inmediatamente después de iniciarse el contaje.

Salida

QU (BOOL)

señal de salida - contaje ascendente

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.

QD (BOOL)

señal de salida - contaje descendente

pasa a TRUE si CV = cero

pasa a FALSE cuando se detecta el flanco de subida en R.

CV (INT)

Valor actual

  • es el resultado de la suma/resta

  • contaje ascendente:

    Si CV alcanza el valor de preselección PV, la salida QU pasa a TRUE, pero el contaje continúa hasta que se alcanza el límite máximo de 32767.

  • contaje descendente:

    Si CV llega a cero, la salida QD pasa a TRUE, pero el contaje continúa hasta que se alcanza el límite mínimo de -32768.

  • 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
		CTUD1: CTUD;
		bCountUp: BOOL:=FALSE;
			(*increments CV if TRUE*)
		bCountDown: BOOL:=FALSE;
			(*decrements CV if TRUE*)
		bReset: BOOL:=FALSE;
			(*sets CV to zero if TRUE*)
		bLoad: BOOL:=FALSE;
			(*sets CV to PV if TRUE*)
		iPresetValue: INT:=3;
			(*if CV reaches this value,
output QU is set*)
		bUpCounting_PV_reached: BOOL:=FALSE;
			(*is set, if CV reaches PV*)
		bDownCounting_zero_reached: BOOL:=FALSE;
			(*is set, if CV reaches zero*)
		iCurrentValue: INT:=0;
			(*contains the current value*)
	END_VAR

Cuerpo de la POU

Contador ascendente:

Si bReset está a ON (estado = TRUE), se reseteará el valor actual de contaje iCurrentValue (CV). Si se activa bCountUp, se incrementa en 1 el valor de iCurrentValue. Este procedimiento se repite en cada flanco de subida de bCountUp hasta que el valor de iCurrentValue sea mayor o igual que iPresetValue. Después bUpCounting_PV_reached pasa a TRUE. El procedimiento no se lleva a cabo, si bReset y/o bLoad están activados.

Contador descendente:

Si se activa bReset (estado = TRUE), se carga en iCurrentValue (CV), el valor de iPresetValue (PV). Si se activa bCountDown, se resta 1 del valor de iPresetValue. Este procedimiento se repite en cada flanco de subida hasta que el valor de iCurrentValue sea minor o igual a cero Después bDownCounting_zero_reached pasa a TRUE. El procedimiento no se lleva a cabo, si bReset y/o bLoad están activados. Si se activan CU y CD al mismo tiempo, no se realiza ninguna operación de contaje.

Cuerpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 14 ;
        NETWORK_BODY
B(B_CONTACT,,bCountUp,5,3,7,5,);
B(B_CONTACT,,bCountDown,5,5,7,7,);
B(B_FB,CTUD!,CTUD1,12,4,18,11,,?BCU?BCD?BR?BLD?BPV?AQU?AQD?ACV);
B(B_COIL,,bUpCounting_PV_reached,25,5,27,7,);
B(B_CONTACT,,bReset,5,7,7,9,);
B(B_COIL,,bDownCounting_zero_reached,25,8,27,10,);
B(B_CONTACT,,bLoad,5,9,7,11,);
B(B_VAROUT,,iCurrentValue,20,10,22,12,);
B(B_VARIN,,iPresetValue,7,11,9,13,);
L(1,0,1,14);
L(1,4,5,4);
L(7,4,10,4);
L(10,4,10,6);
L(1,6,5,6);
L(7,6,9,6);
L(10,6,12,6);
L(18,6,25,6);
L(9,6,9,7);
L(9,7,12,7);
L(18,7,20,7);
L(20,7,20,9);
L(1,8,5,8);
L(7,8,12,8);
L(18,8,19,8);
L(19,8,19,11);
L(9,9,12,9);
L(20,9,25,9);
L(9,9,9,10);
L(1,10,5,10);
L(7,10,9,10);
L(10,10,12,10);
L(10,10,10,12);
L(19,11,20,11);
L(9,12,10,12);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

CTUD1(CU := bCountUp, CD := bCountDown, R := bReset, LD := bLoad, 
	  PV := iPresetValue, QU => bUpCounting_PV_reached,
	  QD => bDownCounting_zero_reached, CV => iCurrentValue);

Cuerpo IL

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