> 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/input-output/communication/serial-read.md).

# Serial Read

Esta función lee la última línea de una conexión serial (no bloqueante) y la convierte al tipo de dato elegido. Está diseñada para ser resistente a entradas obsoletas o mal formadas devolviendo un valor por defecto definido por el usuario cuando sea necesario.

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

* `Enable` Socket de entrada booleano que habilita o deshabilita la lectura.
* `ConnId` Socket de entrada genérico que selecciona de qué conexión serial leer (identificador de conexión).

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

* `Data` Socket de salida genérico que emite el último valor convertido (o el valor por defecto cuando está obsoleto o la conversión falla).

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

* `Stale timeout (s)` Campo de texto que establece cuánto tiempo esperar por una nueva línea antes de considerar la lectura como obsoleta.
* `Data Type` Menú desplegable para elegir el tipo de conversión de las líneas entrantes. Opciones disponibles: `String`, `Int`, `Float`, `Boolean`, `HexInt`, `Bytes`.
* `Default (on stale/parse fail)` Campo de texto que proporciona el valor de reserva que se devuelve cuando no hay datos frescos o la conversión falla. Para `Bytes` ingrese caracteres hex (por ejemplo, `AA55`).

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

* Lectura no bloqueante de la última línea disponible.
* Detección de obsolescencia para que las líneas antiguas no se reenvíen indefinidamente.
* Múltiples tipos de conversión con un valor de reserva configurable.
* Entradas y salidas sencillas para integrar en escenarios más grandes.

## 📝 Uso <a href="#usage" id="usage"></a>

1. Proporcione un identificador de conexión en `ConnId` que haga referencia a una conexión serial activa.
2. Use `Enable` para iniciar o detener la lectura sin eliminar el bloque.
3. Configure `Stale timeout (s)` para definir cuán recientes deben ser los datos entrantes.
4. Seleccione el `Data Type` deseado para convertir las líneas entrantes.
5. Defina `Default (on stale/parse fail)` para controlar qué devuelve el bloque cuando no hay datos frescos o no se pueden convertir.
6. Consuma la salida de `Data` en bloques posteriores para registro, visualización o publicación.

## 📊 Evaluación <a href="#evaluation" id="evaluation"></a>

* Cuando está habilitado, el bloque intenta leer la última línea de la conexión seleccionada.
* Si no llega una línea nueva dentro del tiempo configurado en `Stale timeout (s)`, el bloque emite el valor por defecto configurado.
* Si la conversión al tipo de dato seleccionado falla, el bloque emite el valor por defecto configurado.
* Para el tipo `Bytes`, el bloque trata el valor por defecto como texto hexadecimal.

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

* Use `Debug Input` para registrar o inspeccionar resultados en bruto durante el desarrollo.
* Reenvíe lecturas seriales a `Data to JSON` o `CSV Export` para registro estructurado o exportación por lotes.
* Publique valores procesados con `MQTT Publish` o envíelos a un servicio web usando `REST API - Post`.
* Almacene valores para uso posterior con `Data Write Local` o `Data Write Global` y recupérelos con los bloques de lectura correspondientes.
* Grafique datos numéricos en tiempo real usando `Scope` para observar tendencias o anomalías.
* Combine con `Logic Input` o bloques de comparación para activar acciones basadas en valores entrantes (por ejemplo, alarma cuando una lectura numérica supera un umbral).

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

* Si no aparece ningún dato en `Data`, verifique que el `ConnId` proporcionado corresponda a una conexión activa.
* Si la salida es siempre el valor por defecto, aumente `Stale timeout (s)` o asegúrese de que la fuente esté enviando líneas activamente.
* Si la conversión falla para un tipo numérico o booleano, compruebe el formato de texto bruto del dispositivo y ajuste el valor por defecto en consecuencia.
* Para el tipo `Bytes`, asegúrese de que el valor por defecto esté compuesto por caracteres hex válidos (sin espacios ni caracteres no hex).
