ParamManagerScripts/backend/script_groups/IO_adaptation/readme.md

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:

  1. Con Frontend: Los scripts utilizan el working_directory configurado dinámicamente a través de load_configuration()
  2. 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/ │ │ └── ... │ └── ... └── ...