> For the complete documentation index, see [llms.txt](https://docs.augelab.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.augelab.com/spanish/function-blocks/blocks-reference/data-logic/signal-operators/delay-step.md).

# Delay Step

Este bloque de función retrasa la señal entrante por un paso de ejecución. Devuelve el valor previo recibido en el conector `Input` y actualiza su memoria interna con la entrada actual para la siguiente ejecución. Usa este bloque cuando necesites un desfase de un paso en el procesamiento de señales o para romper bucles de realimentación inmediata.

## 📥 Entradas <a href="#inputs" id="inputs"></a>

`Input` — Señal de entrada genérica a retrasar. Acepta cualquier tipo de dato.

## 📤 Salidas <a href="#outputs" id="outputs"></a>

`Output` — El valor proporcionado en el paso de ejecución anterior. En la primera ejecución puede estar vacío (sin valor previo).

## 🕹️ Controles <a href="#controls" id="controls"></a>

No hay controles interactivos ni widgets para este bloque.

## ⚙️ Mecanismo de ejecución <a href="#running-mechanism" id="running-mechanism"></a>

En cada ciclo de ejecución el bloque:

* Devuelve el valor que almacenó del ciclo anterior a través de `Output`.
* Sustituye su valor almacenado con la `Input` actual para usarlo en el siguiente ciclo.

Este comportamiento crea un retardado estable de un solo paso entre entrada y salida sin modificar el contenido de la señal.

## 🎯 Características <a href="#features" id="features"></a>

* Retardo simple y fiable de un paso para datos genéricos.
* Útil para crear relaciones temporales entre señales.
* Ayuda a romper bucles de realimentación inmediata en grafos que requieren actualizaciones de estado secuenciales.

## 📝 Instrucciones de uso <a href="#usage" id="usage"></a>

1. Conecta cualquier bloque que produzca señal al conector `Input`.
2. Usa el `Output` donde necesites el valor del paso anterior.
3. Si el valor vacío de la primera ejecución no es aceptable, trátalo con un bloque como `Replace None` o inicializa condicionalmente los datos aguas arriba.

## 💡 Consejos y trucos <a href="#tips-and-tricks" id="tips-and-tricks"></a>

* Combínalo con `Edge Rising` o `Edge Falling` para detectar transiciones con historial de un paso, útil para antirrebotes o detección de secuencias.
* Úsalo con `Set - Reset` o `Counter` para construir máquinas de estado simples o lógica de conteo que requiera información del estado previo.
* Inserta antes de bloques lógicos como `And` / `Or` cuando necesites sincronizar el timing entre múltiples señales.
* Empléalo junto con `Data Memory` o `Data Write Local` / `Data Read Local` al construir sistemas con estado más complejos o cuando necesites preservar valores a través de múltiples pasos o subsistemas.
* Colócalo antes de `Demux` / `Mux` o `Batch Processing` al retrasar estructuras de datos compuestas para mantener la alineación de la secuencia.
* Si tu flujo de trabajo usa interruptores manuales, asócialo con `Logic Input` para crear temporización manual por pasos con historial de un paso.

## 🛠️ Solución de problemas <a href="#troubleshooting" id="troubleshooting"></a>

* La salida aparece vacía en la primera ejecución: esto es esperado. Para evitar problemas, inicializa los datos aguas arriba o usa `Replace None` para sustituir con un valor por defecto.
* Las señales parecen desincronizadas: recuerda que las salidas siempre van un paso de ejecución por detrás de las entradas. Asegúrate de que otros bloques del flujo estén alineados o introduce bloques adicionales de `Delay Step` donde sea necesario.
* Bucles de realimentación inesperados: usa este bloque para romper ciclos inmediatos; colocar un retraso de un solo paso suele resolver problemas de estabilidad y orden.
