5.0 KiB
How to work with config setup Example
script_root = os.path.dirname( os.path.dirname(os.path.dirname(os.path.dirname(file))) ) sys.path.append(script_root) from backend.script_utils import load_configuration
if name == "main": """ Load configuration from script_config.json in the current script directory.
Returns:
Dict containing configurations with levels 1, 2, 3 and working_directory
Example usage in scripts:
from script_utils import load_configuration
configs = load_configuration()
level1_config = configs.get("level1", {})
level2_config = configs.get("level2", {})
level3_config = configs.get("level3", {})
working_dir = configs.get("working_directory", "")
""""
try:
configs = load_configuration()
working_directory = configs.get("working_directory")
except Exception as e:
print(f"Warning: Could not load configuration (frontend not running): {e}")
configs = {}
working_directory = None
# Validate working directory with .debug fallback for standalone execution
if not working_directory or not os.path.isdir(working_directory):
print("Working directory not set or invalid in configuration.")
print("Using .debug directory as fallback for direct script execution.")
# Fallback to .debug directory under script location
script_dir = os.path.dirname(os.path.abspath(__file__))
debug_dir = os.path.join(script_dir, ".debug")
# Create .debug directory if it doesn't exist
os.makedirs(debug_dir, exist_ok=True)
working_directory = debug_dir
print(f"Using debug directory: {working_directory}")
else:
print(f"Using configured working directory: {working_directory}")
# Acceder a la configuración específica del grupo
group_config = configs.get("level2", {})
# Leer parámetros con valores por defecto (usando los defaults del esquema como guía)
# Parámetros necesarios para x4
cfg_scl_output_dirname = group_config.get("scl_output_dir", "scl_output")
cfg_xref_output_dirname = group_config.get("xref_output_dir", "xref_output")
cfg_xref_source_subdir = group_config.get("xref_source_subdir", "source")
Debug Directory Fallback
Cuando los scripts se ejecutan directamente (no desde el frontend), utilizan un sistema de fallback para determinar el directorio de trabajo:
- Con Frontend: Los scripts utilizan el
working_directory
configurado dinámicamente a través deload_configuration()
- Ejecución Directa (Debug): Si no hay configuración válida, los scripts crean automáticamente un directorio
.debug
en la ubicación del script
Estructura del directorio de debug:
IO_adaptation/
├── .debug/ # ← Directorio creado automáticamente para debug
│ ├── *.aml # Archivos AML procesados
│ ├── *.hierarchical.json # Datos estructurados extraídos
│ ├── *_IO_Upward_Debug.md # Archivo de debug de conexiones IO
│ ├── Hardware.md # Tabla resumen de IO
│ └── <PLC_Name>/
│ └── Documentation/
│ └── *_Hardware_Tree.md # Árbol de hardware por PLC
├── x2_process_CAx.py # Script principal
└── example/ # Archivos de ejemplo
Ventajas del directorio .debug:
- ✅ Separación clara entre archivos de debug y archivos de producción
- ✅ Fácil limpieza (se puede eliminar todo el directorio
.debug
) - ✅ No interfiere con archivos del proyecto principal
- ✅ Creación automática sin configuración manual
Directory structure for Tia Portal scripts
<working_directory>/ ├── <Project_Name>_CAx_Export.aml ├── <PLC1_Name>/ │ ├── ProgramBlocks_XML/ │ │ └── ... (archivos XML de bloques) │ ├── ProgramBlocks_SCL/ │ │ └── ... (archivos SCL de bloques) │ ├── ProgramBlocks_CR/ │ │ └── ... (archivos XML de referencias cruzadas de bloques) │ ├── PlcTags/ │ │ └── ... (archivos XML de tablas de tags) │ ├── PlcTags_CR/ │ │ └── ... (archivos XML de referencias cruzadas de tablas de tags) │ ├── PlcDataTypes_CR/ │ │ └── ... (archivos XML de referencias cruzadas de UDTs) │ ├── SystemBlocks_CR/ │ │ └── ... │ └── SoftwareUnits_CR/ │ └── ... │ └── Documentation/ │ └── Source │ └── ... (archivos md de bloques de programa) │ └── JSON │ └── ... (archivos JSON temporales) │ └── xref_calls_tree.md │ └── xref_db_usage_summary.md │ └── xref_plc_tags_summary.md │ └── full_project_representation.md │ └── <Project_Name>_CAx_Export_Hardware_Tree.md
├── <PLC2_Name>/ │ ├── ProgramBlocks_XML/ │ │ └── ... │ └── ... └── ...