Para generar un resultado directo desde un xml a 1 scl ```bash C:/Users/migue/miniconda3/envs/tia_scripting/python.exe "d:/Proyectos/Scripts/ParamManagerScripts/backend/script_groups/XML Parser to SCL/x0_main.py" --plc-dir "D:\Trabajo\VM\45 - HENKEL - VM Auto Changeover\ExportTia" --source-xml "D:\Trabajo\VM\45 - HENKEL - VM Auto Changeover\ExportTia\PLC_TL27_Q1\ProgramBlocks_XML\FB HMI Interlock.xml" --dest-scl "D:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\XML Parser to SCL\.example\FB_HMI_Interlock.scl" ``` ## Flujo de Trabajo para Resolución de Errores de Conversión ### 1. Identificación de Errores **Comando para buscar errores en SCL generados:** ```bash # Buscar TODOs sin implementar grep -r "TODO:" *.scl # Buscar líneas duplicadas P_TRIG grep -r "P_TRIG.*- Mem:" *.scl # Buscar acceso directo a memoria grep -r "%DB[0-9]*\.DBX[0-9]*" *.scl # Buscar instancias no declaradas grep -r "#.*_INSTANCE_.*(" *.scl ``` ### 2. Categorización de Errores Comunes #### **A. Errores de Edge Detection (P_TRIG/N_TRIG)** - **Síntoma**: Líneas duplicadas con comentarios `// P_TRIG(...) - Mem: "variable"` - **Causa**: El procesador de Coils genera tanto la asignación como el comentario - **Solución**: Crear procesador específico para edge detection o mejorar process_coil.py #### **B. Instancias de Timer No Declaradas** - **Síntoma**: `#TP_INSTANCE_X(...); // TODO: Declarar #TP_INSTANCE_X : TP;` - **Causa**: Los timers temporales no se declaran automáticamente en VAR_TEMP - **Solución**: Mejorar process_timer.py para auto-declarar instancias temporales #### **C. Acceso Directo a Memoria** - **Síntoma**: `%DB960.DBX56.1 := ...` - **Causa**: El symbol_manager no resuelve direcciones absolutas a variables simbólicas - **Solución**: Mejorar symbol_manager.py para mapear direcciones absolutas #### **D. Lógica Agrupada Incorrecta** - **Síntoma**: Lógica compleja en una sola línea, difícil de leer - **Causa**: El agrupador de IFs es demasiado agresivo - **Solución**: Ajustar process_group_ifs en x2_process.py ### 3. Metodología de Corrección #### **Paso 1: Análisis de Archivos SCL Problemáticos** ```bash # Revisar archivo específico python x0_main.py --source-xml "path/to/file.xml" --dest-scl "output.scl" # Examinar output.scl para identificar patrones de error ``` #### **Paso 2: Identificar el Procesador Responsable** - **Coils**: `processors/process_coil.py` - Para asignaciones y edge detection - **Timers**: `processors/process_timer.py` - Para TON, TOF, TP - **Contacts**: `processors/process_contact.py` - Para lectura de variables - **Direcciones de memoria**: `processors/symbol_manager.py` - Para resolución simbólica #### **Paso 3: Implementar Corrección** 1. **Crear nuevo procesador** (si es necesario): ```python # processors/process_ptrig.py def get_processor_info(): return { "type_name": "ptrig", "processor_func": process_ptrig_instruction, "priority": 5 # Ejecutar antes que Coils } ``` 2. **Mejorar procesador existente**: - Agregar lógica específica para el caso problemático - Actualizar manejo de dependencias - Mejorar almacenamiento en sympy_map #### **Paso 4: Validación** ```bash # Re-ejecutar conversión python x0_main.py --source-xml "problema.xml" --dest-scl "test.scl" # Verificar que el error se resolvió grep -c "TODO:" test.scl # Debe ser 0 grep -c "P_TRIG.*- Mem:" test.scl # Debe ser 0 ``` ### 4. Patrones de Testing #### **A. Testing Incremental** ```bash # Test con archivo pequeño conocido python x0_main.py --source-xml "simple_test.xml" --dest-scl "simple_out.scl" # Test con archivo complejo original python x0_main.py --source-xml "complex_original.xml" --dest-scl "complex_out.scl" ``` #### **B. Comparación de Resultados** ```bash # Comparar antes/después diff old_output.scl new_output.scl ``` ### 5. Herramientas de Debugging #### **A. Activar Debug en x2_process.py** ```python # Agregar prints de debug en procesadores específicos print(f"DEBUG: Processing {instr_type} - UID: {instr_uid}") ``` #### **B. Revisar Logs de Conversión** ```bash # Buscar patrones en logs grep "ERROR\|WARNING\|TODO" log_*.txt ``` ### 6. Checklist de Calidad Antes de considerar un error "resuelto": - [ ] No hay comentarios TODO en el SCL - [ ] No hay líneas duplicadas de P_TRIG - [ ] No hay acceso directo a memoria (%DB.DBX) - [ ] Todas las variables de timer están declaradas - [ ] El código SCL es sintácticamente válido - [ ] La lógica funcional es equivalente al LAD original