Está en la página 1de 127

Proyecto Fin de Carrera

Ingeniería Aeronáutica

Programación de macros en CATIA V5 y Abaqus


para el análisis de conformado de chapa

Autor: Antonio Segura Valverde


Tutor: Domingo Morales Palma

Equation Chapter 1 Section 1

Dpto. de Ingeniería Mecánica y Fabricación


Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017
Proyecto Fin de Carrera
Ingeniería Aeronáutica

Programación de macros en CATIA V5 y Abaqus


para el análisis de conformado de chapa

Autor:
Antonio Segura Valverde

Tutor:
Domingo Morales Palma
Profesor Contratado Doctor

Dpto. de Ingeniería Mecánica y Fabricación


Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017

iii
Proyecto Fin de Carrera: Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de
chapa

Autor: Antonio Segura Valverde

Tutor: Domingo Morales Palma

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificación de:

Sevilla, 2017

El Secretario del Tribunal

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

Tabla 2.2 Operaciones básicas de mecanizado CATIA V5 10

Tabla 2.3 Propiedades y acciones del objeto Part y Product 20

Tabla 2.4 Objetos del PartDesign 22

Tabla 2.5 Objetos del Sketcher 23

Tabla 2.6 Tipo de cotas y su nomenclatura interna en CATIA V5 24

Tabla 2.7 Herramientas del Shapefactory 24

Tabla 2.8 Herramientas para programar un hole 27

Tabla 3.1 Sistemas de unidades consistentes 34

Tabla 3.2 Librerías de Abaqus 53

ÍNDICE DE CÓDIGOS
Código 1.Definición del objeto shapefactory 25

Código 2.Definición de un objeto Pad 25

Código 3.Referencia del pad 1. 25

Código 4.Referencia del pad 2. 26

Código 5.Pocket 26

Código 6. Referencia para un hole 26

Código 7.Hole 27

Código 8. Slot 27

Código 9.Shaft 28

Código 10.Rib 29

Código 11. Ejemplo uso de comandos para acceder a objetos 51

Código 12. Ejemplo uso de comandos para crear un Part 51


ÍNDICE DE FIGURAS

Figura 2.1 Pantalla inicial de trabajo CATIA V5 4

Figura 2.2 Área de trabajo del Part Design 5

Figura 2.3 Zona de trabajo del sketch 7

Figura 2.4 Pieza final generada 7

Figura 2.5 Zona de trabajo módulo Machining 8

Figura 2.6 Ventana de diálogo del Part Operation 9

Figura 2.7 Ventana de diálogo para definir una operación del Part Operation 11

Figura 2.8 Parámetros a definir de la herramienta 11

Figura 2.9 Parámetros a definir la trayectoria de la herramienta 12

Figura 2.10 Menú parámetros de conFiguración de feed rate and spindle 12

Figura 2.11 Menú Macros 13

Figura 2.12 Generación de código APT mediante la GUI de CATIA 14

Figura 2.13 Muestra de código APT generado en CATIA 15

Figura 2.14 Acceso al menú de macros mediante la GUI 16

Figura 2.15 Entorno VBA 17

Figura 2.16 Ayuda CAA V5 Visual Basic Help 18

Figura 2.17. Object browser 19

Figura 2.18 Estructura del módulo del Part Design 21

Figura 2.19 Estructura del modulo de Sketcher 22

Figura 2.20 Árbol de trabajo de CATIA en el módulo de Prismatic Machining (Process 29


tree). Objetos del Process

Figura 2.21 Estructura del módulo de Machining 30

Figura 2.22 Extracto de código del documento CATIA V5 Automation help 30

Figura 2.23 Ventana descripción del objeto Manufacturing Setup 31

Figura 3.1 Ventana de trabajo Abaqus/CAE 34

Figura 3.2 Opciones para modelado 3D(izquierda),2D (centro) y Axialsimétrico 35


(derecha.)

xv
Figura 3.3 Cuadro de edición de un material 35

Figura 3.4 Creación de una sección solida (arriba izquierda),de placa 36


(arriba,derecha),de viga (abajo izquierda) u otra (abajo,derecha)

Figura. 3.5 Ventana de edición del Módulo Assembly 37

Figura. 3.6 Creación de un step 37

Figura. 3.7 Creación de una propiedad de interacción. 38

Figura. 3.8 Creación de una interacción. 38

Figura 3.9 Condiciones de contorno Mechanical y Otras 39

Figura. 3.10 Tipos de carga para un análisis estático general 39

Figura. 3.11 Menú de herramientas del módulo mesh 40

Figura. 3.12 Módulo de visualización de resultados 40

Figura 3.13 Clasificación de los procesos de conformado 41

Figura 3.14 Part chapa (izquierda), Part punzón (centro) y Part Blankholder (derecha) 42

Figura 3.15 Ventanas de edición de un material en abaqus propiedades elásticas y 42


plásticas

Figura.3.16 Ventanas de edición de secciones 43

Figura.3.17 Mallado del Part Sheet en el Módulo Mesh 43

Figura.3.18 Mallado del Part Blankholder en el Módulo Mesh 44

Figura.3.19 Mallado del Part Tool en el Módulo Mesh 44

Figura.3.20 Assembly del modelado del proceso de conformado de chapa 44

Figura.3.21Definición del Step 45

Figura.3.22Definición Field Output Request 45

Figura.3.23 Configuración Interaction Placa-Blankholder 46

Figura.3.24 Configuración Interaction Placa-Punzón 46

Figura.3.25 Configuración Cargas y condiciones de contorno 47

Figura.3.26 Monitorización del Job 47

Figura.3.27 Visualización del problema de conformado de chapa deformación final de 48


la chapa

Figura.3.28 Visualización del problema de conformado de chapa Tensione de V Mises 48


de la chapa
Figura.3.29 Visualización del problema de conformado de chapa valores de PEEQ 49
(Equivalent plastic strain) de la chapa

Figura 3.30 Esquema de iteracción entre Abaqus Scripting Interface y Abaqus/CAE 49


kernel

Figura 3.31 Estructura del modelo de objetos en Abaqus 51

Figura 3.32 Captura del Abaqus Scripting User’s Manual 52

Figura 3.33 Extracto del inicio de un archivo *.jnl 52

Figura. 3.34 Importación de las librerías a utilizar en el script 54

Figura. 3.35 Estructura del modelo de objetos en Part 54

Figura. 3.36 Esquema del modelado del proceso de conformado 55

Figura. 3.37 Extracto de código para le generación de los parts del modelo 56

Figura. 3.38 Extracto de código para le generación de partición 57

Figura. 3.39 Extracto de código para creación de material, sección y asignación de 57


sección

Figura. 3.40 Extracto de código para mallar los parts 58

Figura. 3.41 Estructura del modelo de objetos del rootAssembly 58

Figura. 3.42 Extracto de código perteneciente al assembly 59

Figura. 3.43 Extracto de código perteneciente a la creación del step y configuración de 59


los datos de salida del análisis

Figura. 3.44 Extracto de código para la configuración de contactos en el modelo 60

Figura. 3.45 Extracto de código para la definición de las condiciones de contorno 60

Figura. 3.46 Extracto de código para definir el job 61

Figura. 3.47 Estructura del modelo de objetos del odb 61

Figura. 3.48 Estructura del modelo de objetos bajo el objeto session 62

Figura. 3.49 Extracto de código para crear una ventana de visualización y mostrar 62
resultados del análisis

Figura 4.1 Boceto trayectorias de herramienta en SPIF y parametrización de 64


trayectorias en conformado en 2 etapas

Figura 4.2 Esquema de definición de parámetros en nuestra aplicación 65

Figura 4.3 Restricciones geométricas de nuestro modelo y relación entre parámetros y 65


variables

Figura 4.4 Sketch trayectoria con parámetros A=30mm, W=5mm y H=7mm 66

xvii
Figura 4.5 Part generado Hole Flanging 2 pasadas (A=30mm,W=5mm y H=7mm) 66

Figura 4.6 Configuración de estrategia de trayectoria 67

Figura 4.7 Configuración geometría a mecanizar 67

Figura 4.8 Configuración del feed rate y spindle 67

Figura 4.9 Configuración de macros de aproximación 67

Figura 4.10 Imagen del process utilizado para la generación de trayectorias 68

Figura 4.11 Macro 01-update-geometry 69

Figura 4.12 Macro generación de APT 69

Figura 4.13 Visualización de las ventanas emergentes que aparecen al ejecutar la macro 70
Macro 01-update-geometry

Figura 5.1 Esquema relación entre archivos en nuestra aplicación CAE 71

Figura 5.2 Archivos de entrada de datos a la aplicación CAE 72

Figura 5.3 Estructura del If 72

Figura 5.4 Estructura del for 72

Figura 5.5 Esquemas del proceso de Hole Flanging en una sola etapa 73

Figura 5.6 Esquemas del proceso de Hole Flanging modelado en Abaqus 74

Figura 5.7 Script pre4-fea-hole definition.py 75

Figura 5.8 Script creación parts de herramientas 76

Figura 5.9 Script del mallado del modelo 76

Figura 5.10 Script del Assembly 76

Figura 5.11 Script condiciones de contorno en Step 2 77

Figura 5.12 Script conFiguración de contactos entre chapa-herramienta y chapa- 77


sistema de sujección

Figura 5.13 Script de creación de Jobs 77

Figura 5.14 Gráfica Hole-flanging en una sola pasada 78

Figura 5.15 Visualización del análisis para herramienta de radio de curvatura 10mm 79

Figura 6.1 Esquema del proceso de automatización de la tarea 80


1 INTRODUCCIÓN
1.1 Contexto del proyecto
Hoy en día existe una necesidad cada vez más exigente para el desarrollo de técnicas de fabricación
ágiles que puedan ser fácilmente adaptables a la introducción de nuevos productos en el mercado. La industria
del conformado de metales está en continua búsqueda y desarrollo de nuevas tecnologías que permitan el
ahorro de tiempo y costes
En este contexto, el grupo de investigación del departamento de Ingeniería Mecánica y Fabricación de la
Universidad de Sevilla, investiga desde hace varios años sobre el conformado de chapa metálica en diferentes
materiales. Actualmente, el grupo usa el software CATIA V5 para la realización del mecanizado de piezas con
las máquinas de control numérico disponibles en el taller, tanto para el proceso de conformado incremental en
dos etapas, como para el proceso de rebordeo de agujero en una etapa. El estudio de diversos parámetros que
influyan en el fallo en proceso de conformado incremental provoca, que se realicen varios modelos cambiando
una serie de parámetros en busca de la relación con el fallo. El estudio de trayectorias de la herramienta es uno
de los ensayos realizados. La aplicación de macros en la generación del código APT con la trayectoria de la
herramienta sería una herramienta de gran ayuda en el desarrollo de ensayos reales y de análisis en software
CAE.

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

