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

# Siemens S7 Write

Este function block escribe valores en un PLC Siemens S7. Acepta una entrada de datos y una referencia de cliente, y puede realizar escrituras inmediatas (síncronas) o programadas en segundo plano (asíncronas). Se puede proporcionar un valor opcional que se escribirá cuando el sistema se detenga o el bloque se elimine.

## 📥 Entradas

`Enable`\
Proporcione un booleano para permitir o inhibir las escrituras. Cuando no se suministra o es True, las escrituras continúan.

`Data`\
El valor que se escribirá en el PLC. Acepta el tipo de dato seleccionado en los controles.

`[Optional] Data on Stop`\
Valor opcional que se escribirá cuando el bloque se detenga o se elimine.

`S7 Client`\
La referencia/cliente de PLC usada para realizar la escritura. (Proporcione usando un bloque de conexión como `Siemens S7 Connect`.)

## 📤 Salidas

Este function block no produce salidas.

## 🕹️ Controles

`DB Number`\
Especifique el número de DB dentro del PLC donde se escribirá el valor.

`DB Byte Address`\
Especifique el desplazamiento en bytes dentro del DB seleccionado.

`Bit Position`\
Para escrituras booleanas, seleccione la posición del bit dentro del byte objetivo.

`DB Data Type`\
Elija el tipo de dato a escribir (por ejemplo: boolean, integer, float, string). El bloque convierte el valor de entrada según esta selección.

`Connection Type`\
Elija entre los modos `Sync` y `Async`. `Sync` realiza la escritura inmediatamente y comparte una conexión común; `Async` programa la escritura en segundo plano y usa una conexión dedicada para este bloque.

## 🎛️ Características clave

* Soporte para múltiples tipos de datos de PLC con selección explícita mediante `DB Data Type`.
* Direccionamiento por byte y por bit para colocación precisa de valores booleanos o escalares.
* Dos modos de escritura:
  * Escrituras síncronas (inmediatas) para operaciones deterministas de un solo paso.
  * Escrituras asincrónicas (en segundo plano) para evitar bloquear el flujo principal y descargar operaciones de escritura más largas.
* Escritura segura opcional al detener: el valor proporcionado en `[Optional] Data on Stop` se escribe automáticamente cuando el bloque se detiene o se elimina.
* Gestión de conexión y reconexión cuando cambia la dirección del cliente.
* Mensajes claros de error y advertencia para ayudar a diagnosticar problemas de conectividad o de tipo.

## ⚙️ Cómo se ejecuta

* Cuando `Enable` está ausente o es True, el bloque intenta escribir el valor proporcionado en `Data` en el PLC en el DB y la dirección de byte configurados.
* Si `Connection Type` está en `Sync`, el bloque usa una conexión síncrona compartida y realiza la escritura de inmediato.
* Si `Connection Type` está en `Async`, el bloque programa la escritura en un worker en segundo plano para que el flujo principal no se bloquee; esto utiliza una instancia de conexión dedicada para el bloque.
* Si la referencia de cliente en `S7 Client` no está conectada, el bloque intentará (re)conectarse antes de intentar la escritura.
* Al detenerse o eliminarse, el bloque intentará escribir el valor proporcionado en `[Optional] Data on Stop` para garantizar un estado final definido.

## 📝 Instrucciones de uso

1. Proporcione una referencia de cliente PLC en `S7 Client` (use `Siemens S7 Connect` para crear la conexión).
2. Configure la dirección objetivo usando `DB Number` y `DB Byte Address`.
3. Si va a escribir booleanos, ajuste `Bit Position`.
4. Seleccione el `DB Data Type` apropiado para los datos que va a escribir.
5. Elija `Connection Type`:
   * Use `Sync` cuando quiera escrituras inmediatas y compartir la conexión entre bloques.
   * Use `Async` para delegar escrituras en segundo plano y evitar bloquear el flujo.
6. Alimente el valor a escribir en `Data` y habilite la escritura con `Enable`.
7. Opcionalmente, proporcione un valor en `[Optional] Data on Stop` para que se escriba al detener o eliminar el bloque.

## 💡 Tips and Tricks

* Use `Siemens S7 Connect` para proporcionar una referencia de cliente confiable en la entrada `S7 Client`.
* Combine con `Siemens S7 Read` para verificar registros antes o después de las escrituras.
* Use `Logic Input` para controlar el socket `Enable` desde un simple toggle en la UI.
* Si necesita preparar o formatear texto/datos estructurados antes de escribir, considere `String Input` o `Data to JSON` upstream.
* Use `Data Write Global` / `Data Write Local` o `Data Memory` para almacenar valores que piensa escribir desde varios puntos del flujo.
* Para registro o diagnóstico, conecte un `CSV Export` o `Debug Input` para capturar o inspeccionar los valores que escribe.
* Prefiera el modo `Sync` cuando varios bloques escriban en el mismo DB/byte para evitar conflictos; elija `Async` cuando las escrituras puedan manejarse de forma independiente para reducir latencia de procesamiento.

## 🛠️ Troubleshooting

* Conexión perdida / fallos de escritura: Verifique la accesibilidad del PLC y el cliente proporcionado en `S7 Client`. Use `Siemens S7 Connect` para probar la conexión de forma independiente.
* Valores de datos incorrectos: Asegúrese de que el `DB Data Type` seleccionado coincida con el tipo de la variable en el PLC y ajuste `DB Byte Address` / `Bit Position` según sea necesario.
* Servidor ocupado o escrituras concurrentes: Si recibe advertencias sobre el servidor ocupado, pruebe cambiar a modo `Sync` para escrituras compartidas y serializadas en las mismas direcciones o asegúrese de que cada escritor use direcciones separadas.
* Valor no escrito al detener: Asegúrese de que se haya proporcionado un valor válido en `[Optional] Data on Stop` y de que el bloque tenga permitido completar la finalización (algunos escenarios de apagado pueden impedir las escrituras finales).

## ✅ Seguridad y buenas prácticas

* Verifique dos veces los DB y las direcciones de byte antes de escribir en PLCs en producción para evitar cambios no deseados.
* Use la escritura al detener con cuidado; asegúrese de que la secuencia de parada permita al bloque completar la escritura final.
* Prefiera conexiones dedicadas (`Async`) para tareas de escritura intensivas o frecuentes que no deban bloquear el flujo principal; prefiera `Sync` cuando necesite coordinar escrituras entre varios bloques.
