- Python 100%
| ui | ||
| .gitignore | ||
| AYRE.ico | ||
| Comb_acciones.py | ||
| combinations.py | ||
| extraer_comb.py | ||
| geometry.py | ||
| informe_h1.py | ||
| load_assignment.py | ||
| project_data.py | ||
| README.md | ||
| requirements.txt | ||
| sap_connection.py | ||
Comb acciones
Aplicación de escritorio (Tkinter) que automatiza, dentro de SAP2000, el modelado 2D de cajones hincados (box culverts) ferroviarios multi-celda y la generación de las combinaciones de acciones según la norma IAPF (Instrucción sobre las Acciones a considerar en el Proyecto de Puentes de Ferrocarril).
La aplicación no dibuja nada por sí sola en pantalla: pilota SAP2000 a través de su API COM (comtypes), por lo que SAP2000 tiene que estar ya abierto con un modelo (aunque sea vacío) antes de lanzar la aplicación.
Requisitos
- SAP2000 instalado y abierto antes de ejecutar la aplicación (la aplicación se conecta a la instancia ya abierta; no lo abre por ti).
- Python 3.x.
- Dependencias de
requirements.txt(comtypes,pandas,numpy,openpyxl).tkinteres de la librería estándar y no hace falta instalarlo aparte.
Instalación de dependencias:
pip install -r requirements.txt
Nota sobre comtypes.gen.SAP2000v1: no es un paquete de PyPI, es el
"binding" que comtypes genera automáticamente la primera vez que se
conecta a la type library de SAP2000 instalada localmente en la máquina.
Por eso hace falta tener SAP2000 instalado (no basta con pip install comtypes).
Cómo ejecutar
Con SAP2000 ya abierto:
python "Comb_acciones.py"
Si no se encuentra ninguna instancia de SAP2000 abierta, la aplicación muestra un aviso y termina; ábrela primero y vuelve a lanzar el script.
Flujo de trabajo recomendado
Desde la ventana principal, en este orden:
- Datos del Proyecto — luces horizontales (celdas), altura (LV), espesores, huecos, retranqueos, vigas auxiliares, etc. Las celdas (lista "LH") no tienen límite de cantidad: la primera siempre está presente, y se añaden/quitan por el final con "+ Añadir celda" / "Quitar última celda" (se muestran en una lista vertical compacta). Los muros interiores (lista "M") tampoco tienen límite: se reconstruyen automáticamente para que siempre haya exactamente nº de celdas - 1 (la misma regla que usa la geometría real). Las vigas auxiliares (VA1-3) no dependen de nada: se añaden o quitan a mano con los botones "+ Añadir viga auxiliar" / "Quitar viga", hasta un máximo de 3.
- Materiales y Secciones — crea el hormigón y la(s) sección(es) rectangular(es) armadas que se usarán en la geometría.
- Definición de Geometría — genera en SAP2000 las barras (losa inferior LI, losa superior LS, hastiales HI/HD y los muros interiores M1, M2... que correspondan, sin límite de cantidad) a partir del layout multi-celda calculado con los Datos del Proyecto.
- Definición de Cargas — define los casos de carga (H1, H2, H3...) que se usarán en las combinaciones.
- Asignación de Cargas a la Geometría — calcula el valor de cada carga y la asigna a las barras seleccionadas del modelo.
- Matriz de Incompatibilidades — marca qué pares de casos de carga no pueden coexistir en una misma combinación.
- Configuración de Combinaciones — crea las combinaciones según la norma IAPF, lanza el cálculo ("Calcular") y extrae los resultados (combinaciones, flechas, esfuerzos) a Excel.
Limitaciones conocidas
- La norma IAP (instrucción para puentes de carretera, distinta de la
IAPF de ferrocarril) no está implementada: solo está disponible IAPF
en el selector de norma. El código de
combinations.pyconserva la rama"IAP"intacta como referencia para un futuro mapeo, pero de momento no genera combinaciones. - Los huecos, retranqueos y vigas auxiliares (VA1, VA2, VA3) definidos en "Datos del Proyecto" se guardan como datos pero todavía no se modelan geométricamente: la geometría generada es la caja continua (sin huecos ni retranqueos).
- Las cargas H5.1-H5.4 (reparto de cargas UIC en hastiales) y H6.1-H6.2
(arranque/frenado) no tienen fórmula normativa automática todavía: en
"Asignación de Cargas" hay que introducir el valor ya calculado a mano
(kN/m, kN/m² o kN según la distribución elegida). La fórmula específica se
añadirá más adelante en
load_assignment.calcular_valor_carga(ver elTODOen ese archivo).