1.3 Estructura de la memoria


Éste proyecto está organizado en seis capítulos, incluyendo la presente introducción.
El Capítulo 2 engloba los apartados teóricos dedicados a la Automatización en CATIA V5 mediante
macros. Contiene una visión general del software de CAM/CAD CATIA V5, los módulos de Part Design y
Prismatic Machining, se realiza una introducción a la programación en Visual Basic en el entorno CATIA y
las singularidades en cada uno de los módulos que son necesarios para el modelado de las trayectorias de
fabricación y la obtención del código APT.
En el Capítulo 3 se engloban los apartados teóricos dedicados a la Automatización en Abaqus
mediante macros o scripts. La distribución es similar a la del capítulo anterior, visión general del software
CAE Abaqus, se explican los módulos que lo componen y se genera un modelo para el análisis de un
conformado de chapa genérico.
En el Capítulo 4 se desarrolla la aplicación de macros a un proceso de conformado incremental en 2
etapas.Se desarrollan macros para automatizar las tareas necesarias para generar las trayectorias del punzón en
el proceso de conformado de dos etapas.
En el Capítulo 5 se desarrolla la aplicación de macros en el análisis del proceso de rebordeo de
agujero para el estudio la dependencia del espesor de la chapa con el radio de curvatura de la herramienta de
procesado.
El Capítulo 6 muestra las conclusiones principales de este trabajo y los posibles trabajos futuros que
pueden derivarse de este proyecto.
Al final de este documento se adjuntan tres anexos, uno con consejos a seguir para el modelado de
una pieza 3D en CATIA V5, otro dos con los scripts generados en visual Basic para CATIA V5 y en Python
para Abaqus.
2 AUTOMATIZACIÓN CON CATIA V5

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.

2.1 Introducción a CATIA V5


CATIA (Computer-Aided Three dimensional Interactive Application) es un programa informático de
diseño, fabricación e ingeniería asistida por computadora comercial realizado por Dassault Systèmes. El
programa está desarrollado para proporcionar apoyo desde la concepción del diseño hasta la producción y
el análisis de productos.

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

Figura 2.1 Pantalla inicial de trabajo 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

2.2 Modelado de piezas (Part Design)


Dentro del modulo del Mechanical Design se encuentra el submódulo de Part Desing. En CATIA se
puede diseñar piezas mecánicas en 3D de forma intuitiva gracias a su interfaz de usuario (GUI). En dicho
módulo el usuario puede modelar una pieza partiendo de un sketch, dibujo en un plano de referencia, y
mediante distintos commandos darle profundidad, hacerle agujeros, rebordeo etc…
A continuación vamos a realizar una breve descripción del área de trabajo del Part Design. Para acceder a ella
seleccionamos “File- New” y se abrirá un cuadro de diálogo, “List of types”. Seleccionamos “Part” y
automáticamente se abrirá el área de trabajo del Part Design.

Figura 2.2 Área de trabajo del Part Design

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

Sketch. – Herramienta utilizado para crear un sketch y abrir el toolset de Sketch

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.

Pocket. – Herramienta análoga al Pad, el efecto es la retirada de material o vaciado.

Shaft. – Herramienta para crear un sólido a partir de la revolución de un perfil sobre un eje.

Groove. - Herramienta para acanalar.

Hole. – Herramienta para realizar agujeros a partir de un sketch circle.

Rib. - Herramienta para realizar extrusionados.

Slot. – Herramienta para crear ranuras.

Stiffener. – Herramienta para crear nervios.

Edge Fillet. – Herramienta par biselar.

Chamfer. – Herramienta para crear chaflanes.

Constraint. – Herramienta utilizado para acotar las dimesiones del sketch.

Tabla 2.1. Operaciones básicas en Part Design


Para generar cualquier pieza el primer paso es realizar un sketch, en el cuál se creara uno de los perfiles de la
pieza a la cual se le dará profundidad posteriormente con uno de los comandos específicos, como por ejemplo
podría ser el Pad.
En el anexo se enumeran unas pautas para modelado en 3D generales. Como resultado de la combinación de
sketches y operaciones del Part Design se modelaría una pieza en 3D con CATIA. En la figura 2.4 observamos
una pieza en 3D realizada a través de un sketch. sección en un plano ZY y su revolución en torno al eje Z
,usando la operación Shaft, nos dá como resultado dicha pieza en 3D.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
7

Figura 2.3 Zona de trabajo del sketch

Figura 2.4 Pieza final generada


8 Automatización con CATIA V5

2.3 Simulación de mecanizado de piezas (Prismatic Machining)


Uno de los módulos más interesantes de CATIA V5 desde el punto de vista de la
fabricación.CATIA, como herramienta CAD/CAM, te permite modelar una pieza en 3D y gracias al módulo
Machining simular el proceso de mecanizado, con las distintas operaciones de mecanizado que sean necesarias
para obtener la pieza final a partir del lingote,tocho o pieza previamente conformada.CATIA nos da una
opción de generar el código APT para el posterior uso en una máquina de Control Numérico.
El último paso dentro de CATIA para materializar el diseño en un objeto real consiste en definir, de manera
gráfica e interactiva, las operaciones y movimientos que debe hacer una máquina herramienta de control
numérico (MHCN en adelante) a partir del stock para llegar al objetivo. Dichas operaciones, como es sabido,
se indican a la máquina mediante un programa de control numérico, escrito en un lenguaje comprensible para
la máquina. En la industria existen dos tipos de lenguajes que son totalmente válidos para nuestros propósitos,
pero con algunas diferencias:
• APT (Automatically Programmed Tooling). Es un lenguaje de alto nivel, en el sentido en que
posee sentencias de complejo significado geométrico, que una máquina elemental de Control
Numércio no podría interpretar. Podría decirse que su gramática es relativamente próxima al
lenguaje humano. Tiene la ventaja de que no esta particularizada para ningún modelo o fabricante de
MHCN.
• Lenguaje ISO, también conocido como “palabras G”. Es el lenguaje que interpretan todas la
máquinas comerciales de hoy en día, aunque existen ligeras variaciones de un fabricante a otro. Es,
por lo dicho, un lenguaje de bajo nivel.
A continuación en la figura 2.5 vemos la zona de trabajo en el módulo de Machining, sub-módulo Prismatic
Machining. Explicaremos a grandes rasgos las herramientas más communes del módulo y los pasos a realizar
para obtener como obejtivo la generación de un código APT.

Figura 2.5 Zona de trabajo módulo Machining

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.

Figura 2.6 Ventana de diálogo del Part Operation

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.

Un parámetro indispensable es el Part o Product ( ), en el cuál se asocial un CATProduct o CATPart al part


operation.
Respecto a parámetros geométricos relevantes encontramos:
 Design Part.- Si queremos hacer simulaciones visuales del procesado de la pieza.Se selecciona la
pieza a mecanizar
 Stock.- Por defecto CATIA creará uno,pero es posible seleccionar una pieza creada por el usuario
como Stock.

 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]

Milling Operations Descripción

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

Groove Milling Operations Operación de ranurado

Operación de punto a punto


Point to Point Operations

Tabla 2.2 Operaciones básicas de mecanizado CATIA V5

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

 La herramienta que va a ser utilizada para el mecanizado . -Elección de la herramienta y


definición de la geometría de la herramienta. Los datos que se definen en este apartado son
fundamentales tanto para la generación del programa de control numérico (p. ej. para el ajuste de
radio) como para la correcta simulación y previsualización de la operación mecanizado. Todos los
parámetros que aparecen en la Figura X son editables por el usuario.

-db,.Diámetro del vástago


-D.- Diámetro del cabezal de la herramienta
-L.- Longitud total de la herramienta
-Rc.-Radio de curvatura del cabezal de la
herramienta

Figura 2.8 Parámetros a definir de la herramienta

 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.

Figura 2.9 Parámetros a definir la trayectoria de la herramienta

 Velocidades de rotación y de avance de la herramienta .- Velocidades de avance (feedrate) y


rotación (spindle) de la herramienta en las distintas fases de la operación (Figura 2.10). Las fases a las
que se refiere la figura son: aproximación, mecanizado, retirada (p. ej. al salir de un taladro) y
acabado.

Figura 2.10 Menú parámetros de configuración de feed rate and spindle

 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

Figura 2.11 Menú Macros

Se definen como dos tipos de macros en éste apartado:


Macro Approach
Cuando definimos un movimiento de corte en una operación de mecanizado, tenemos que tener muy
en cuenta que la herramienta no puede empezar a cortar material de cualquier forma, la herramienta
necesita estar en una posición favorable antes de empezar el corte, y también comenzar la penetración
en el material de una forma suave, progresiva, y siempre que sea posible, tangente al movimiento de
corte.
Como norma general podemos decir que hay dos tipos diferentes de Macros; Macro de aproximación
(Approach), y de retirada (Retract).
La Macro de aproximación (Approach), consta de dos movimientos fundamentales; el primero sería
alcanzar la profundidad del mecanizado, y la segunda posicionarse fuera de la Drive Surface (DS), de
forma que el siguiente movimiento de acercamiento a la Drive Surface, sea de forma tangente.
En el primer movimiento para alcanzar la altura del mecanizado, procuraremos siempre posicionar la
herramienta fuera del material, y en este caso, el movimiento puede realizarse como una bajada
totalmente vertical o movimiento puramente axial. Este tipo de movimientos se puede programar
cuando se trata de mecanizado de contornos exteriores, planeados o desbastes abiertos.
Si el mecanizado a realizar es un desbaste cerrado, o un contorneado interior, la penetración en el
material hasta alcanzar la altura del mecanizado,no se podrá realizar de forma vertical porque la
herramienta entraría cortando el material en dirección axial y podría provocar rotura de herramienta.
En este caso, será necesario definir un movimiento en rampa o movimiento circular hasta alcanzar la
altura deseada.
14 Automatización con CATIA V5

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:

Figura 2.12 Generación de código APT mediante la GUI de CATIA

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

Figura 2.13 Muestra de código APT generado en CATIA


16 Automatización con CATIA V5

2.4 Visual Basic for Application


El lenguaje de programación Visual Basic procede del denominado BASIC (Beginner’s All-
purpose Symbolic Instruction Code) que fue creado en 1964 en el Dartmouth College, como un medio
para iniciarse en el mundo de la programación. Tras varias modificaciones, en 1978 se estableció el
BASIC standard. Primero fue nombrado como GW-BASIC, luego quedó en QuickBASIC y actualmente se
le conoce como Visual Basic tras adaptarse al entorno de ventanas “Windows” e incorporar herramientas
de tipo visual como botones, listas de texto o cuadros de texto asociadas a eventos. La primera versión de
Visual Basic fue presentada en 1991, siendo la última la versión 6, liberada en 1998.
Visual Basic for Applications (VBA) es el lenguaje de macros de Visual Basic v6. Éste fue incorporado en
muchas aplicaciones de Microsoft y posteriormente en otras aplicaciones para ampliar la funcionalidad de
las mismas. VBA incorpora las librerías y herramientas de Visual Basic, a las que añade librerías de
objetos propias de cada software donde esta incluido. La debilidad de este lenguaje radica en que la
compilación de la macro no puede realizarse si no se dispone del entorno en el que se ha desarrollado.
Otra debilidad es su falta de versatilidad para trabajar en otros sistemas operativos.
CATIA en 1998 con la versión V5 incorporó VBA a su entorno, pudiendo realizar macros en VB y en
lenguaje C++, siendo aún los lenguajes de macros que se han dispuesto para su versión V6. Referencia [2]

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.

