4.5 KiB
4.5 KiB
Para generar un resultado directo desde un xml a 1 scl
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:
# 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
# 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
-
Crear nuevo procesador (si es necesario):
# processors/process_ptrig.py def get_processor_info(): return { "type_name": "ptrig", "processor_func": process_ptrig_instruction, "priority": 5 # Ejecutar antes que Coils }
-
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
# 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
# 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
# Comparar antes/después
diff old_output.scl new_output.scl
5. Herramientas de Debugging
A. Activar Debug en x2_process.py
# Agregar prints de debug en procesadores específicos
print(f"DEBUG: Processing {instr_type} - UID: {instr_uid}")
B. Revisar Logs de Conversión
# 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