130 lines
4.5 KiB
Markdown
130 lines
4.5 KiB
Markdown
|
|
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 |