El uso de macros para la automatización en el proceso de diseño es prácticamente ilimitado, siendo


algunos ejemplos la importación de puntos desde Excel a un modelo CAD 3D, la generación de
geometrías de manera automática, la creación de planos de modelos 3D, etc.Un CATScript Macro no deja
de ser un cojunto de instrucciones escritas en un lenguaje muy similar a Visual Basic (VB) para la
creación, manipulación y explotación de Objetos de CATIA V5.

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]

Figura 2.14 Acceso al menú de macros mediante la GUI


Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
17

2.4.2 Librerías de las macros

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.

1. Ir a Tools → Macro → Macros.

2. Abrir “Macro libraries”.

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.

5. Cerrar la librería de macros. En dicha librería deberían aparecer posteriormente la lista de


CATScripts que se realicen.

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.

Figura 2.15 Entorno VBA

2.4.3 Macro Recording

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:

 No seleccionar Workbenches (entornos de trabajo) mientras se está grabando una macro.

 No grabar más de lo que sea absolutamente necesario.

 No usar la opción “deshacer” mientras se está grabando.

 No usar la opción “deshacer” mientras se está grabando.


18 Automatización con CATIA V5

 Ser consciente y darse cuenta de la configuración de CATIA cuando se está grabando.

 Salir de los sketches (dibujos) antes de parar de grabar.

 Verificar cada macro una vez se haya grabado.

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.

Figura 2.16 Ayuda CAA V5 Visual Basic Help


Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
19

2.5 Visual Basic Editor


El entorno de Visual Basic Editor es sobre el que se ha desarrollado la primera parte de éste Trabajo Fin
de Carrera. Para acceder al mismo debemos pinchar en Tools → Macro → Visual Basic Editor
apareciendo la ventana de la figura 2.14. Todo lo que se programe y se realice dentro de esta ventana
puede interactuar directamente con CATIA si empleamos los objetos del programa. Primero conviene
tener a disposición del programador tanto el menú denominado Project Explorer, así como el Properties
Windows, ya que son los dos menús fundamentales en los que se trabaja y los cuales facilitan mucho el
trabajo. Para acceder a ellos, hay que clicar sobre la pestaña View y adjuntar ambas aplicaciones a la
pantalla principal tal como se muestra en la figura 2.15.

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.

Figura 2.17. Object browser.


20 Automatización con CATIA V5

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 Programación con Part Design Module


Como hemos visto en secciones anteriores en el módulo de Part Design se trabaja a un nivel más
geométrico de la pieza.Los posibles scripts a desarrollar en éste módulo tendrán como resultado la realización
de una serie de acciones sobre la pieza.Por ejemplo la realización de un agujero en el centro de una de las
caras de una pieza mediante un script.Lo que sería una consecucción de acciones a realizar por el usuario,
realizar en un sketch, en la cara de la pieza, una circunferencia con el diámetro del agujero y por último utilizar
la operación hole, mediante un script se realizaría en una sola acción.Sobre éste script tan simple se podrían
desarrollar algunos más complejos, un script que pidiera al usuario el diámetro del agujero que desea realizar
en una cara y que tras ser introducido, realice dicho agujero.
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 objetos que se
manipulan en el Part Design.

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

Figura 2.18 Estructura del módulo del Part Design

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.

Propiedad Comando Comentario


OriginElements Dim origin1 As OriginElements Constituye el sistema de
Set origin1 = part1.OriginElements referencia absoluto del
documento de planos XY,
XZ e YZ.
AxisSystems Dim refsist1 As AxisSystems Es la colección de sistemas de
Set refsist1 = part1. AxisSystems referencia que pueden existir en
el documento part.
GeometricElements Dim geometric1 As Colección de elementos
GeometricElements geométricos 3D del
Set geometric1 = partdocument generadas
Part1.GeometricElements directamente en 3D, es
decir, sin la mediación
del módulo Sketcher
Bodies Dim Bodies1 As Bodies Colección de cuerpos
Set Bodies1 = Part1.Bodies sólidos dentro del
partdocument
22 Automatización con CATIA V5

HybridBodies Dim HybBod1 As HybridBodies Colección de OpenBodies


Set HybBod1 = Part1.HybridBodies (elementos de referencia)
Constraints Dim Constraints1 As Constraints Colección de
Set Constraints1 =Part1.Constraints restricciones geométricas
y dimensionales del
partdocument.
Relations DimRelations1 AsRelations Colección de relaciones
SetRelations 1 = Part1.Relations del partdocument.
Parameters DimParameters1 AsParameters Colección completa de
SetParameters1 = Part1.Parameters todos los parámetros del
partdocument.
Tabla 2.4 Objetos del PartDesign

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.

Figura 2.19 Estructura del modulo de Sketcher

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

Objeto Comentario Contenido


Incluye todos los métodos
CreateCircle
necesarios para poder trabajar
en el módulo Sketcher.
CreateClosedCircle

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

Tabla 2.5 Objetos del Sketcher

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

Número de referencias Tipo


BiEltCs CatCstTypeAnnulContact
CatCstTypeParallelims
CatCstTypePerpendicularity
CatCstTypeChamfer
CatCstTypeConcentry
CatCstTypeDistance
CatCstTypeHorizontaly/Vertically
CatCstTypeLength
CatCstTypeLineContact
CatCstTypeMajor/MinorRadius
CatCstTypeMidpoint
CatCstTypeOn
CatCstTypePlanarangle
CatCstTypeDistance
CatCstTypeTangency
MonoEltCs CatCstTypeRadius
TriEltCs CatCstTypeSimetry
Tabla 2.6 Tipo de cotas y su nomenclatura interna en CATIA V5

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

Dim shapeFactory1 As ShapeFactory


Set shapeFactory1 = part1.ShapeFactory
Código 1.Definición del objeto shapefactory

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:

Dim pad1 As Pad


Set pad1 = shapeFactory1.AddNewPad(sketch1, espesor)
pad1.Name = "nombre1" ' Darle un nombre al pad
Dim limit1 As Limit
Set limit1 = pad1.FirstLimit
Dim length1 As Length
Set length1 = limit1.Dimension
length1.Value = espesor
Código 2.Definición de un objeto 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].

Pocket

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.

La referencia se puede hacer de dos formas:


1. Creando una referencia directa de la superficie del sólido usando las líneas mostradas
en el código 3. Se observa que el pocket se hará sobre una superficie RSur:Face,
especificando que se realiza sobre el pad ya creado.

Dim reference10 As Reference


Set reference10 =
part1.CreateReferenceFromName("Selection_RSur:(Face:(Brp:(Pad.1;2);None:();~
~ Cf11:());Pad.1_ResultOUT;Z0;G3055)")
Código 3.Referencia del pad 1.

2. O bien creando un plano mediante un offset que coincida con la distancia a la


superficie del sólido sobre la que se quiere generar el pocket.Para ello se crea un
plano,herramienta que se encuentra dentro del objeto hybridshapefactory, en el cual
se encuentran las principales herramientas del módulo wireframeandSurfaceDesign.
26 Automatización con CATIA V5

Dim hybridShapePlaneExplicit1 As HybridShapePlaneExplicit


Set hybridShapePlaneExplicit1 = originElements1.PlaneXY
Dim reference10 As Reference
Set reference10 = part1.CreateReferenceFromObject(hybridShapePlaneExplicit1)
Dim hybridShapePlaneOffset1 As HybridShapePlaneOffset
Set hybridShapePlaneOffset1 = hshapefactory1.AddNewOffset(reference10, altura, False)
Código 4.Referencia del pad 2.

El procedimiento seguido consiste en crear un plano XY, que servirá de referencia a


nuestro plano, indicando que son paralelos.Cuando ya tenemos la referencia para hacer el pocket,
el resto del proceso se realiza de manera análoga al caso del pad, usando el primero de los casos
explicados anteriormente:

Dim reference10 As Reference


Set reference10 =
part1.CreateReferenceFromName("Selection_RSur:(Face:(Brp:(Pad.1;2);None:();~
~ Cf11:());Pad.1_ResultOUT;Z0;G3055)")
Dim pocket1 As Pocket
Set pocket1 = shapeFactory1.AddNewPocket(sketch2, espesor)
pocket1.Name = "hueco interno"' Dar nombre al agujero
Dim limit2 As Limit
Set limit2 = pocket1.FirstLimit
limit2.LimitMode = catUpToSurfaceLimit ' Se define su profundidad a la
' superficie más próxima
Código 5.Pocket

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.

Dim reference3 As Reference


Set reference3 =part1.CreateReferenceFromBRepName("FSur:~
~Face:(Brp:(cilindro;2);None:();Cf11:());WithTemporaryBody;~
~WithoutBuildError;WithInitialFeatureSupport;MonoFond;~
~MFBRepVersion_CXR15)", pad1)
Código 6. Referencia para un hole

A continuación, en el código 7 se explica cómo programar un hole a partir de un punto,


donde como se aprecia, se nos piden como argumentos de entrada las coordenadas absolutas del
punto, un plano de referencia y la profundidad de mismo. Destacar que hole trabaja con
diámetros y no con radios por lo que si como parámetro tenemos el radio, hay que multiplicarlo
por dos para que el programa realice correctamente el agujero.
Se dispone de varias herramientas para programar un hole, cada una de las cuales nos
piden distintos argumentos, y se usarán unas u otras según el caso. Algunas de las distintas
formas de programarlo se muestran a continuación:
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
27

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.

Dim hole1 As Hole


Set hole1 = shapeFactory1.AddNewHoleFromPoint(X, Y, Z,~~reference3, longitud)
hole1.Type = catSimpleHole
hole1.AnchorMode = catExtremPointHoleAnchor
hole1.BottomType = catFlatHoleBottom
hole1.Name = "hueco interno"
Dim limit2 As Limit
Set limit2 = hole1.BottomLimit
limit2.LimitMode = catOffsetLimit
Dim length3 As Length
Set length3 = hole1.Diameter
length3.Value = 2 * radio_int 'Hole trabaja con diámetro no con radio
Código 7.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.

Los dos parámetros en los que se basa la herramienta son:

