{
    "x1_export_CAx.py": {
        "display_name": "1: Exportar CAx desde TIA",
        "short_description": "Exporta datos CAx de un proyecto TIA Portal y genera un resumen en Markdown.",
        "long_description": "Este script utiliza TIA Portal Openness para exportar datos CAx de un proyecto de TIA Portal y generar un resumen en formato Markdown.\n***\n**Lógica Principal:**\n\n1. **Configuración:** Carga parámetros desde `ParamManagerScripts` (directorio de trabajo, versión de TIA Portal).\n2. **Selección de Proyecto:** Abre un cuadro de diálogo para seleccionar el archivo del proyecto de TIA Portal.\n3. **Conexión a TIA Portal:** Utiliza la API de TIA Openness para conectarse al portal y abrir el proyecto seleccionado.\n4. **Exportación CAx:** Exporta los datos CAx en formato AML y genera un archivo de resumen en Markdown con la jerarquía del proyecto y los dispositivos encontrados.\n5. **Cierre:** Cierra la conexión con TIA Portal al finalizar.",
        "hidden": false
    },
    "x2_process_CAx.py": {
        "display_name": "2: Procesar la exportación AML y generar documentación de IOs",
        "short_description": "Extrae IOs de un archivo AML exportado del TIA Portal y genera un archivo Markdown.",
        "long_description": "Este script procesa un archivo AML exportado desde TIA Portal para extraer información de los IOs y generar un archivo Markdown con un resumen detallado.\n***\n**Lógica Principal:**\n\n1. **Selección de Archivo AML:** Abre un cuadro de diálogo para seleccionar el archivo AML exportado desde TIA Portal.\n2. **Procesamiento de Datos:**\n    * Extrae información de dispositivos, redes y conexiones desde el archivo AML.\n    * Identifica PLCs, redes y módulos IO.\n    * Genera una estructura jerárquica de los dispositivos y sus conexiones.\n3. **Generación de Markdown:**\n    * Crea un archivo Markdown con un resumen jerárquico de hardware y conexiones IO.\n    * Incluye un árbol de conexiones IO hacia arriba para depuración.\n4. **Salida:** Guarda los resultados en archivos Markdown y JSON en el directorio configurado.",
        "hidden": false
    },
    "x3_excel_to_md.py": {
        "display_name": "3:Convertir Excel Tags a Markdown",
        "short_description": "This script converts Excel files containing tags into Markdown tables",
        "long_description": "",
        "hidden": false
    },
    "x4_prompt_generator.py": {
        "display_name": "4:Generar Prompt",
        "short_description": "Generador de prompt para adaptación de IO - Este script genera un prompt para ayudar con la",
        "long_description": "",
        "hidden": false
    },
    "x5_md_to_excel.py": {
        "display_name": "5:Convertir Markdown a Excel para TIA Portal",
        "short_description": "Convert Markdown tables from adapted I/O to Excel for import into TIA Portal.",
        "long_description": "# Script de Adaptación IO para PLCTags\n\n## Descripción\n\nEste script automatiza la adaptación de tags PLC entre hardware físico Siemens TIA Portal y software master, actualizando las direcciones lógicas según un archivo de mapeo en formato Markdown.\n\n## Funcionamiento\n\n### Entradas\n- **Archivo Excel**: Exportación de tags desde TIA Portal\n- **Archivo Markdown**: Tabla de adaptación IO con mapeo entre hardware y master tags\n\n### Proceso\n1. **Análisis inicial**:\n   - Lee la tabla Markdown de adaptación IO\n   - Identifica las columnas de IO y Master Tag\n   - Crea un diccionario de mapeo entre tags y direcciones IO\n\n2. **Procesamiento de tags**:\n   - Filtra tags en los paths \"Inputs\", \"Outputs\", \"IO Not in Hardware\\InputsMaster\" y \"IO Not in Hardware\\OutputsMaster\"\n   - Actualiza las direcciones lógicas de los tags encontrados en el mapeo\n   - Reasigna paths según el tipo de señal (%E -> \"Inputs\", %A -> \"Outputs\")\n\n3. **Gestión de tags sin hardware**:\n   - Asigna direcciones de memoria (%Mxxxx.x) para tags sin correspondencia\n   - Tags de entrada: Asignados a \"IO Not in Hardware\\InputsMaster\" desde %M3600.0\n   - Tags de salida: Asignados a \"IO Not in Hardware\\OutputsMaster\" desde %M3800.0\n\n4. **Manejo de direcciones**:\n   - Convierte formatos (I0.0 → %E0.0, PEW100 → %EW100, etc.)\n   - Gestiona bits incrementalmente (0.0, 0.1, ..., 0.7, luego 1.0)\n   - Alinea words cada 2 bytes (%MW3600, %MW3602, etc.)\n\n### Salidas\n- **Archivo Excel actualizado**: Con las nuevas direcciones lógicas y paths\n- **Archivo de log**: Registro detallado del proceso con estadísticas\n\n## Uso\n1. Ejecute el script\n2. Seleccione el archivo Excel exportado de TIA Portal\n3. Seleccione el archivo Markdown con la tabla de adaptación\n4. El script generará automáticamente el archivo Excel actualizado\n\n## Detección de tipos\n- **Entradas**: Identificadas por prefijos (DI_, P_AI_, etc.)\n- **Salidas**: Identificadas por prefijos (DO_, P_AO_, etc.)\n- **Bits vs Words**: Determinados por el tipo de dato (Bool vs Word/Int)",
        "hidden": false
    },
    "x7_update_CAx.py": {
        "display_name": "7: Actualizar AML desde Excel modificado",
        "short_description": "Actualiza un archivo AML original basándose en las modificaciones hechas en el archivo Excel de IOs.",
        "long_description": "Este script permite hacer un 'round trip' de datos: extrae información del AML al Excel, permite ediciones manuales en el Excel, y luego aplica esos cambios de vuelta al AML original.\n***\n**Pipeline:**\n\n1. **Entrada:** Solicita el archivo AML original y el archivo Excel modificado (generado por x2_process_CAx.py)\n2. **Validación:** Genera un Excel de referencia desde el AML y compara con el Excel modificado para validar que la estructura base sea la misma (mismos nodos y nombres)\n3. **Detección de cambios:** Identifica modificaciones en:\n   - Direcciones IP/nodos\n   - Direcciones IO (inputs/outputs)\n   - Tipos de dispositivos\n   - Números de orden\n   - Versiones de firmware\n4. **Aplicación:** Localiza los elementos correspondientes en el XML del AML y aplica los cambios detectados\n5. **Salida:** Genera un nuevo archivo AML con sufijo '_updated' que contiene todas las modificaciones\n\n**ID único:** Utiliza PLC+Device Name como identificador único para mapear cambios entre Excel y AML.\n\n**Restricciones:** Solo procede si el Excel modificado mantiene la misma cantidad de nodos y nombres que el Excel original.",
        "hidden": false
    },
    "x0_documentation.py": {
        "display_name": "0:Documentación",
        "short_description": "Descripción del flujo de trabajo",
        "long_description": "### Flujo de trabajo:\n***\n1. Se usa [x1] para exportar los datos de configuración desde el proyecto de Tia Portal, incluidos los IO configurados en el hardware. Esto genera un archivo AML.\n2. Con [x2] se procesa el archivo AML y se convierte en markdown. Si hay un solo PLC se genera el archivo [Hardware.md]. **Además genera un archivo Excel con los IOs por nodos del PLC.**\n3. Se deben procesar los IO **desde el esquema eléctrico y agregarlos** a [Hardware.md]\n4. Se debe exportar todos los tags como un archivo excel desde el Tia Portal.\n5. Con [x3] se convierte y se filtran los tags según los path definidos en [io_paths_config] y se genera un archivo Master IO Tags.md\n6. [x4] Genera el prompt a usar con Claude usando MCP para que pueda acceder a los archivos originales y evitar tener que hacer uploads.\n7. Una vez que se genera el archivo procesado por el LLM se puede usar [x5] que convierte las adaptaciones a un archivo que luego se puede importar en Tia Portal\n8. Importar en Tia Portal el archivo [PLCTags_Updated.xlsx]\n\n**Nuevo flujo alternativo con Excel:**\nDesp¹és del paso 2, se puede usar [x7] para:\n- Modificar manualmente el archivo Excel de IOs generado\n- Aplicar los cambios de vuelta al archivo AML original\n- Generar un AML actualizado con las modificaciones",
        "hidden": false
    },
    "analyze_u32810_specific.py": {
        "display_name": "analyze_u32810_specific",
        "short_description": "Sin descripción corta.",
        "long_description": "",
        "hidden": false
    },
    "compare_u32810_telegrams.py": {
        "display_name": "compare_u32810_telegrams",
        "short_description": "Sin descripción corta.",
        "long_description": "",
        "hidden": false
    },
    "comprehensive_address_search.py": {
        "display_name": "comprehensive_address_search",
        "short_description": "Sin descripción corta.",
        "long_description": "",
        "hidden": false
    },
    "find_address_differences.py": {
        "display_name": "find_address_differences",
        "short_description": "Sin descripción corta.",
        "long_description": "",
        "hidden": false
    },
    "find_u32810_addresses.py": {
        "display_name": "find_u32810_addresses",
        "short_description": "Sin descripción corta.",
        "long_description": "",
        "hidden": false
    },
    "debug_hierarchy.py": {
        "display_name": "debug_hierarchy",
        "short_description": "Sin descripción corta.",
        "long_description": "",
        "hidden": false
    },
    "debug_io_processing.py": {
        "display_name": "debug_io_processing",
        "short_description": "Sin descripción corta.",
        "long_description": "",
        "hidden": false
    },
    "debug_table_generation.py": {
        "display_name": "debug_table_generation",
        "short_description": "Sin descripción corta.",
        "long_description": "",
        "hidden": false
    }
}