> 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/twincat-connect.md).

# TwinCAT Connect

Este bloque de función establece una conexión con un PLC TwinCAT para que otros bloques puedan leer o escribir en el PLC. Úsalo para crear y mantener la conexión cliente al PLC y para informar el estado de la conexión al resto de tu escenario.

## 📥 Entradas

Este bloque de función no tiene entradas.

## 📤 Salidas

* `Connection` — El identificador (handle) de la conexión activa (usar con bloques de comunicación aguas abajo).
* `Success` — Booleano que indica si se estableció correctamente la conexión con el PLC.

## 🕹️ Controles

* `AMS ID` — Introduce el identificador AMS (dirección) del PLC. Normalmente lo proporciona la configuración del PLC o el administrador del sistema.
* `Port` — Introduce el número de puerto para la conexión TwinCAT. Viene un puerto común por defecto (puedes cambiarlo si es necesario).
* `Timeout (ms)` — Tiempo de espera de la conexión en milisegundos. Usa valores mayores para redes lentas o remotas.

Nota: si las librerías de soporte de TwinCAT no están presentes en el sistema, el bloque mostrará un mensaje en su diseño indicando que los módulos TwinCAT no están disponibles y que no puede conectarse hasta que se instalen los componentes necesarios.

## 🎯 Características

* Salida de conexión persistente para que otros bloques la reutilicen sin re-inicializar.
* Indica el éxito de la conexión con un booleano para habilitar flujos condicionales.
* Controles claros para configurar `AMS ID`, `Port` y `Timeout (ms)`.
* Informa de dependencias faltantes del sistema para saber cuándo se requieren componentes TwinCAT.

## ⚙️ Mecanismo de funcionamiento

* Al ejecutarse, el bloque intenta establecer una conexión con el PLC usando los valores configurados en `AMS ID`, `Port` y `Timeout (ms)`.
* Si tiene éxito, proporciona la `Connection` establecida en su salida y pone `Success` en true. Si falla, devuelve una conexión nula/vacía y pone `Success` en false.
* La salida de conexión puede permanecer conectada a otros bloques de comunicación para que usen el mismo enlace establecido sin recrear conexiones repetidamente.
* El bloque también muestra mensajes de error claros en la interfaz si falta configuración o no están disponibles las dependencias del sistema.

## 📝 Instrucciones de uso

1. Introduce la dirección del PLC en `AMS ID` y el puerto objetivo en `Port`.
2. Ajusta `Timeout (ms)` si tu red es lenta o poco fiable.
3. Ejecuta el escenario; comprueba la salida `Success` para verificar la conexión.
4. Conecta la salida `Connection` a los bloques que realicen operaciones de lectura/escritura al PLC.

## 💡 Consejos y buenas prácticas

* Usa los bloques `TwinCAT Read` y `TwinCAT Write` después de este bloque para realizar operaciones usando la `Connection` proporcionada.
* Combina `Logic Input` con la salida `Success` para permitir operaciones con el PLC solo cuando la conexión esté activa.
* Usa `Debug Input` o un bloque de registro/visualización para mostrar el estado de la conexión o errores durante el desarrollo.
* Para guardar o procesar valores leídos del PLC, conecta los lectores a `CSV Export` o `Data Write Global` para persistir resultados.
* Si necesitas disparar acciones cuando la conexión aparece o desaparece, usa bloques lógicos como `Rising Edge` o `Set - Reset` con la salida `Success`.

## 🛠️ Solución de problemas

* Si el bloque informa que los módulos TwinCAT no están disponibles, asegúrate de instalar el runtime de TwinCAT y los paquetes de Python necesarios en la máquina, y reinicia la aplicación.
* Si `Success` permanece en false, verifica que `AMS ID` y `Port` sean correctos y accesibles desde tu red.
* Aumenta `Timeout (ms)` al conectar PLCs remotos o si experimentas latencia intermitente.
* Si la conexión falla de forma intermitente, crea un pequeño circuito lógico (por ejemplo: `Delay Step` + lógica de `Retry` con `Rising Edge`) para intentar la reconexión solo cuando sea necesario.