El ángulo de revolución: es muy importante destacar que se debeprogramar en grados


sexagesimales y no en radianes como ocurría en el círculo.

El eje de revolución: es necesario indicar la dirección alrededor de la cual se genera la


pieza.

Las siguientes líneas de código recogen la programación de un shaft:

Dim shapeFactory1 As ShapeFactory


Set shapeFactory1 = part1.ShapeFactory
Dim shaft1 As Shaft
Set shaft1 = shapeFactory1.AddNewShaft(sketch1)
' Se define el ángulo de revolución
Dim angle1 As Angle
Set angle1 = shaft1.FirstAngle
angle1.Value = TextBox1' Valor del ángulo introducido en el menú
Dim parameters1 As Parameters
Set parameters1 = part1.Parameters
Dim length1 As Length
Set length1 = parameters1.Item("Part1\PartBody\Shaft.1\ThickThin1")
length1.Value = 0
shaft1.Name = "Revolución"
' Se establece el eje de revolución
Dim reference12 As Reference
Set reference12 = part1.CreateReferenceFromObject(line2D2)
shaft1.RevoluteAxis = reference12
Código
Código 9.Shaft

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:

Dim rib1 As Rib


Set rib1 = shapeFactory1.AddNewRibFromRef(refrib1, refrib2)
Part1.update
Código 10.Rib

2.7 Programación con Prismatic Machining


Al igual que en la sección 2.6, en el módulo de machining también es posible automatizar algunos
comandos mediante scripts. Como hemos visto en la sección 2.3, en CATIA es posible la simulación del
mecanizado de piezas mediante el workbench machining y su módulo Prismatic Machining. Al igual que la
programación en el módulo de Part Design el process posee un árbol de jerarquías de objetos, como podemos
observar en la figura 2.20, en la parte izquierda vemos el árbol de trabajo del Process y al lado la estructura de
objetos para la programación en el Process.

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

objetos que se manipulan en el Prismatic Machining.

Figura 2.21 Estructura del módulo de Machining

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.

Como se observa en la figura 2.21 al objeto ManufacturingActivity se accede a través de un objeto


perteneciente al ProcessDocument, es uno de los objetos englobado en el objeto Activity.Se observa dentro de
ManufacturingActivity una lista de objetos para la configuración del proceso, part operations, como ejemplo la
asignación de un product y una máquina de mecanizado.

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.

Dim outputGen As ManufacturingOutputGenerator


...
Dim format, fileName As String
format = "APT"
fileName = "c:\myFile.txt"
Dim genData As ManufacturingGeneratorData
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa
31

outputGen.InitFileGenerator(format, fileName, genData)


Figura 2.22 Extracto de código del documento CATIA V5 Automation help

Figura 2.23 Ventana descripción del objeto Manufacturing Setup

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.

3.1 Introducción a Abaqus CAE


Abaqus / CAE es el entorno completo de Abaqus que proporciona una interfaz simple y consistente para crear
modelos Abaqus, presentar y supervisar interactivamente los trabajos de Abaqus y evaluar los resultados de las
simulaciones de Abaqus. Abaqus / CAE se divide en módulos, donde cada módulo define un aspecto lógico
del proceso de modelado; Por ejemplo, definir la geometría, definir las propiedades del material y generar una
malla. A medida que pasa de módulo a módulo, construye el modelo. Cuando el modelo está completo,
Abaqus / CAE genera un archivo de entrada que se envía al producto de análisis de Abaqus. Abaqus / Standard
o Abaqus / Explicit lee el archivo de entrada generado por Abaqus / CAE, realiza el análisis, envía
información a Abaqus / CAE para permitirle monitorear el progreso del trabajo y genera una base de datos de
salida. Por último,se utiliza el módulo de visualización para leer la base de datos de salida y ver los resultados
de su análisis.
Abaqus trabaja con dos extensiones de archivo: *.cae para el archivo donde se encuentra/n el/los modelo/s y
*.odb para el archivo de resultados de un análisis. El programa no nos permite abrir simultáneamente varios
archivos de modelo, por lo que es recomendable generar distintos modelos en un único archivo *.cae para
poder, al abrir el único archivo, contar con los modelos y poder trabajar con todos ellos sin necesidad de cerrar
un archivo y abrir otro. En cuanto a los archivos de resultados, como se genera uno por cada análisis que se
ejecuta y dado que se pueden ejecutar varios análisis sobre un mismo modelo, Abaqus si permite la apertura de
distintos archivos de resultado en una misma sesión.

33
34 Automatización con Abaqus

Figura 3.1 Ventana de trabajo Abaqus/CAE

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.

Dimensión SI SI (mm) US (ft) US (inch)

Longitud m mm

Fuerza N N lbf lbf

Masa Kg Tonelada Slug lbf s2/in

Tiempo s s s s

Tensiones Pa (N/m2) MPa(N/mm2) lbf/ft2 Psi(lbf/in2)

Energía J mJ ft lbf in lbf

Densidad Kg/m3 Tonelada/mm3 Slug/ft3 lbf s2/in4

Tabla 3.1 Sistemas de unidades consistentes


Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

35

En la pestaña de Model se configura el modelo, su geometría, material, condiciones de contorno del


problema…
A continuación hacemos una breve descripción de cada módulo.

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).

Figura 3.2 Opciones para modelado 3D(izquierda),2D (centro) y Axialsimétrico (derecha.)

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

Figura 3.3 Cuadro de edición de un material

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

Para crear una instance en la zona de trabajo del


Assembly clickamos en y aparecerá la
ventana de creación del Instance. Existen dos
tipos de Instance dependiendo de si el mallado
se realizará sobre el part,dependent, o si se
realizará sobre la propia instance.
Otros comandos elementales de éste módulo
son: Translate Instance.- Para posicionar
un instance respecta otro,desplazarlo respecto a
un punto del modelo.
Rotate Instance.- Para girar un part hasta
la
posición deseada.

Figura. 3.5 Ventana de edición del Módulo Assembly

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.

Figura. 3.6 Creación de un step


38 Automatización con Abaqus

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

Figura 3.9 Condiciones de contorno Mechanical y Otras

Figura. 3.10 Tipos de carga para un análisis estático general

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

Figura. 3.11 Menú de herramientas del módulo mesh

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.

Figura. 3.12 Módulo de visualización de resultados


Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

41

3.2 Modelado del conformado de chapa


Los procesos de conformado de metales por deformación plástica comprenden un amplio grupo de
procesos de fabricación, en los cuales se usa la deformación plástica para cambiar las formas de las piezas
metálicas. En los procesos de conformado, las herramientas, usualmente estampas de conformación, ejercen
esfuerzos sobre la pieza de trabajo que las obligan a tomar la forma de la geometría de la estampa. Como
observamos en la figura 3.13 existen diferentes tipos de procesos de conformado por deformación plástica, en
nuestro caso no centraremos en el caso de modelado de un proceso de embutido.
Para la realización del conformado de chapa son necesarios cuatro elementos básicos:
1) Una chapa de metal.
2) Un sistema de sujeción de la chapa.
3) Una herramienta con punta semiésferica para los casos de doblado y embutición.

En este capítulo se va a realizar una descripción de como modelar un problema genérico de


conformado con el objetivo de analizar la deformación generada en la chapa mediante el proceso de
conformado. Para realizar el modelo vamos a recorrer los módulos de la pestaña model visto en el apartado
anterior.

Figura 3.13 Clasificación de los procesos de conformado

3.2.1 Definición geométrica del modelo


Como se ha mencionado antes, para el conformado son necesarios 3 elementos básicos, luego será
necesario modelar en Abaqus dichos elementos. Todos los parts deben de estar modelados siguinedo el mismo
Modeling Space del problema. En éste caso de estudio podría ser analizado como problema 2D plano o como
42 Automatización con Abaqus

axilsimétrico.Las configuraciones de cada element serán:


 Chapa (Sheet).-La pieza a analizar en deformaciones será la chapa, luego la configuración
de éste Part deberá de ser de sólido deformable.
 Punzón (Tool).- Al no ser de estudio la possible deformación causada en el Punzón,en éste
caso la configuración para éste elemento debe de ser de sólido rígido discreto.
 Sistema de sujección de la chapa (Blankholder). - Encargado la sujección de la chapa la
configuración será de solido rígido discreto.
Tras elegir sus configuraciones y pulsar continuar en Abaqus se abre automáticamente el módulo sketch para
poder realizar la geometría del elemento a crear. En la figura 3.14 podemos ver los parts creados:

Figura 3.14 Part chapa (izquierda), Part punzón (centro) y Part Blankholder (derecha)

3.2.2 Definición del material


Una vez creados los parts, se define el material del que estará compuesta la chapa.Al realizar un
conformado, la pieza se somete a una deformación plástica, luego será necesario definir las propiedades del
material tanto en el rango elástico como en el plástico.En la Figura 3.15 se muestra a modo de ejemplo
ilustrativo la creación de un material,AA7075-O.

Figura 3.15 Ventanas de edición de un material en abaqus propiedades elásticas y plásticas

3.2.3 Definición de las propiedades de la chapa


Una vez creado el material es necesario asignar ese material a la part de la chapa, es decir definir la
sección de éste part. En el modelado de conformado solo será necesaria crear ésta sección. Ésta será
homogénea y de categoría Solid.Una vez creada la sección se la asignamos a la chapa, los demás elementos al
ser sólidos rígidos abaqus solo nos deja la opción de asignarle Inercia pero no sección.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

43

Figura.3.16 Ventanas de edición de secciones

3.2.4 Mallado del modelo


Una vez definidos los parts, nos queda mallar el modelo. Se procede a mallar los tres elementos del
modelo. Mediante el commando Seed Part ( ) se procede a mallar cada part.Seleccionando la separación
entre semilla y posteriormente las caras del Part a mallar con esa separación.Para mallar seleccionamos el part
a mallar y en su árbol clickamos en el apartado mesh apareciendo el módulo Mesh en pantalla.

Figura.3.17 Mallado del Part Sheet en el Módulo Mesh


44 Automatización con Abaqus

Figura.3.18 Mallado del Part Blankholder en el Módulo Mesh

Figura.3.19 Mallado del Part Tool en el Módulo Mesh

3.2.5 Ensamblaje de parts


En éste modelado tendremos que crear 3 instances, uno para cada Part.Al realizar el mallado en el
part en el módulo assembly tan solo debemos posicionar los parts en el espacio para modelar el problema de
conformado.

Figura.3.20 Assembly del modelado del proceso de conformado de chapa


Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

45

3.2.6 Configuración de Steps


Abaqus por defecto siempre crea un step denominado Initial.Dicho step se usa para para las
condiciones de contorno, que serán propagadas en el siguiente Step, donde se aplica el movimiento del punzón
en vertical para simular el proceso de conformado. Además de la creación de un Step tenemos que editar
nuestro Field Output Request.En él se indica los datos que deseamos extraer del cálculo de nuestro problema,
por ejemplo tensiones, deformaciones y desplazamientos. En la Figura 3.21 vemos la creación del Step y en la
Figura 3.22 la conFiguración los datos de salida a obtener de nuestra simulación.

