> 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-write.md).

# Serial Write

Este bloque de función envía datos crudos a través de una conexión serial seleccionada. Está pensado para transmisiones simples y no bloqueantes, y ofrece opciones en la UI para convertir tipos de datos comunes, añadir finales de línea y controlar el comportamiento de reenvío.

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

`Enable`\
Usar para habilitar o deshabilitar el envío. Cuando es `false`, el bloque no envía datos.

`Data`\
La carga (payload) a enviar. Acepta números, texto, listas, booleanos o valores tipo byte según los controles seleccionados.

`ConnId`\
Identificador de la conexión serial a usar. Proporciona el `ConnId` generado por un bloque gestor de conexiones.

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

Este bloque de función no produce salidas.

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

`Data Type`\
Elige cómo se convertirá el valor de `Data` antes de enviarlo. Opciones comunes: string, integer, float, boolean y formatos byte/hex.

`Line ending`\
Selecciona una secuencia final para añadir al payload. Normalmente incluye opciones como LF, CRLF, CR o ninguno.

`Send policy`\
Elige cuándo transmitir:

* `On change`: solo envía cuando el payload final (en bytes) difiere del último enviado.
* `Always`: envía cada vez que el bloque se evalúa y está habilitado.

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

* Conversión de tipos de datos para formatos comunes: puedes introducir valores legibles y el bloque enviará la secuencia de bytes correspondiente.
* Final de línea configurable para ajustarse a las expectativas del dispositivo remoto.
* Política de envío para evitar repetir mensajes idénticos cuando no es necesario.
* Escritura no bloqueante para que el flujo siga funcionando mientras se transmite la información.
* Funciona junto con bloques gestores de conexión que proporcionan valores `ConnId`.

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

Cuando el bloque se evalúa:

1. Si la entrada `Enable` está inactiva o vacía, no se envía nada.
2. Si hay `Data` y `ConnId` válidos, el bloque convierte `Data` según el `Data Type` seleccionado y añade el `Line ending` elegido.
3. Si la `Send policy` es `On change`, el bloque compara el payload preparado con el payload previo y omite el envío si son idénticos.
4. El payload en bytes preparado se envía a la conexión serial referenciada por `ConnId` sin bloquear el resto del sistema.

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

1. Crea o selecciona una conexión serial y toma nota de su identificador de conexión.
2. Proporciona ese id en la entrada `ConnId`.
3. Alimenta el valor que deseas enviar en la entrada `Data`.
4. Ajusta el control `Data Type` para que coincida con tu dato (por ejemplo, usa `HexBytes` para cadenas hex o `Bytes` para listas de bytes).
5. Elige el `Line ending` deseado si el dispositivo receptor lo espera.
6. Usa `Send policy` para evitar reenvíos innecesarios cuando transmites valores constantes.
7. Activa o desactiva el envío con `Enable`.

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

* Combínalo con `Serial Connect` / bloques gestores de conexión (el connection manager del sistema) para obtener y gestionar valores `ConnId`.
* Usa `String Input` o `Number Input` para preparar y validar `Data` antes de enviarlo.
* Preformatea payloads complejos con `String Merge` o `Data to JSON` cuando necesites cadenas estructuradas (por ejemplo, mensajes JSON).
* Si necesitas registrar o exportar los datos enviados, añade `CSV Export` o `Image Logger` (para registros visuales) aguas abajo en tu flujo.
* Para envíos condicionales, combínalo con `Logic Input`, `And`, `Or` o `Greater` para controlar las transmisiones.
* Para puentes de protocolo, empareja con `MQTT Publish` o `REST API - Post` para reenviar datos seriales a servicios de red.
* Usa `Debug Input` para inspeccionar los payloads salientes durante el desarrollo.

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

* No se envía nada: verifica que `Enable` esté activo, que `Data` no esté vacío y que `ConnId` haga referencia a una conexión activa.
* El dispositivo receptor ignora los mensajes: comprueba el `Line ending` y prueba diferentes opciones (LF, CRLF, CR o ninguno).
* Mensajes idénticos no se envían cuando se espera: confirma que la `Send policy` esté en `Always` si necesitas reenvíos constantes.
* Bytes inesperados en la línea serial: asegúrate de que el `Data Type` coincida con el formato del valor que proporcionas (por ejemplo, usa `HexBytes` para cadenas hex o `Bytes` para listas numéricas).
