Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ingeniería Aeronáutica
Autor:
Antonio Segura Valverde
Tutor:
Domingo Morales Palma
Profesor Contratado Doctor
iii
Proyecto Fin de Carrera: Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de
chapa
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Sevilla, 2017
v
A mi familia
A mis profesores y amigos
vii
Agradecimientos
Me gustaría agradecer en primer lugar a mi tutor del proyecto, Domingo Morales Palma, por
darme la oportunidad de poder realizar este trabajo con él y por ayudarme durante todo el transcurso del
mismo. A mi familia y seres queridos, que siempre han estado apoyándome durante todo el transcurso de
mi carrera académica, que no ha sido corta, y facilitándome llegar al final de la misma.
Antonio Segura Valverde
Sevilla, 2017
ix
Resumen
En este proyecto se estudian las posibilidades de la automatización de tareas en dos de los sistemas
CAD/CAM/CAE más utilizados para el diseño, análisis y fabricación de productos de chapa metálica: CATIA
y Abaqus.
El trabajo incluye una introducción a CATIA V5 y a Abaqus, con especial énfasis en las herramientas de
ambos programas que pueden automatizarse y que resultan útiles para el estudio de procesos de conformado
de chapa. Se presentan diversas metodologías de trabajo así como la estructura de programación orientada a
objetos en los lenguajes de programación propios de cada sistema: VBA para los módulos Part Design y
Prismatic Machining de CATIA V5, y Python para Abaqus.
En el trabajo se desarrollan dos aplicaciones prácticas sobre procesos de rebordeado de agujero. La primera
consiste en un conformado incremental en dos etapas en el que se pretende homogeneizar el espesor de la
chapa a través de una optimización de la trayectoria de la herramienta conformadora. La segunda aplicación
tiene como objetivo analizar el efecto del radio del punzón en un proceso de embutición, automatizando el
cálculo del espesor de la chapa.
Abstract
This project examines the automation tasks in two most commonly used CAD / CAM / CAE systems, for the
design, analysis and manufacture of sheet metal products: CATIA and Abaqus.
The work includes an introduction to CATIA V5 and Abaqus, with special emphasis on the tools of both
programs, that can be automated and are useful for the study of sheet forming processes.Several working
methodologies are presented, and the object-oriented programming structure in the programming languages of
each system: VBA for the Part Design module and Prismatic Machining modules of CATIA V5 and Python
for Abaqus.
The project also includes of two practical applications of hole flanging processes. The first one consists of a
single point incremental forming (SPIF) in two phases, in which the thickness of the sheet is homogenized
through an optimization of the forming tool. The second application aims to analyze the effect of the radius of
the punch in a process of forming, automating the calculation of the thickness of the sheet.
xi
Índice
Agradecimientos viii
Resumen x
Abstract xi
Índice xii
Índice de Tablas xiv
Índice de Códigos xiv
Índice de Figuras xv
1 Introducción 1
1.1 Contexto del proyecto 1
1.2 Objetivos 1
1.3 Estructura de la memoria 2
2 Automatización con CATIA V5 3
2.1 Introducción a CATIA V5 3
2.2 Modelado de piezas (Part Design) 5
2.3 Simulación de mecanizado de piezas (Prismatic Machining) 8
2.4 Visual Basic for Application 16
2.4.1 Entorno 16
2.4.2 Librerías de las macros 17
2.4.3 Macro Recording 17
2.5 Visual Basic Editor 19
2.6 Programación con Part Design Module 20
2.6.1 PartDocument 20
2.6.2 Sketcher 22
2.6.3 CATPART(PartDesign) 24
2.7 Programación con Prismatic Machining 29
3 Automatización con Abaqus 33
3.1 Introducción a Abaqus CAE 33
3.1.1 Part 35
3.1.2 Material 35
3.1.3 Section 36
3.1.4 Assembly 36
3.1.5 Steps 37
3.1.6 Interactions 38
3.1.7 Load 38
3.1.8 Mesh 39
3.1.9 Job 40
3.1.10 Visualization 40
3.2 Modelado del conformado de chapa 41
3.2.1 Definición geométrica del modelo 41
3.2.2 Definición del material 42
3.2.3 Definición de las propiedades de la chapa 42
3.2.4 Mallado del modelo 43
3.2.5 Ensamblaje de parts 44
3.2.6 Configuración de Steps 45
3.2.7 Definción de las interacciones entre parts en el modelo 45
3.2.8 Definición de condiciones de contorno del problema 47
3.2.9 ConFiguración Módulo Job 47
3.2.10 Visualización de resultados 48
3.3 Abaqus Scripting 49
3.3.1 Programación orientada a objetos en Abaqus (Abaqus Object Model) 50
3.4 Programación de un proceso de conformado de chapa 54
3.4.1 Modelado del ensayo 54
3.4.2 Interpretación de resultados (Módulo resultados Abaqus) 61
4 Aplicación CAD/CAM a un proceso de conformado incremental en 2 etapas 63
4.1 Descripción del problema 63
4.2 Metodología 64
4.2.1 Dibujar sketch parametrizado 65
4.2.2 Generar resto de modelo CAD/CAM 66
4.2.3 Scripts 68
4.3 Soluciones propuestas 68
4.3.1 Macros en Part Design 68
4.3.2 Macro en Prismatic Machining 69
4.4 Análisis y dicusión 70
5 Aplicación CAE a un proceso de rebordeado de agujero 72
5.1 Descripción del problema 72
5.2 Metodología 73
5.3 Modelo propuesto 74
5.4 Análisis de resultados 79
6 Conclusiones y trabajos futuros 81
6.1 Conclusiones 81
6.2 Trabajos futuros 81
Referencias 83
Glosario 84
ANEXO A 84
a.Recomendaciones generales de modelado 3D en programas de diseño industrial 84
ANEXO B 85
a. Macros módulo Part Design aplicación CAD/CAM a un proceso de conformado incremental en dos
etapas 85
b. Macros módulo Machining aplicación CAD/CAM a un proceso de conformado incremental en dos etapas
90
ANEXO C 91
a. Macros auxiliares modelado en python aplicación CAD/CAM a un proceso de rebordeado de agujero 92
b. Macro pre4-fea-hole definition.py 100
c. Macro pre5-fea-hole definition.py 102
d. Macro scr7-calculate-sheet-thickness.py 104
e. Macro scr8-draw-graph.py 108
xiii
ÍNDICE DE TABLAS
Tabla 2.1. Operaciones básicas en Part Design 6
ÍNDICE DE CÓDIGOS
Código 1.Definición del objeto shapefactory 25
Código 5.Pocket 26
Código 7.Hole 27
Código 8. Slot 27
Código 9.Shaft 28
Código 10.Rib 29
Figura 2.7 Ventana de diálogo para definir una operación del Part Operation 11
xv
Figura 3.3 Cuadro de edición de un material 35
Figura 3.14 Part chapa (izquierda), Part punzón (centro) y Part Blankholder (derecha) 42
Figura. 3.37 Extracto de código para le generación de los parts del modelo 56
Figura. 3.49 Extracto de código para crear una ventana de visualización y mostrar 62
resultados del análisis
xvii
Figura 4.5 Part generado Hole Flanging 2 pasadas (A=30mm,W=5mm y H=7mm) 66
Figura 4.13 Visualización de las ventanas emergentes que aparecen al ejecutar la macro 70
Macro 01-update-geometry
Figura 5.5 Esquemas del proceso de Hole Flanging en una sola etapa 73
Figura 5.15 Visualización del análisis para herramienta de radio de curvatura 10mm 79
1.2 Objetivos
Éste proyecto tiene como objetivo general, la introducción a la automatización de tareas en CATIA
V5 y Abaqus y su posible aplicación en el análisis del conformado de una chapa.
El objetivo del proyecto es la interacción y manejo del lenguaje de programación de macros VBA, con la que
poder obtener en CATIA V5 diferentes aplicaciones que permitan la optimización del tiempo a la hora de
realizar modificaciones geométricas en una pieza sólida que será sometida a distintos test en el laboratorio de
Fabricación. En una segunda parte del trabajo se utilizará otro conocido leguaje de programación, Python, para
poder automatizar el calculo mediante Abaqus, programa de MEF, de las deformaciones en la pieza y devolver
una serie de archivos que nos muestren la variación de espesor de la chapa en un proceso de conformado
dependiendo del radio de curvatura de la herramienta.
Con el fin de lograr éste objetivo se ha establecido una lista de tareas u objetivos concretos a realizar:
Estudio introductorio al modelo de programación orientada a objetos de CATIA V5.
Estudio introductorio al modelo de programación orientada a objetos de Abaqus.
Generación de macros en CATIA V5 para generar trayectorias para un proceso de
deformado incremental en chapa.
Generación de un modelo en Abaqus mediante macros, para el análisis de un proceso de
rebordeado de agujero y la relación del espesor en la chapa con el radio de curvatura de la
herramienta
1
2 Introducción
E
n este capítulo se va a presentar el programa CATIA V5 y se va a explicar a grandes rasgos, el
lenguaje de programación “Visual Basic for applications” (VBA). Una vez introducido el entorno
en el que se va a trabajar, se procederá a explicar el entorno general de trabajo de VB6, así como
nociones generales de programación de dicho lenguaje.
Provee una arquitectura abierta para el desarrollo de aplicaciones o para personalizar el programa. Las
interfaces de programación de aplicaciones, CAA2 (o CAAV5), se pueden programar en Visual Basic y
C++.
Fue inicialmente desarrollado para servir en la industria aeronáutica. Se ha hecho un gran hincapié en el
manejo de superficies complejas, CATIA también es ampliamente usado en la industria del automóvil
para el diseño y desarrollo de componentes de carrocería. Concretamente empresas como el Grupo VW
(Volkswagen, Audi, SEAT y Škoda), BMW, Renault, Peugeot, Daimler AG, Chrysler, Smart y Porsche
hacen un amplio uso del programa. La industria de la construcción también ha incorporado el uso del
software para desarrollar edificios de gran complejidad formal; el Museo Guggenheim Bilbao, en España,
es un hito arquitectónico que ejemplifica el uso de esta tecnología. Referencia [2].
Esto permite que varias disciplinas aprovechen las aplicaciones especializadas de CATIA V5 y lo utilicen
en todas las fases del proceso de desarrollo de sus productos.
Hay distintos módulos de trabajo dentro de CATIA V5, que a su vez tienen distintos submódulos. En éste
proyecto nos centraremos en los módulos:
-Mechanical Design, en concreto en el submódulo Part Design y Assembly
-Machining, en concreto en el submódulo Prismatic Machining
Referencia [1]
3
4 Automatización con CATIA V5
En CATIA existen diferentes tipos de ficheros; los mas importantes, o al menos los que vamos a tratar en
éste proyecto, son: Ficheros CATPart, CATProduct, y CATProcess.Los ficheros CATPart albergan toda
la geometría necesaria para realizar un Diseño de Partes. Su estructura está compuesta básicamente por un
Sistema de Referencia con los tres Planos Normales, uno o varios Part Body y uno o varios Geometrical
Set.
En el Part Body se almacenan los elementos de Volúmenes y Sólidos, y en los Geometrical Set, la
Geometría Alámbrica y las Superficies. El número y nombre de los Part Body y Geometrical Set a
definir, serán a criterio del usuario siempre que no existan normas de procedimientos a seguir para la
definición de estos componentes.
En los ficheros CATProduct, se incluyen uno o varios ficheros CATPart y sus condiciones o relaciones de
posición entre ellos. Estas Condiciones son las Constraints y son las restricciones de libertad de
movimientos que tienen unos elementos respecto a otros. Por ejemplo, la rueda de un coche tiene la
restricción de estar “siempre” en contacto con el suelo, sin embargo, tiene la libertad de movimiento de
girar sobre su eje; la primera sería una Constraint y la segunda, un grado de libertad. Los Ficheros
CATProcess son los que contienen las Partes y Operaciones necesarias para la creación del Programa de
Control Numérico. Referencia [4]
Como se ha mencionado anteriormente, CATIA es un software de diseño CAD/CAE muy potente que,
además de poner a nuestra disposición una gran cantidad de herramientas de trabajo para el modelado de
sólidos, contiene herramientas para implementar los conceptos de KBE (Knowledge-based Engineering).
Una de las herramientas es la programación en VBA y al plantearnos el desarrollo y uso de esta opción,
estamos persiguiendo dos objetivos principales:
1. Conseguir que los procesos se realicen más rápido (al ser trabajados por lotes).
2. Disminuir la probabilidad de error humano (al realizar procesos repetitivos que pueden conllevar falta
de atención).
Más adelante se van a exponer algunos de los conceptos y principios que integran la programación en
VBA para Catia.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
5
En la figura 2.2 observamos el área de trabajo del Part Design. A la izquierda en el margen superior,
el árbol de diseño. En ésta parte colgará todas las operaciones que se hagan sobre la pieza. Se compone por el
nombre de la pieza. por un Geometrical Set, en el que se puede hacer lineas, planos y sketchs de apoyo para la
realización de la pieza, y el PartBody donde colgarán las operaciones, que como resultado, generarán el diseño
3D deseado.
En la parte derecha se encuentran las distintas operaciones para modelar una pieza. En la tabla 2.1 se describen
dichas operaciones básicas.
6 Automatización con CATIA V5
Pad. - Herramienta utilizado para la creación de un sólido a partir de un perfil (profile, obtenido
con el Sketcher) plano que se “estira” a lo largo de un eje perpendicular.
Shaft. – Herramienta para crear un sólido a partir de la revolución de un perfil sobre un eje.
A la izquierda de la figura 2.5, marcado en verde tenemos el Process List. Esta es la rama de mayor incidencia
en un CATProcess, ya que en ella debemos definir todos y cada uno de los Procesos de Mecanizado, en
adelante, “Part Operations”.
La fabricación de una Pieza (Part), necesitará una o varias “Part Operations”, según la complejidad de la Parte
a mecanizar y los criterios aplicados por el Programador.
De forma general, podemos decir que una pieza (Part), necesitará tantas “Part Operations” como máquinas
distintas se utilice en el Proceso. Otro factor determinante para el número de “Part Operations”, es el número
de Posiciones de Mecanizado.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
9
Lo primero es realizar un Part Operation, para ello seleccionamos el icono situado en la parte superior
derecho de la zona de trabajo. Tenemos que definir el part operation, para ello nos servimos de la ventana de
diálogo que aparece al hacer doble click sobre el Part operation creado en el árbol del Process.
Para definir nuestro part operation, CATIA nos da varios parámetros para completar nuestro modelo. Podemos
asignar una máquina a el part operation, también podemos elegir un eje de referencia de la máquina. CATIA
cogerá un eje de referencia por defecto si no se le asigna uno.
Fixtures.- En éste apartado se pueden seleccionar los elementos de sujección , mesa de trabajo
etc…
Safety plane.- Nos permite seleccionar un plano donde podamos garantizar que la herramienta se
mueve sin riesgo de c colisionar con la pieza, generalmente por encima de la misma. Con este plano
definido, CATIA genera una programa donde en cada cambio de operación dentro de la secuencia, la
herramienta retorna al plano de seguridad.
Dentro de cada “Part Operations”, se definirá al menos un “Manufacturing Program”, y dentro de éste se
definirán todas las operaciones de mecanizado o “Machining Operations” necesarias para su mecanizado. En
ocasiones, el proceso de una “Part Operations”, no se puede realizar todo de una vez, porque durante el
proceso, es necesario quitar algún elemento del útil, o montar una brida o cualquier otra manipulación del
Operario que implique una parada de la maquina para realizarla.
En este caso, se definirá un “Manufacturing Program 1” que incluirá todas la “Machining Operations”
anteriores a la parada de máquina, y un “Manufacturing Program 2” para las “Machining Operations”
posteriores.Dentro de un “Manufacturing Program” se pueden incluir una o varias “Machining Operations”, y
una o varias “Auxiliary Operations”.
10 Automatización con CATIA V5
Cuando hablamos de Tareas Básicas de Mecanizado, hablamos de las distintas operaciones que se realizan en
una fresadora convencional sin tener en cuenta que los movimientos que manualmente realiza el Operario
puedan ser sustituidos por unos movimientos automatizados por Control Numérico.
Una vez que tengamos identificadas cada una de estas operaciones, nuestro siguiente paso sería aplicar la
estrategia mas sencilla de las Machining Operations que CATIA V5 pone a nuestra disposición, tratando
siempre de aplicar las Estrategias mas básicas y elementales antes de elegir Estrategias avanzadas y
complicadas que dificultarían tener un buen control de la herramienta y del mecanizado.
Atendiendo a estos criterios las operaciones básicas de mecanizado pueden agruparse en:
•Planeado.
•Contorneado.
•Cajeado.
•Desbastes.
•Ranurado.
•Barridos.
•Multiejes.
Hay que tener en cuenta que esta clasificación atiende solamente a criterios Físicos y Tecnológicos, sin tener
en cuenta el Modo de Programación empleado. Las seis tareas primeras corresponden al mecanizado
realizados en Fresadora de tres ejes, donde se incluyen Prismatic Machining y Surface Machining, aunque la
Programación Prismatica puede hacerse inclinada en algunos casos y necesitaría una máquina de 4 o 5 ejes. El
último grupo de tareas corresponde al mecanizado realizado en una fresadora de cuatro o cinco ejes, y su
mecanizado solo es posible en una máquina gobernada por Control Numérico (CN) y un programa de
Multiaxis Machining. Referencia [4]
Operación de vaciado
Pocketing Operations
Operación de desbaste
Prismatic Roughin Operations
Operación de planeado
Facing Operations
Operación de contorneado
Profile Contouring Operations
Operacción de fresado
Curve Following Operations
Para cada una de las operaciones mostradas en la tabla 2.2 serán necesario introducir una serie de parámetros
para definir la operación a realizar, éstos serán requeridos por CATIA al hacer doble click sobre el icono de la
operación deseada. En bases generales para definir una operación se debe:
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
11
Definir la geometría a ser mecanizada . -En éste apartado se selecciona la superficie a tratar,
sírvase como ejemplo una operación de pocketing. En ella definiremos el plano superior, el plano
inferior y las paredes como condiciones de contorno.Una vez definido los parámetros mínimos
requeridos el icono de Geometry pasará de .
Figura 2.7 Ventana de diálogo para definir una operación del Part Operation
Los parámetros para la estrategia de mecanizado . -Eligiendo el recorrido que se desee que
realice la máquina mientras que realiza el mecanizado, siendo posible seleccionar realizar el
mecanizado de una sola pasada, back and forward junto a otras opciones. Permite especificar el tipo
de trayectoria que va a realizar la herramienta, separación entre líneas paralelas y diferentes
profundidades.
12 Automatización con CATIA V5
Otros apartados a modificar son la estrategia radial a seguir por la herramienta, la estrategia axial y el
HSM (High Speed Milling). En la figura 2.9 podemos observar la ventana para su modificación.
Macros para definir los movimientos de transición al inicio y fin de la operación Estrategias de
aproximación “Segura”. La aproximación a la pieza para realizar una operación de mecanizado debe
ser diseñada con cuidado para que no suceda ninguna colisión, cosa que se puede detectar y estudiar
mediante simulación. Permite definir varios puntos “seguros” para la aproximación.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
13
Macro Retract
Los movimientos del Macro Retract, consisten básicamente en salir de la zona del material hasta
alcanzar una altura de seguridad fuera del Stock.
Cuando se definan los macros Retract, es importante tener en cuenta el siguiente movimiento de
forma que el movimiento sea un movimiento previo al Macro Approach de la siguiente operación.
Hay veces que hay que definir los Macros Retract con unos movimientos amplios para enlazar la
siguiente operación, y otras veces, estos movimientos son mínimos por ser muy cercana la zona a
mecanizar a continuación.
Aunque el movimiento mas generalizado del macro Retract es un movimiento axial de retirada hasta
un plano de seguridad, este movimiento lo realizaremos sólo cuando la herramienta ya no esté en
contacto con la Drive Surface, (DS).
Cuando no es posible salir fuera del material para realizar la retirada, debemos definir un pequeño movimiento
tangente a la DS, de unos 2 o 3 mm para separarse y después realizar el movimiento vertical de retirada.
Referencia[4]
Una vez definidas nuestras operaciones de mecanizado en nuestro part operation una opción interesante es
generar nuestro código APT ó ISO. En el árbol de trabajo, basta con seleccionar “Manufacturing Program” y
pulsar el botón, del que se despliega un menú en el que seleccionaremos Generate NC Code in Interactively.
Esta orden requiere rellenar los datos relativos al lenguaje de la máquina destino en la siguiente caja de
diálogo:
La opción NC data type permite indicar si queremos generar un programa ISO ó APT. En el campo output file
debemos indicar un nombre de fichero, que se empleará parea generar un fichero ASCII con las instrucciones
APT o ISO del programa de mecanizado. El fichero generado puede ser editado con el Block de Notas de
Windows. A continuación, se muestra parte del código APT generado en un process que define el problema a
estudiar en éste proyecto.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
15
$$ -----------------------------------------------------------------
$$ Generated on sábado, 26 de agosto de 2017 20:09:03
$$ CATIA APT VERSION 1.0
$$ -----------------------------------------------------------------
$$ Manufacturing Program.1
$$ Part Operation.1
$$*CATIA0
$$ Manufacturing Program.1
$$ 1.00000 0.00000 0.00000 0.00000
$$ 0.00000 1.00000 0.00000 0.00000
$$ 0.00000 0.00000 1.00000 0.00000
PARTNO PART TO BE MACHINED
COOLNT/ON
CUTCOM/OFF
$$ OPERATION NAME : Tool Change.1
$$ Start generation of : Tool Change.1
TLAXIS/ 0.000000, 0.000000, 1.000000
$$ TOOLCHANGEBEGINNING
CUTTER/ 20.000000, 10.000000, 0.000000, 10.000000, 0.000000,$
0.000000, 50.000000
TOOLNO/1, 20.000000
TPRINT/Forming Tool
LOADTL/1
$$ TOOLCHANGEEND
$$ End of generation of : Tool Change.1
$$ OPERATION NAME : ZLevel.1
$$ Start generation of : ZLevel.1
LOADTL/1,1
SPINDL/ 70.0000,RPM,CLW
RAPID
GOTO / -23.22399, -44.88788, 2.00000
RAPID
GOTO / -23.22399, -44.88788, 1.20000
FEDRAT/ 300.0000,MMPM
2.4.1 Entorno
En primer lugar, se va a explicar que es una macro, ya que es importante saber que es lo que
estamos realizando. Una macro consiste en una serie de funciones escritas en un lenguaje de
programación que agrupa una serie de comandos, los cuales permiten realizar las operaciones requeridas
automáticamente. Son usadas para ahorrar tiempo y reducir la posibilidad de errores humanos a la hora de
realizar operaciones que se llevan a cabo de forma repetitiva.
Para acceder al entorno de trabajo VBA no hace falta estar en ningún módulo de CATIA específico, se
puede acceder a él desde cualquier módulo con tan solo pinchar dentro de la pestaña Tools en la opción
Macros. Dentro de ésta se podrá o bien comenzar a grabar una macro, acceder a las macros ya realizadas
y librerías o al editor de Visual Basic, como se aprecia en la figura 2.14.Referencia [1]
Las macros de CATIA pueden ser almacenadas en las librerías de macros de tres formas posibles:
Folders (vbscript y CATScript), Project files (catvba) o CATParts/CATProducts. Solo una de estas tres
librerías de macros puede ser usada a la vez. Para crear una librería el procedimiento a usar es el siguiente.
3. Asegurarse de que el tipo de librería esté cargada en “Directories” y luego hacer click en “Add
existing library”.
4. Seleccionar la carpeta donde se van a guardar los CATScripts a lo largo del proyecto.
Otro método es crear un Project file donde se irán guardando las distintas macros en módulos. Ésta ha
sido la opción elegida para el desarrollo de éste proyecto.
Un método para crear macros es grabando las acciones que se realicen con el ratón. Para macros
grabadas en un fichero o en un CATPart o CATProduct, los estamentos declarados se grabarán para
CATScript, pero no para MSVBScript. Para macros grabadas en una librería, “MS VBA” es la única
opción. A la hora de grabar una macro mediante este procedimiento hay que tener en cuenta algunos
aspectos:
Una vez se haya finalizado la grabación, se deshará todo lo realizado y se reproducirá la macro,
de manera que se podrá comprobar si es correcta la macro y si reproduce la operación que se quería
realizar.
También hay que tener en cuenta que mediante dicho procedimiento aparecerán numerosas líneas de
código que no son realmente necesarias, por lo que pueden eliminarse. Por otro lado, tampoco aparecerán
comentarios acerca de lo que se está haciendo o explicando los parámetros de entrada, por lo que se
deberán añadir manualmente. Referencia [1]
Durante la realización de este proyecto se ha hecho uso de esta herramienta para aprender a usar
operaciones de gran complejidad de las cuales no existía mucha información al respecto. Sin embargo,
todos los códigos desarrollados en el presente proyecto se han realizado mediante la opción que se explica
en el siguiente apartado.
Por último, una de las herramientas principales que se van a utilizar para el desarrollo de macros
o scripts es la ayuda que ofrece Catia en el CAA V5 Visual Basic help. Además de contar con una valiosa
información acerca de los objetos propios aplicados a VBA, en la ayuda de Catia encontramos pequeñas
guías de sus respectivos módulos. En ellas se definen los conceptos básicos, las interactuaciones que
realizan sus módulos y algunos ejemplos.
La ventana Project Explorer recoge todos los datos y archivos que conforman el Project (proyecto de
programación) en el que se esté trabajando. Puede albergar formularios (Userforms), módulos (Modele) y
clases (Class module), los cuales se explican a continuación:
-Módulos. - Son rutinas independientes. Dado que el código contenido en un módulo estándar de Visual
Basic es accesible desde distintos formularios del programa, será ventajoso colocar en este módulo todo
lo que queramos disponer como “código compartido”, es decir, que pueda ser utilizado en cualquier
formulario del programa. Se guardan para su exportación en ficheros con extensión *.bas.
-Formularios. - Son rutinas asociadas a ventanas gráficas donde se incorporan objetos y eventos. Los
formularios son el elemento básico que permite la interacción del programa con el usuario, demandando
variables, opciones, etc. Se almacenan con extensión *.frm.
Clases: son definiciones de nuevos objetos de tipo plantilla donde se definen las propiedades y eventos
del mismo, son almacenados como*.cls.
En cuanto a la ventana Properties Windows, refleja en una columna todas las propiedades de cada
formulario o control que se tenga seleccionado en la ventada Project Explorer. Para acceder a dicha
información solo tenemos que pinchar sobre el formulario o control deseado. Referencia [1].
Por último, se va a explicar otra ventana que ha sido de utilidad, la ventana object browser, a la cual se
accede de la misma forma que las anteriores.
Dicha herramienta nos es de gran ayuda cuando se está en un punto de la programación en la que no se
sabe bien qué hacer, cómo seguir o cómo funciona cualquier tipo de objeto. Si escribimos cualquier
objeto en la barra de búsqueda, se nos muestran tres columnas que nos ayudan a controlar dicho objeto.
La tercera de ellas, la columna members, muestra distintas formas para realizar la misma operación,
eligiéndose la más conveniente. La segunda columna, muestra a qué tipo de objeto pertenece la operación
que se quiere realizar, por lo que ya se sabrá que objeto hay que definir para poder acceder a la
herramienta deseada. Referencia [1].
Se puede observar que en la parte inferior de la imagen se muestra una descripción que nos sirve de ayuda
ya que desglosa uno a uno todos los argumentos de entrada que son necesarios para realizar la operación.
Para volver de nuevo a la ventana de trabajo no hay más que cerrar esta ventana. Antes de comenzar con
la programación, conviene analizar detenidamente cada una de las partes o bloques que constituyen el
entorno donde se realiza toda la programación.
2.6.1 PartDocument
Representa al Document que contiene la información de la pieza. Al igual que en el apartado
anterior, cuando se crea este objeto (nuevo) se asocia un objeto Part raíz que contiene la información del
modelo 3D. Además, podemos acceder a la información del objeto Product que lo contiene.
Propiedad Acción
Part Devuelve el objeto Part ‘raíz’ del PartDocument
activado
Set oPartRaiz = CATIA.ActiveDocument.Part
Product Devuelve el objeto Product ‘raíz’ del PartDocument
activado
Set oProdRaiz = CATIA.ActiveDocument.Product
Tabla 2.3 Propiedades y acciones del objeto Part y Product
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
21
La estructura del Part Design es la que se aprecia en la figura 2.18, donde los colores diferencian enre objetos
contenedores de objetos o colecciones, y objetos abstractos. Como ya se ha comentado anteriormente, la
estructura de CATIA está muy jerarquizada, de manera que por ejemplo, para acceder a los planos de
referencia, habráque definir en primer lugar los objetos y propiedades referentes a Plane que contienendichos
planos (PartDocument → Part → Originelements).
En la tabla siguiente se recogen las propiedades de los objetos que se utilizan en el módulo
PartDesign, explicando brevemente qué función tiene cada una de ellas.
Referencia [1]
2.6.2 Sketcher
Dentro de este módulo se puede encontrar una serie de objetos y colecciones que se
utilizarían en la creación de un Script en el cuál se hagan modificaciones en el Sketch.En dicho
módulo el uso de un script podría servir para cambiar una cota y o establecer relaciones entre las
cotas en ese plano,definiendo un nuevo sketch y por ente, actualizando la geometría de la pieza.
Como se observa en la figura 2.19, los objetos del Sketcher son “Factory2D”, “line2D” y “Axis2D”, dentro de
los cuales se encuentran una serie de métodos que se resumen a continuación:
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
23
CreateClosedEllipse
CreateControlPoint
CreateEllipse
CreateHyperbola
CreateIntersection
Factory2D CreateIntersections
CreateLine
CreateLineFromVector
CreateParabola
CreatePoint
CreateProjection
CreateProjections
CreateSpline
Engloba tres métodos que dan
Line2D GetDirection
el univector de la dirección de
la recta, un punto sobre la línea
GetOrigine
y un último que permite
modificar las características de
SetData
la línea infinita.
Vienen detalladas las
Axis2D HorizontalReference
propiedades del sistema de
coordenadas.
Origin
VerticalReference
Constrainsts
Tras ver la estructura del modulo sketcher, para terminar con éste módulo faltaría que el sketch quede bien
definido y fijo, es decir, que sea inalterable por algún error cuando se esté creando o manipulando,para ello es
necesario establecer las restricciones o constraints.
Los constraints trabajan con referencias, es decir, hay que establecer la referencia de cada uno de los objetos
del sketch. Una vez definidas éstas, es necesario una instrucción que permita relacionarlas entre sí, para lo cual
se usa la siguiente línea de código: constraintsX.AddBiEltCs(CatCsTypeDistance, reference1, reference2). En
dicho comando se observan dos propiedades de gran interés.
24 Automatización con CATIA V5
La instrucción AddBiEltCs nos indica que la restricción va a usar dos referencias, es decir, se van a
relacionar dos objetos. Se pueden relacionar uno, dos o tres objetos. Para ello solo se ha de cambiar el prefijo
“Bi-“ por el correspondiente. Es decir, una restricción tal que AddMonoEltCs solo necesitará una referencia y
otra como AddTriEltCs, tres. En este proyecto se trabajará con restricciones de uno y dos objetos.
CatCsTypeDistance refleja el tipo de restricción que se quiere imponer. Existen numerosos tipos de
restricciones como se muestra en la tabla 2.6.
Con estas órdenes, el programa sabe que las referencias en cuestión se encuentran relacionadas según el tipo
de restricción utilizada. Sin embargo no conoce la cantidad exacta del parámetro (el cual dependerá del tipo de
restricción en cuestión) que las relaciona (distancia, ángulo…), por lo que hay que señalar que constraint tiene
dos modos de trabajo:
1. Modo constraint: El valor asignado restringe la geometría en dicha posición
>>constraint1.Mode = catCstModeDrivingDimension
2. Modo Measurement: el valor solo refleja aquello que puede ser observado desde dicha
posición >> constraint1.Mode = catCstModeDrivenDimension
2.6.3 CATPART(PartDesign)
Objeto Comentario Contenido
Shapefactory Incluye todos los métodos AddnewCircPattern
necesarios para poder trabajar AddnewHole
en el módulo Part Design. AddnewPad
AddnewPocket
AddnewSlot
AddnewRib
AddnewEdgeFilletWith
ConstantRadius
AddnewShaft
Tabla 2.7 Herramientas del Shapefactory
Lo primero que hay que hacer es definir y cargar el objeto en cuestión y una vez cargado ya se
podrá hacer uso de las herramientas que incluye. Reference [VB Scripting for CATIA V].
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
25
Como hemos visto en la introducción al módulo PartDesign (Sección 2.2) existen una serie de
operaciones básicas para realizar un modelado.A continuación se muestra como se utilizan
dichas herramientas mediante un script.
Pad
La herramienta pad es la comúnmente usada para hacer extrusiones a partir de un sketch. Es muy
potente ya que con dicha herramienta y con alguna más que explicaremos posteriormente, se
pueden definir infinidad de sólidos. Usaremos las siguientes líneas de código para hacer un pad:
Los argumentos que nos pide la herramienta son el sketch que se desea extruir y el espesor que
se quiere. Otra reseña de importancia es la posibilidad de llamar al pad con el nombre que
elijamos para luego no confundirlo con otro posible pad.
Es necesario restringir la altura del pad. Para ello hay que definir tanto el límite inferior del que
tiene que partir el pad como la longitud de la extrusión. Habrá que darle un valor a la dimensión
de la longitud. Reference [1].
La estructura del pocket es prácticamente igual a la del pad pero en este caso, lo que se quiere
hacer es un hueco sobre un sólido ya creado, de manera que, tendremos que hacer una referencia
a la superficie sobre la que se quiere hacer dicho hueco.
Hole
A diferencia del pocket, cuando hacemos un hole, estamos haciendo un orificio circular
mientras que con el pocket se puede hacer un hueco con la forma del sketch que demos como
entrada. Al igual que hay que hacer para el pocket, es necesario crear una referencia de la
superficie del sólido sobre la que se realizará el hole para lo que habrá que usar las siguientes
líneas de código.
Orden Parámetros
AddNewHole X, Y,Z (coordenadas absolutas), profundidad
AddNewHoleFromPoint X,Y,Z (coordenadas absolutas), plano de
referencia, profundidad
AddNewHoleFromRefPoint Punto origen, plano de referencia,
profundidad
AddNewHoleFromSketch Sketch, profundidad
AddNewHoleWithConstraints X,Y,Z (coordenadas absolutas), contorno,
plano de referencia, profundidad.
(si el contorno es circular, el hole será
concéntrico a dicho contorno)
Tabla 2.8 Herramientas para programar un hole.
Además, para que la herramienta funcione correctamente, hay que especificar una serie
de elementos:
El Type: indica el tipo de hole que se quiere realizar, en este caso un catSimpleHole.
El AnchorMode: indica donde está anclado el hole. En el caso del ejemplo se indica
catExtremPointHoleAnchor, indicando que se trata de un hole que parte de un punto
específico en el extremo del sólido.
El BottomType: se precisa dónde finaliza el agujero que se desea realizar, que en
catFlatHoleBottom se está especificando que es hasta el fondo del sólido.
Slot
Otra herramienta para eliminar material es la conocida como slot. A diferencia de las
dos anteriores, podemos dar como argumento de entrada la forma o sketch que queremos
desechar y además una guía que recorrerá dicho sketch, de modo que, finalmente, se elimina
material a lo largo de una trayectoria.Los códigos necesarios para programar un slot aparecen en
el código 8.
Dim slot1 As Slot
Set slot1 = shapeFactory1.AddNewSlotFromRef(Nothing, Nothing)
Dim reference24 As Reference
Set reference24 = part1.CreateReferenceFromObject(sketch3)
slot1.SetProfileElement reference24
Dim reference25 As Reference
Set reference25 = part1.CreateReferenceFromObject(sketch4)
slot1.CenterCurveElement = reference25
28 Automatización con CATIA V5
Código 8. Slot
Shaft
La herramienta shaft al igual que ocurría con el pad o el pocket requiere crear
previamente un sketch, que sirva de base para poder revolucionarlo luego en torno a un eje para
conformar el sólido de revolución deseado.
Como se puede observar, es necesario definir un ángulo y establecer que este sea el ángulo de
revolución del sólido, así como crear una referencia para definirla como el eje de revolución del
sketch. Referencia [1].
Rib
Otra de las herramientas más potentes y útiles del objeto shapefactory es la llamada Rib,
la cual permite hacer una extrusión de un sketch sobre una guía que se le marque. Por tanto habrá
que generar dos sketch que habrá que aportar a la herramienta como argumentos:
El perfil: da forma al sólido que queremos generar y podrá ser un sketch abierto en el
caso en el que el rib se realice tangente a una superficie y queremos un acavado suave
sobre la misma.
Guía: indica el camino que queremos que siga el perfil.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
29
Es importante que a la hora de programar, el perfil y la guía tengan un punto en común, es decir,
que estén en contacto en algún punto de su geometría ya que podrían surgir algunos errores o
problemas en el sólido extruido en caso de que no compartan algún punto. Las líneas de código
para programar un rib son muy sencillas y se muestran a continuación:
Figura 2.20 Árbol de trabajo de CATIA en el módulo de Prismatic Machining(Process tree).Objetos del
Process
Los posibles scripts a desarrollar en éste módulo tendrán como resultado la realización de una serie
de acciones para configurar el proceso de mecanizado de una pieza.Por ejemplo la realización de un agujero en
el centro de una de las caras de una pieza mediante un script.Uno de los scripts que se pueden realizar en éste
módulo sería una macro que mediante su ejecución generara un código APT para el process actual abierto en
CATIA, omitiendo todos los pasos que tendría que hacer el usuario, por la simple ejecución del script.
Como se ha visto anteriormente, en CATIA se utiliza la programación orientada a objetos, todas las acciones
son realizadas a distintos objetos jerarquizados. A continuación realizamos una breve descripción de los
30 Automatización con CATIA V5
Vamos a analizar la estructura de programación orientada a objetos en éste módulo. La documentación sobre
la automatizción en éste módulo no es tan extensa como lo puede ser en otros módulos más utilizados de
CATIA, es por eso que para el análisis de éste módulo nos basamos en la navegación a través del CAA V5
Visual Basic help.En la estructura en árbol al hacer click en cualquier objeto se abrirá una ventana donde se
indica la estructura árbol de donde cuelga el objeto, índice de propiedades y métodos.
Para generar un código APT si nos guiamos por la estructura de la figura 2.21 debemos definir un objeto
ManufacturingGeneratorData y un objeto ManufacturingOuputGenerator, y usar el comando
InitFileGenerator.
La programación en éste módulo se plantea más ardua al tener una bibliografía más limitada que aborde la
automatización en éste módulo.En la figura 2.23 observamos la información obtenida vía CAA V5 Visual
Basic.
3 AUTOMATIZACIÓN CON ABAQUS
A
baqus es un conjunto de potentes programas de simulación de ingeniería, basados en MEF el método
de elementos finitos, que pueden resolver problemas que van desde análisis lineales relativamente
simples hasta las simulaciones no lineales más desafiantes.
Abaqus contiene una extensa biblioteca de elementos que pueden modelar prácticamente cualquier geometría.
Tiene una lista igualmente extensa de modelos de materiales que pueden simular el comportamiento de la
mayoría de los materiales de ingeniería típicos incluyendo metales, caucho, polímeros, materiales compuestos,
hormigón armado, espumas triturables y resilientes y materiales geotécnicos como suelos y rocas. Diseñado
como una herramienta de simulación de propósito general, Abaqus puede usarse para estudiar más que
problemas estructurales (de estrés / desplazamiento). Puede simular problemas en áreas tan diversas como la
transferencia de calor, la difusión de masas, el manejo térmico de componentes eléctricos (análisis térmico-
eléctricos acoplados), la acústica, la mecánica de suelos (análisis de fluidos porosos acoplados), el análisis
piezoeléctrico, el análisis electromagnético y la dinámica de fluidos.
Abaqus ofrece una amplia gama de capacidades para la simulación de aplicaciones lineales y no lineales. Los
problemas con múltiples componentes se modelan asociando la geometría que define cada componente con los
modelos de material apropiados y especificando las interacciones de los componentes. En un análisis no lineal,
Abaqus elige automáticamente incrementos de carga y tolerancias de convergencia apropiados y los ajusta
continuamente durante el análisis para asegurar que se obtiene una solución precisa de manera eficiente.
33
34 Automatización con Abaqus
En la figura 3.1 se observa la separación entre los módulos del modelo (Model) y el módulo de visualización y
tratamiento de datos de los resultados de la resolución del problema mediante el progama MEF Abaqus
(Results).El Árbol Módelo muestra una descripción gráfica de su modelo y los objetos que contiene.Por otro
lado, el Árbol de Resultado muestra resultados de análisis de base de datos de la salida así como los datos
específicos y la posibilidad de representarlos enfrentados mostrando una relación X-Y. Es importante señalar
que Abaqus deja a responsabilidad del usuario el uso de unidades consistentes. Si queremos que los resultados
sean correctos hemos de tener cuidado a la hora de meter los datos de entrada en la unidad correspondiente
siguiendo una consistencia de unidades.
Longitud m mm
Tiempo s s s s
35
3.1.1 Part
Éste módulo se utiliza para la creación de la geometría.las piezas se construyen a partir de geometrías
sencillas, partiendo de un sketch.También es possible la importación de una geometría generada con otro
software.Al crear un part como se observa en la Figura 3.2, las opciones que nos ofrece son: 3D,2D y
axialsimétrico.En cada una de ellas encontramos, además, variables como el tipo de part (deformable,rígido
discreto, rígido analítico, euleriano ) y la característica base (placa,cable, punto).
3.1.2 Material
Se utiliza para definer las propiedades de los materiales de nuestros diferentes parts en nuestro
modelo.Se deben definir las propiedades del material necesarias para el análisis que queremos realizar.Las
mismas se encuentran clasificadas en “General” (o General, como la densidad), “Mechanical” (o Mecánicas,
como la elasticidad o plasticidad), “Thermal” (o Térmicas, como la conductividad o calor latente) y “Other” (u
Otras, como la permeabilidad, conductividad eléctrica).En la figura 3.3 podemos observar la ventana de
edición del material en la GUI de Abaqus/CAE.Cabe destacar que la introducción de parámetros mecánicos
tales como la Módulo de Young y el coefeciente de Poisson pueden ser importados de una tabla de datos en
diversos formatos como por ejemplo un archivo Excel.
36 Automatización con Abaqus
3.1.3 Section
En éste módulo se crean las secciones para asignar a cada part, generar los perfiles para secciones de
vigas, definir orientaciones, normales y tangentes para las distintas secciones, definir la inercia de una parte y
crear resortes y amortiguadores entre puntos o entre puntos y el suelo. Las secciones que podemos crear y
asignar a las distintas partes pueden ser del tipo sólidas, placas, vigas, fluidos y otras, según se muestra en la
Figura 3.4. En el caso de que se trabaje con secciones de viga se deberá, además, generar los perfiles de las
mismas. Para ello, Abaqus posee algunos perfiles predeterminados (por ejemplo, caños rectangulares o
circulares, perfiles I, T y L) permitiéndonos también definir perfiles arbitrarios o generalizados.
Figura 3.4 Creación de una sección solida (arriba izquierda),de placa (arriba,derecha),de viga
(abajo izquierda) u otra (abajo,derecha)
3.1.4 Assembly
En éste módulo se crean y ensamblan las instances (subdominios que componen el problema). Esto
nos permite definir el tipo de mallado que aplicaremos (dependiente o independiente) y asignarles a las
distintas partes una orientación, posición relativa, etc.
Si se trabaja con un modelo en el cual se presenta varias veces la misma pieza (por ejemplo, un reticulado en el
cual más de una barra tiene la misma longitud y sección), no es necesario generar una parte para cada una de
ellas, sino que Abaqus nos presenta la opción de crear una misma parte y luego ensamblarla más de una vez.
En cuanto a la creación de una instance, según se muestra en la fgigura 3.5, nos da las opciones para que,
luego, la malla se haga en la parte o en el modelo ensamblado. En el primer caso, la malla es del tipo
dependiente y todas las veces que la parte se haya ensamblado, tendrá la misma malla. En el segundo caso, la
malla es del tipo independiente, lo que significa que por más que se ensamble más de una vez una misma
parte, puede generarse una malla distinta para cada una de ellas. Esto nos puede ser útil en el caso de que
tengamos repetida una misma parte y necesitemos refinar el mallado en alguna de ellas.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
37
3.1.5 Steps
Steps. - Nos permite generar y definir los distintos estados de carga y las variables asociadas a los
mismos que se incluirán en los resultados. Cada estado de carga se denomina “paso” o “step”, y pueden
generarse de manera secuencial (ejecutar un step al finalizar uno previo) o superponerse. Por defecto, cada
modelo cuenta con el step Inicial. Las distintas opciones que nos presenta Abaqus se clasifican según el
procedimiento, General o de Perturbación lineal. Dentro de los estados generales, las opciones que se
presentan son varias, por ejemplo, se puede configurar un análisis estático general, dinámico, de transferencia
de calor, geoestático, etc. Dentro de las opciones de Perturbación lineal los análisis son, entre otros, de
frecuencia o de perturbación lineal estática. En la figura 3.6 se muestra el cuadro de diálogo para la creación de
un step.
3.1.6 Interactions
Interactions. -Sirve para especificar interacciones entre distintas regiones de un modelo. Dentro de
las interacciones que Abaqus soporta encontramos, por ejemplo, interacciones de contacto, fundaciones
elásticas, radiación desde o hacia un ambiente, ondas incidentes, impedancia acústica, restricciones de cuerpo
rígido, inercias, resortes, amortiguadores, etc. Para poder especificar una interacción, sea del tipo que sea,
necesitamos primero crear la propiedad de dicha interacción, según las opciones que se presentan en la figura
3.7. Luego de definido esto, podemos establecer la interacción, teniendo en cuenta que dependen de los
estados de carga, por lo que al momento de definirlas se debe seleccionar a qué step se aplica la misma y sólo
nos permitirá seleccionar interacciones compatibles con dicho step. En la figura 3.8 se muestra el cuadro de
diálogo para crear una interacción.
Figura. 3.7 Creación de una propiedad de Figura. 3.8 Creación de una interacción.
interacción.
3.1.7 Load
En este módulo se crean las cargas, condiciones de borde y campos que se aplicarán en cada estado
de carga. Todos estos elementos dependen del tipo de step que se defina, por lo que al momento de crear
alguna de ellas, se selecciona el step y se muestran las opciones compatibles con el mismo. En cuanto a las
condiciones de contorno, denominadas BC (por Boundary Condition) tenemos, por ejemplo, en un análisis
estático, condiciones de desplazamiento, rotación, velocidad, etc. Es importante también tener siempre
presente el sistema de coordenadas en el que se trabaja, ya que las condiciones de borde se aplicarán en las
direcciones que se indiquen. En la figura 3.9 se muestran las condiciones de borde disponibles para dos
estados de carga distintos. Respecto a las cargas, denominadas Load, también dependerán del tipo de step en el
cual se aplican. Abaqus ofrece una gran variedad de cargas donde las mismas pueden variar su amplitud y/o su
forma según se requiera. Por ejemplo, si se aplica una carga lineal, la misma puede ser constante, variar
linealmente o según funciones trigonométricas como el seno o coseno. En la figura 3.10 se muestran las
opciones de cargas para un análisis estático general.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
39
3.1.8 Mesh
Genera la malla de elementos finitos en nuestro modelo. Para realizar el mallado, deberemos definir
opciones como el tipo de elemento (elementos de viga, de barra, de estados planos, termomecánicos, etc.), el
tipo de función de interpolación (lineal o cuadrática), el tamaño de elemento y la técnica de mallado. También
se pueden realizar optimizaciones de una malla, refinamiento en zonas donde se requiera un análisis más
exhaustivo o una verificación de la misma.
40 Automatización con Abaqus
3.1.9 Job
En éste módulo se pueden crear, ejecutar y monitorear los distintos análisis sobre el modelo en el
que se trabaja. Cada uno de estos análisis dará como resultado, de ejecutarse correctamente y sin errores, un
archivo de resultados. Este módulo también nos permite monitorear el análisis durante su ejecución,
observando de esta manera la información que se admitió, las tareas que se están realizando, las advertencias
que Abaqus considere y, de existir, los errores que llevaron a que el programa aborte el análisis.
3.1.10 Visualization
Nos permite visualizar los resultados del análisis. Podremos entonces obtener diagramas de
tensiones, desplazamientos, solicitaciones, o cualquier otra variable que se incluyó en el análisis. Estos
diagramas pueden ser vectoriales o de contorno, donde se representan con distintos colores los valores de la
variable que se visualiza. También Abaqus permite realizar cortes en nuestras geometrías, configurar
animaciones que nos ayuden a visualizar la evolución de las variables, generar tablas tipo XY de datos y
graficar las mismas.
41
Figura 3.14 Part chapa (izquierda), Part punzón (centro) y Part Blankholder (derecha)
43
45
47
49
Figura.3.29 Visualización del problema de conformado de chapa valores de PEEQ (Equivalent plastic strain)
de la chapa
Figura 3.30 Esquema de iteracción entre Abaqus Scripting Interface y Abaqus/CAE kernel
50 Automatización con Abaqus
Abaqus Scripting Interface le permite pasar por alto la interfaz gráfica de Abaqus / CAE y trabajar
directamente con el núcleo. El archivo que contiene los comandos Abaqus Scripting Interface se denomina
script. Se puede usar scripts para realizar las siguientes tareas:
Automatizar tareas repetitivas. - Por ejemplo, se puede generar un script que se ejecute cuando el
usuario inicie una sesión en Abaqus/CAE. Como ejemplo el script para crear una librería de
materiales mencionado anteriormente.
Para realizar un estudio paramétrico. - Se puede crear un script que modifique incrementalmente la
geometría de un part y analice los resultados del modelo. El mismo script puede leer los resultados de
la base de datos de salida, mostrarlos, y generar copias de cada análisis.
Crear y modificar las bases de datos del modelo y modelos que son creados interactivamente cuando
se trabaja con Abaqus/CAE.
Acceder a datos de una base de datos de salida. - Por ejemplo, se puede hacer un postprocesado
independiente de los resultados del análisis. Para ello puedes escribir tus datos en un .odb y usar el
módulo de Visualization de Abaqus/CAE para ver su contenido.
Antes de profundizar más en la realización de macros con Abaqus veámos los diferentes archivos que genera
Abaqus, su contenidoy el posterior uso para la creación de un script.
rpy.- replay file , todos los comandos de operación de modelado utilizados durante
una sesión de Abaqus, are saved in this file
cae.- model database, contiene los modelos y los diferentes jobs
jnl.- journal python file, éste documento contiene todos los comandos necesarios
para recrear el modelo CAE. Éste archivo será crucial en la generación de scripts
como se verá más adelante.
rec.- recover file contiene comando para replicar la versión del mdb en la memoria.
Archivos generados por Abaqus cuando el análisis del job ha sido realizado:
51
Cell4 es una variable a la que queremos asignar el valor de la celda con índice 4. Para acceder a ese objeto hay
que ir paso a paso en la estructura de Abaqus mdb → models→parts . Con ésta línea de código se ha asignado
el valor de la celda 4 del part denominado ‘Sheet’ correspondiente al model denominado ‘Model-1’.
Veamos otro ejemplo, en éste caso queremos crear un objeto Part
En éste ejemplo vemos un comando (método) llamado Part. Dicho comando crea un objeto part en el
repositorio de parts. El comando Part necesita una serie de argumentos básicos, éstos aparecen entre paréntesis
como se observa en el código 12. En ambos códigos ejemplo están marcados en rojo los repositorios y en azul
el método. Como se observa empieza por mayúscula, esto nos puede servir de indicador cuando leamos un
código para diferenciar entre repositorios y métodos.
52 Automatización con Abaqus
Una herramienta de la que se ha hecho uso en éste proyecto ha sido el Abaqus Scripting Reference Manual, en
él podemos consultar los diferentes comandos que existen dentro de cada módulo de Abaqus.
Veamos ahora el procedimiento para crear un archivo script con Python.Al crear un modelo mediante la GUI
de Abaqus se genera un archivo *.jnl, como se ha mencionado, en él se almacenan los comandos utilizados por
el usuario para crear dicho modelo. Basta con copiar el archivo y guardarlo como extensión Python, (*.py).
Con cualquier editor de textos podrás modificar el archivo para crear un scritp. En éste proyecto el editor de
texto a utilizar ha sido NotePad++.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
53
Al comienzo del extracto observamos como se van llamando a las diferentes librerías propias de Abaqus, (part,
material,section…) a continuación vemos comandos utilizados en la creación del modelo.Ésto se hace debido
a que para acceder a objetos de Abaqus, que serán utilizados posteriormente en el código, tales como obejtos
del módulo Part y Sections, Abaqus extiende o aumenta el modelo de objetos importando módulos
adicionales.La estructura a seguir para importar un módulo es:
El asterisco al final sirve para importar todos los objetos relacionados con dicho módulo. En la siguiente tabla
tenemos algunas de las librerías útiles en el desarrollo de scripts en Abaqus.
En la línea 23 observamos el comando necesario para crear un Part. En éste caso se le ha asignado un nombre
y es un sólido deformable, en el capítulo siguiente desgranaremos en profundidad los comandos utilizados en
cada módulo.
54 Automatización con Abaqus
Módulo Part
Veamos ahora los comandos a utilizar en éste módulo.En la Figura X Observamos la estructura del Part.
En nuestro modelo tenemos que crear 3 parts correspondientes a la placa, la herramienta y el soporte. En la
figura 3.36 vemos un esquema de nuestro modelado del proceso de conformado.Los distintos parámetros
elegidos para las dimensiones de nuestros parts.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
55
Vamos a comentar el código necesario y sus particularidades. En la figura 3.37 vemos el código para crear los
parts de nuestra herramienta y la chapa. Ambos comparten algunos comandos y estructura. En la primera parte
se desarrolla el código haciendo uso de comandos del módulo de Sketch.Dentro del “Model-1”, nombre
escogido por defecto para el modelo, vemos como se utiliza el comando Constrait Sketch para crear el Sketch
en el que configuraremos la geometría de el part en concreto. En la línea 23 se utiliza el comando del sketch
para crear un rectángulo, en concreto el que modelará la chapa de espesor 1.6mm en éste ejemplo. Es
importante indicar que las posiciones del “point1” y “point2” son posiciones con referencia el eje de
coordenadas asignado por Abaqus.
De la línea 25 a 28 primero se crea el Part de la chapa y después se asigna el sketch realizado al part creado
bajo el nombre de “Sheet”. Un comando que es importante reseñar es el que crea un punto de referencia. En
los parts solidos rígidos de nuestro modelo será útil crearlo.
Para modelar el proceso de conformado debemos simular un empotramietndo en los extremos de la chapa.Una
forma de empotrar la cara superior de la chapa es haciendo una partición de la chapa, y empotrando esa parte
de la chapa. Para realizar esto recurrimos al comando PartitionbFaceBySketch.recordemos que podemos
realizar manualmente una partición y localizar el comando en el archivo *jnl creado e implementarla en
nuestro script. Éste método nos facilitará el uso de comandos más específicos de un módulo.En la figura 3.33
observamos el código extraído de un archivo *jnl al realizar nuestro modelo sin usar el script.
56 Automatización con Abaqus
Figura. 3.37 Extracto de código para le generación de los parts del modelo
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
57
Figura. 3.39 Extracto de código para creación de material, sección y asignación de sección
58 Automatización con Abaqus
Módulo Mesh
Ya hemos definido parte del modelo,primero geométricamente, y luego añadiendo las propiedades
intrínsecas al part sobre el que se recogerán resultados, la chapa.Ahora hay que mallar cada uno de los parts de
nuestro modelo, elegimos el tamaño del mallado y generamos la malla. En la figura 3.40 vemos el código que
ejecuta Abaqus para realizar ésta acción.
Módulo Assembly
Procedamos a posicionar nuestro modelo en el espacio, respecto a un eje de referencias guardando
las posiciones relativas entre parts. En la figura 3.41 vemos la estructura de objetos en éste modelo.
59
Una vez mallado el modelo se procede a realizar el ensamblaje, posicionamos los parts en el espacio. Se elige
el eje de coordenadas para el conjunto y se crean las instances para cada part.
Módulo Steps
Hay que generar el step donde se llevará a cabo el proceso de conformado.Luego se debe de crear un
objeto dentro del modelo ‘Model-1’ StaticStep, asignándole sus propiedades como el tiempo de duración del
step,nombre etc.. Usando el Abaqus Scripting Reference Manual, buscando el objeto que se crea, StaticStep
podemos ver los argumentos que requiere para ser generado.
Figura. 3.43 Extracto de código perteneciente a la creación del step y configuración de los datos de salida del
análisis
En la figura 3.43 vemos cómo se crea un Step estático y la creación de un campo de almacenamiento de datos
de salida del análisis. En el caso del código mostrado, se quieren obtener los valores de los desplazamientos de
los nodos de la cara superior e inferior de la chapa.
60 Automatización con Abaqus
Módulo Interactions
Debemos crear las condiciones de contacto que se dan en el conformado de la chapa. El contacto del
prensachapas (blankholder) y el contacto con la herramienta.Siempre que se tengan dudas de como crear
objetos o introducción de parámetros vía código, se recurre a realizar manualmente la operación y observar en
el archivo *.jnl el comando generado.En la figura 3.44 vemos el código correspondiente a la generación de los
contactos y sus propiedades, se observa como hemos creado una variable tools_friction en la que se ha
almacenado el coef de fricción a utilizar en el contacto herramienta-chapa.
Módulo Load
Antes de ejecutar el análisis y como último paso para definir el modelo, se crean las condiciones de
contorno. En nuestro caso no modelamos cargas, la deformación de la chapa será debida al desplazamiento del
punzón a velocidad constante. Se generan las condiciones de contorno, siendo las de encastre condiciones
iniciales y permanentes en el tiempo de la simulación. La condición de movimiento del punzón se dará en el
step del procesado, step 2.
61
Módulo Job
Por último, se crea el job y se ejecuta para obtener los resultados de nuestra simulación.Tras
ejecutarse Abaqus habrá generado un archivo con extensión *.odb.La fase de modelado de nuestro problema
ha terminado,el siguiente paso es la visualización de resultados.
Figura. 3.49 Extracto de código para crear una ventana de visualización y mostrar resultados del análisis
4 APLICACIÓN CAD/CAM A UN PROCESO DE
CONFORMADO INCREMENTAL EN 2 ETAPAS
63
64
Aplicación CAD/CAM a un proceso de conformado incremental en 2 etapas
4.2 Metodología
La estrategia a seguir para los scripts creados en CATIA han sido el uso de la herramienta CATIA
grabar macro, para obtener los comandos utilizados por el usuario para realizar las acciones en CATIA.Para
los ejemplos de macros generadas para el workbench del Part Design se ha procedido a realizar un sketch
parametrizado, generar mediante shaft el modelo en 3D, todo ello grabando el procedimiento completo con la
herramienta Grabar Macro.
64
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
65
Figura 4.3 Restricciones geométricas de nuestro modelo y relación entre parámetros y variables
Una vez generado el procedimiento paramos el grabador de macros. Ya hemos generado un archivo
part para ser utilizado en el process como elemento a procesar.
66
Aplicación CAD/CAM a un proceso de conformado incremental en 2 etapas
66
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
67
Figura 4.8 Configuración del feed rate y spindle Figura 4.9 Configuración de macros de
aproximación
En la figura 4.10 vemos el process en el módulo de Prismatic Machining, como último paso
quedaría generar el código APT. Para ello tan solo tendrían que seguirse los pasos explicados en el apartado
2.3. Con lo realizado hasta ahora se habría completado los pasos a seguir por el usario para generar las
trayectorias del punzón de radio 6mm para otener una deformación en la chapa como la de la siguiente.
68
Aplicación CAD/CAM a un proceso de conformado incremental en 2 etapas
4.2.3 Scripts
El proceso anterior lo tendría que hacer manualmente el usuario de principio a fin cada vez que
quisiera modificar alguno de los tres parámetros (A, W, H):
1) Modificar el sketch del part para cambiar el valor de las variables
2) Actualizar el part y guardarlo
3) Seleccionar el Nuevo part como elemento a procesar en el archivo process
4) Seleccionar la nueva geometría a procesar
5) Generar el código APT
El proceso de realizarlo para numerosos ensayos en laboratorio cambiando los parámetros, puede ser un
proceso repetitivo y eso lleva a la idea de pensar de automatizar de algún modo algunos de los pasos del
proceso.
Un script útil sería uno que modificara los parámetros según valores introducidos mediante ventanas
emergentes, evitando así realizar los pasos de seleccionar el sketch cambiar uno a uno los valores, cerrar
sketch y modificar el part. En soluciones propuestas ésta ha sido una de las implementadas.
Lo ideal sería los cinco pasos fueran ejecutados en un mismo script. Ésto se deja como posible proyectos de
futuro.
68
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
69
a las dimensiones en el sketch, las dimensiones a modificar son angle1(A), length1 y length2.
Macro muy sencilla que solo actualiza los valores de los parámetros geométricos. Requiere tener previamente
modelados tanto la pieza como el proceso. La macro se ejecuta con el modelo de pieza activo, pregunta al
usuario los nuevos valores de los parámetros y actualiza la geometría de la pieza.
Ventajas: muy sencillo de implementar y usar.
Inconvenientes: muy poca automatización.
Además de ésta macro se ha generado otra macro como alternativa a la introducción de valores mediante
ventanas emergentes. En dicha macro son 5 los parámetros que se modifican en el modelo R1,R2,W,H y A, en
la figura 4.1 vemos dichos parámetros representados en la parametrización de la trayectoria en la 1ª etapa.
tomando los valores de los parámetros directamente de una tabla con una o más filas. Las columnas incluyen,
además de los valores de los parámetros, un identificador de tipo texto. El resultado de la macro es un modelo
de pieza por cada fila de la tabla, siendo el nombre del archivo el identificador correspondiente con extensión
CATPart.Para ésta macro se usa el archivo HF2ST-Ri02.
Ventajas: ademas de sencillo, genera varias geometrias simultaneamente.
Inconvenientes: poca automatización
En el apédice B se detalla el código utilizado en ambas macros.
Una de las macros interesantes en éste módulo sería la que generara automáticamente el apt y lo guardara en
un archivo. A continuación se muestra la solución sugerida para la realización de ésta tarea. Aún siguiendo las
instrucciones del manual CATIA V5 automation, ésta macro no ha podido ser ejecutada completamente al
generar errores.Ésta es una de las soluciones probadas, en el apéndice B se detallan otras soluciones
alternativas.
Figura 4.13 Visualización de las ventanas emergentes que aparecen al ejecutar la macro Macro 01-update-
geometry
70
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
71
72
Aplicación CAE a un proceso de rebordeado de agujero
72
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
73
5.2 Metodología
Para la creación de nuestra aplicación de scripting realizaremos manualmente un primer modelo de
nuestra simulación, posteriormente analizaremos su archivo *jnl generado para crear nuestro script con
comandos de Abaqus.Como se observa en la figura 5.1, en nuestra aplicación hacemos uso de 5 scripts:
func_auxiliar.py. -Es el script que alberga las dos funciones de lectura de datos de archivos
*.txt, que se usaran en los otros scripts.
pre4-fea-hole definition.py. - Script principal de la aplicación, en ella se ejecutan todos
salvo el scr8-draw-graph.py. Éste script es el encargado de llamar a pequeños scripts
necesarios para crear el modelo a analizar.
pre5-fea-results.py. – Genera el archivo odb y escribe los datos de desplazamientos de la
cara superior e inferior de la chapa para su posterior uso en el script que calcula el espesor.
scr7-calculate-sheet-thickness.py. - Con los datos de salida del análisis de Abaqus del
desplazamiento tanto de los nodos de la cara superior como de la inferior de la chapa calcula
el espesor de la chapa.
scr8-draw-graph.py. - Tiene como función pintar la gráfica con los datos obtenidos del
archivo gen4-thickness.
Al ejecutar el pre4-fea-hole definition.py el archivo generará archivos gen4-thickness-(radio del punzón) .csv,
tantos como diferentes radios de punzón hayamos metido en el archivo txt params, con los archivos obtenidos
el script scr8-draw-graph.py creará el archivo thickness.png en el que podremos observar la tendencia del
espesor de la chapa, con el radio de curvatura de la herramienta.
En la figura 5.2 se muestran dos de los 3 archivos de entrada a nuestro script. En params.txt insertamos los
radios de curvatura y el nombre de las herramientas. Para las propiedades elásticas y plásticas de nuestro
material utilizamos AA7075O-Elastic.txt y AA7075O-Hollomon314n13.txt.
Antes de mostrar el modelo propuesto y las peculiaridades del código vamos a mostrar la estructura de lo
bloques de control de Python que han sido incluidos en la macro. A diferencia de visual basic en Python la
estructura de se delimita por el uso de sangría. Veamos la estructuras de los bucles If y For:
En los ejemplos anteriores figura. 5.3 y 5.4, vemos la forma de terminar la línea de inicio de bucle if es usando
los dos puntos (‘:’) a diferencia del Visual Basic que utiliza la palabra ‘Then’.Para cerrar ambos tipos de
bucles tan solo es necesario quitar la sangría.
74
Aplicación CAE a un proceso de rebordeado de agujero
Para evitar un código muy largo del script pre4-fea-hole definition.py, el código de modelado geométrico y
configuraciones del modelo se ha ido dividiendo en pequeños scripts que se ejecutan en el pre4-fea-hole
definition.py. Dichos scripts están adjuntados en el Anexo C donde se recopilan todos los scripts de nuestra
aplicación CAE.En el apartado siguiente vermos extractos de algunos scripts que hayan sido adaptados para el
análisis.
Figura 5.5 Esquemas del proceso de Hole Flanging en una sola etapa
En la figura 5.5 vemos los elementos que intervienen en el proceso de Hole Flanging.La decisión de estudiar el
análisis como axilsimétrico agiliza los cálculos del análisis para Abaqus y el modelado del problema. Es
conocido que, en los análisis de chapa bajo unas condiciones concretas, cargas aplicadas y condiciones de
contorno, se pueden resolver como problemas axilsimétricos.
Luego nuestro modelo en Abaqus que creará y analizará nuestro conjunto de scripts será axilsimétrico. En la
figura 5.6 vemos nuestro modelo creado en Abaqus con las dimensiones de la chapa y parámetros geométricos
que se utilizan en nuestro modelo.
74
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
75
Una vez creados los parts se leen los archivos que nos definirán los parámetros de nuestro material y se
asignarán a las variables tableElastic y tablePlastic, con el script m04_Material.py se crea el material. Al crear
varios parts referentes a radios curvatura de herramienta debemos introducir otro bucle for para mallar los parts
herramienta generados, esto será necesario también en el script de assembly, contacts y boundary conditions.
En éste último módulo destaca también que la trayectoria de la herramienta es leída de un archivo externo tool-
path-Z.csv.Para finalizar con los scripts para el modelado del problema ejecutamos dentro de un bucle for el
script para generar Jobs.Cada job llevará el nombre gen3-HF1st-R_tool donde R_tool indicará el radio de la
herramienta.
A continuación en las figuras siguientes se muestran los scripts de los módulos modificados y comentaremos
la solución seleccionada para activar y desactivar herramientas para que cada radio de curvatura tenga su
módulo job independiente, a pesar de éstar en el mismo modelo. En la Figura 5.13 vemos en el código del
script como, antes de iniciar la línea de comando genérica para crear un job, entramos en el objeto
boundaryConditions, y activamos el desplazamiento en u2, al finalizar el código volvemos a poner a cero el
desplazamiento en u2.Con ésto conseguimos que al correr el bucle for de la línea 76 de código de la Figura
5.7, se active el movimiento en una de las herramientas creadas, se analice el modelo con el movimiento de
sólo esa herramienta y se guarde en un job con el nombre de la herramienta activada, por ejemplo para la
herramienta con radio 6 se generará un job llamado gen3-HF1st-R_tool Tool_6.
76
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
77
78
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
79
Zona de espesor
mínimo
Figura 5.15 Visualización del análisis para herramienta de radio de curvatura 10mm
80
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
81
A continuación se presentan las conclusiones obtenidas en este trabajo y se proponen algunos posibles trabajos
futuros que pueden desarrollarse a partir de este proyecto.
6.1 Conclusiones
La finalidad del proyecto ha sido la implementación de macros tanto en CATIA V5 y Abaqus,que
ayuden en las tareas repetitivas que se dan durante los análisis realizados por el departamento de fabricación
del procesado de conformado de chapa.Ésta es solo una de las aplicaciones de la automatización mediante
macros, de hecho la utilización de macros está extendida en otros softwares como por ejemplo Excel, donde su
uso está más extendido y el acceso a la formación es más fácil.
Al final de la consecución de éste proyecto han sido varias las tareas u objetivos que se han
alcanzado, se ha obtenido un conocimiento general de la programación orientada a objetos tanto en CATIA V5
como en Abaqus, se han generado una serie de macros, aunque no de todas se han obtenido los resultados
esperados.La automatización del proceso de conformado incremental en dos etapas no ha podido ser completa.
Del análisis de un proceso de rebordeado de agujero se ha obtenido un script bastante completo para
el cálculo de las variaciones de espesor de la chapa en el flange. Con él se han adquirido conocimientos para
poder generar scritps que analicen simulaciones de problemas de MEF a partir de archivos de entrada y nos
devuelvan archivos de salida con los resultados que queremos extraer de la simulación, ahorrándonos tiempo
de procesado.
82
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
83
REFERENCIAS
[3] http://www.esi2.us.es/~fabio/EjercicioCATIA.pdf
[4] http://www.esi2.us.es/~fabio/EjercicioCATIA.pdf
[4] http://auladeprogramacioncnc.blogspot.com.es/
[5] http://www.esi2.us.es/~fabio/EjercicioCATIA.pdf
[10] http://sergioariasfernandez.com/curso-on-line-de-abaqus/
[13] Marcos C. Borrego Puche.Análisis del Proceso de Conformado Incremental Mono-Punto de Chapa y su
Aplicación al Rebordeado de Agujeros (Hole Flanging)
[14] http://catiadoc.free.fr/online/CAAScdBase/CAAMaiScriptHome.htm
84
Glosario
GLOSARIO
ISO: International Organization for Standardization 4
UNE: Una Norma Española 4
STOCK: Bloque inicial paralelepípedo de material metálico del que se partirá para obtener la pieza definitiva
mediante sucesivas operaciones de retirada de material
APT: Automatically Programmed Tooling. Lenguaje de alto nivel para la definición de operaciones de
mecanizado en control numérico. Debe traducirse mediante un post procesador para generar el lenguaje
específico de la máquina, generalmente el ISO.
CONTROL NUMÉRICO (NC ó CN): Nos referiremos tanto al lenguaje como a la máquina que interpreta las
instrucciones del programa de mecanizado.
WORKBENCH: En CATIA V5, el contexto de trabajo con menús especializados para desarrollar una
determinada tarea o fase de concepción del producto.
SCKETCH: Es el Workbench de trabajo en dos dimensiones, a partir del que se extraen los perfiles y curvas
generatrices de la Figura tridimensional.
ANEXO A
a. Recomendaciones generales de modelado 3D en programas de diseño industrial
1. Es mejor primero construir, luego destruir y posteriormente realizar las operaciones de modificación puntual
del sólido como redondeo, chaflanes…Esto asegura tener el volumen máximo de la pieza cuanto antes,
además de unárbol de modelado ordenado y una simplificación clara de la pieza en el caso deque se tenga que
trabajar con la pieza simplificada. Si una pieza requiere de patrones o simetrías, los elementos del patrón
deberán ser considerados como subpiezas dentro de la misma pieza y se modelarán siguiendo
estarecomendación antes de ejecutar el patrón o simetría.
2. Aprovechamiento al máximo de los condicionantes geométricos de las piezas, es interesante de cara al
diseño de modelado tener claro los condicionantes geométricos de la pieza como simetrías, concentridades de
círculos, medidas que son el doble que otra, espesores constantes en diversas partes de la pieza etc… debiendo
acotar correctamente estos parámetros, emplear variables o establecer sus condicionantes geométricos.
3. Es preferible realizar perfiles sencillos.
4. No dejar grados de libertad, ni en las acotaciones de perfiles ni en las
restricciones de conjuntos.
5. Las piezas simétricas no deben ser modeladas solamente la mitad y generar la simetría o patrón a 180º (a
veces la simetría da problemas y el patrón puede resolver esos problemas), es recomendable tener un cuerpo
central común y sobre él mismo modelar una parte y luego realizar la simetría.
6. Cuando se empleen herramientas que requieran trayectorias o curvas guía, en la mayoría de casos es
preferible crear primero las trayectorias o guías y posteriormente, insertar los planos donde van los perfiles
definidos sobre esa trayectoria (por ejemplo, empleando plano perpendicular a curva).
7. Empleo de herramientas avanzadas siempre que se pueda y sea adecuado su empleo.
8. Respecto a la movilidad de conjuntos, si un conjunto es móvil, primero se definirá como fijo y cuando se
quiera estudiar su movilidad se irán anulando (que no eliminando, estas restricciones), así es posible volver a
activarlas para disponer de planos que partan del conjunto en una única posición.
84
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
85
ANEXO B
En éste apéndice se recogen las macros realizadas durante la ejecución dde éstre proyecto en el entorno
CATIA V5.
Language = "VBSCRIPT"
' Cambia los valores de los parametros en el sketch
' Parametros: R, A, W, H
' Ejecutar macro con CATPart activo pre2-deformed-sheet-2D
Sub CATMain()
Dim A, W, H As SingleDim Wmin, Wmax, Hmin, Hmax, L1, L2, pi As Single
pi = 3.141592654'
' Recupera parametros'
Set partDocument1 = CATIA.ActiveDocument
Set part1 = partDocument1.Part
Set bodies1 = part1.Bodies
Set body1 = bodies1.Item("PartBody")
Set shapes1 = body1.Shapes
Set shaft1 = shapes1.Item("Shaft.1")
Set sketch1 = shaft1.Sketch
Set constraints1 = sketch1.Constraints
Set constraint1 = constraints1.Item("R")
Set dimension1 = constraint1.Dimension
R = dimension1.Value
Set constraint2 = constraints1.Item("d0")
Set dimension2 = constraint2.Dimension
d0 = dimension2.Value
Set constraint3 = constraints1.Item("df")
Set dimension3 = constraint3.Dimension
df = dimension3.Value
'
' Recupera variables
Set constraint4 = constraints1.Item("A")
86
ANEXO B
Sub CATMain()
86
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
87
length6.Value = 30.8
89
For i = 1 To configuracion
seleccion = i
designTable2.Configuration = seleccion
part1.Update
Dim ubicacion As String ' preguntamos la ubicación para el documento nuevo CATPart
If Err.Number = 0 Then
MsgBox "El documento CATPart fue guardado en: " & ubicacion & ".CATPart"
End If
Next i
End Sub
90
ANEXO B
'Fuente original:
http://catiadoc.free.fr/online/CAAScdBase/CAAMaiScriptHome.htm
Sub CATMain()
90
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
91
Exit Sub
End if
' PROBLEMA
' El código no se guarda al archivo especificado.
' Tampoco con este método (se supone innecesario, ya lo genera InitFileGenerator):
ANEXO C
En éste apéndice se recogen las macros realizadas en Abaqus durante la ejecución de éste proyecto.En el
primer apartado se mostrarán los scripts que ejecuta la script pre4-fea-hole definition.py.En los puntos
posteriores se mostrarán el resto de scripts que completan la aplicación.
92
ANEXO C
def get_text_from_file(filename):
"""
Returns a list of floats from a text file with spaces or tabs as delimiters
"""
with open(filename) as f:
coords = []
for line in f:
if line!="\n":
coord = []
for string in line.split():
coord.append(string)
coords.append(coord)
#print(coords)
92
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
93
return coords
m01_Sheet.py
### PARTS ###
### PART: Sheet ###
mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.0)
mdb.models['Model-1'].sketches['__profile__'].sketchOptions.setValues(
viewStyle=AXISYM)
mdb.models['Model-1'].sketches['__profile__'].ConstructionLine(point1=(0.0,
-100.0), point2=(0.0, 100.0))
mdb.models['Model-1'].sketches['__profile__'].FixedConstraint(entity=
mdb.models['Model-1'].sketches['__profile__'].geometry[2])
mdb.models['Model-1'].sketches['__profile__'].rectangle(point1=(30.0, 0.0),
point2=(80.0, -1.6))
mdb.models['Model-1'].Part(dimensionality=AXISYMMETRIC, name='Sheet', type=
DEFORMABLE_BODY)
mdb.models['Model-1'].parts['Sheet'].BaseShell(sketch=
mdb.models['Model-1'].sketches['__profile__'])
del mdb.models['Model-1'].sketches['__profile__']
# Partition
mdb.models['Model-1'].ConstrainedSketch(gridSpacing=4.0, name='__profile__',
sheetSize=160.03, transform=
mdb.models['Model-1'].parts['Sheet'].MakeSketchTransform(
sketchPlane=mdb.models['Model-1'].parts['Sheet'].faces[0],
sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(55.0, -0.8, 0.0)))
mdb.models['Model-1'].parts['Sheet'].projectReferencesOntoSketch(filter=
COPLANAR_EDGES, sketch=mdb.models['Model-1'].sketches['__profile__'])
mdb.models['Model-1'].sketches['__profile__'].vertices[4], entity2=
mdb.models['Model-1'].sketches['__profile__'].geometry[2])
mdb.models['Model-1'].sketches['__profile__'].CoincidentConstraint(
addUndoState=False, entity1=
mdb.models['Model-1'].sketches['__profile__'].vertices[5], entity2=
mdb.models['Model-1'].sketches['__profile__'].geometry[4])
mdb.models['Model-1'].sketches['__profile__'].HorizontalDimension(textPoint=(
13.8909530639648, -2.5391740322113), value=20.0, vertex1=
mdb.models['Model-1'].sketches['__profile__'].vertices[5], vertex2=
mdb.models['Model-1'].sketches['__profile__'].vertices[3])
mdb.models['Model-1'].parts['Sheet'].PartitionFaceBySketch(faces=
mdb.models['Model-1'].parts['Sheet'].faces.getSequenceFromMask(('[#1 ]', ),
), sketch=mdb.models['Model-1'].sketches['__profile__'])
del mdb.models['Model-1'].sketches['__profile__']
m02_Blankholder.py
### PART: Blankholder ###
mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.0)
mdb.models['Model-1'].sketches['__profile__'].sketchOptions.setValues(
viewStyle=AXISYM)
mdb.models['Model-1'].sketches['__profile__'].ConstructionLine(point1=(0.0,
-100.0), point2=(0.0, 100.0))
mdb.models['Model-1'].sketches['__profile__'].FixedConstraint(entity=
mdb.models['Model-1'].sketches['__profile__'].geometry[2])
mdb.models['Model-1'].sketches['__profile__'].rectangle(point1=(50.0, -t0),
point2=(80.0, -(t0 + blankholder_height)))
mdb.models['Model-1'].sketches['__profile__'].FilletByRadius(curve1=
mdb.models['Model-1'].sketches['__profile__'].geometry[6], curve2=
mdb.models['Model-1'].sketches['__profile__'].geometry[3], nearPoint1=(
58.6883964538574, -1.41037178039551), nearPoint2=(49.953296661377,
-6.41179847717285), radius=blankholder_radius)
mdb.models['Model-1'].Part(dimensionality=AXISYMMETRIC, name='Blankholder', type=
DISCRETE_RIGID_SURFACE)
mdb.models['Model-1'].parts['Blankholder'].BaseWire(sketch=
mdb.models['Model-1'].sketches['__profile__'])
del mdb.models['Model-1'].sketches['__profile__']
94
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
95
# Reference point
mdb.models['Model-1'].parts['Blankholder'].ReferencePoint(point=
mdb.models['Model-1'].parts['Blankholder'].vertices[1])
m03_Tool1
### PART: Forming Tool 1 (for hole-flanging in 1 stage) ###
tool1_height= R_tool+1
Rf_up=Rf
Rf_bot= Rf-R_tool
tool1_width= Rf
mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.0)
mdb.models['Model-1'].sketches['__profile__'].sketchOptions.setValues(viewStyle=AXISYM)
mdb.models['Model-1'].sketches['__profile__'].ConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0))
mdb.models['Model-1'].sketches['__profile__'].FixedConstraint(entity=mdb.models['Model-
1'].sketches['__profile__'].geometry[2])
mdb.models['Model-1'].sketches['__profile__'].Line(point1=(0.0, 1.0), point2=(tool1_width, 1.0))
mdb.models['Model-1'].sketches['__profile__'].HorizontalConstraint(
addUndoState=False, entity=
mdb.models['Model-1'].sketches['__profile__'].geometry[3])
mdb.models['Model-1'].sketches['__profile__'].Line(point1=(tool1_width, 1.0), point2=(tool1_width,
tool1_height + 1.0))
mdb.models['Model-1'].sketches['__profile__'].VerticalConstraint(addUndoState=
False, entity=mdb.models['Model-1'].sketches['__profile__'].geometry[4])
mdb.models['Model-1'].sketches['__profile__'].PerpendicularConstraint(
addUndoState=False, entity1=
mdb.models['Model-1'].sketches['__profile__'].geometry[3], entity2=
mdb.models['Model-1'].sketches['__profile__'].geometry[4])
mdb.models['Model-1'].sketches['__profile__'].Line(point1=(tool1_width, tool1_height + 1.0), point2=(0.0,
tool1_height + 1.0))
mdb.models['Model-1'].sketches['__profile__'].HorizontalConstraint(
addUndoState=False, entity=
mdb.models['Model-1'].sketches['__profile__'].geometry[5])
mdb.models['Model-1'].sketches['__profile__'].PerpendicularConstraint(
addUndoState=False, entity1=
mdb.models['Model-1'].sketches['__profile__'].geometry[4], entity2=
mdb.models['Model-1'].sketches['__profile__'].geometry[5])
mdb.models['Model-1'].sketches['__profile__'].FilletByRadius(curve1=
96
ANEXO C
mdb.models['Model-1'].sketches['__profile__'].geometry[3], curve2=
mdb.models['Model-1'].sketches['__profile__'].geometry[4], nearPoint1=(
Rf_bot,1), nearPoint2=(Rf,
1+R_tool), radius=R_tool)
mdb.models['Model-1'].Part(dimensionality=AXISYMMETRIC, name=tool,
type=DISCRETE_RIGID_SURFACE)
mdb.models['Model-1'].parts[tooling[i]].BaseWire(sketch=mdb.models['Model-1'].sketches['__profile__'])
del mdb.models['Model-1'].sketches['__profile__']
# Reference point
mdb.models['Model-1'].parts[tooling[i]].ReferencePoint(point=(tool1_width - R_tool, 1.0, 0.0))
m04_Material.py
# Data from file: tableElastic, tablePlastic
mdb.models['Model-1'].Material(name='AA7075-O')
mdb.models['Model-1'].materials['AA7075-O'].Elastic(tableElastic)
mdb.models['Model-1'].materials['AA7075-O'].Plastic(tablePlastic)
# Section
mdb.models['Model-1'].HomogeneousSolidSection(material='AA7075-O', name=
'Section-AA7075-O', thickness=None)
# Section assignment
mdb.models['Model-1'].parts['Sheet'].SectionAssignment(offset=0.0, offsetField=
'', offsetType=MIDDLE_SURFACE, region=Region(
faces=mdb.models['Model-1'].parts['Sheet'].faces.getSequenceFromMask(mask=(
'[#3 ]', ), )), sectionName='Section-AA7075-O', thicknessAssignment=
FROM_SECTION)
m04_Sets.py
## SETS ###
# Sheet top and bottom surfaces
mdb.models['Model-1'].parts['Sheet'].Set(edges=
mdb.models['Model-1'].parts['Sheet'].edges.getSequenceFromMask(('[#2 ]', ),
), name='Set-Top-Surface')
mdb.models['Model-1'].parts['Sheet'].Set(edges=
mdb.models['Model-1'].parts['Sheet'].edges.getSequenceFromMask(('[#8 ]', ),
), name='Set-Bottom-Surface')
96
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
97
m05_Mesh.py
sheet_mesh_size = 0.5
blankholder_mesh_size = 0.1
tools_mesh_size = 0.1
mdb.models['Model-1'].parts['Sheet'].seedPart(deviationFactor=0.1, size=sheet_mesh_size)
mdb.models['Model-1'].parts['Sheet'].generateMesh()
mdb.models['Model-1'].parts['Blankholder'].seedPart(deviationFactor=0.1, size=blankholder_mesh_size)
mdb.models['Model-1'].parts['Blankholder'].generateMesh()
for i in range(len(tooling)):
tool=tooling[i]
mdb.models['Model-1'].parts[tool].seedPart(deviationFactor=0.1, size=tools_mesh_size)
mdb.models['Model-1'].parts[tool].generateMesh()
m06_Assembly.py
### ASSEMBLY ###
mdb.models['Model-1'].rootAssembly.DatumCsysByThreePoints(coordSysType=
CYLINDRICAL, origin=(0.0, 0.0, 0.0), point1=(1.0, 0.0, 0.0), point2=(0.0,
0.0, -1.0))
mdb.models['Model-1'].rootAssembly.Instance(dependent=ON, name='Sheet-1', part=
mdb.models['Model-1'].parts['Sheet'])
mdb.models['Model-1'].rootAssembly.Instance(dependent=ON, name='Blankholder-1',
part=mdb.models['Model-1'].parts['Blankholder'])
for i in range(len(tooling)):
tool=tooling[i]
mdb.models['Model-1'].rootAssembly.Instance(dependent=ON, name=tool,
part=mdb.models['Model-1'].parts[tool]
m07_Steps_HF1stage.py
### STEPS ###
mdb.models['Model-1'].StaticStep(initialInc=1e-15, maxInc=0.1, maxNumInc=100000
, minInc=1e-25, name='Step-1-Forming', previous='Initial', timePeriod=10)
mdb.models['Model-1'].steps['Step-1-Forming'].setValues(nlgeom=ON)
98
ANEXO C
mdb.models['Model-1'].FieldOutputRequest(createStepName='Step-1-Forming'
, frequency=LAST_INCREMENT, name='F-Output-Bottom-Surface', rebar=EXCLUDE, region=
mdb.models['Model-1'].rootAssembly.instances['Sheet-1'].sets['Set-Bottom-Surface']
, sectionPoints=DEFAULT, variables=('U', ))
mdb.models['Model-1'].FieldOutputRequest(createStepName='Step-1-Forming'
, frequency=LAST_INCREMENT, name='F-Output-Top-Surface', rebar=EXCLUDE,
region=
mdb.models['Model-1'].rootAssembly.instances['Sheet-1'].sets['Set-Top-Surface']
, sectionPoints=DEFAULT, variables=('U', ))
m08_Contacts.py
### CONTACTS ###
tools_friction = 0.3
# Contact properties
mdb.models['Model-1'].ContactProperty('ContactProp-Blankholder')
mdb.models['Model-1'].interactionProperties['ContactProp-Blankholder'].TangentialBehavior(
formulation=FRICTIONLESS)
mdb.models['Model-1'].interactionProperties['ContactProp-Blankholder'].NormalBehavior(
allowSeparation=ON, constraintEnforcementMethod=DEFAULT,
pressureOverclosure=HARD)
mdb.models['Model-1'].ContactProperty('ContactProp-Tool')
mdb.models['Model-1'].interactionProperties['ContactProp-Tool'].TangentialBehavior(
dependencies=0, directionality=ISOTROPIC, elasticSlipStiffness=None,
formulation=PENALTY, fraction=0.005, maximumElasticSlip=FRACTION,
pressureDependency=OFF, shearStressLimit=None, slipRateDependency=OFF,
table=((tools_friction, ), ), temperatureDependency=OFF)
mdb.models['Model-1'].interactionProperties['ContactProp-Tool'].NormalBehavior(
allowSeparation=ON, constraintEnforcementMethod=DEFAULT,
pressureOverclosure=HARD)
# Contacts
mdb.models['Model-1'].SurfaceToSurfaceContactStd(adjustMethod=NONE,
clearanceRegion=None, createStepName='Initial', datumAxis=None,
98
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
99
initialClearance=OMIT, interactionProperty='ContactProp-Blankholder',
master=Region(
side1Edges=mdb.models['Model-1'].rootAssembly.instances['Blankholder-
1'].edges.getSequenceFromMask(
mask=('[#2 ]', ), ),
side2Edges=mdb.models['Model-1'].rootAssembly.instances['Blankholder-
1'].edges.getSequenceFromMask(
mask=('[#13 ]', ), )), name='Contact-Blankholder', slave=Region(
side1Edges=mdb.models['Model-1'].rootAssembly.instances['Sheet-1'].edges.getSequenceFromMask(
mask=('[#18 ]', ), )), sliding=FINITE, thickness=ON)
for i in range(len(tooling)):
tool=tooling[i]
mdb.models['Model-1'].SurfaceToSurfaceContactStd(adjustMethod=NONE,
clearanceRegion=None, createStepName='Initial', datumAxis=None,
initialClearance=OMIT, interactionProperty='ContactProp-Tool', master=
Region(
side2Edges=mdb.models['Model-1'].rootAssembly.instances[tool].edges.getSequenceFromMask(
mask=('[#7 ]', ), )), name='Contact'+ tool, slave=RegionsideEdges=mdb.models['Model-
1'].rootAssembly.instances['Sheet-1'].edges.getSequenceFromMask(
mask=('[#6 ]', ), )), sliding=FINITE, thickness=ON)
m09_BC-Initial.py
### BOUNDARY CONDITIONS ###
# STEP 1: Encastre
mdb.models['Model-1'].EncastreBC(createStepName='Initial', name=
'BC-1-Encastre-Blankholder', region=Region(referencePoints=(
mdb.models['Model-1'].rootAssembly.instances['Blankholder-1'].referencePoints[2], )))
mdb.models['Model-1'].EncastreBC(createStepName='Initial', name=
'BC-2-Encastre-Sheet', region=Region(
edges=mdb.models['Model-1'].rootAssembly.instances['Sheet-1'].edges.getSequenceFromMask(
mask=('[#40 ]', ), )))
m09_BC-HF1stage.py
### BOUNDARY CONDITIONS ###
# Amplitude: data_toolpath
# STEP 2: Un-encastre and move tool
mdb.models['Model1'].TabularAmplitude(data=data_toolpath,name='Amp1',smooth=SOLVER_DEFAULT,ti
100
ANEXO C
meSpan=STEP)
for i in range(len(tooling)):
tool=tooling[i]
mdb.models['Model-1'].DisplacementBC(amplitude='Amp-1', createStepName=
'Step-1-Forming', distributionType=UNIFORM, fieldName='', fixed=OFF,
localCsys=None, name='BC-4-Move-'+tool, region=Region(referencePoints=(
mdb.models['Model-1'].rootAssembly.instances[tool].referencePoints[2], )), u1=0.0, u2=0.0, ur3=0.0)
m10_Job.py
## JOB AND CALCULATE ###
#Set the value of my BC in the current tool
mdb.models['Model-1'].boundaryConditions['BC-4-Move-'+tool].setValues(u2=1)
mdb.jobs[jobname].submit(consistencyChecking=OFF)
mdb.jobs[jobname].waitForCompletion()
mdb.models['Model-1'].boundaryConditions['BC-4-Move-'+tool].setValues(u2=0)
100
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
101
#import os
dirPaths = "gen2-tool-path/"
dirFEA = "pre4-fea-definition/"
execfile(dirFEA + "func_auxiliar.py")
dirResults = 'gen4-sheet-thickness/'
t0=1.6
tf=1.6
Rf = 50 - tf
blankholder_height = 25
blankholder_radius = 1
### PARTS ###
execfile(dirFEA + "m01_Sheet.py")
execfile(dirFEA + "m02_Blankholder.py")
for i in range(len(R)):
R_tool=R[i]
tool=tooling[i]
execfile(dirFEA + "m03_Tool1.py")
### MATERIAL AND SECTION ###
tableElastic = get_data_from_file(dirFEA + "AA7075O-Elastic.txt")
tablePlastic = get_data_from_file(dirFEA + "AA7075O-Hollomon314n13.txt")
execfile(dirFEA + "m04_Material.py")
### SETS ###
102
ANEXO C
execfile(dirFEA + "m04_Sets.py")
### MESH ###
execfile(dirFEA + "m05_Mesh.py")
### ASSEMBLY ###
execfile(dirFEA + "m06_Assembly.py")
### STEPS AND FIELD OUTPUTS ###
execfile(dirFEA + "m07_Steps_HF1stage.py")
### CONTACTS ###
execfile(dirFEA + "m08_Contacts.py")
### BOUNDARY CONDITIONS ###
execfile(dirFEA + "m09_BC-Initial.py")
data_toolpath = get_data_from_file(dirPaths + "tool-path-Z.csv")
execfile(dirFEA + "m09_BC_HF1stage.py")
### JOB AND CALCULATE ###
for i in range(len(tooling)):
tool=tooling[i]
jobname = 'gen3-HF1st-R_tool' + tool
execfile(dirFEA + "m10_Job.py")
### OUTPUT ###
execfile("pre5-fea-results.py")
### Thickness calculation
for i in range(len(tooling)):
tool=tooling[i]
execfile("scr7-calculate-sheet-thickness.py")
execfile("scr8-draw-graph.py")
102
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
103
pthT = session.paths['Path-Top-Surface']
pthT = session.paths['Path-Top-Surface']
pthB = session.paths['Path-Bottom-Surface']
# Path-Top-Surface: get U1, U2
session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(variableLabel='U', outputPosition=NODAL,
refinement=(COMPONENT, 'U1'))
session.XYDataFromPath(name='Top-U1', path=pthT, includeIntersections=False, shape=DEFORMED,
labelType=TRUE_DISTANCE)
session.XYDataFromPath(name='Bottom-U1', path=pthB, includeIntersections=False, shape=DEFORMED,
labelType=TRUE_DISTANCE)
d. Macro scr7-calculate-sheet-thickness.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import math
104
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
105
b1[1] = b1[1] - t0
b2[1] = b2[1] - t0
#print(t1, t2, b1, b2)
a.append(t0 * average_distance(t1, t2, b1, b2))
return a
106
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
107
def get_data(filename):
"""
Returns a list with data: U1, U2
"""
a = []
with open(filename) as f:
cont = 0
str = f.readline()
str = f.readline()
str = f.readline()
for line in f:
cont = cont+1
str = ' '.join(line.split()) # Collapse multiple spaces into one
if str !='':
x, u1, u2 = str.split()
u1 = round(float(u1), 3)
u2 = round(float(u2), 3)
a.append([u1, u2])
return a
def calculate_thickness(tool):
dirPaths = 'gen4-sheet-thickness/'
file_bot = dirPaths + 'gen4-U-bottom-' + str(tool) + '.rpt'
file_top = dirPaths + 'gen4-U-top-' + str(tool) + '.rpt'
file_thickness = dirPaths + 'gen4-thickness-' + str(tool) + '.csv'
data_bot = get_data(file_bot)
data_top = get_data(file_top)
t = thickness(data_top, data_bot)
f = open(file_thickness, 'w')
#f.write('U2_top, thickness\n')
for i in range(len(t)):
f.write('%.3f, %.3f\n' % (-data_top[i][1], t[i]))
f.close()
calculate_thickness(tool)
108
ANEXO C
e. Macro scr8-draw-graph.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
dirFEA = "pre4-fea-definition/"
dirPaths = 'gen4-sheet-thickness/'
dirGraphs = 'gen5-graph/'
def get_text_from_file(filename):
"""
Returns a list of floats from a text file with spaces or tabs as delimiters
"""
with open(filename) as f:
coords = []
for line in f:
if line!="\n":
coord = []
for string in line.split():
coord.append(string)
coords.append(coord)
return coords
#===============================================================
#===============================================================
params = get_text_from_file(dirFEA + "params.txt")
R = []
tooling = []
for i in range(len(params)):
R.append(params[i][0])
tooling.append(params[i][1])
plt.rcParams["figure.figsize"] = (4, 6)
108
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
109
plt.rcParams["figure.figsize"] = (3.54, 5)
plt.rcParams["figure.figsize"] = (3.2, 3.3)
plt.rcParams["font.family"] = 'sans-serif'
plt.rcParams["font.sans-serif"] = 'Arial, Helvetica, sans-serif'
plt.rcParams["font.size"] = 12
plt.rcParams["figure.subplot.left"] = 0.24
plt.rcParams["figure.subplot.right"] = 0.95
plt.rcParams["figure.subplot.bottom"] = 0.13
plt.rcParams["figure.subplot.top"] = 0.97
plt.rcParams["axes.labelsize"] = 'medium'
plt.rcParams["legend.fontsize"] = 'medium'
fig, ax = plt.subplots()
for i in range(len(R)):
R_tool = R[i]
tool = tooling[i]