ParamManagerScripts/backend/script_groups/TwinCat/README.md

172 lines
5.0 KiB
Markdown

# 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.