FB_GetCycleTime

FB_GetCycleTime – Cálculo del tiempo de ciclo en TwinCAT 3

En esta entrada comparto un bloque sencillo para medir tiempos de ciclo en TwinCAT 3 utilizando una máquina de estados muy compacta. Este tipo de bloques es útil para medir la duración exacta de operaciones, subrutinas, secuencias o diagnósticos dentro del PLC.

A continuación el código completo del Function Block:

FUNCTION_BLOCK FB_GetCycleTime
VAR_INPUT
iExecute : BOOL;
END_VAR
VAR_OUTPUT
oDone : BOOL;
oCycleTime : LREAL;
END_VAR
VAR
State : UINT;
PreviousTime : TIME;
CycleTime : TIME;
END_VAR

CASE State OF

0:
IF iExecute THEN
State := 10;
PreviousTime := TIME();
END_IF

10:
CycleTime := TIME() - PreviousTime;
oCycleTime := TIME_TO_LREAL(CycleTime) / 1000.0;
State := 20;
oDone := TRUE;

20:
IF NOT iExecute THEN
oDone := FALSE;
State := 0;
oCycleTime := 0;
END_IF

END_CASE

Explicación rápida:
– El bloque espera un flanco en iExecute para empezar la medición.
– Captura el tiempo actual como referencia.
– Calcula el tiempo transcurrido y lo entrega en segundos (LREAL).
– Cuando finaliza, activa oDone.
– Si iExecute se desactiva, el bloque se reinicia para una nueva medición.

Run-result of FB_GetCycleTime

Este FB puede integrarse fácilmente dentro de secuencias, diagnosis o perfiles de tiempo en proyectos TwinCAT 3.

Your email address will not be published. Required fields are marked *

*