# Convertidor LAD a Pseudocódigo Estructurado ## Descripción Este proyecto proporciona herramientas para convertir código LAD (Ladder Diagram) de TwinCAT a pseudocódigo estructurado compatible con IEC61131-3. El convertidor mantiene la semántica original del código LAD mientras lo transforma a un formato más legible y estructurado. ## Características - ✅ **Parsing completo de LAD**: Analiza la estructura completa de archivos `.EXP` de TwinCAT - ✅ **Conversión semántica**: Mantiene la lógica original del diagrama ladder - ✅ **Formato estructurado**: Genera código pseudo estructurado con IF-THEN-END_IF - ✅ **Manejo de contactos**: Convierte contactos normales y negados correctamente - ✅ **Function blocks**: Identifica y convierte llamadas a bloques de función - ✅ **Operadores matemáticos**: Maneja operaciones aritméticas y lógicas - ✅ **Comentarios**: Preserva comentarios de las redes originales ## Archivos del Proyecto ### Convertidores Principales 1. **`simple_lad_converter.py`** - Convertidor simplificado y robusto (recomendado) 2. **`lad_to_pseudocode_converter.py`** - Convertidor básico inicial 3. **`lad_to_pseudocode_converter_enhanced.py`** - Versión avanzada con más características ### Archivos de Prueba - **`test_simple.py`** - Script de prueba para el convertidor simple - **`ejemplo_conversion.py`** - Ejemplo de uso del convertidor básico - **`test_enhanced_converter.py`** - Prueba para el convertidor avanzado ## Uso Rápido ### Método Simple (Recomendado) ```bash python test_simple.py ``` Este comando procesará el archivo `.example/INPUT.EXP` y generará `output_simple.txt` con el código convertido. ### Uso Directo del Convertidor ```python from simple_lad_converter import SimpleLadConverter converter = SimpleLadConverter() converter.parse_file("mi_archivo.EXP") structured_code = converter.save_to_file("salida.txt") ``` ### Línea de Comandos ```bash python lad_to_pseudocode_converter.py archivo_entrada.EXP archivo_salida.txt ``` ## Estructura del Código LAD Soportada El convertidor puede procesar las siguientes estructuras de TwinCAT: ### Elementos LAD Reconocidos - `_NETWORK` - Inicio de red - `_LD_ASSIGN` - Asignaciones - `_LD_CONTACT` - Contactos (entradas) - `_LD_AND` / `_LD_OR` - Operaciones lógicas - `_FUNCTIONBLOCK` - Bloques de función - `_OPERATOR` - Operadores matemáticos - `_COMMENT` / `_END_COMMENT` - Comentarios - `_OUTPUT` - Variables de salida ### Operadores Soportados - **Aritméticos**: ADD, SUB, MUL, DIV - **Lógicos**: AND, OR - **Comparación**: LT, GT, EQ - **Especiales**: SEL, MOVE ## Ejemplo de Conversión ### Código LAD Original ``` _NETWORK _COMMENT Verificación de presión CO2 _END_COMMENT _LD_ASSIGN _LD_CONTACT DI_Air_InletPress_OK _NEGATIV _FUNCTIONBLOCK mAirPressOk _OUTPUT gInLinePressAirOk ``` ### Código Estructurado Generado ``` // Red 5 // Verificación de presión CO2 IF NOT DI_Air_InletPress_OK THEN gInLinePressAirOk := mAirPressOk(); END_IF; ``` ## Estructura del Archivo de Salida El código generado sigue esta estructura: ``` // Código pseudo estructurado generado desde LAD TwinCAT // Compatible con IEC61131-3 PROGRAM Input_Converted // Red 1 IF condicion1 AND condicion2 THEN variable_salida := funcion_bloque(parametros); END_IF; // Red 2 variable := operando1 ADD operando2; // Red N... END_PROGRAM ``` ## Resultados de la Conversión El convertidor ha procesado exitosamente el archivo `INPUT.EXP` que contiene: - **86 redes LAD** en total - **Múltiples tipos de elementos**: contactos, function blocks, operadores - **Preservación de comentarios** originales - **Conversión correcta de lógica condicional** con IF-THEN-END_IF ### Estadísticas del Ejemplo - Archivo de entrada: `.example/INPUT.EXP` (4,611 líneas) - Redes procesadas: 86 - Archivo de salida: ~235 líneas de código estructurado - Reducción de complejidad: ~95% ## Ventajas del Código Convertido 1. **Legibilidad**: Más fácil de leer que el formato LAD textual 2. **Mantenibilidad**: Estructura clara con comentarios preservados 3. **Debugging**: Lógica condicional explícita 4. **Documentación**: Comentarios de red integrados 5. **Portabilidad**: Formato pseudo-código universal ## Limitaciones Conocidas - Algunos parámetros internos pueden aparecer como `_POSITIV`, `_NEGATIV` - Estructuras complejas de LAD pueden requerir revisión manual - El convertidor es específico para el formato de TwinCAT ## Desarrollo Futuro - [ ] Mejorar el parsing de parámetros de function blocks - [ ] Añadir soporte para más tipos de operadores - [ ] Implementar validación de sintaxis - [ ] Crear interfaz gráfica para conversión - [ ] Soporte para otros formatos de PLC ## Contribuciones Este convertidor fue desarrollado para facilitar el análisis y mantenimiento de código LAD en proyectos de automatización industrial. Las contribuciones y mejoras son bienvenidas. --- **Nota**: Este es un proyecto de código abierto para ayudar en la migración y análisis de código LAD de TwinCAT a formatos más estructurados.