{
  "version": "1.0",
  "script_metadata": {
    "1_class_base.py": {
      "display_name": "class_base",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:05:38.936641Z"
    },
    "1_main_calc_app.py": {
      "display_name": "main_calc_app",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:05:44.903834Z"
    },
    "1_main_evaluation.py": {
      "display_name": "main_evaluation",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:05:48.128168Z"
    },
    "1_sympy_Base.py": {
      "display_name": "sympy_Base",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:05:50.813678Z"
    },
    "1_sympy_helper.py": {
      "display_name": "sympy_helper",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:05:54.733029Z"
    },
    "1_test_final.py": {
      "display_name": "test_final",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:05:57.444919Z"
    },
    "1_test_symbolic.py": {
      "display_name": "test_symbolic",
      "description": "",
      "long_description": "",
      "hidden": false,
      "updated_date": "2025-06-03T13:44:26.045048Z"
    },
    "1_tl_bracket_parser.py": {
      "display_name": "tl_bracket_parser",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:06:02.740339Z"
    },
    "1_tl_popup.py": {
      "display_name": "tl_popup",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:06:06.272072Z"
    },
    "1_type_registry.py": {
      "display_name": "type_registry",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:06:09.263117Z"
    },
    "1_calc.py": {
      "display_name": "Calc MAV v2",
      "description": "Calculadora Algebraica MAV",
      "long_description": "## Descripción\n\nSistema de Álgebra Computacional (CAS) que combina SymPy con clases especializadas para networking, programación y análisis numérico. Incluye sistema de tipos dinámico con auto-descubrimiento.\n\n## Características Principales\n\n- **Motor SymPy completo**: Cálculo simbólico y numérico integrado\n- **Sistema de tipos dinámico**: Auto-descubrimiento desde `custom_types/`\n- **Sintaxis simplificada**: `Tipo[args]` en lugar de `Tipo(\"args\")`\n- **Detección automática de ecuaciones**: Sin sintaxis especial\n- **Contexto limpio por evaluación**: Cada modificación evalúa todo desde cero, garantizando comportamiento predecible\n- **Resultados interactivos**: Elementos clickeables para plots, matrices y listas\n- **Autocompletado inteligente**: Basado en tipos registrados dinámicamente",
      "hidden": false,
      "updated_date": "2025-06-03T12:07:20.450126Z"
    },
    "2_main.py": {
      "display_name": "Simulador ADAM",
      "description": "Simulador - Gateway - Sniffer",
      "long_description": "",
      "hidden": false,
      "updated_date": "2025-06-03T12:34:27.531689Z"
    },
    "2_config_manager.py": {
      "display_name": "config_manager",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:34:33.310121Z"
    },
    "2_connection_manager.py": {
      "display_name": "connection_manager",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:34:36.597956Z"
    },
    "2_maselli_app.py": {
      "display_name": "maselli_app",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:34:39.560628Z"
    },
    "2_protocol_handler.py": {
      "display_name": "protocol_handler",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:34:42.028505Z"
    },
    "2_utils.py": {
      "display_name": "utils",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:34:44.270726Z"
    },
    "3_google_api_key.py": {
      "display_name": "google_api_key",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:35:47.564659Z"
    },
    "3_openai_api_key.py": {
      "display_name": "openai_api_key",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:35:55.946088Z"
    },
    "3_test.py": {
      "display_name": "test",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:36:06.694912Z"
    },
    "3_translation_config.py": {
      "display_name": "translation_config",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:36:02.818575Z"
    },
    "3_x1_importar_to_master.py": {
      "display_name": "x1_importar_to_master",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:36:11.404143Z"
    },
    "3_x2_master_export2translate.py": {
      "display_name": "x2_master_export2translate",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:36:13.715080Z"
    },
    "3_x3_llm_auto_translate.py": {
      "display_name": "x3_llm_auto_translate",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:36:17.369339Z"
    },
    "3_x4B_integrate_manual_translates_to_master.py": {
      "display_name": "x4B_integrate_manual_translates_to_master",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:36:19.661939Z"
    },
    "3_x4_integrate_translates_to_master.py": {
      "display_name": "x4_integrate_translates_to_master",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:36:21.890504Z"
    },
    "3_x5_complete_empty_cells_master.py": {
      "display_name": "x5_complete_empty_cells_master",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:36:24.140382Z"
    },
    "3_x6_update_from_master.py": {
      "display_name": "x6_update_from_master",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-03T12:36:30.996433Z"
    },
    "3_menu_pasos_traduccion.py": {
      "display_name": "Menu para Traducir x1-x6",
      "description": "Menu para Traducir Textos de Siemens o Allenbradley",
      "long_description": "",
      "hidden": false,
      "updated_date": "2025-06-03T12:37:14.675034Z"
    },
    "4_x1_debug.py": {
      "display_name": "x1_debug",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-06-11T22:56:20.446834Z"
    },
    "4_x1.py": {
      "display_name": "Duplicar DBs",
      "description": "En base a un archivo Excel Exporta una DB e duplica la DB segun lo indicado en el achivo Excel",
      "long_description": "# Duplicador de Bloques de TIA Portal\n\nScript en Python con interfaz gráfica (PySide6) para duplicar Data Blocks (DBs) en proyectos de TIA Portal basándose en configuración de archivo Excel.\n\n## Características\n\n- **Interfaz gráfica moderna** con PySide6\n- **Duplicación masiva de Bloques DB,FC, FB** desde archivo Excel\n- **Detección automática** de versión TIA Portal\n- **Progreso en tiempo real** con log de actividades\n- **Manejo robusto de errores** y validaciones\n- **🆕 Versión de debug interactiva** para explorar API de TIA Portal\n\n## Requisitos\n\n### Software necesario\n- **Windows 10/11**\n- **Python 3.7+** (recomendado 3.12)\n- **TIA Portal V15.1+** con Openness habilitado\n- **Permisos de administrador** para configuración inicial\n\n### Configuración TIA Portal\n1. Instalar **TIA Portal Professional** (versión 15.1 o superior)\n2. Agregar usuario al grupo de Windows **\"Siemens TIA Openness\"**\n3. Reiniciar el sistema después del cambio de grupo\n4. Configurar variable de entorno `TIA_SCRIPTING` (opcional)\n\n## Instalación\n\n1. **Clonar o descargar** el proyecto\n2. **Instalar dependencias**:\n   ```bash\n   pip install -r requirements.txt\n   ```\n\n## 🔧 Versión de Debug (RECOMENDADA PRIMERO)\n\nSi experimentas problemas con la API de TIA Portal, usa primero la versión de debug:\n\n### **Ejecutar debug explorer:**\n```bash\npython x1_debug.py\n```\n\n### **Funcionalidades del debug:**\n- **Exploración completa** de la estructura del proyecto TIA Portal\n- **Identificación automática** de atributos y métodos disponibles\n- **Búsqueda inteligente** de software PLC en diferentes rutas\n- **Log detallado** de toda la estructura de objetos\n- **Vista de árbol** con todos los atributos encontrados\n\n### **Uso del debug:**\n1. Ejecutar `python x1_debug.py`\n2. Seleccionar proyecto TIA Portal\n3. Hacer clic en \"Iniciar Exploración Debug\"\n4. Revisar el log para encontrar la ruta correcta a los blocks\n5. Usar la información para corregir el script principal\n\n## Formato del archivo Excel\n\nEl archivo Excel debe seguir esta estructura exacta:\n\n| **Columna A** | **Columna B** |\n|---------------|---------------|\n| `100` | `DB_Motor_Base` |\n| `101` | `DB_Motor_01` |\n| `102` | `DB_Motor_02` |\n| `103` | `DB_Motor_03` |\n| `...` | `...` |\n\n### Explicación:\n- **Fila 1, Columna A**: Número de la DB fuente a duplicar\n- **Fila 1, Columna B**: Nombre de la DB fuente a duplicar\n- **Fila 2 en adelante, Columna A**: Números para las nuevas DBs\n- **Fila 2 en adelante, Columna B**: Nombres para las nuevas DBs\n\n### Ejemplo práctico:\nSi tienes una DB llamada `DB_Motor_Base` con número `100` que quieres duplicar para crear 3 motores adicionales, tu Excel se vería así:\n\n```\nA     | B\n------|----------------\n100   | DB_Motor_Base\n101   | DB_Motor_01\n102   | DB_Motor_02  \n103   | DB_Motor_03\n```\n\n## Uso\n\n### Script principal (después del debug):\n1. **Ejecutar el script**:\n   ```bash\n   python x1.py\n   ```\n\n2. **Seleccionar proyecto TIA Portal**:\n   - Hacer clic en \"Seleccionar Proyecto\"\n   - Navegar al archivo `.ap18`, `.ap19` o `.ap20`\n\n3. **Seleccionar archivo Excel**:\n   - Hacer clic en \"Seleccionar Excel\"\n   - Navegar al archivo `.xlsx` o `.xls`\n\n4. **Iniciar duplicación**:\n   - Hacer clic en \"Iniciar Duplicación\"\n   - Esperar a que el proceso se complete\n\n## Funcionalidades\n\n### Interfaz gráfica\n- **Selección de archivos** con diálogos nativos\n- **Barra de progreso** en tiempo real\n- **Log de actividades** detallado\n- **Validaciones automáticas** de archivos\n\n### Proceso de duplicación\n1. **Lectura y validación** del archivo Excel\n2. **Detección automática** de versión TIA Portal\n3. **Conexión** a TIA Portal Openness\n4. **Búsqueda** de la DB fuente\n5. **Duplicación masiva** mediante exportación/importación XML\n6. **Limpieza automática** de archivos temporales\n\n### Manejo de errores\n- **Validación de formato** Excel\n- **Verificación de permisos** TIA Portal\n- **Control de duplicados** existentes\n- **Recuperación automática** de errores menores\n\n## Solución de problemas\n\n### Error: \"Failed to import 'siemens_tia_scripting'\"\n**Causa**: TIA Portal Openness no configurado correctamente\n**Solución**:\n1. Verificar instalación de TIA Portal Professional\n2. Comprobar grupo \"Siemens TIA Openness\"\n3. Reiniciar sistema\n4. Verificar Python 3.12.X\n\n### Error: \"No se pudo conectar a TIA Portal\"\n**Causa**: TIA Portal no está ejecutándose o permisos insuficientes\n**Solución**:\n1. Abrir TIA Portal manualmente\n2. Verificar que el proyecto no esté bloqueado\n3. Ejecutar Python como administrador\n\n### Error: \"'Project' object has no attribute 'devices'\"\n**Causa**: API de TIA Portal diferente a la esperada\n**Solución**:\n1. **Ejecutar primero `x1_debug.py`** para explorar la estructura real\n2. Revisar el log de debug para encontrar la ruta correcta\n3. Identificar el atributo correcto que contiene los dispositivos/software\n4. Reportar los hallazgos para actualizar el script principal\n\n### Error: \"No se encontró la DB fuente\"\n**Causa**: Nombre o número de DB incorrecto en Excel\n**Solución**:\n1. Verificar que la DB existe en el proyecto\n2. Comprobar nombre exacto (sensible a mayúsculas)\n3. Verificar número de DB en Excel\n\n### Error al leer Excel\n**Causa**: Formato incorrecto del archivo Excel\n**Solución**:\n1. Verificar que tiene al menos 2 filas y 2 columnas\n2. Comprobar que los números de DB son enteros\n3. Verificar que los nombres no están vacíos\n\n## Archivos del proyecto\n\n- **`x1.py`**: Script principal de duplicación\n- **`x1_debug.py`**: 🔧 Script de debug para explorar API de TIA Portal\n- **`requirements.txt`**: Dependencias del proyecto\n- **`README_x1.md`**: Este archivo de documentación\n\n## Limitaciones\n\n- **Solo Windows**: Requiere sistema operativo Windows\n- **TIA Portal Professional**: No funciona con versiones básicas\n- **Un proyecto a la vez**: No soporta múltiples proyectos simultáneos\n- **DB Global únicamente**: No duplica DBs de instancia\n\n## Dependencias\n\n- `PySide6`: Interfaz gráfica moderna\n- `pandas`: Procesamiento de archivos Excel\n- `openpyxl`: Lectura de archivos .xlsx\n- `pythonnet`: Interfaz con bibliotecas .NET de TIA Portal\n\n## Licencia\n\nEste script es para uso educativo y de automatización personal. Respetar las licencias de TIA Portal y herramientas utilizadas.\n\n## Soporte\n\nPara problemas específicos:\n1. **Ejecutar primero `x1_debug.py`** para identificar la estructura real de la API\n2. Verificar que el archivo Excel sigue el formato exacto\n3. Comprobar permisos y configuración de TIA Portal\n4. Revisar el log de actividades en la interfaz gráfica\n5. Ejecutar con privilegios de administrador si es necesario\n\n## 🆕 Contribuciones y mejoras\n\nSi el debug revela una estructura de API diferente, por favor:\n1. Compartir el log de debug\n2. Indicar la versión de TIA Portal utilizada\n3. Reportar los atributos correctos encontrados\n\nEsto ayudará a mejorar el script principal para diferentes versiones de TIA Portal. ",
      "hidden": false,
      "updated_date": "2025-06-12T00:27:14.454932Z"
    },
    "f48628b2_ip-changer-admin.py": {
      "display_name": "ip-changer-admin",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-08-03T10:32:07.545547Z"
    },
    "f48628b2_translator.py": {
      "display_name": "translator",
      "description": "",
      "long_description": "",
      "hidden": true,
      "updated_date": "2025-08-03T10:32:10.304091Z"
    },
    "f48628b2_menu-ip-change.py": {
      "display_name": "IPChangeNG",
      "description": "",
      "long_description": "",
      "hidden": false,
      "updated_date": "2025-08-03T10:32:27.726423Z"
    }
  },
  "updated_date": "2025-08-03T10:32:27.726423Z"
}