Figura.3.21Definición del Step

Figura.3.22Definición Field Output Request

3.2.7 Definción de las interacciones entre parts en el modelo


En los problemas de conformado de chapa exite un contacto tanto con la herramienta como con los
elementos de sujección de la chapa. Ésto se traduce en la simulación en abaqus en la creación de interacciones
entre los Parts.En éste caso las interacciones serán del tipo Surface to surface. Al crear las propiedades de
contacto por último será necesario crear las Interactions placa-punzón y placa-bankholder.
46 Automatización con Abaqus

Figura.3.23 Configuración Interaction Placa-Blankholder

Figura.3.24 Configuración Interaction Placa-Punzón


Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

47

3.2.8 Definición de condiciones de contorno del problema


Tras definir los contactos entre los parts del modelo queda por definir las condiciones de contorno
del problema. En un problema de embutición el punzón realiza un movimiento vertical descendente hacia la
chapa, suponiendo una velocidad constant del punzón. Para modelar ésto basta con crear una condición de
contorno de movimiento en la herramienta, aplicándola sobre el punto de referencia creado en ella. La otras
condiciones de contorno simularán al prensachapas, creando dos condiciones de empotramiento en la cara
superior e inferior de la chapa, en contacto con el blankholder.

Figura.3.25 Configuración Cargas y condiciones de contorno

3.2.9 ConFiguración Módulo Job


Una vez conFigurado nuestro campo de datos de salida y el modelado de nuestro problema,
generamos el job y ejecutaremos el análisis. Mientras que Abaqus realiza el cálculo es possible monitorizar su
trabajo y visualizar las posibles advertencias o errores que se puedan dar durante el cálculo del problema de
elementos infinitos planteado. Pinchando sobre el Job creado con el botón derecho del ratón y seleccionando
submit, Abaqus comenzará el cálculo del problema MEF.

Figura.3.26 Monitorización del Job


48 Automatización con Abaqus

3.2.10 Visualización de resultados


Una vez finalizado el Job se genera un archivo odb que contiene los resultados del análisis.En el
módulo de visualización podremos tener una representación del resultado final de nuestro problema.Según los
datos de salida que hayamos requerido en el apartado de Fiel Output Requests, en éste módulo podremos
visualizar los datos de tensiones que soporta material, deformaciones u otro dato que se haya requerido a
Abaqus a obtener de la simulación.
En las Figuras siguientes podemos ver distintas representaciones de datos tales como la tensiones de VMises
sufrida por la placa en el conformado y las tensiones plásticas equivalentes de cada nodo y desplazamientos.

Figura.3.27 Visualización del problema de conformado de chapa deformación final de la chapa

Figura.3.28 Visualización del problema de conformado de chapa Tensione de V Mises de la chapa


Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

49

Figura.3.29 Visualización del problema de conformado de chapa valores de PEEQ (Equivalent plastic strain)
de la chapa

3.3 Abaqus Scripting


Cuando se utiliza la interfaz gráfica de usuario de Abaqus / CAE (GUI) para crear un modelo y
analizar sus resultados, los comandos son emitidos internamente por Abaqus / CAE después de cada
operación. Estos comandos reflejan la geometría que creó junto con las opciones y la conFiguración que
seleccionó en cada cuadro de diálogo. la GUI genera comandos en un lenguaje de programación orientado a
objetos llamado Python. Los comandos emitidos por la GUI se envían al núcleo de Abaqus / CAE. El kernel
interpreta los comandos y utiliza las opciones y sets para crear una representación interna de su modelo. El
Kernel es el cerebro detrás de abaqus / CAE. La GUI es la interfaz entre el usuario y el kernel.Vamos a poner
un ejemplo de como nos ayudaría un script simple en Abaqus.En la generación de simulaciones en Abaqus
puede que analices y simules productos de materiales distintos.Si cada vez que realices una simulación debes
introducir manualmente mediante el editor de materiales las propiedades del material.Una forma de
automatizar y ahorrar tiempo de escribir las propiedades de ese material tipo con el que realizas simulaciones
sería escribir una macro que realizara la tarea de crear los materiales necesarios para tus simulaciones.

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:

 inp.- archivo de abaqus de configuración de abaqus que es creado cuando un job ha


sido completado, contiene toda la información necesaria para correr el análisis.
 odb.- output database contiene los resultados de la simulación completa.Mediante el
uso del step module output request manager es posible elegir las variables a
visualizar y en que frame, captura de la simulación, en el módulo de visualización.
 dat.- archivo de texto de salida el análisis del archivo *.inp.Contiene también los
resultados de las variables de salida seleccionadas en la simulación durante el
análisis.
 msg.- Contiene mensajes de información o diagnóstico sobre el progreso de la
solución del análisis.
 fil.- contiene resultados del análisis en un formato neutro que puede ser leído y
sobreescrito por un programa externo de post-procesado.
 ods.- archivo del scratch output database.
 mdb.- Base de datos del modelo.

3.3.1 Programación orientada a objetos en Abaqus (Abaqus Object Model)


Como bien se ha dicho a principio de éste capítulo Python es un lenguaje de programación orientado a
objetos.En la figura 3.31 observamos los diferentes objectos y sus “hijos” la estructura de Abaqus. La jerarquía
de objetos y la relación entre ellos se denomina modelo de objetos de Abaqus.
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

51

Figura 3.31 Estructura del modelo de objetos en Abaqus

Un objeto en el modelo de objetos de abaqus puede clasificarse en:


 Container.-Dicho objeto contiene a su vez objetos de un tipo. Un contenedor en Abaqus object model
puede ser un repositorio o una secuencia. Por ejemplo, el contenedor Stepses un repositorio que
contiene todos los steps en el análisis. Tu script usa el contenedor Step para acceder a un step
determinado.
 Singular Object.- Objetos que no son contenedores se muestran como Singular Object en la figura
X.Ejemplos de objetos singurales son el objeto Session y el objeto Mdb.Solo hay un objeto Session y
un objeto Mdb en la estructura de objetos de Abaqus.
En la programación de scripts en Abaqus se usan comandos para acceder a los objetos a través de la jerarquía
de objetos. Veámos un ejemplo:

Cell4=mdb.models['Model-1']. parts['Sheet']. cells[4]

Código 11. Ejemplo uso de comandos para acceder a objetos

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

mdb. models['Model-1']. Part (name='Part-1',


dimensionality=THREE_D, type=DEFORMABLE_BODY)

Código 12. Ejemplo uso de comandos para crear un 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.

Figura 3.32 Captura del Abaqus Scripting User’s Manual

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

Figura 3.33 Extracto del inicio de un archivo *.jnl

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:

From (módulo de Abaqus) import *

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.

Módulo Funcionalidad en Abaqus/CAE

assembly Módulo de Assembly

datum Set de herramientas del Datum

interaction Módulo de Interaction

job Módulo de Job

load Módulo de Load

material Materiales en el módulo de Property

mesh Módulo de Mesh

part Módulo de Part

partition Set de herramientas del Partition

section Sections en el módulo de Property

sketch Módulo de Sketch

step Módulo de Step

visualization Módulo de Visualization

xyPlot Set de herramientas para X-Y (subapartado del


result)

Tabla 3.2 Librerías de 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

3.4 Programación de un proceso de conformado de chapa


Una vez introducida la programación orientada a objetos en Abaqus veamos cómo se aplicaría al
modelado de un proceso de conformado en chapa. Para ello veremos el código necesario para generar dicho
análisis y la utilización de los objetos y comandos en cada módulo de Abaqus.Comenzaremos por los módulos
necesarios para el modelado del análisis y terminaremos con la interpretación de resultados.

3.4.1 Modelado del ensayo


Como se observa en la figura 3.33, al comienzo de un archivo *jnl se encuentran las librerías que
contienen los objetos a utilizar en el desarrollo del código. Si bien un archivo *jnl podría ser utilizado como un
script, recordemos que en él son grabadas todas las operaciones realizadas por el usuario, incluyendo erratas,
eliminación y creación de parts, elementos para definir la geometría en el sketch etc… En un script se debe ser
lo más estructurado posible y evitar líneas de código innecesarias. Luego para cualquier script a realizar se
debe conocer de antemano qué librerías serán necesarias para su ejecución y colocarlas al principio de nuestro
script. En la figura 3.34 observamos las librerías necesarias para éste apartado.

Figura. 3.34 Importación de las librerías a utilizar en el script

Módulo Part
Veamos ahora los comandos a utilizar en éste módulo.En la Figura X Observamos la estructura del Part.

Figura. 3.35 Estructura del modelo de objetos en 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

Figura. 3.36 Esquema del modelado del proceso de conformado

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.38 Extracto de código para le generación de partición

Módulo Material and Section


La estructura para crear un objeto sigue siendo la misma en éste módulo. En éste módulo queremos
crear el material de la placa. Con el código→ mdb. models['Model-1']. Material(name='AA7075-O'), se crea
un material con nombre AA7075-O, vemos que el comando Método a usar para crear el material empieza por
mayúscula, palabra escrita en azul, como se explicó en el apartado anterior. Para introducir sus características
en el régimen elástico y Plástico se usan los comandos Elastic y Plastic respectivamente. Entre paréntesis, se
encuetra la variable con esos datos, dicha variable puede ser leída de un archivo de texto como se explicará en
ejemplo práctico aplicación de CAE a un proceso de rebordeado de agujero. Las siguientes líneas muestran la
creación de una sección con nombre ‘Section-AA7075-O’ y su posterior asignación al part de la chapa.

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.

Figura. 3.40 Extracto de código para mallar los parts

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.

Figura. 3.41 Estructura del modelo de objetos del rootAssembly


Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

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.

Figura. 3.42 Extracto de código perteneciente al assembly

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.

Figura. 3.44 Extracto de código para la configuración de contactos en el modelo

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.

Figura. 3.45 Extracto de código para la definición de las condiciones de contorno


Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

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.46 Extracto de código para definir el job

3.4.2 Interpretación de resultados (Módulo resultados Abaqus)


Módulo Visualization
Llegados a éste punto, ya solo queda visualizar los resultados de nuestro análisis, para ello Abaqus
CAE se sirve del módulo de Visaulization. El archivo con el que trabaja en éste módulo Abaqus es el creado
tras el cálculo del análisis, el Odb, que a su vez pertenece a un objeto mayo que es Session, que se crea al
arrancar el programa Abaqus.En el archivo odb se almacena tanto información sobre el modelo como los
resultados de nuestro análisis, (fieldOutputs, historyOutputs etc…) Dependiendo de los resultados que
querramos mostrar o extraer del análisis se utilizarán obejtos o comandos a elección del usuario.

