5.0 KiB
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
simple_lad_converter.py
- Convertidor simplificado y robusto (recomendado)lad_to_pseudocode_converter.py
- Convertidor básico iniciallad_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 simpleejemplo_conversion.py
- Ejemplo de uso del convertidor básicotest_enhanced_converter.py
- Prueba para el convertidor avanzado
Uso Rápido
Método Simple (Recomendado)
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
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
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
- Legibilidad: Más fácil de leer que el formato LAD textual
- Mantenibilidad: Estructura clara con comentarios preservados
- Debugging: Lógica condicional explícita
- Documentación: Comentarios de red integrados
- 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.