139 lines
4.8 KiB
Python
139 lines
4.8 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
|
||
import sys
|
||
import os
|
||
|
||
# Agregar el directorio padre al path
|
||
sys.path.append('.')
|
||
|
||
# Importar el convertidor
|
||
from x1_lad_converter import SimpleLadConverter
|
||
|
||
def test_filling_head_pid():
|
||
"""Probar específicamente _FILLING_HEAD_PID_CTRL.EXP con parser mejorado"""
|
||
print("=== TEST: _FILLING_HEAD_PID_CTRL.EXP con parser mejorado ===")
|
||
print("Verificando detección de patrones ??? para ACTION calls")
|
||
print("-" * 60)
|
||
|
||
# Buscar el archivo
|
||
possible_paths = [
|
||
"ExportTwinCat/_FILLING_HEAD_PID_CTRL.EXP",
|
||
"../ExportTwinCat/_FILLING_HEAD_PID_CTRL.EXP",
|
||
"../../ExportTwinCat/_FILLING_HEAD_PID_CTRL.EXP",
|
||
"C:/Trabajo/SIDEL/13 - E5.007560 - Modifica O&U - SAE235/Reporte/ExportTwinCat/_FILLING_HEAD_PID_CTRL.EXP"
|
||
]
|
||
|
||
test_file = None
|
||
for path in possible_paths:
|
||
if os.path.exists(path):
|
||
test_file = path
|
||
break
|
||
|
||
if test_file is None:
|
||
print(f"❌ Error: No se encontró _FILLING_HEAD_PID_CTRL.EXP")
|
||
return
|
||
|
||
print(f"✓ Archivo encontrado: {test_file}")
|
||
print("-" * 60)
|
||
|
||
# Crear convertidor
|
||
converter = SimpleLadConverter()
|
||
|
||
# Parsear archivo
|
||
print("🔍 PARSEANDO ARCHIVO CON PARSER MEJORADO...")
|
||
converter.parse_file(test_file)
|
||
|
||
print(f"\n📊 RESUMEN:")
|
||
print(f" ✓ Programa: {converter.program_name}")
|
||
print(f" ✓ Redes encontradas: {len(converter.networks)}")
|
||
print(f" ✓ ACTIONs encontradas: {list(converter.actions.keys())}")
|
||
|
||
# Analizar tipos de llamadas encontradas
|
||
action_calls = []
|
||
function_blocks = []
|
||
unresolved_calls = []
|
||
|
||
print(f"\n🔍 ANÁLISIS DE REDES:")
|
||
for i, network in enumerate(converter.networks):
|
||
if network['logic']:
|
||
logic_type = network['logic']['type']
|
||
logic_name = network['logic'].get('name', 'Sin nombre')
|
||
|
||
if logic_type == 'ACTION_CALL':
|
||
action_calls.append(logic_name)
|
||
if logic_name == '???':
|
||
unresolved_calls.append(f"Red {network['id']}")
|
||
print(f" ❌ Red {network['id']}: ACTION call SIN RESOLVER → {logic_name}")
|
||
else:
|
||
print(f" ✅ Red {network['id']}: ACTION call RESUELTO → {logic_name}")
|
||
elif logic_type == 'FUNCTION_BLOCK':
|
||
function_blocks.append(logic_name)
|
||
print(f" 🔧 Red {network['id']}: Function Block → {logic_name}")
|
||
else:
|
||
print(f" ℹ Red {network['id']}: {logic_type} → {logic_name}")
|
||
|
||
print(f"\n📈 ESTADÍSTICAS:")
|
||
print(f" 📞 ACTION calls encontradas: {len(action_calls)}")
|
||
print(f" ✅ Resueltas: {len([x for x in action_calls if x != '???'])}")
|
||
print(f" ❌ Sin resolver: {len([x for x in action_calls if x == '???'])}")
|
||
print(f" 🔧 Function Blocks: {len(function_blocks)}")
|
||
|
||
if unresolved_calls:
|
||
print(f"\n⚠ REDES CON PROBLEMAS:")
|
||
for call in unresolved_calls:
|
||
print(f" • {call}")
|
||
|
||
# Generar código SCL para verificar
|
||
print(f"\n📝 GENERANDO CÓDIGO SCL...")
|
||
scl_code = converter.convert_to_structured()
|
||
|
||
# Guardar archivo de prueba
|
||
output_file = "test_filling_head_debug.scl"
|
||
with open(output_file, 'w', encoding='utf-8') as f:
|
||
f.write(scl_code)
|
||
|
||
print(f" ✓ Guardado en: {output_file}")
|
||
|
||
# Buscar problemas en el código generado
|
||
lines = scl_code.split('\n')
|
||
problem_lines = []
|
||
for i, line in enumerate(lines, 1):
|
||
if '???' in line:
|
||
problem_lines.append(f"Línea {i}: {line.strip()}")
|
||
|
||
if problem_lines:
|
||
print(f"\n⚠ PROBLEMAS EN CÓDIGO SCL GENERADO:")
|
||
for problem in problem_lines:
|
||
print(f" • {problem}")
|
||
else:
|
||
print(f"\n✅ CÓDIGO SCL SIN PROBLEMAS ??? DETECTADOS")
|
||
|
||
# Mostrar sección principal del código generado
|
||
print(f"\n📄 CÓDIGO PRINCIPAL (primeras 30 líneas relevantes):")
|
||
main_start = -1
|
||
for i, line in enumerate(lines):
|
||
if "CÓDIGO PRINCIPAL" in line:
|
||
main_start = i
|
||
break
|
||
|
||
if main_start > -1:
|
||
relevant_lines = []
|
||
for i in range(main_start, min(main_start + 50, len(lines))):
|
||
line = lines[i]
|
||
if ('CALL ' in line or
|
||
'Red ' in line or
|
||
'IF ' in line or
|
||
'mDummy :=' in line):
|
||
relevant_lines.append(f" {i+1:3d}: {line}")
|
||
|
||
for line in relevant_lines[:30]:
|
||
print(line)
|
||
|
||
if len(relevant_lines) > 30:
|
||
print(f" ... ({len(relevant_lines) - 30} líneas más)")
|
||
|
||
return scl_code
|
||
|
||
if __name__ == "__main__":
|
||
test_filling_head_pid() |