Figura. 3.47 Estructura del modelo de objetos del odb


62 Automatización con Abaqus

Figura. 3.48 Estructura del modelo de objetos bajo el objeto session

En la figura 3.49 se muestra un ejemplo de código para 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

4.1 Descripción del problema


Una vez desarrollada la metodología para realizar un script en un programa CAD como es CATIA
V5, vamos a ver una posible aplicación práctica de una macro.En el departamento de Ingeniería Mecánica y
Fabricación uno de los análisis que se están llevando a cabo es el análisis del Proceso de Conformado
Incremental en dos etapas aplicado al rebordeado de chapas.Ésta tecnología se encuentra aún en desarrollo,
siendo uno de los aspectos prioritarios una mejor comprensión de la mecánica del proceso y de los parámetros
que influyen en el notable incremento de conformabilidad que se dá mediante dicha tecnología.Para la
realización del conformado incremental de un solo punto (SPIF) son necesarios cuatro elementos básicos:
1) Una chapa de metal,
2) Un sistema de sujeción de la chapa,
3) Una herramienta con punta semiésferica,
4) Un centro de mecanizado CNC.
Las trayectorias de la herramienta durante el proceso son creadas mediante un programa CAM, en nuestro
caso CATIA V5, el proceso a seguir para obtenerlas es crear un Part con la geometría de la chapa en la
situación intermedia tras realizar la primera pasada en el caso de nuestro estudio, crear un process para
mecanizar la pieza en el workbench machining y generar un código APT o ISO con las trayectorias de la
herramienta. En la figura 4.1 observamos el esquema de un SPIF de una sola etapa y dos ejemplos de
trayectorias en dos etapas. Vemos un ejemplo de parametrización de trayectoria en la 1ª etapa de un
conformado en dos etapas, vamos a definir los parámetros:

 A.-Se denomina a la pendiente del escalón


 H.-Profundidad del punzón para realizar el escalón
 W.-Diferencia entre los radios de los agujeros resultantes en las 2 pasadas de rebordeado.
 R.-Radio del punzón

63
64
Aplicación CAD/CAM a un proceso de conformado incremental en 2 etapas

Figura 4.1 Boceto trayectorias de herramienta en SPIF y parametrización de trayectorias en conformado 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

4.2.1 Dibujar sketch parametrizado


En nuestro caso de estudio vamos a variar 3 parámetros para generar nuestra trayectoria, A, H yW,
dejando fijo el radio de nuestro punzón en nuestro caso R=6mm. En la figuras 4.2 y 4.3, vemos las relaciones
entre las dimensiones en nuestro modelo de trayectoria.

Figura 4.2 Esquema de definición de parámetros en nuestra aplicación

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

Figura 4.4 Sketch trayectoria con parámetros A=30mm, W=5mm y H=7mm

Figura 4.5 Part generado Hole Flanging 2 pasadas (A=30mm,W=5mm y H=7mm)

4.2.2 Generar resto de modelo CAD/CAM


Para poder generar el código APT con las trayectorias de la herramienta para el conformado
incremental se tiene que crear un process. Dependiendo de los parámetros de A, W y H la trayectoria variará,
porque varía el part final que procesamos. En la figura 4.6 podemos observar el process creado. Se ha
realizado una sola part operation y una operación Multi-Axis Curve.Multi-Axis-Curve es otra operación de
mecanizado al igual que pocketing o Profile Contouring, para nuestra aplicación hemos configurado la
operación como se observan en las figuras 4.6, donde definimos la estrategia de la trayectoria,4.7, donde
seleccionamos la geometría a mecanizar,4.8, donde definimos velocidades de avance y de rotación y 4.9 donde
definimos macros de aproximación.

66
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

67

Figura 4.6 Configuración de estrategia de Figura 4.7 Configuración geometría a mecanizar


trayectoria

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

Figura 4.10 Imagen del process utilizado para la generación de trayectorias

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.

4.3 Soluciones propuestas


4.3.1 Macros en Part Design
A continuación, vamos a ver la solución en modo script que realiza los dos primeros pasos necesarios para la
generación de un nuevo part con los nuevos valores. El archivo sobre el que se ejecuta la macro es HF2ST-2D,
recordemos que el lenguaje de programación de CATIA V5 es visual basic y tenemos que darle dimensión a
las variables que aparezcan en el código. Observamos que lo que queremos modificar son los valores H,W y
A, la primera parte del código es tal y como se obtiene del grabador de Macros de Catia. Modificando el
código obtenido de la herramienta para insertar ventanas de toma de datos (Input box) que asignaran los datos

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.

Figura. 4.11 Macro 01-update-geometry

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.

4.3.2 Macro en Prismatic Machining


Los pasos 3,4 y 5, al ser acciones llevadas a cabo en el process,se tienen que automatizar en el módulo de
Prismatic Machining.Durante la ejecución de éste proyecto no se ha podido seguir la metodología de grabar
macro y obtener comandos.Ésto ha hecho que no haya podido automatizarse los pasos 3 y 4.
70
Aplicación CAD/CAM a un proceso de conformado incremental en 2 etapas

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.12 Macro generación de APT

4.4 Análisis y dicusión


Se han mostrado las soluciones diseñadas para la automatización en cada módulo de CATIA V5, objeto de
estudio en éste proyecto. Para la automatización en el módulo Part Design el resultado ha sido satisfactorio y
hemos eliminado dos de los 5 pasos del proceso para generar las trayectorias. Sin embargo, en el módulo de
Machining la tarea requiere un análisis más en profundidad de la programación y no es posible sacar
conclusiones utilizando la metodología de grabar acciones y leer el código grabado. No se ha conseguido
finalizar la automatización completa del proceso hasta la generación del archivo APT.

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

5 APLICACIÓN CAE A UN PROCESO DE


REBORDEADO DE AGUJERO

5.1 Descripción del problema


Una vez desarrollada la metodología para realizar un script en un programa CAE como es Abaqus,
vamos a ver una posible aplicación práctica de una macro.En el departamento de Ingeniería Mecánica y
Fabricación uno de los análisis que se están llevando a cabo es el análisis del Proceso de Conformado
Incremental aplicado al rebordeado de chapas.Ésta tecnología se encuentra aún en desarrollo, siendo uno de
los aspectos prioritarios una mejor comprensión de la mecánica del proceso y de los parámetros que influyen
en el notable incremento de conformabilidad que se dá mediante dicha tecnología El estudio se centra en
analizar el proceso de Rebordeado de Agujeros (Hole Flanging) mediante conformado incremental. El
rebordeado de agujeros es un proceso muy conocido en la industria. Sin embargo, su conformado mediante la
tecnología de SPIF (Single Point Incremental Forming – SPIF) es muy reciente, dotando a dicho proceso de
una gran versatilidad y economía.Los análisis más actuales indican que los factores que más contribuyen en
retrasar el fallo en SPIF son: la flexión localizada debida a la curvatura de la herramienta, la tensión tangencial
y normal en el contacto chapa-herramienta, la compresión hidrostática y la variación cíclica de la deformación
debida a la sucesivas pasadas.
En éste proyecto vamos a limitarnos a la aplicación de una macro al estudio del espesor en la chapa
dependiendo de la curvatura de la herramienta, en el rebordeo de agujero mediante una sola pasada. Se quiere
estudiar la dependencia del espesor de la chapa tras una operación de rebordeado de agujero con la curvatura
del punzón, por consiguiente, tenemos un parámetro geométrico a variar en nuestra simulación del proceso. Lo
que podría suponer la realización de varios modelos en abaqus, variando el radio manualmente por cada
prueba, se puede plantear el uso de un script que, partiendo de unos parámetros de radio del punzón, en un
archivo txt, propiedades elásticas y plásticas del material, nos devuelva como resultado unas gráficas con el
espesor de la placa y su relación con las dimensiones del radio del punzón.

Figura 5.1 Esquema relación entre archivos en nuestra aplicación CAE

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.

Figura 5.2 Archivos de entrada de datos a la aplicación CAE

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:

Figura 5.3 Estructura del If Figura 5.4 Estructura del 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.

5.3 Modelo propuesto


El material que se va a utilizar es una aleación de aluminio AA7075-O de 1.6 mm de espesor. La
letra O de la designación, señala que el material fue sometido a un estado de recocido. Luego como se ha
mencionado anteriormente los archivos correspondientes a las propiedades del material de la chapa
corresponden a un aluminio AA7075-O.
A continuación, vamos a exponer las consideraciones que se han realizado para modelar el problema de
rebordeo de agujero con Abaqus.
En Abaqus se pueden resolver problemas en 3D,2D y axilsimétricos. El problema rebordeado de chapa podría
modelarse como un problema en 3D, sin embargo, esto ocasiona grandes esperas para la obtención de datos
del análisis y dado que el objetivo de nuestro proyecto se centra en la aplicación de scripts, se opta por modelar
el problema de Hole Flanging como un problema axilsimétrico.

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

Figura 5.6 Esquemas del proceso de Hole Flanging modelado en Abaqus

Como se observa en la figura anterior, el modelado de la herramienta también se ha simplificado, no siendo


enteramente la sección de un punzón semi-esférico.
El párametro a variar geométricamente en el modelo de la figura 5.6 será R_tool, en nuestro caso de estudio
variará entre los radios introducidos en params. Se plantearon dos soluciones para la ejecución automática de
los análisis para los distintos radios.
La primera solución posible sería la de crear tantos Models como distintos radios de herramienta
tuviéramos.La macro crearía los modelos y ejecutaría los distintos Jobs. Como ventaja tendría que solo habría
que modificar la geometría del tool, pero habría que estar activando y desactivando models.
La segunda solución posible es crear sobre un mismo Model todas las herramientas y a la hora de ejecutar los
job activar la condición de contorno de desplazamiento del punzón que corresponda. Por ejemplo si es el
análisis con radio de herramienta 10, tener solo activada la condición de desplazamiento en ese part.
Se ha decidido desarrollar el código de la macro optando por la segunda solución. Salvo algunas excepciones
que se desarrollarán, éste capítulo.
A continuación, vamos a comentar las partes más relevantes del código de la figura 5.7. Como se ha explicado
antes en todo script se debe empezar por la llamada a las librerías que se van a trabajar, en éste en concreto se
llama a las librerías de los módulos de modelado del problema más connectorBehavior y el módulo
Visualization.Las primeras líneas ejecutan la función auxiliar para la lectura de los archivos de entrada a la
aplicación, definiéndose también direcciones donde se almacenarán archivos intermedios y uno de los finales
A partir de ahí comienza la lectura de datos de los archivos externos y su almacenamiento en variables, R
contendrá los distintos radios de curvatura de la herramienta a analizar y tooling los nombres asignados a
dichas herramientas.A continuación observamos definiciones de parámetros geométricos de la figura
5.6.Avanzamos hasta el primer bucle for, como se ha comentado anteriormente generaremos tantas parts de
herramientas como radios de curvatura tengamos en el archivo params.txt, con lo cuál se opta por un bucle for
que recorra las listas R y tooling y asigne esos parámetros en la creación de los parts de herramientas.
76
Aplicación CAE a un proceso de rebordeado de agujero

