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_CASEExplicació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.

