Se añadieron requisitos de codificación de salida en el archivo de configuración del backend, especificando que la salida estándar debe ser en UTF-8 para evitar problemas de caracteres corruptos. Además, se realizaron mejoras en el script `x1_lad_converter.py`, incluyendo la implementación de clases para gestionar funciones y bloques de funciones, así como la recopilación de interfaces de funciones en la primera pasada del convertidor. Se actualizaron los logs para reflejar la ejecución y los resultados del proceso de conversión.

This commit is contained in:
Miguel 2025-07-10 11:24:11 +02:00
parent b4959e772f
commit ffc686e140
5 changed files with 5983 additions and 358 deletions

View File

@ -203,3 +203,47 @@ Para un grupo "XML Parser to SCL":
}
}
```
## 7. Requisitos de Codificación de Salida (stdout)
Toda la salida estándar (`stdout`) generada por los scripts (por ejemplo, mediante la función `print()`) es capturada en tiempo real y mostrada en el panel de logs del frontend.
Para garantizar que el texto se muestre correctamente y evitar caracteres corruptos (mojibake), **la salida de los scripts debe tener codificación UTF-8**.
### Configuración Automática
El sistema está diseñado para facilitar esto. Al ejecutar un script, el entorno se configura automáticamente para que la salida de Python sea UTF-8. Específicamente, se establece la variable de entorno `PYTHONIOENCODING=utf-8`.
Gracias a esto, en la mayoría de los casos, **no necesitas hacer nada especial**. Simplemente usa `print()` y la codificación será la correcta.
### Casos Especiales y Solución de Problemas
Pueden surgir problemas si tu script lee datos de fuentes externas (como archivos) que tienen una codificación diferente. Si imprimes contenido directamente sin decodificarlo primero, podrías enviar bytes no válidos a la salida.
La regla es: **decodifica los datos de entrada a un string de Python lo antes posible, y deja que `print()` se encargue de la codificación de salida.**
**Ejemplo de cómo manejar un archivo con codificación `latin-1`:**
```python
# INCORRECTO: Si el archivo no es UTF-8, esto puede enviar bytes inválidos.
# El launcher intentará decodificarlos como UTF-8 y podría fallar o mostrar basura.
try:
with open('mi_archivo_legacy.txt', 'rb') as f:
print(f.read())
except Exception as e:
print(f"Esto probablemente falle o muestre texto corrupto: {e}")
# CORRECTO: Leer el archivo especificando su codificación para decodificarlo a un string.
# Una vez que es un string de Python, `print` lo manejará correctamente.
try:
with open('mi_archivo_legacy.txt', 'r', encoding='latin-1') as f:
contenido = f.read()
# Ahora `contenido` es un string de Python.
# print() lo codificará a UTF-8 automáticamente gracias a la configuración del entorno.
print(contenido)
except FileNotFoundError:
print("El archivo 'mi_archivo_legacy.txt' no fue encontrado para el ejemplo.")
except Exception as e:
print(f"Error al procesar el archivo: {e}")
```

View File

@ -0,0 +1 @@
(* Código SCL generado desde LAD TwinCAT *)\n(* Convertidor mejorado con SymPy - Estructura DNF preferida *)\n(* Path original: *)\n\nPROGRAM \n\n (* Código LAD convertido a SCL *)\n\n\nEND_PROGRAM

View File

@ -203,3 +203,47 @@ Para un grupo "XML Parser to SCL":
}
}
```
## 7. Requisitos de Codificación de Salida (stdout)
Toda la salida estándar (`stdout`) generada por los scripts (por ejemplo, mediante la función `print()`) es capturada en tiempo real y mostrada en el panel de logs del frontend.
Para garantizar que el texto se muestre correctamente y evitar caracteres corruptos (mojibake), **la salida de los scripts debe tener codificación UTF-8**.
### Configuración Automática
El sistema está diseñado para facilitar esto. Al ejecutar un script, el entorno se configura automáticamente para que la salida de Python sea UTF-8. Específicamente, se establece la variable de entorno `PYTHONIOENCODING=utf-8`.
Gracias a esto, en la mayoría de los casos, **no necesitas hacer nada especial**. Simplemente usa `print()` y la codificación será la correcta.
### Casos Especiales y Solución de Problemas
Pueden surgir problemas si tu script lee datos de fuentes externas (como archivos) que tienen una codificación diferente. Si imprimes contenido directamente sin decodificarlo primero, podrías enviar bytes no válidos a la salida.
La regla es: **decodifica los datos de entrada a un string de Python lo antes posible, y deja que `print()` se encargue de la codificación de salida.**
**Ejemplo de cómo manejar un archivo con codificación `latin-1`:**
```python
# INCORRECTO: Si el archivo no es UTF-8, esto puede enviar bytes inválidos.
# El launcher intentará decodificarlos como UTF-8 y podría fallar o mostrar basura.
try:
with open('mi_archivo_legacy.txt', 'rb') as f:
print(f.read())
except Exception as e:
print(f"Esto probablemente falle o muestre texto corrupto: {e}")
# CORRECTO: Leer el archivo especificando su codificación para decodificarlo a un string.
# Una vez que es un string de Python, `print` lo manejará correctamente.
try:
with open('mi_archivo_legacy.txt', 'r', encoding='latin-1') as f:
contenido = f.read()
# Ahora `contenido` es un string de Python.
# print() lo codificará a UTF-8 automáticamente gracias a la configuración del entorno.
print(contenido)
except FileNotFoundError:
print("El archivo 'mi_archivo_legacy.txt' no fue encontrado para el ejemplo.")
except Exception as e:
print(f"Error al procesar el archivo: {e}")
```

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long