Figura 5.7 Script pre4-fea-hole definition.py

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

Figura 5.8 Script creación parts de herramientas

Figura 5.9 Script del mallado del modelo

Figura 5.10 Script del Assembly


78
Aplicación CAE a un proceso de rebordeado de agujero

Figura 5.11 Script condiciones de contorno en Step 2

Figura 5.12 Script conFiguración de contactos entre chapa-herramienta y chapa-sistema de sujección

Figura 5.13 Script de creación de Jobs

78
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

79

5.4 Análisis de resultados


Con los scripts ejecutados hasta ahora en Script pre4-fea-hole definition.py hemos los Jobs que
analizaremos en éste apartado. Según nuestro esquema de la figura 5.1 el siguiente script a ejecutar será pre5-
fea-results.py, tras su ejecución se habrán generado archivos con los datos XY de cada uno de los análisis,
desplazamientos tanto de la cara superio como de la cara inferior de la chapa.Éstos archivos serán argumentos
utilizados en el script scr7-calculate-sheet-thickness.py, el cual se ejecutará tantas veces como radios de
curvatura querramos analizar.Por último para obtener el archivo gráfico donde se comparen los espesores de
chapa en relación con el radio de curvatura, se ejecuta scr8-draw-graph.py. Éstos dos últimos scripts no
utilizan ya comandos internos de Abaqus, son archivos de Python puros y usan librerías específicas de Python
como math, numpy y maplotlib. Para consultar los códigos véase el Anexo C.
La ejecución da como resultado una gráfica, saquemos conclusiones de los análisis realizados.En la figura 5.14
se muestra la gráfica final obtenida tras ejecutar nuestra aplicación.Vemos el comportamiento del espesor de la
chapa dependiendo de los radios de curvatura de la herramienta.En éste caso se han aplicado 5 radios distintos,
los cuales habían sido utilizados en los ensayos realizados en taller por el departamento.Se observa que la
tendencia del espesor es muy similar y casi no se vé afectada al cambio de radio de curvatura de la
herramienta,Se toma con distancia cero el extremo izquierdo de la chapa en el modelo Abaqus de la figura 5.6,
así vemos que como era de esperar la zona con mejor espesor de la chapa se da en el punto de contacto de la
chapa con el chaflán del blankholder como se puede visualizar en la Figura 5.15.

Figura 5.14 Gráfica Hole-flanging en una sola pasada


80
Aplicación CAE a un proceso de rebordeado de agujero

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

6 CONCLUSIONES Y TRABAJOS FUTUROS


En éste proyecto el estudio de automatización del proceso de conformado en chapa se ha dividido en dos
partes, por un lado, el estudio en un software CAD/CAM y por otro lado su desarrollo en un software CAE,
ambas aplicaciones han tenido como objetivo automatizar tareas en el análisis del proceso de conformado de
una chapa.

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.

6.2 Trabajos futuros


Como trabajos futuros se puede pensar en la creación de una serie de scripts con el objtetivo de
realizar el análisis completo de un proceso de conformado de chapa, dada una tabla con parámetros
geométricos, el script ejecute scripts para actualizar los CAT part actualice el Process del procesado de chapa
y genere un código APT.Con dicho código mediante otro script ya ajeno a CATIA transforme ese código APT
en trayectorias de herramienta que puedan ser introducidas como archivos de lectura para realizar el análisis en
Abaqus.En dicho proyecto dado un modelo se crearía una aplicación formada por un conjunto de scripts que al
ejecutarse, obtienen de una maner más rápida y sin tanta interacción del usuario con los softwares CAD/CAM
y CAE, los análisis que se desean obtener, ya sean en forma de archivos de datos o gráficas.Un ejemplo de una
posible aplicación. se muestra en la figura 6.1.
82

Figura 6.1Esquema del proceso de automatización de la tarea

82
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

83

REFERENCIAS

[1] Emmet Ross, VB Scripting for CATIA V5.Segunda Edición

[2] Cristina Torrecillas. Introducción a la programación Visual Basic en


CATIA V5 Y V6 (no publicado)..

