ParamManagerScripts/backend/script_groups/TwinCat
Miguel 99e3628955 Eliminación de archivos de ejemplo en el convertidor LAD de TwinCAT. Se han eliminado múltiples archivos .EXP que ya no son necesarios, optimizando así la estructura del proyecto y reduciendo la confusión en la gestión de ejemplos. Se mantiene la funcionalidad principal del convertidor en `x1_lad_converter.py` para la conversión de archivos .EXP a .SCL. 2025-06-19 18:39:04 +02:00
..
.doc Actualización de directorios de trabajo y mejora en la gestión de logs 2025-06-19 18:05:47 +02:00
README.md Primera Version TwinCat Converter 2025-06-19 14:30:15 +02:00
test_converter.py Eliminación de archivos de ejemplo en el convertidor LAD de TwinCAT. Se han eliminado múltiples archivos .EXP que ya no son necesarios, optimizando así la estructura del proyecto y reduciendo la confusión en la gestión de ejemplos. Se mantiene la funcionalidad principal del convertidor en `x1_lad_converter.py` para la conversión de archivos .EXP a .SCL. 2025-06-19 18:39:04 +02:00
test_filling_head_debug.scl Eliminación de archivos de ejemplo en el convertidor LAD de TwinCAT. Se han eliminado múltiples archivos .EXP que ya no son necesarios, optimizando así la estructura del proyecto y reduciendo la confusión en la gestión de ejemplos. Se mantiene la funcionalidad principal del convertidor en `x1_lad_converter.py` para la conversión de archivos .EXP a .SCL. 2025-06-19 18:39:04 +02:00
test_output.scl Eliminación de archivos de ejemplo en el convertidor LAD de TwinCAT. Se han eliminado múltiples archivos .EXP que ya no son necesarios, optimizando así la estructura del proyecto y reduciendo la confusión en la gestión de ejemplos. Se mantiene la funcionalidad principal del convertidor en `x1_lad_converter.py` para la conversión de archivos .EXP a .SCL. 2025-06-19 18:39:04 +02:00
test_pattern_output.scl Eliminación de archivos de ejemplo en el convertidor LAD de TwinCAT. Se han eliminado múltiples archivos .EXP que ya no son necesarios, optimizando así la estructura del proyecto y reduciendo la confusión en la gestión de ejemplos. Se mantiene la funcionalidad principal del convertidor en `x1_lad_converter.py` para la conversión de archivos .EXP a .SCL. 2025-06-19 18:39:04 +02:00
test_specific_file.py Eliminación de archivos de ejemplo en el convertidor LAD de TwinCAT. Se han eliminado múltiples archivos .EXP que ya no son necesarios, optimizando así la estructura del proyecto y reduciendo la confusión en la gestión de ejemplos. Se mantiene la funcionalidad principal del convertidor en `x1_lad_converter.py` para la conversión de archivos .EXP a .SCL. 2025-06-19 18:39:04 +02:00
x1_lad_converter.py Eliminación de archivos de ejemplo en el convertidor LAD de TwinCAT. Se han eliminado múltiples archivos .EXP que ya no son necesarios, optimizando así la estructura del proyecto y reduciendo la confusión en la gestión de ejemplos. Se mantiene la funcionalidad principal del convertidor en `x1_lad_converter.py` para la conversión de archivos .EXP a .SCL. 2025-06-19 18:39:04 +02:00

README.md

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)

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

  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.