[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

[6] Zed A.Shaw. Aprenda a programar con Python

[7] Gautam M.Puri,Python Scripts for Abaqus

[8] J.T.B Overvelde.Learn Abaqus script in one hour


http://ifcuriousthenlearn.com/blog/2015/04/02/Abaqus-FEA-Scripting-with-python/
[9]

[10] http://sergioariasfernandez.com/curso-on-line-de-abaqus/

[11] Abaqus Scripting guide

[12] Abaqus Scripting Refernce Manual

[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.

a. Macros de Part Design: proceso de conformado incremental en 2 etapas


Macro script 1-update-geometry. CATScript

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

Set angle1 = constraint4.Dimension


Set constraint5 = constraints1.Item("W")
Set length1 = constraint5.Dimension
Set constraint6 = constraints1.Item("H")
Set length2 = constraint6.Dimension'
' Pregunta al usuario los nuevos valores de las variables
'
' Pendiente A
A = InputBox("Introduzca la pendiente del escalón, 30º < A < 80º (90º es la horizontal)", "Pendiente del
escalón A (º)", 80)
' Altura H
L2 = R * (A*pi/180)
Hmin = R
Hmax = (df-d0)/2 - L2 + R
H = InputBox("Introduzca cuánto tiene que bajar el punzón para realizar el escalón, " & Hmin & " < H < " &
Hmax, "Altura H (mm)", Hmin)
' Ancho W
L1 = H - R
Wmin = R * (1 - Cos(A*pi/180))
Wmax = ((df-d0)/2 - L1 - L2)*Sin(A*pi/180) + Wmin
W = InputBox("Introduzca la diferencia entre los radios de los agujeros resultantes en las 2 pasadas de
rebordeado, " & Wmin & " < W < " & Wmax, "Ancho W (mm)", Wmin)
' Actualiza variables'
angle1.Value = A
length1.Value = W
length2.Value = H
part1.Update
End Sub
Macro 02 apt.CATScript
'DESCRIPTION : Macro que genera archivos CATPart tantos como filas tenga el archivo
TablasModelos.xlsx
'COMMENTS : Parámetros H,W R1,R2 del partdesign archivo HF2ST-Ri02, abrir en dicho documento para
su correcto funcionamiento.
'Acciones a mejorar: Se guarden automáticamente los CATParts con nombre aparecido en la primera columna
de TablasModelos

Sub CATMain()

86
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

87

Dim partDocument1 As PartDocument


Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part


Set part1 = partDocument1.Part

Dim relations1 As Relations


Set relations1 = part1.Relations

'Modificacion para que funcione en cualquier pc

Dim UbiArch As String


UbiArch = CATIA.FileSelectionBox("Seleccione el archivo deseado", "*.xlsx", 0)

Dim designTable1 As DesignTable


Set designTable1 = relations1.CreateDesignTable("TablaModelos", "DesignTable created by Antonio
06/03/2016", False, UbiArch)
Dim bodies1 As Bodies
Set bodies1 = part1.Bodies
Dim body1 As Body
Set body1 = bodies1.Item("PartBody")
Dim shapes1 As Shapes
Set shapes1 = body1.Shapes
Dim shaft1 As Shaft
Set shaft1 = shapes1.Item("Shaft.1")
Dim sketch1 As Sketch
Set sketch1 = shaft1.Sketch
Dim constraints1 As Constraints
Set constraints1 = sketch1.Constraints
Dim constraint1 As Constraint
Set constraint1 = constraints1.Item("W")
Dim length1 As Length
Set length1 = constraint1.Dimension
designTable1.AddAssociation length1, "W"

Dim constraint2 As Constraint


Set constraint2 = constraints1.Item("A")
Dim angle1 As Angle
88
ANEXO B

Set angle1 = constraint2.Dimension


designTable1.AddAssociation angle1, "A (degrees)"
Dim constraint3 As Constraint
Set constraint3 = constraints1.Item("R1")
Dim length2 As Length
Set length2 = constraint3.Dimension
designTable1.AddAssociation length2, "Ri"
Dim constraint4 As Constraint
Set constraint4 = constraints1.Item("R2")
Dim length3 As Length
Set length3 = constraint4.Dimension
designTable1.AddAssociation length3, "Re"
Dim constraint5 As Constraint
Set constraint5 = constraints1.Item("H")
Dim length4 As Length
Set length4 = constraint5.Dimension
designTable1.AddAssociation length4, "H"
Dim parameters1 As Parameters
Set parameters1 = part1.Parameters
Dim intParam1 As IntParam
Set intParam1 = parameters1.CreateInteger("Pieza ensayo", 0)
designTable1.AddAssociation intParam1, "Pieza ensayo"
designTable1.Configuration = 1 ' posible línea a eliminar
part1.Update
constraint2.AngleSector = catCstAngleSector0
Dim constraint6 As Constraint
Set constraint6 = constraints1.Item("Offset.160"
Dim length5 As Length
Set length5 = constraint6.Dimension
length5.Value = 16.774973
Dim constraint7 As Constraint
Set constraint7 = constraints1.Item("Offset.162")
Dim length6 As Length
Set length6 = constraint7.Dimension

length6.Value = 30.8

'%%%%---------------- 2ª Parte de la Macro generación de archivos--------------%%%%


88
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

89

Dim TablaModelos, configuracion, mbox, seleccion, i As Integer

Dim designTable2 As Relation

Set designTable2 = relations1.Item("TablaModelos")

'Se consulta el número de config o filas de la tabla de diseño


configuracion = designTable2.ConfigurationsNb

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

ubicacion = CATIA.FileSelectionBox("Generación Archivo Nueva Superficie Final", _


" * .CATPart", CatFileSelectionModeSave)

On Error Resume Next

partDocument1.ExportData ubicacion, "CATPart" ' salvamos el documento

If Err.Number = 0 Then

MsgBox "El documento CATPart fue guardado en: " & ubicacion & ".CATPart"

End If

Next i

End Sub
90
ANEXO B

b. Macros de Machining: proceso de conformado incremental en 2 etapas


Macro 03 apt.CATScript
Language = "VBSCRIPT"

‘ Genera el codigo APT


‘ Ejecutar macro con CATProcess activo

'Fuente original:
http://catiadoc.free.fr/online/CAAScdBase/CAAMaiScriptHome.htm
Sub CATMain()

Dim MfgDoc1 As Document


Set MfgDoc1 = CATIA.ActiveDocument

Dim ActivityRef As AnyObject


Set ActivityRef = MfgDoc1.GetItem("Process")

Dim Setup1 As ManufacturingSetup


If (ActivityRef.IsSubTypeOf("PhysicalActivity")) Then
Set childs = ActivityRef.ChildrenActivities
quantity = childs.Count
if quantity <= 0 then
Exit Sub
End if
NumberOfPO = 0

For I=1 To quantity


Set child = childs.Item(I
If (child.IsSubTypeOf("ManufacturingSetup")) Then
Set Setup1 = child
NumberOfPO = NumberOfPO +1
Exit For
End If
Next
End If

if NumberOfPO <= 0 then

90
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

91

Exit Sub
End if

Set ProgramList = Setup1.Programs


Dim Program1 As ManufacturingProgram
Set Program1 = ProgramList.GetElement(1)
' A partir de aquí se siguen las instrucciones del manual:
' http://catiadoc.free.fr/online/CAAScdMaiTechArticles/CAAMaiTocManufacturingActivity.htm
' Se pretende generar el código a partir de Program1
'Dim outputGen As ManufacturingOutputGenerator
'Dim format, fileName As String
'format = "APT"
'fileName = "c:\myFile.txt"
'Dim genData As ManufacturingGeneratorData
'outputGen.InitFileGenerator(format, fileName, genData)

Dim format, filename As String


format = "APT"
fileName = "c:\zzz.aptsource"
filename = CATIA.FileSelectionBox("Generación Documento APT", "*.aptsource",
CatFileSelectionModeSave)
Dim genData As ManufacturingGeneratorData
outputGen.InitFileGenerator format, filename, genData

' 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

a. Macros auxiliares modelado en python aplicación CAD/CAM a un proceso de


rebordeado de agujero
func_auxiliar.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Auxiliary functions
"""
def get_data_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():
number = float(string)
coord.append(number)
coords.append(coord)
#print(coords)
return coords

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__'].Line(point1=(4.0, 0.8), point2=(


4.0, -0.8))
mdb.models['Model-1'].sketches['__profile__'].VerticalConstraint(addUndoState=
False, entity=mdb.models['Model-1'].sketches['__profile__'].geometry[7])
mdb.models['Model-1'].sketches['__profile__'].PerpendicularConstraint(
addUndoState=False, entity1=
mdb.models['Model-1'].sketches['__profile__'].geometry[2], entity2=
mdb.models['Model-1'].sketches['__profile__'].geometry[7])
mdb.models['Model-1'].sketches['__profile__'].CoincidentConstraint(
addUndoState=False, entity1=
94
ANEXO C

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

# Field outputs: SETS for sheet top and bottom surfaces

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.Job(atTime=None, contactPrint=OFF, description='', echoPrint=OFF,


explicitPrecision=SINGLE, getMemoryFromAnalysis=True, historyPrint=OFF,
memory=90, memoryUnits=PERCENTAGE, model='Model-1', modelPrint=OFF,
multiprocessingMode=DEFAULT, name=jobname,
nodalOutputPrecision=SINGLE, numCpus=4, numDomains=4, queue=None, scratch=
'', type=ANALYSIS, userSubroutine='', waitHours=0, waitMinutes=0)

mdb.jobs[jobname].submit(consistencyChecking=OFF)
mdb.jobs[jobname].waitForCompletion()
mdb.models['Model-1'].boundaryConditions['BC-4-Move-'+tool].setValues(u2=0)

b. Macro pre4-fea-hole definition.py


from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from job import *
from sketch import *

100
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

101

from visualization import *


from connectorBehavior import *

#import os

dirPaths = "gen2-tool-path/"
dirFEA = "pre4-fea-definition/"
execfile(dirFEA + "func_auxiliar.py")
dirResults = 'gen4-sheet-thickness/'

params = get_text_from_file(dirFEA + "params.txt")


R = []
tooling = []
for i in range(len(params)):
R.append(float(params[i][0]))
tooling.append(params[i][1])

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")

c. Macro pre5-fea-hole definition.py


dirResults = 'gen4-sheet-thickness/'
for i in range(len(tooling)):
tool=tooling[i]
jobname = 'gen3-HF1st-R_tool' + tool
odb_filename = jobname + '.odb'
image2 = dirResults + 'gen4-PEEQ-' + str(tool)
image3 = dirResults + 'gen4-SMises-' + str(tool)
top_displ_filename = dirResults + 'gen4-U-top-' + str(tool) + '.rpt'
bot_displ_filename = dirResults + 'gen4-U-bottom-' + str(tool) + '.rpt'

102
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

103

# open modulus, create viewport and open odb


from abaqus import *
from abaqusConstants import *
session. Viewport (name='Viewport: 1', origin=(0.0, 0.0),
width=177.540267944336,height=127.15885925293)
session.viewports['Viewport: 1'].makeCurrent()
session.viewports['Viewport: 1'].maximize()
from caeModules import *
from driverUtils import executeOnCaeStartup
executeOnCaeStartup()
session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(referenceRepresentation=ON)
o1 = session.openOdb(name=odb_filename)
session.viewports['Viewport: 1'].setValues(displayedObject=o1)
session.viewports['Viewport: 1'].odbDisplay.display.setValues(plotState=(CONTOURS_ON_DEF, )
# Plot the strain in the deformed sheet: PE Max. In-Plane Principal
# Plot options: 0-0.5
# Export image to file
session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(variableLabel='PEEQ',
outputPosition=INTEGRATION_POINT, )
session.viewports['Viewport: 1'].odbDisplay.contourOptions.setValues(maxAutoCompute=OFF,
maxValue=0.8, minAutoCompute=OFF, minValue=0.0)
session.printToFile(fileName=image2, format=SVG, canvasObjects=(session.viewports['Viewport: 1'], ))
session.printToFile(fileName=image2, format=PNG, canvasObjects=(session.viewports['Viewport: 1'], ))

# Plot the Mises stress in the deformed sheet: S Mises


# Plot options: 0-220
# Export image to file
session.viewports['Viewport: 1'].setValues(displayedObject=o1)
session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(variableLabel='S',
outputPosition=INTEGRATION_POINT, refinement=(INVARIANT, 'Mises'), )
session.viewports['Viewport: 1'].odbDisplay.contourOptions.setValues(maxAutoCompute=OFF,
maxValue=320, minAutoCompute=OFF, minValue=0.0)
session.printToFile(fileName=image3, format=SVG, canvasObjects=(session.viewports['Viewport: 1'], ))
session.printToFile(fileName=image3, format=PNG, canvasObjects=(session.viewports['Viewport: 1'], ))
# NODES SELECTION
# Tools > path > create > node list
session.Path(name='Path-Top-Surface', type=NODE_LIST, expression=(('SHEET-1', (3, '67:26:-1', )), ))
session.Path(name='Path-Bottom-Surface', type=NODE_LIST, expression=(('SHEET-1', (4, '70:111:1', )), ))
104
ANEXO C

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)

session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(variableLabel='U', outputPosition=NODAL,


refinement=(COMPONENT, 'U2'))
session.XYDataFromPath(name='Top-U2', path=pthT, includeIntersections=False, shape=DEFORMED,
labelType=TRUE_DISTANCE)
session.XYDataFromPath(name='Bottom-U2', path=pthB, includeIntersections=False, shape=DEFORMED,
labelType=TRUE_DISTANCE)
# Export to file
x0 = session.xyDataObjects['Top-U1']
x1 = session.xyDataObjects['Top-U2']
session.writeXYReport(fileName=top_displ_filename, appendMode=OFF, xyData=(x0, x1))
x2 = session.xyDataObjects['Bottom-U1']
x3 = session.xyDataObjects['Bottom-U2']
session.writeXYReport(fileName=bot_displ_filename, appendMode=OFF, xyData=(x2, x3))

d. Macro scr7-calculate-sheet-thickness.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import math

def distance(p1, p2):


"""
Distance between two 2D-points
"""
return math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)

104
Programación de macros en CATIA V5 y Abaqus para el análisis de conformado de chapa

105

def middle_point(p1, p2):


"""
Middle point between two 2D-points
"""
x = (p1[0] + p2[0])/2
y = (p1[1] + p2[1])/2
return x, y

def line(p1, p2):


"""
2D-line: A*x + B*y = C Returns coefficients A, B, -C
"""
A = (p1[1] - p2[1])
B = (p2[0] - p1[0])
C = (p1[0]*p2[1] - p2[0]*p1[1])
return A, B, -C

def intersection(L1, L2):


"""
Returns a 2D-point [x,y] or False if lines are parallel
"""
D = L1[0] * L2[1] - L1[1] * L2[0]
Dx = L1[2] * L2[1] - L1[1] * L2[2]
Dy = L1[0] * L2[2] - L1[2] * L2[0]
if D != 0:
x = Dx / D
y = Dy / D
return x, y
else:
return False

def perpendicular(L, p):


A = L[0]
B = L[1]
#C = L[2]
if A==0: # horizontal --> vertical
return 1, 0, p[0]
else:
106
ANEXO C

if B==0: # vertical --> horizontal


return 0, 1, p[1]
else:
return -B, A, A*p[1] - B*p[0]

def average_distance(t1, t2, b1, b2):


"""
Calculates el average distace between two straight lines Lines are defined by end points t1-t2 and b1-b2
"""
m1 = middle_point(t1, b1)
m2 = middle_point(t2, b2)
lm = line(m1, m2)
mp = middle_point(m1, m2)
lp = perpendicular(lm, mp)
lt = line(t1, t2)
pt = intersection(lt, lp)
lb = line(b1, b2)
pb = intersection(lb, lp)
return distance(pt, pb)
def thickness(t, b):
"""
Arguments: 2 arrays for displacements of top and bottom surfacesm,since the initial undeformed sheet was
flat, U2 needs to be fitted.Thus, the bottom surface is fitted as U2 = U2 - t0.The 'average thickness' applied to
displacements yields a factor.Real thickness is calculated from t0 multiplied by the factor
"""
a = []
t0 = 1.6 # Initial undeformed sheet thickness
for i in range(len(t)-1):
t1 = t[i]
t2 = t[i+1]
b1 = b[i]
b2 = b[i+1]

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]

file = dirPaths + 'gen4-thickness-' + tool + '.csv'


x,y =np.loadtxt(file, unpack = True, delimiter = ',')
ax.plot(y, x, label=tool)

#plt.title('Hole-flanging by press working in 2 stages')


plt.ylabel('Distance along the flange')
plt.xlabel('Flange thickness')
plt.axis([0, 1.6, 0, 25])
plt.xticks((0, 0.4, 0.8, 1.2, 1.6))
ax.legend(loc='lower left', shadow=True, title='Tool radius (in mm)')

plt.savefig(dirGraphs + 'thickness.png', dpi=300, format='png')


plt.savefig(dirGraphs + 'thickness.svg', dpi=300, format='svg')

También podría gustarte