TFG Borja Jesus Fernandez Lopez
TFG Borja Jesus Fernandez Lopez
generación automática de
elementos mecánicos en
Junio 2018
RESUMEN
Con motivo del constante incremento de demanda que actualmente está presente en las
distintas ramas de la ingeniería, surge la necesidad de ofertar herramientas de diseño rápi-
das, útiles y cada día más capaces de facilitar los distintos aspectos de diseño ingenieril.
Este hecho es especialmente importante en los campos de la ingeniería mecánica y el dise-
ño de máquinas y sus componentes, siendo las áreas de trabajo en torno a los cuales este
proyecto se fundamenta. En gran medida una buena parte del tiempo de diseño se centra en
la repetición de trabajo ya realizado previamente, como sería el caso del diseño de ejes mo-
trices y engranajes y su posterior representación en un medio de diseño por ordenador. De
manera conjunta, todo desarrollo técnico conlleva igualmente una mejora del marco didácti-
co, capaz de suplir las necesidades de aprendizaje y de aportar herramientas que faciliten la
inclusión de nuevos profesionales en estos campos.
La forma de resolver dicha disyuntiva por parte del departamento de Ingeniería de Maquinas
(ETSII, UPM) fue el desarrollo de un software interactivo, centrado en el diseño y cálculo de
elementos mecánicos. Este software se llama EDIMPO y es actualmente utilizado como
medio de aprendizaje por los alumnos de las asignaturas de Diseño de máquinas I y II. La
introducción de un programa como EDIMPO aporta al alumno de una herramienta para la
verificación y diseño de árboles transmisores de velocidad, engranajes y todos los elemen-
tos secundarios asociados. EDIMPO es un software en constante actualización que plantea
como objetivo final, la constitución de una herramienta comparable a software de diseño
comercial y propietario de una estructura centrada en el aprendizaje de quien la usa.
Es esta conjunción de realidades la que motiva el desarrollo de este proyecto, cuyo fin es la
creación de un módulo capaz de generar de forma automática modelados 3D de elementos
mecánicos básicos y su posterior utilización como herramienta interactiva de aprendizaje en
EDIMPO. Esta funcionalidad no se encuentra incluida en ninguna versión anterior de EDIM-
PO y es materia exclusiva de este proyecto. El módulo planteado gestionará en junto con un
módulo de diseño de Elementos Finitos y una estructura completamente renovada de
EDIMPO, el proceso de aprendizaje del alumno.
Con este software se busca facilitar el proceso de diseño de reductores de velocidad, pro-
porcionando al usuario la oportunidad de agilizar su trabajo y de establecer un entorno de
aprendizaje que permita la rápida comprobación de los diseños realizados y afianzar de una
manera más consolidada los conceptos expuestos en las asignaturas de Diseño de máqui-
nas.
Para lograr esta meta se proporciona una herramienta basada en el lenguaje Visual Basic
de Microsoft, que en conjunción a un programa mayor actúa sobre el entorno de modelado
3D Solid Edge de Siemens y genera aquel conjunto de árboles engranados que el usuario
demande.
El alumno dispondrá de una herramienta capaz de generar rápidamente los modelos bases
de una reductora y de proporcionar de un medio para la comprobación de los diseños, con-
siderablemente más intuitiva y sencilla.
La elaboración del módulo planteado, ha basado su desarrollo en un proceso de construc-
ción y comprobación iterativa de los modelos generados. Al ser Solid Edge un programa
complejo, las particularidades de cada operación han de ser comprobadas con cada nueva
iteración, garantizando que los pasos tomados fuesen exitosos y no revirtiesen el progreso
conseguido. Toda interacción establecida entre Solid Edge y el programa EDIMPO ha nece-
sitado igualmente del diseño de protocolos de intercambio de datos completamente nuevos.
Para la generación de los modelos, se ha hecho uso de una estructura de gestión de datos,
de elaboración propia, capaz de coordinar varios programas simultáneamente y cuya arqui-
tectura resulta modular y extrapolable a la realidad. El proceso de construcción de la misma
se ha basado en el uso extensivo de las funcionalidades aportadas por Visual Studio.
Es importante recalcar que la mera inclusión de dichas funcionalidades aun siendo objeto de
apoyo didáctico al alumno, no constituyen una herramienta ideal para el proceso de aprendi-
zaje del mismo. Es por ese motivo por el cual, se ha añadido la capacidad de generar un
informe PDF automático con resultados obtenidos y parámetros utilizados. De esta forma se
garantiza la existencia de un medio para la fácil comprobación del trabajo realizado.
Los resultados mencionados pueden ser observados en la ilustración presentes a continua-
ción:
Como parte final del proyecto se sitúa la correcta incorporación del módulo desarrollado al
programa EDIMPO y su posterior validación, como herramienta a ser utilizada en las asigna-
turas de Diseño de máquinas I y II.
CODIGO UNESCO
AGRADECIMIENTO
Este documento va dedicado a todas aquellas personas que han hecho posible que este
proyecto haya sido posible:
Enrique Chacón, por la dedicación y el aguante inhumano que le tiene que haber supuesto
leer las primeras versiones de este escrito y por el apoyo a lo largo de todo un año de traba-
jo. Muchas gracias.
Javier Echevarrí, por las ayudas académicas y por las clases tan interesantes que han des-
pertado en mí el interés por el diseño de máquinas.
Adrián y a Raúl Nnang por el sufrimiento compartido y la experiencia única que ha sido tra-
bajar con vosotros. Compañeros de batalla, de risas y sobretodo lágrimas, muchas lágrimas.
Alvaro, por las incontables horas de trabajo necesarias para llevar a cabo este proyecto y el
apoyo técnico y humano que ello ha supuesto. Esa botella de champán gigante más vale
que este el día de la presentación.
TABLA DE CONTENIDO
1. GLOSARIO ..................................................................................................................... 6
2. INTRODUCCIÓN ............................................................................................................ 8
2.1. Motivación Académica ......................................................................................... 11
2.2. Motivación Personal ............................................................................................ 12
3. OBJETIVOS.................................................................................................................. 13
3.1. Planificación temporal ............................................................................................. 14
3.2. Presupuesto ............................................................................................................. 15
4. METODOLOGÍA ........................................................................................................... 16
4.1. Proceso de recogida de datos e Investigación previa ....................................... 17
4.2. Recursos necesarios ........................................................................................... 18
4.2.1. Microsoft Visual Basic .Net 2017.................................................................. 18
4.2.2. Solid Edge ST9/ST10 ..................................................................................... 20
4.2.3. Microsoft Office Excel ................................................................................... 21
4.2.4. Mathworks Matlab ......................................................................................... 21
4.2.5. Spy for Solid Edge ........................................................................................ 22
4.2.6. PDF Sharp...................................................................................................... 23
4.3. Esquemática de la utilización de recursos ......................................................... 24
4.3.1. Interacción con Solid Edge .......................................................................... 24
4.3.2. Interacción con Microsoft Excel................................................................... 27
4.3.3. Interacción con Matlab ................................................................................. 28
4.4. Nociones previas ................................................................................................. 30
4.4.1. Gestión de datos ........................................................................................... 30
4.4.2. Tecnología VB.NET ....................................................................................... 43
4.4.3. Secuencia de trabajo con Solid Edge. ......................................................... 46
4.4.4. Principios del modelado de ejes motrices .................................................. 52
4.4.5. Principios de Modelado de engranajes ....................................................... 54
4.4.6. Creación informe PDF: ................................................................................. 62
5. IMPLEMENTACIÓN ...................................................................................................... 65
5.1. Funciones de interacción con Solid Edge. ......................................................... 65
5.2. Funciones de interacción con archivos.............................................................. 67
5.3. Creación de ejes de transmisión ......................................................................... 72
5.4. Creación de Ruedas engranadas ........................................................................ 76
5.5. Función de interacción con objetos COM .......................................................... 78
5.6. Función Main ........................................................................................................ 78
5.7. Release ................................................................................................................. 79
5.8. Algoritmos descartados. ..................................................................................... 80
6. RESULTADOS ............................................................................................................. 83
7. CONCLUSIONES Y LINEAS FUTURAS ...................................................................... 89
7.1. Conclusiones........................................................................................................ 89
7.1.1. Didáctica ........................................................................................................ 89
7.1.2. Optimización ................................................................................................. 90
7.1.3. Solid Edge como plataforma ........................................................................ 90
7.1.4. Seguimiento de objetivos ............................................................................. 90
7.2. Líneas Futuras...................................................................................................... 91
8. ANEXOS ....................................................................................................................... 92
9. TABLA DE ILUSTRACIONES ...................................................................................... 93
10. REFERENCIAS BIBLIOGRÁFICAS .......................................................................... 95
1. GLOSARIO
API
Application Programming Interface, término utilizado para designar a un conjunto de
bibliotecas de funciones, datos, clases o demás tipos de elementos informáticos listos para
ser utilizados por otro software, constituye una unidad funcional por si misma .....................17
VB.NET
Visual Basic. Net. Tecnología propia de Microsoft para el desarrollo de aplicaciones. Sus
principales fuertes son el procesamiento simultáneo de varios lenguajes de programación
distintos y la programación por objetos.................................................................................17
DIM
Departamento de Ingeniería de Maquinas, ETSII UPM ........................................................17
Macros
Serie de instrucciones que se almacenan para que puedan ser ejecutadas de forma
secuencial mediante una sola llamada u orden de ejecución. .................................................. 17
Interfaz gráfica
Programa o entorno gráfico encargado de gestionar la actuación de un usuario mediante
menús, imágenes, desplegables y demás elementos visuales .............................................18
Formularios
Un formulario es un documento o tipo de archivo, diseñado para que el usuario introduzca
datos estructurados en campos prestablecidos o defina algoritmos de ejecución, para ser
posteriormente almacenados y procesados .........................................................................18
CAD
Computer Aided Design. Término utilizado para designar todo programa de diseño por
ordenador .............................................................................................................................20
Programación por objetos
Estilo de programación basado en la agrupación de conjuntos complejos de información en
unidades manejables, jerarquizables y heredables entre sí. Permite el establecimiento de
estructuras de datos extrapolables a la realidad ...................................................................24
Almacenamiento por referencia
Tipo de interacción entre datos que permite la modificación de valores y propiedades de un
dato cualquiera, actuando directamente sobre su posición en memoria ...............................27
Clase
Modelo o plantilla utilizada para la definición de propiedades, funcionalidades y reglas de
interacción generales que sigue un tipo de dato ...................................................................34
Namespace
Medio informático utilizado para la organización por etiquetas de clases según un orden
jerárquico .............................................................................................................................43
Keypoint
Tipo de dato/restricción interna de Solid Edge que permite la conexión de elementos de
dibujo y su administración como un único conjunto ..............................................................49
2. INTRODUCCIÓN
Son asignaturas que por la naturaleza teórica de las mismas hacen especial hincapié en el
aprendizaje y efectuación de unos cálculos numérico largos y complejos que aun
necesarios, no son especialmente constructivos para el aprendizaje efectivo de como
diseñar un sistema de transmisión.
La versión actual de EDIMPO es utilizada como medio básico de desarrollo, en las prácticas
de la asignatura de Diseño de Maquinas I y II. Esta labor práctica contempla el proceso
completo de diseño de una reductora, tomando como base una máquina ya conocida. La
intervención del alumno en estas prácticas va desde el cálculo de rodamientos a utilizar,
esfuerzos y picos de tensión en los ejes motrices, diseño de sistemas de engrane,
lubricación de la maquina hasta la elaboración de planos y aquellos modelos en 3D que
sean necesarios para la completa definición de la máquina.
La adición de un software didáctico aporta al alumnado la opción de comprobar como la
importancia de los conceptos no se encuentra en los cálculos realizados, siendo estos
mismos la parte más intensivas de las asignaturas, sino en aquellos conceptos en torno a
los cuales se basan estos mismos.
Con cada actualización este programa ha ido añadiendo nuevas funcionalidades y su
interfaz gráfica ha sufrido un proceso de mejora continuo. Actualmente EDIMPO es un
software basado en la plataforma de cálculo numérico de Matlab cuyas funcionalidades se
dividen en:
Recogida de parámetros de diseño.
Pre dimensionamiento de la máquina.
Selección de rodamientos.
Interfaz de diseño de parámetros de los árboles de transmisión.
Selección de las uniones.
Este software a pesar de aportar una base de cálculo, la fiabilidad de la misma es discutible.
Se puede afirmar adicionalmente que el uso de la misma no resulta intuitivo y presenta
grandes carencias a nivel funcional, tales como lentitud de procesamiento, falta de claridad
en las gráficas expuestas, imágenes de baja resolución o la incapacidad de las ventanas de
ser modificadas en tamaño.
Se puede afirmar que aun siendo un programa que facilita enormemente el proceso de
diseño, es un software altamente limitado como programa informático. Esta serie de
problemas técnicos interfieren enormemente en el proceso de aprendizaje, pues pueden
convertir algo que debería de surgir por la propia curiosidad del alumno en un proceso a
veces tedioso y frustrante. Luego la renovación del software era de necesidad inmediata. Es
en este punto en el cual se plantea cual es la reforma planeada para EDIMPO 2018.
El proyecto aquí descrito se realizará como un proyecto colaborativo de desarrollo,
implementado como parte de un marco superior al contemplado por este.
Es por lo tanto un proyecto destinado a que el alumno ahorre el máximo tiempo posible en el
proceso de modelado, aportándole una base de trabajo fácilmente modificable. Es de
especial mención el tiempo que deja de ser invertido en la formación de las ruedas
engranadas proceso altamente complicado de realizar manualmente. Al disponer el alumno
de una serie de modelos ya formados, el proceso de reconstrucción de los mismos pasa por
el simple cambio de parámetros en el programa principal, aportando de esta forma al
alumno de una herramienta que facilitará su aprendizaje.
Con el informe, se pretende acelerar todavía más ese proceso, disponiendo de una
herramienta para comprobar los resultados obtenidos, sin necesidad de entrar en Solid Edge
y validar uno a uno los modelos generados. El informe aportará todo el conjunto de
parámetros necesitados para la elaboración de dicho modelo, facilitando la comprobación de
posibles errores humanos. El proyecto se considera finalizado con la verificación de
resultados y final implementación en EDIMPO.
La motivación a nivel académico detrás del desarrollo de este proyecto se puede resumir
esencialmente en la necesidad de aportar a un alumnado, que actualmente da uso a una
herramienta mejorable, de unos medios de calidad, destinados a fomentar su aprendizaje.
Es por lo tanto un proyecto que va a repercutir positivamente en los medios de enseñanza
de la universidad y que en última instancia facilitará la tarea lectiva del profesorado.
No limitándose exclusivamente al ámbito académico se puede afirmar que con la correcta
implementación de este proyecto, la universidad adquiere conocimientos efectivos en la
automatización de programas de diseño por ordenador, campo poco explorado y cuyo
número expertos es muy limitado. Ofrece por lo tanto una ventaja a nivel competitivo con
otras instituciones y aporta las bases para el desarrollo de nuevos proyectos en este campo.
Por ultimo dado que el objetivo final del proyecto tanto individual como colectivo del grupo
de desarrollo en el que este ha sido ejecutado, es la mejora y final implementación de
EDIMPO como una herramienta comparable a software comercial, existe la posibilidad de
una final venta y distribución del mismo.
Para poder explicar porque personalmente he elegido este proyecto de fin de carrera
primero debo hacer una pequeña introducción a mi interés personal en el desarrollo de
código y el modelado 3D.
Como entretenimiento personal he convertido la modificación de videojuegos en una de mis
principales formas de entretenimiento desde hace varios años. Estas modificaciones
implicaban el desarrollo de modelados en 3D y en muchas ocasiones la modificación del
código del propio juego para poder adaptarlos mis propias visiones personales.
Como consecuencia de ello me vi naturalmente atraído hacia este proyecto, pues
combinaba dos de los que creo que son algunos de mis mayores puntos fuertes: el
desarrollo de modelos en 3D y la programación en plataformas con las que he tenido poco o
ningún contacto.
En consecuencia la principal dificultad que planteaba este proyecto, el aprendizaje e
investigación de un medio viable para la elaboración de un programa complejo a través de
plataformas que en su momento me resultaban desconocidas, no ha constituido un
problema para mí. Este proyecto llego a mis oídos gracias a mi propio interés en buscar un
trabajo relacionado con el diseño de máquinas. Desde el primer momento que supe de su
existencia, quise participar en él, independientemente de las posibles dificultades que este
pudiese aprender.
Es importante mencionar que dado que el proyecto presentado implica un trabajo de
desarrollo real en equipo con otras personas a las que en su momento conocía poco, me ha
supuesto además un beneficio en experiencia de desarrollo en equipo, la cual en otro tipo de
trabajo hubiese sido difícil de encontrar.
Es por lo tanto un proyecto que no solo me ha llamado la atención desde mis gustos
personales, sino que además me ha aportado experiencia real y tangible a nivel profesional
y una serie de competencias difíciles de encontrar en el ámbito profesional tales como
aprender a utilizar Visual Basic, mejorar mis habilidades en desarrollo de modelos 3D y
conocimientos de desarrollo de aplicaciones y especialmente conocimiento de primera mano
en la automatización de procesos constructivos en un entorno CAD.
3. OBJETIVOS
OBJETIVO B: Estudio de herramientas de trabajo en la API Solid Edge ST10 de cara a usos
futuros.
3.2. Presupuesto
4. METODOLOGÍA
Una vez definidos los objetivos de una forma unívoca es necesario plantear las posibles vías
de solución de cara al problema planteado.
El módulo debe permitir la interacción entre dos programas ya existentes, EDIMPO y Solid
Edge y por lo tanto previo planteamiento a cualquier solución a la problemática es necesario
conocer bajo que medios ambos trabajan y que posibles dificultades puedan surgir de la
interacción entre ambos. Es por lo general una de las mayores problemáticas presentes en
cualquier proceso de diseño de aplicaciones, pues una vez alcanzada una mínima
complejidad la interacción entre aplicaciones no desarrolladas por el mismo equipo es
inevitable.
No todos los programas funcionan mediante el mismo lenguaje de programación ni bajo el
mismo régimen de administración de datos, realidad que creará numerosas dificultades. El
lenguaje en el cual una aplicación es construida, constituye el medio lógico bajo el cual,
cualquier tipo de acción que esta ejecuta es regulada y determinará en consecuencia las
posibles interacciones con otras aplicaciones.
El caso concreto que se maneja en este proyecto se corresponde con la interacción entre un
programa basado en el lenguaje propio de la plataforma Matlab de Mathworks S.L y una
API [1] cuyo funcionamiento se debe a la tecnología VB.NET [2]. EDIMPO es un programa
propio del departamento DIM [3] de la ETSII UPM, cuyo código se basa en el lenguaje
utilizado por Matlab. Por el contrario, Solid Edge tiene su código construido con Microsoft
Visual Basic.
El hecho de que ambos programas presenten distintos lenguajes de programación no
tendría por qué suponer una dificultad en caso de que se hubiesen creado previamente
medios específicos para su interconexión. Este el caso por ejemplo entre el propio Matlab y
los productos de Microsoft Office, aun basando estos últimos igualmente su código en
lenguaje Visual Basic.
El problema surge del hecho de que Matlab por sí solo no es capaz de ejecutar código
proveniente de Visual Basic, condición necesaria para poder efectuar cualquier tipo de
acción sobre la API de Solid Edge. Como se pretende elaborar un programa capaz de
coordinar de forma automática estas plataformas, al no existir ninguna herramienta oficial
capacitada para traducir la información manejada por ambos sistemas, se hace necesaria la
intervención de medios terceros. La fase preliminar de investigación se centró por lo tanto en
determinar una forma efectiva de comunicar ambos programas.
Tras un estudio básico de las funcionalidades que presenta Matlab y de las características
propias de programas comunes basados en Visual Basic, se observó que un medio efectivo
para poder realizar esta misma interconexión vendría de la mano de los productos de
Microsoft Office. Más concretamente a través de Excel, el programa de manejo de datos
más extendido en la actualidad.
El paso posterior a la determinación de un posible medio de comunicación entre programas
consistió en un estudio de qué posibilidades presenta Solid Edge a ser automatizado. Por lo
general la mayoría de programas de diseño por ordenador tienen como funcionalidad
incluida, la capacidad de ejecutar piezas de código propias del usuario. Estas son las
llamadas Macros [4].
Siemens con motivo de potenciar las herramientas ofertadas en su plataforma, ofrece a los
usuarios de Solid Edge una guía básica pero de gran utilidad para la iniciación en
programación de dichas macros.
A pesar de que el código de las rutinas que Solid Edge contiene no está ofertado al usuario,
sí que se le da la opción de utilizar las mismas herramientas de desarrollo que permiten el
funcionamiento de dichas rutinas.
Una vez determinado que el proyecto podía ser llevado a cabo, el siguiente paso en la
investigación concernió la adquisición de conocimientos en programación de Visual Basic.
Esta labor fue realizada mediante la consulta de guías online y de libros de programación en
Visual Basic indicados en referencias.
Por último se destaca que los algoritmos descritos a lo largo de este documentos al igual
que ha sido aclarado mediante la guía de actuación han sido previamente emulados de
forma manual en Solid Edge. Una vez determinado el procedimiento manual a seguir se ha
intentado emularlo mediante código, proceso que por dificultades expresadas
posteriormente no ha sido posible en la mayor parte de los casos.
En este capítulo se ofrece una breve introducción de cada uno de los programas o recursos
utilizados durante la elaboración de este proyecto y una introducción a los motivos por los
cuales han sido necesitados.
Resultan especialmente útiles los formularios. Estos actúan como base sobre la que se
podrán disponer módulos de texto, cajetines a rellenar, botones y diversas plantillas de
trabajo que permiten la fácil elaboración de interfaces. Constituyen en sí mismos las bases
con las que cualquier programa complejo será construido.
Entre las distintas capacidades que esta herramienta aporta al usuario se encuentran las
siguientes funcionalidades:
Control instantáneo sobre los distintos objetos usados en todo momento por la
aplicación Solid Edge en tiempo real.
Explicación detallada y jerárquica de las relaciones entre los elementos que Solid
Edge utiliza.
Recopilación de las librerías de Solid Edge, junto a una breve explicación de su
utilización (a veces), relaciones mutuas entre funciones y elementos necesarios para
su definición.
Historial de comandos de Solid Edge utilizados en orden temporal.
Modificación de parámetros de internos de funcionamiento del programa en el
momento.
Buscador interno de todos los procesos ejecutados por Solid Edge en tiempo real
junto a que librearías estos están asociados.
PDF Sharp constituye un conjunto de librerías de uso libre, que permiten la elaboración de
documentos PDF de forma automática, mediante la codificación bien en lenguajes C++ o
Vb.net. Dichas librerías se encuentran facultadas de una gama de funcionalidades que aun
ligeramente más limitadas que las herramientas originales de elaboración de texto propias
de Adobe o Microsoft, sí que permiten la construcción automática de documentos complejos.
Esta es una de las limitaciones más destacables de las herramientas de formateo de texto
más expandidas, lo que hace necesario apoyarse en medios terceros como sería PDFS-
harp.
Existe la posibilidad de la elaboración automática de documentos en formato de bloc de no-
tas mediante la propia plataforma de desarrollo Visual Basic, pero la complejidad de las
mismas palidece en comparación con las utilidades aportadas por PDF Sharp. Por este
mismo motivo y gracias a ser código de uso libre, fue elegido como base para la elaboración
automática de informes. En siguientes apartados se explicará en detalle el funcionamiento
de la librería junto al formato y objetivos que se pretenden conseguir con la elaboración del
informe de post-modelado.
Modos:
Ordenado.
Síncrono.
El almacenamiento de los mismos se lleva a cabo por relaciones de referencia [9]. Todo
objeto o dato que sea manejado por dichas relaciones es controlado no a través de su valor
sino de la posición en memoria que este tenga. En consecuencia, se puede actuar sobre el
valor de una propiedad a través de todo el código del programa sin verse limitado por
definiciones concretas de datos.
En una función por ejemplo, a no ser que sea una información transmitida por referencia,
todo cambio que se realice en la misma no va ser objeto de interpretación fuera de esa
unidad de código. Al almacenar la información por referencias, el orden en que estas han
sido añadidas, a los conjuntos concretos encargados de almacenar cada tipo de dato cobra
una importancia suprema. El modo síncrono no nos garantiza conocer dicho orden aunque
podamos controlarlo.
Por esta misma razón junto a lo explicado anteriormente todo el proyecto se realiza en el
modo Ordenado. Salvo indicación concreta este será igualmente el modo predeterminado
de funcionamiento de Solid Edge. Existe la posibilidad de trabajar de forma conjunta con
ambos modos, pero ante la complejidad asociada a dicha tarea se ha preferido evitar la
mezclar de los mismos.
Una vez definido bajo qué modo de funcionamiento se trabajará, el siguiente paso es la
elaboración de un protocolo de actuación sobre Solid Edge. Dado que el programa a diseñar
pretende actuar de la forma más eficiente posible, se debe evitar salvo que sea
estrictamente necesario iniciar más de una vez Solid Edge, de esta forma acelerando el
proceso de generación de modelos.
Como no siempre existirán los
documentos sobre los que se
va a trabajar, es necesario
además crear una serie de
funciones destinadas a la
coordinación de archivos. El
protocolo de actuación será el
siguiente.
Una vez es iniciado EDIMPO,
el usuario ejecutará el módulo
de automatización.
Inmediatamente el programa
comprobará si ya existe una
sesión previamente abierta de
Solid Edge y en caso de que
esto sea verdad, no se iniciará
el proceso de apertura de este
mismo. El objetivo es ahorrar
considerablemente en tiempo
de ejecución.
En caso de no ser así se inicia
una sesión de Solid Edge y a
posteriori se comprueba si
existe o no un documento
abierto de pieza.
Dicho documento es controlado por una posición conocida en los archivos de EDIMPO, en
caso de que no haya ningún documento que se corresponda con el nombre utilizado
internamente se creará uno nuevo. Si este existe y no se encuentra abierto, se iniciará su
apertura y si existe y se encuentra abierto este será utilizado para la ejecución del módulo.
El resto de operaciones a realizar con Solid Edge se encuentran comprendidas dentro del
algoritmo concreto desarrollado para la generación de ambos modelos y su proceso de
guardado. Ambos aspectos serán explicados en gran profundidad en futuros apartados.
Toda esta batería de datos es posteriormente guardada por EDIMPO en un archivo EXCEL
madre, archivo que aporta la información necesaria para cada módulo de EDIMPO. El
motivo por el cual la información es almacenada conjuntamente es para garantizar que
cualquier modificación realizada por el usuario se extienda a todos los módulos incorporados
al programa.
De cara a la construcción gráfica de los modelos solo algunos de los datos contenidos en
este archivo Excel serán utilizados y por lo tanto es necesario elaborar una subrutina que
ataque este problema. La explicación de la mencionada rutina y la estructura de datos se
explicarán en mayor detalle en los apartados 4.4.1 y 5.2.3.
La mencionada subrutina, se encarga de la organización interna de los datos constructivos
de los modelos, datos que han sido leídos previamente del archivo Excel madre y de un ar-
chivo auxiliar utilizado exclusivamente para la determinación de los parámetros de las rue-
das engranadas.
Este último archivo es actualizado cada vez que vaya a ser necesario el uso de los paráme-
tros de construcción para los engranajes. Internamente el archivo ha sido programado en el
propio sistema Excel para que con los parámetros fundamentales del conjunto engranado,
previamente leídos en el archivo madre, se construya la curva necesaria para la elaboración
del diente. Este proceso será explicado en mayor detalle en futuros apartados. Al guardar
todos los datos en un formato conocido se permite una programación considerablemente
más intuitiva y organizada.
Por lo tanto la interacción con Excel se basará en un proceso constante de entrada y salida
de información a estos dos archivos, producido sin intervención directa por parte del usuario.
El esquema funcionamiento representado en la ilustración 10, explica la lógica que seguirá
la interacción usuario-módulo.
Primeramente el usuario introduce a través de EDIMPO los parámetros iniciales de cons-
trucción que crea convenientes y estos mismos son almacenados por el programa en el ar-
chivo común de datos. A continuación dichos datos son leídos por parte del protocolo de
administración de datos y estos mismos son almacenados en una base interna, pensada
para una mejor administración de los mismos durante la automatización de Solid Edge.
Los datos son posteriormente utilizados por parte de las sub-rutinas creadas para la genera-
ción de los modelos y estos una vez finalizados son almacenados. La información pertinente
al usuario es consecuentemente visualizada a través de un informe en PDF que el individuo
consultará para comprobar el resultado final que los parámetros introducidos han dado lu-
gar.
De esta forma se evita la innecesaria interacción directa con los modelos y se aportar al
usuario de una herramienta que facilitará su proceso de decisión. Una vez comprobado se
realizan las modificaciones pertinentes a través de EDIMPO y el ciclo se inicia de nuevo. En
caso de no detectarse ninguna modificación a los modelos, estos no serán generados de
nuevo.
A pesar de que la plataforma Matlab de Mathworks constituye el medio sobre el que se basa
el código del programa principal EDIMPO, la interacción con la misma de cara a este pro-
yecto se limita al proceso de decisión inicial para afrontar el diseño del programa y a la ela-
boración de una interfaz gráfica con la que el usuario interaccionará con el módulo propues-
to.Matlab se encargará de la tarea de comandar la ejecución del módulo de automatización.
Aun siendo imposible la interacción directa entre el código de Matlab y una aplicación basa-
da en Visual Basic si es posible la iniciación de ejecutables independientemente de la plata-
forma en la que estos fueron diseñados, debido a que el formato de cualquier ejecutable
depende no de la plataforma de diseño sino del sistema operativo, este caso Windows.
La orden de ejecución será impartida por el usuario, que previa introducción de los paráme-
tros de diseño, según la ilustración 10, comandará la activación del módulo al presionar un
botón en la interfaz gráfica. Dicho botón tiene asociada la orden de activar el ejecutable.
Como toda la interfaz gráfica de EDIMPO, aquella asociada al módulo de este proyecto se
basa en las herramientas gráficas del propio Matlab. La elaboración de dicha interfaz gráfica
no se encuentra incluida dentro de los objetivos de este proyecto pero si su diseño.
En dicha interfaz gráfica se incluye igualmente la opción de visualizar los informes genera-
dos por el programa, para facilitar el proceso de diseño y validación al usuario. Esta capaci-
dad es considerada como prioritaria pues el enfoque del programa ha de ser ante todo mo-
mento de ámbito educativo.
La naturaleza del proyecto elegido exige el uso efectivo y ordenado de una gran cantidad de
datos numéricos, que sí no son propiamente gestionados conducirían a un peor
funcionamiento del programa y a una mayor lentitud del mismo.
Como se mencionó anteriormente, la principal dificultad presente ante la interacción entre
plataformas que no fueron diseñadas específicamente para hacerlo, son todo el conjunto de
incompatibilidades que puedan surgir de su interacción. Para el caso que trata este
proyecto, dicha dificultad se traduce en incompatibilidad de lenguajes entre programas. La
plataforma en la que el programa madre se basa y el entorno de modelado 3D no pueden
establecer una comunicación directa entre ellas, haciendo necesario el uso de herramientas
intermedias en el proceso de gestión de datos. Esto es debido a que el código de EDIMPO
funciona en base al lenguaje Matlab y Solid Edge en base Microsoft Visual Basic .NET.
Ambos lenguajes no disponen de herramientas que habiliten su interoperabilidad como si
ocurriría entre códigos en C++ y lenguaje Visual Basic. Programas terceros serán utilizados
para establecer dicho puente de conexión.
Más concretamente dicha tarea la efectuará Microsoft Office Excel. Otro tipo de medios
podrían ser utilizados para resolver esa misma dificultad, pero la extensión y facilidad de
acceso a los productos Microsoft implica que cualquier otra solución no sería óptima. En
todo momento se pretende evitar la necesidad de utilizar programas que no sean de
creación propia cuando se trate de la utilización normal de EDIMPO.
Visual Studio, al ser una plataforma de desarrollo de aplicaciones es capaz de generar un
ejecutable, que siempre y cuando sea distribuido con el código utilizado para su creación, no
necesitará la descarga de la propia plataforma para su utilización una vez distribuido. Por lo
tanto lo mencionado anteriormente no constituye un problema de cara a la futura distribución
del programa.
El módulo de automatización de Solid Edge que buscamos desarrollar recibe toda la
información que el usuario ha generado previamente en la plataforma principal, EDIMPO,
mediante un archivo de datos Excel. El módulo no participará en el proceso inicial de diseño,
siendo simplemente el recipiente de los parámetros calculados por el alumno y por lo tanto
se limitará a actuar como una extensión de la labor realizada por el programa principal.
Dicho eje presenta una serie de características generales tales como sus dimensiones,
posición relativa de los rodamientos respecto a la sección de engrane, radios de acuerdo,
elementos a los que está unido, etc…
Este eje está formado por secciones y cada de estas secciones dispone de elementos
igualmente que las caracterizan. Cada sub-nivel que se pueda establecer constituirá un
elemento que podemos describir y por lo tanto tratar como un objeto completamente
definido. Las relaciones a establecer entre dichos objetos dependen completamente de
cómo se relacionen en la realidad, siendo posible partir de elementos más generales como
sería un animal a elementos más concretos y definidos como sería un perro o bien
elementos que coexistan pero no se relacionen jerárquicamente, como serían los
componentes de un coche.
Cada una de estas características constituye propiedades a definir durante la generación del
modelo y por lo tanto tienen una serie de parámetros asociados, en definitiva datos a
controlar. Aquella información que sea relevante para formación del eje, será
consecuentemente almacenada en el archivo Excel general. Este archivo contendrá
información de naturaleza muy distinta, la cual se organiza con una estructura de datos
completamente paralela a lo observable en la realidad. Los objetos son por lo tanto un lienzo
en blanco sobre el que podremos definir las distintas interacciones posibles entre los datos
que llegaremos a utilizar. En definitiva los datos serán agrupados en unidades fáciles de
comprender para el programador y que permiten conocer en todo momento donde los
parámetros a utilizar se encuentran almacenados. Esto permite tratar la información
relevante para cada uno objetos y la gran cantidad de parámetros asociados como parte de
unidades conocidas.
Para averiguar que objetos deberemos de crear basta con dividir la reductora que
procuramos modelar en unidades físicas más básicas. La reductora dispone de tres árboles,
cada árbol dispone de una serie de secciones y finalmente cada sección dispone de una
serie de características propias tales como sus dimensiones o sí presentan chavetas o no.
Cada una de estas divisiones imaginarias constituyen por lo tanto, unidades de información
definibles por si solas. De esta forma se permite el trato de una gran cantidad de datos de
una forma compartimentalizada. En consecuencia una vez analizados bajo que unidades se
pueden agrupar los distintos datos a almacenar se llegó a la siguiente estructura:
En la ilustración 12 se puede observar el orden jerárquico y que objetos han sido necesarios
para la completa definición del problema a tratar. Cada sub-apartado de la estructura elegida
recoge toda la información pertinente a la generación del modelo al que está asociado, de
esta forma garantizamos que en todo momento aquellos parámetros constructivos a utilizar
han sido correctamente recogidos y el proceso finalice con un modelo exitosamente
construido.
Generación de objetos
Para la creación de los objetos mencionados, primero se inician las llamadas clases, nombre
genérico utilizado por Visual Basic para definir elementos informáticos de diversa naturaleza,
entre los que se encuentra la definición de objetos. El nombre de la misma será el que
determinará la etiqueta de toda variable del tipo asociado a esa clase [10].
Ejemplo:
Public Class Arbol (Cabecera)
…
End Class (Final)
En medio de la apertura y cierre de la clase, se situará toda aquella información que defina
la clase. Se puede dividir dicha información en propiedades, también llamadas campos de
información y las funcionalidades que se desea que esta clase pueda ejecutar.
Mientras que la función constructora realiza la asignación a los campos del tipo de dato, la
función creadora se encarga de pedirle al usuario la información necesaria para definir el
tipo de dato. Dentro de las posibilidades que se encuentran abiertas al programador se
situaría la opción de hacer la asignación a ciertos campos obligatoria u opcional.
Colección de árboles:
Este objeto se encarga de guardar todo el conjunto de datos necesarios para la creación de
la reductora, hace de nexo de unión de toda la estructura de datos y constituye el elemento
final a ser transmitido por parte de la función encargada de crear dicha estructura.
Lista de arboles
Colección de árboles
Colección de modelos.
Árbol:
Dentro de árbol se definen aquellos parámetros que establecen las características generales
de la construcción del mismo y recogerá en su interior la lista de secciones que lo forman.
Lista secciones árbol
Árbol Posición Rueda y (o) Piñón
Modelo Árbol
Radio
Longitud
Sección Árbol
Chavetas (lista)
Radios Acuerdo
Chavetas (ShaftKeys):
Parámetros necesarios para definir las dimensiones y tipo de chaveta (Tipo A o B):
Altura
Longitud
Chavetas Profundidad relativa (T1)
Ancho
Tipo
Engranaje:
En este objeto se almacenan todos aquellos parámetros constructivos de un engranaje. La
información aquí contenida será utilizada durante el dibujado de la curva evolvente de cada
diente.
La información que el programa ha de utilizar provendrá de dos archivos Excel distintos, uno
encargado de la recogida de toda la información con la que el usuario interactúa dentro de
EDIMPO, común por lo tanto para todo el programa y cada uno de sus módulos y otro
encargado de la generación de los parámetros constructivos de los dientes engranados.
Para poder efectuar dicho intercambio de datos se han elaborado numerosas subrutinas,
limitando la interacción con el archivo general a su lectura. Mientras que el archivo
pertinente a los dientes de engrane obtendrá la información gracias a la introducción de
nuevos parámetros elegidos por el usuario, destinados a la formación de la evolvente del
diente.
El archivo de datos común de todo EDIMPO presenta una estructura tal que divide por
modelo, todos los posibles parámetros que intervengan en la construcción del mismo,
separando datos de Árboles, Piñones y Ruedas engranadas. El proceso de lectura se limita
a la recopilación de datos parámetro a parámetro y su posterior asociación a los objetos
creados anteriormente.
Debido a las importantes particularidades del proceso de obtención de engranajes se ofrece
una explicación del algoritmo seguido. Para la estimación de las curvas evolventes del
engranaje, se hizo uso de un archivo de Excel utilizado por los alumnos de la asignatura de
Diseño de Maquinas I. Este archivo mediante los parámetros básicos de diseño de un
engranaje, calcula los puntos en coordenadas del plano XY, que definirán la curva
evolvente.
Este proceso de entrada y salida de datos se realiza por cada elemento engranado que vaya
a ser construido. En la siguiente imagen se adjunta un ejemplo de la gráfica obtenida
durante el cálculo de la curva evolvente. Dicho gráfico se genera internamente en el archivo
Excel para mostrar las posiciones relativas de las curvas principales del engranaje.
Previa explicación del proceso seguido en el interior del mencionado archivo Excel se aporta
una descripción breve de los principios básicos entorno a los cuales se elabora el diseño de
una rueda engranada.
En la ilustración 21, se representa el perfil de contacto entre dos piezas de engrane. En él se
pueden observar los radios de cabeza, primitivos y de base de cada una de las piezas
engranadas.
Todo conjunto engranado efectúa idealmente su conexión en el llamado diámetro primitivo.
La conexión que realizan las ruedas dentadas depende en su mayor medida del ángulo de
presión (αn). Este equivale al ángulo entre la dirección de la fuerza de contacto (normal
común en el caso sin rozamiento) y la dirección de la velocidad en el sólido conducido. Este
parámetro en el tipo de engranajes tratados (cilíndrico helicoidal o recto) se mantiene
constante para toda la circunferencia de engrane.
Como no siempre se puede garantizar que el proceso de mecanizado de los engranajes sea
el correcto, a veces es necesario incluir un factor que tenga en cuenta esta desviación.
Dicha labor es realizada por el factor de desplazamiento (δx), el cual modificará parámetros
fundamentales tales como los radios de cabeza o de pie, número ideal de dientes para
efectuar la conexión pero más importantemente modificará las tensiones sufridas por el
diente.
En azul se representa la llamada línea de engrane, lugar geométrico de los puntos del plano
que coincide en cada instante con el punto de conexión entre ambos engranajes. El diente
ha de seguir dicha línea de engrane en todo momento, siendo el punto de conexión del
mismo con su homólogo, variable en posición. El seguimiento de esa serie de puntos
constituye el llamado perfil evolvente del diente y es en definitiva la forma que debe de tener
el perfil en caso de haber sido perfecta la conexión. Un ejemplo de involuta o evolvente
puede ser observado en la ilustración 20.
El ángulo de presión determinará por lo tanto cual será la línea de engrane y en definitiva
cual será la forma ideal del perfil de diente.
Ahora bien dicho ángulo de presión no se corresponde con el ángulo real que percibe el
diente en caso de ser la conexión oblicua (β ≠ 0), por lo tanto este ha de ser corregido. Se
puede afirmar lo mismo para el ángulo β, de inclinación.
cos( β) (1)
αt = arccos(cos(αn) · )
cos( βb )
Una vez obtenidos estos dos parámetros el proceso de cálculo interno del archivo pasa por
la determinación de las circunferencias del engranaje. Usualmente el proceso de diseño de
engranajes, dependerá de aquella potencia o velocidad que se quiera transmitir a través de
estos elementos y de las condiciones de trabajo bajo las cuales el conjunto creado trabajará.
Con la especificación de estas variables, se determina en consecuencia que tren de
engranajes será el necesario y por lo tanto que relaciones de transmisión se utilizarán y los
parámetros de contacto del conjunto.
Mediante las ecuaciones (3-6) se realiza el cálculo de las circunferencias principales del
engranaje. Siendo almacenados los valores obtenidos en el archivo.
Rb = (D · cos(αt))/2 (4)
Ra = Rb + (1 + δx) · mn (5)
Una vez obtenidas dichas coordenadas, estas son almacenadas y el archivo es cerrado y
guardado.
Visual Basic. Net constituye una adaptación del antiguo lenguaje Visual Basic a la tecnología
framerwork.Net. La tecnología framework.Net fue la respuesta que desarrolló Microsoft al
creciente mundo de desarrollo de aplicaciones Web tales como Java, es el llamado Visual
Studio. Constituye un componente adherible al sistema operativo Windows y ofrece una
gama amplia de soluciones predefinidas junto con un medio de verificación y desarrollo de
ejecutables altamente completo. Dicha tecnología, utiliza un lenguaje de programación
nuevo, no-retro compatible con versiones anteriores de Visual Basic. Todo programa que
hiciese uso de la versión 2006 de Visual Basic, no puede ser ejecutado dentro del entorno
de Visual Studio.
Visual Studio es en esencia una herramienta de desarrollo de aplicaciones. Las principales
fortalezas de este son el uso de un lenguaje de programación común (CLP) y la posibilidad
de crear una biblioteca de clases, concepto explicado en el apartado anterior.
La inclusión del llamado lenguaje común o CLP es el factor principal de diferenciación que
aporta Visual Studio respecto otros entornos de desarrollo de aplicaciones. Este lenguaje
aporta la posibilidad de coordinar numerosos lenguajes de programación distintos, sea
Python, C++ o VB entre otros, de forma simultánea. Dicho hecho permite que aplicaciones
que hayan sido programadas en lenguajes distintos, pero soportados, pueden interactuar a
nivel de código y no limitándose al tipo de archivo, como ocurre con Matlab y Solid Edge. El
uso de CLP solo es posible gracias a la inclusión dentro de Visual Studio de los llamados
paquetes de interoperabilidad.
Dado que el programa que se pretende diseñar es de distribución pública, todas las librerías
que son utilizadas por el mismo deben de ser incluidas en los archivos del programa durante
la descarga. La determinación de que librerías se incluyen durante la elaboración del código
y para su posterior distribución depende principalmente de dos factores:
Criterios de compatibilidad interna con la aplicación.
Criterios de distribución del código.
El primer criterio se corresponde con la capacidad de una pieza de código a ser ejecutada
dentro de un entorno concreto. Este entorno es determinado por el tipo de aplicación que se
vaya a generar. Cada tipo de aplicación funciona en torno a una serie de reglas internas,
encargadas de determinar la lógica de la misma. Ciertas librerías no son compatibles con la
lógica interna del programa y por lo tanto no pueden ser incluidas en el. Visual Studio se
encarga automáticamente de la realización de dicha gestión, impidiendo la inclusión de
librerías no correspondientes al tipo de aplicación que se esté programando.
La determinación de que librería de funciones o clases es adecuada o no se realiza
mediante los tipos de interoperabilidad. Este concepto puede ser simplificado a la capacidad
o no por parte de una función de operar en distintos modos de funcionamiento, en definitiva
la lista de tipos de aplicación en las que la lógica interna es compatible. Aplicaciones de
consola o archivos diseñados para páginas Web no siguen la misma lógica y por lo tanto
necesitan de un medio que permita su adaptación.
Definición de librerías.
Mediante librerías todo desarrollador puede crear una serie de funcionalidades que puedan
ser posteriormente compartidas con otros desarrolladores o con nuevos programas de
diseño propio. El objetivo de las mismas es facilitar el proceso de desarrollo, eliminado la
necesidad de que cada vez que se creé algo nuevo sea necesario rehacer el trabajo previo y
reestablecer las bases de funcionamiento en cada proyecto.
De cara a este proyecto y al módulo de análisis procedural de elementos finitos, la
elaboración de librerías permite la agrupación sencilla de las rutinas creadas por campos,
diferenciando claramente unos de otros. En definitiva constituyen un sistema de
organización interno.
El proceso de elaboración de una librería es el siguiente:
I. Se desarrollan las funciones que vayan a constituir la librería.
II. Estas son agrupadas en los llamados NameSpace [11] o espacios de nombre.
III. Son compiladas seleccionando la opción de elaborar librería en Visual Studio.
La función que cumplen los espacios de nombre es la de aportar a un código constituido por
muchas subunidades de una etiqueta común entorno a la cual ser agrupados. En el caso de
querer agrupar todas las funciones de un tipo, basta con definir un espacio de nombres,
incluir las funciones deseadas y otorgarle una etiqueta.
La definición de funciones puede ser controlada de forma que estas solo sean capaces de
trabajar en entornos concretos. Dicha definición del medio de trabajo se realiza mediante las
etiquetas de Privado o Público.
Visual Studio internamente organiza la información de forma que si el desarrollador le indica
que una pieza de código no debe de ser compartida entre partes del programa, entonces
esa información aunque sea accesible para ejecutar, no lo sea para modificar. Es en
definitiva el permiso de solo lectura o escritura y lectura. Dicha diferenciación existe con el
motivo de impedir que ciertas propiedades de especial importancia sean modificadas
accidentalmente sin el control del desarrollador. Los motivos pueden ser varios pero
normalmente se deben a motivos de seguridad y motivos prácticos, tales como garantizar un
buen funcionamiento del programa. En el caso de querer construir una librería este hecho es
de especial importancia.
Como se ha indicado, no todo código tiene que surgir del mismo desarrollador. En caso de
necesitar de funcionalidades más básicas que las que se pretendan construir, basta con
incluir esas mismas importándolas. Es aquí donde se revela la especial importancia de las
librerías en proceso de desarrollo. En el caso concreto de este proyecto, dado que se ha de
trabajar con una aplicación previamente construida, estas librerías han de ser importadas a
cada parte del código donde vayan a ser utilizadas, pues la inclusión de librerías en un
proyecto no implica que estas estén disponibles para su uso. Solo con la importación de las
librerías se activan los mecanismos internos que permiten su interpretación y llamada.
Otro aspecto importante en el proceso de creación de librerías es el concepto de herencia
explicado en apartados anteriores. Toda clase dispone de propiedades y funcionalidades,
pero estas se limitan a la propia clase a la que están asociadas. Si se desea que otra clase
disponga de las mismas propiedades y funcionalidades, es necesario indicarlo mediante la
sentencia inherits.
Con inherits se establece una conexión entre clases, permitiendo la herencia de toda
propiedad o función que defina la clase que se herede. De esta forma se puede separar
etiqueta a utilizar para nombrar un grupo de funciones del nombre de la clase con la que
esta ha sido definida y se evita la repetición de trabajo. Efectivamente separando las clases
en las que han sido definidas las funciones de las clases utilizadas para nombrar los grupos
de estas mismas.
Namespace Functions
Para iniciar el modelado de una pieza se debe previamente abrir Solid Edge y el documento
a utilizar. La realización de esta tarea sigue el esquema organizativo indicado en el apartado
4.4.2. Una vez dispuesta la estructura de apoyo, se inicia la secuencia de dibujado,
partiendo esta de un esquema fijo:
Se selecciona un plano de trabajo.
Se define un perfil sobre dicho plano.
Se extruye el perfil, obteniendo en el proceso un volumen con el que trabajar.
Toda operación consiguiente, partirá del trabajo realizado en esta fase inicial. Como ya se
ha mencionado previamente, Solid Edge trabaja con varios tipos de documentos, cada uno
de ellos destinados a una fase concreta del diseño en 3D por ordenador. Bien sea la
definición de una pieza (.par), la creación de un conjunto (.asm) o la elaboración de planos.
Dependiendo de la complejidad del modelo a generar se irán acumulando operaciones
sobre el volumen inicial generado.
Este proyecto apunta a generar dos tipos concretos de modelos, arboles motrices por un
lado y por otro las ruedas engranadas que serán conectadas a los mismos. Se hace inciso
en el hecho de que la extensión del proyecto se limita a la generación de la forma básica del
árbol, sin añadir a esta el talle de los piñones, que servirían de elementos conectores con
las ruedas engranadas. El motivo por el cual se hace esta excepción será explicado en
futuros apartados en detalle.
Para poder entender de forma efectiva el algoritmo de creación de los modelos que este
proyecto pretende generar es necesario contemplar las bases de generación de modelos en
Solid Edge. Como ha sido mencionado el proceso de generación de modelos parte de la
previa selección del plano sobre el que se trabajará.
Solid Edge dispone de una serie de planos preestablecidos, asociados al sistema
coordenado predeterminado por el programa, tales como los planos ortogonales XY, XZ, YZ
del sistema cartesiano.
Solid Edge utiliza esta estructura particular debido a la versatilidad que esta aporta. Al poder
agrupar los perfiles utilizados en tantas listas de objetos se da la posibilidad de trabajar de
una forma compartimentalizada, diferenciando fácilmente entre aquellos perfiles utilizados
para cada tipo de operación y aportando al usuario una herramienta que le permite tratar los
objetos implicados por conjuntos significativos. De esta forma el proceso de construcción de
modelos muy complejos puede ser organizado de una forma más intuitiva.
Tanto los ejes motrices como las ruedas engranadas carecen de la complejidad necesaria
para justificar la utilización de una estructura tan compleja, resultando más simple la
asociación de todos los perfiles a una única colección. Sin embargo la comprensión de este
esquema es fundamental para evitar errores durante la escritura del código.
Los perfiles participan de otra particularidad a diferencia del resto de elementos de dibujado.
Un perfil bien puede ser definido para un exclusivamente local o bien pueden estar
asociados a bocetos (skectches).
El boceto es aquel objeto que el usuario utiliza para la acumulación de todos los elementos
de dibujo que constituyen un perfil. Al realizar una operación manualmente, siempre se
generan perfiles asociados a bocetos. Internamente estos funcionan en cierto modo como si
de un tipo de documento especial se tratasen, siendo su definición común a todos los tipos
de documentos que utiliza Solid Edge y teniendo estos un menú contextual propio. El hecho
de que un perfil sea asociado o no a un boceto implica un cambio interno de funcionamiento,
permitiendo la realización de ciertas operaciones y el bloqueo de otras. Esta particularidad
se revelará especialmente importante en las operaciones de modificación de volumen.
Librería Descripción
Manejo de propiedades de archivos.
{ } Revision Manager Manejo de información de conexiones entre datos.
Integración con Insight.
{ } SEInstallDataLib Información de la instalación de Solid Edge
Leer y escribir sobre las propiedades de archivos fuera de
{ } SolidEdgeFileProperties
Solid Edge.
Base de datos de enumeraciones
{ } SolidEdgeConstants (constantes que controlan el funcionamiento de ciertas
rutinas)
{ } SolidEdgeDraft Administra la creación de planos.
Librería principal de Solid Edge, base de todas las
{ } SolidEdgeFramework
funcionalidades básicas.
{ } SolidEdgeAssembly Controla documentos de conjunto.
Control de todas las interfaces comunes, no especificas a
{ } SolidEdgeFrameworkSupport
un entorno concreto.
{ } SolidEdgeGeometry Administra la geometría de los modelos y conjuntos.
Control de documentos de pieza.
{ } SolidEdgePart Control de documentos de placa metálica.
Control de documentos de soldaduras.
En color azul claro se indican las que se constituyen como librerías principales de Solid
Edge, el núcleo del programa. Estas serán entorno a las cuales cualquier proceso de
automatización va a revolver.
Como mínimo para poder interactuar con Solid Edge se debe hacer referencia a la librería
de SolidEdgeFramework, pues esta controla la administración de todos los entornos de
desarrollo de Solid Edge, procesos principales de la aplicación y procesos generales de
cada entorno. Constituye en definitiva el núcleo principal de Solid Edge del cual se desligan
las distintas ramas de funcionamiento del mismo.
Ciertas operaciones que son de uso común a cada entorno serán controladas con su
homóloga en SolidEdgeFrameworkSupport, tal sería el caso de elementos de dibujo,
bocetos, variables, dimensiones, restricciones y demás utilidades que pueden ser utilizadas
en todo documento.
En tono más específico las librerías a utilizar principales serán SolidEdgePart se encarga del
manejo de documentos de pieza y sus elementos constitutivos, como ejes coordenados,
planos, ejes de referencia, perfiles, etc. Esta constituye la librería con la que este proyecto
interactuará más.
Otra serie de librerías tales como SolidEdgeGeometry serán utilizadas en menor medida
para tareas específicas. Dado que la estructura interna de datos que Solid Edge utiliza es
muy compleja, para comprender plenamente esta misma se aporta en anexos un gráfico que
recoge los aspectos principales de la misma (Ver Anexos).
Elementos de dibujo:
Estos constituyen la base con la que todo perfil y boceto será realizado. Un elemento de
dibujo es en definitiva un tipo de dato interno al que Solid Edge asigna unas dimensiones y
normas internas de funcionamiento. Pueden ser de 2 o 3 dimensiones y dependiendo de
esto la relación que tendrán con el resto del documento será distinta, siendo posibles
operaciones únicas para cada tipo y cambiando las relaciones de funcionamiento en base a
las cuales estos elementos trabajan. En este proyecto no ha sido necesario sin embargo la
utilización de elementos de dibujo 3D.
Los elementos de dibujo, al igual que el resto de tipos de datos que Solid Edge maneja, son
almacenados en colecciones, encargadas de agrupar todos los elementos del mismo tipo de
dato. Las interacciones cono estos objetos se realizan estableciendo referencias a los
elementos de la lista que sean necesarios. En caso de querer añadir nuevos elementos
cada uno de ellos dispone de una o varias funciones encargadas de crearlos, en definitiva
de funciones constructoras.
En el caso de elementos en 2D a partir de la definición del plano de trabajo se puede iniciar
el algoritmo de dibujado haciendo referencia al plano deseado. Las funciones constructoras
generan los elementos de dibujo mediante los parámetros que se le aporten. Manualmente
este proceso se realiza mediante la selección de puntos característicos o mediante
parámetros tales como longitudes o ángulos. Internamente Solid Edge traduce dicha
información y la adapta al formato utilizado por las funciones creadoras.
Siguiendo el algoritmo que se determine adecuado el perfil deseado es terminado y
guardado. El proceso de cierre de un perfil sin embargo no se limita a la simple conexión de
líneas, pues este ha de ser validado. Este proceso es de extrema importancia pues es solo a
través de la confirmación de este estado, que Solid Edge puede interpretar que toda
operación en la que el perfil intervenga pueda llegar a ser exitosa. De lo contrario Solid Edge
no garantiza que no puedan aparecer internos.
Para validar un perfil es necesario asignar los llamados Keypoints [12] a las esquinas del
mismo. Estos puntos clave son los encargados de efectuar la conexión lógica entre
elementos de dibujo, de forma que puedan ser tratados como extensión los unos de los
otros. La asignación de los puntos clave ha de ser realizado elemento a elemento y en un
orden concreto, dependiente del orden constructivo del perfil. Solo si esta asignación ha sido
realizada correctamente, el perfil podrá ser dado como válido. Este proceso aun siendo
ejecutado sin intervención del usuario durante la utilización manual de Solid Edge, no lo es
en cambio cuando se busca la automatización del mismo mediante código.
Es importante tener en cuenta que la restricción aportada por dichos puntos clave es
considerada como prioritaria a todo el resto de restricciones que puedan ser aportadas a los
mismos. Las dimensiones por ejemplo serán subordinadas a los puntos clave, salvo que se
indique una excepción a esta regla mediante código. Esto implica a efectos prácticos que si
se produce algún equivoco durante la asignación de los mismos, la forma del perfil que
surgirá bien será completamente distinta a la que se buscaba crear o simplemente dará
lugar a formas con errores internos. Es por ello que se ha hecho hincapié en la necesidad de
seguir un orden de asignación concreto. Una vez validado el perfil este podrá ser utilizado
en operaciones posteriores.
El manejo de las unidades de trabajo constituye una de las limitaciones más importantes a
tener en cuenta durante la generación automática de modelos.
Solid Edge tiene como particularidad el hecho de que las unidades que son aportadas al
usuario son distintas a las que el propio programa utiliza. En cierto modo Solid Edge no
entiende de unidades, sino de valores numéricos que disponen de una serie de etiquetas
asignadas, cuyo uso es meramente estético.
En definitiva, Solid Edge diferencia entre unidades internas y externas, existiendo la
posibilidad de modificar las segundas pero no las primeras. El motivo por el cual Solid Edge
trabaja de esta forma es que muchas veces los usuarios utilizaran sistemas de medida
distintos y las etiquetas asociadas a los mismos, llevan como parte de su definición unas
reglas de conversión interna. Como sistema predefinido, Solid Edge, utiliza valores
asociados al Sistema Internacional, haciendo ciertas excepciones tales como el uso de
milímetros en vez de metros.
Dado que el usuario ha de tener la posibilidad de interactuar con el modelo a posteriori de la
generación del mismo las unidades que este va a percibir han de ser igualmente las
correctas, pues de lo contrario el módulo dejaría de ser intuitivo. Este hecho hace necesaria
la aclaración previo uso del programa de que unidades son las correctas.
Mediante el uso de variables, Solid Edge permite la modificación de modelos de una forma
significativa con el simple cambio de valores numéricos. Este hecho es especialmente útil
durante la automatización del programa, pues liga cambios de la geometría del modelo a
variables en vez de ser necesario actuar elemento a elemento.
Los tipos de dimensiones que Solid Edge maneja internamente son tres:
Dimensiones lineales
Dimensiones radiales
Dimensiones angulares.
Como es sabida la posición de la chaveta en el eje, al haber sido esta especificada por el
usuario en EDIMPO, la determinación del plano a utilizar pasa por la identificación de
aquella cara o superficie sobre la que el plano ha de apoyarse. Al tratarse de superficies
cilíndricas, el plano ha de ser tangencial a la misma en un punto.
Solid Edge administra todos los elementos generados de una forma progresiva según estos
van siendo creados y almacena cada elemento en listas del mismo tipo. Se supone que
como se conoce el número de superficies que contendrá el modelo del eje, se puede
determinar fácilmente donde se situara en la lista de objetos la cara deseada.
La determinación de la misma pasa por primero garantizar que la superficie sea del tipo
buscado (cara lateral, cilíndrica, cónica, etc…), en caso de no corresponder al tipo de
elemento geométrico necesario las operaciones pueden dar lugar a error. Por lo tanto al
igual que con la definición de perfiles, para poder garantizar la correcta operación con las
mismas, se ha de verificar que los elementos que se están tratando son los elementos sobre
los que se interactuará.
Esta obviedad, no lo es tanto para el propio Solid Edge, pues aquello que al ojo humano es
una superficie, salvo determinación específica, Solid Edge no es capaz de realizar dicha
clasificación y a veces almacenará elementos que no corresponden dentro de dichas listas.
De ahí la importancia de dicha verificación.
Es de especial importancia un error particular que Solid Edge presenta cuando se trabaja
con superficies de forma codificada. En ocasiones el propio programa genera superficies y
bordes que no son visualizables en el modelo y que aparentemente no deberían de existir.
Este error se debe probablemente a la existencia de superficie infinitesimales que bien si no
son visualizables sí que entorpecen enormemente el proceso de determinación de
superficies concretas. Al incluirse dichas superficies de área nula en las listas de elementos,
aquello que podía ser determinado por simple algoritmo, hace necesaria la identificación de
las superficies mediante etiquetas. Dichas etiquetas son los números de identificación que
Solid Edge asigna a cada elemento interno del documento.
La complejidad que presenta la creación de las ruedas engranadas implica que para poder
afrontar la creación de los modelos, será necesario partir de una base con la que poder
trabajar. Para poder definir la forma de un de diente engranado, se necesita determinar
primeramente la curva evolvente.
Idealmente la solución a utilizar sería la primera, pues esta aprovecha las funcionalidades ya
ofertadas por el propio Solid Edge, haciendo innecesario el paso de lectura del archivo Excel
por código propio. Sin embargo esta alternativa se demostró imposible debido a una
dificultad particular.
Solid Edge permite el dibujado de curvas mediante la lectura de documentos Excel, sin
embargo esta propia herramienta aun siendo capaz de ejecutar el dibujado de la evolvente,
no se ha demostrado apta para la formación del perfil de diente. Esto se debe a que el
objetivo buscado con el dibujado de la curva, es la obtención de un perfil que pueda ser
utilizado como base en una operación de corte de material.
Para que este sea válido para la tarea, es necesario que todos los elementos del mismo
constituyan una única unidad. Al utilizar la sub-rutina mencionada, la curva es dibujada, pero
esta misma no está asociada a ningún perfil previo y por lo tanto habrá de ser incluida en
otro boceto. La curva se comporta como un boceto en 3D, que a pesar de haber utilizado
exclusivamente coordenadas XY para su dibujado, su comportamiento es el de un elemento
de dibujo no asociado a plano ninguno. Si se desea trabajar con la curva conseguida esta ha
de ser proyectada sobre un plano, en este caso aquel sobre el que se pretende trabajar.
Bajo cualquier otra circunstancia esta tarea debería de ser posible pero por razones
desconocidas al intentar hacer la proyección mediante código la curva no es capaz de ser
asociada al perfil. Al fallar dicha asignación, este método se convierte en inviable.
La otra alternativa al método mencionado sería el dibujado de la misma curva punto por
punto, tarea que resulta considerablemente más trabajosa pero presenta la ventaja de
resultar más óptima de cara a la velocidad de procesamiento.
El algoritmo a seguir sería el siguiente:
parámetros de desconocido valor, la cantidad de valores del intervalo de dibujado que vayan
a superar dicho límite es desconocido de antemano.
Al ser la curva evolvente una curva de decrecimiento muy rápido en aquellos valores
angulares cercanos al 0, la realización de aproximaciones en valores decimales tan
cercanos entre sí puede conllevar la perdida de información significativa. Tras numerosas
pruebas de ensayo y error se observó que redondeando el valor de la curva en el octavo
decimal el problema mencionado no se presentaba y constituye la solución más
comprometida posible.
El siguiente paso a seguir consistiría en la determinación del punto de corte entre la curva
evolvente y el diámetro primitivo. Solid Edge carece de sub-rutinas establecidas para la
determinación de puntos de corte entre elementos de dibujado en un perfil, a pesar de que
esta misma capacidad es demostrada cuando se efectúan recortes de elementos de dibujo.
Ante la falta de herramientas capaces de obtener las coordenadas del punto deseado, la
intersección entre ambas curvas ha de ser realizada manualmente.
Este proceso pasa por la comparación de valores entre la ecuación de un círculo de
diámetro igual al del primitivo y los valores que definen la evolvente, que recordamos han
sido obtenidos en intervalo de ángulo de 0 a 90º. Dado que los valores propios de la curva
evolvente son limitados, no disponiendo en todo momento de más de 90 datos, la
determinación del punto de corte es por si misma altamente aproximada.
La curva evolvente dibujada en Solid Edge, es elaborada mediante una aproximación entre
puntos que sigue una interpolación cuyo orden podemos determinar en el propio proceso de
dibujado. Se optó por una ecuación de orden 3 para la elaboración de dicha curva, al ser la
solución obtenida de una precisión aceptable y por motivos de optimización del proceso,
siendo órdenes más elevados considerablemente más lentos de ejecutar.
Para garantizar un mínimo de precisión en el cálculo, es necesario hacer una comparación
valor a valor de la curva evolvente con la batería de valores procedentes de la ecuación del
círculo. El círculo primitivo fue construido con 1000 puntos, de los cuales solo unos cientos
serán utilizados para el cálculo.
El proceso de comparación parte del siguiente principio, al ir comparando punto a punto de
la curva evolvente con los valores de las coordenadas que definen el círculo primitivo, el
punto de corte de ambas curvas se situará en aquel valor de la evolvente cuya diferencia
respecto a un punto cualquiera del círculo en coordenadas no valga más de un cierto valor.
Se consideró como una solución aceptable la determinación del punto de corte con una
precisión del 0.1%, pues los valores angulares en torno a los que se producirá dicha
intersección no disponen de más de 3 cifras significativas.
Una vez ha sido obtenido el punto en que ambas curvas cortan, se debe dibujar una curva
evolvente simétrica a la primera, tomando como eje de simetría una recta que se encuentra
desplazada angularmente un valor dependiente del número de dientes del engranaje.
el hecho de que debemos garantizar el paso angular existente entre los puntos del diente
contenidos en la circunferencia primitiva, definiendo de esta forma el ancho del diente.
La ejecución de este mismo paso parte del trabajo realizado previamente en el modelo base.
Dicho modelo contiene todas las circunferencias necesarias para la definición de una rueda
engranada junto con una pareja de curvas evolventes separadas mutuamente por un ángulo
concreto en la misma medida que se ha indicado en el párrafo anterior. El motivo por el cual
se utiliza dicho modelo base, es la posibilidad de facilitar el código del programa y a que al
partir de modelos previamente creados, se acelerará igualmente la velocidad con la que el
programa se ejecuta.
Todos los elementos mencionados, son controlados por medio de dimensiones o cotas
previamente establecidas y la modificación del modelo base para que sea adaptado a las
dimensiones deseadas pasa por la simple modificación de las mismas. Naturalmente dichas
modificaciones se ejecutan al principio de la función encargada de la construcción de las
ruedas engranadas.
Como se pretende garantizar que el perfil obtenido pueda ser cerrado, el punto de corte
obtenido anteriormente, será aproximado a aquel punto del intervalo de valores, que el
archivo Excel ha generado, que más se aproxime a las coordenadas reales de intersección.
Una vez establecidas ambas curvas, la determinación del perfil final del diente pasa por el
cierre de los extremos de su base. En determinados casos en los que el diámetro de pie del
diente sea mayor al diámetro de base del mismo, el cierre de la base no se realiza utilizando
los extremos interiores a la curvatura de la evolvente, sino de unas curvas que extiendan
este mismo hasta el diámetro de base. Se puede tomar como aproximación valida la
utilización de líneas rectas debido a la muy corta extensión de las mismas en comparación
con el tamaño de la rueda engranada.
Esta consideración es importante tenerla en cuenta durante la elaboración del programa,
pues su omisión implicaría la obtención de un perfil invalido.
El proceso de construcción del perfil inicial del diente finaliza con el redondeo de los
extremos de la base, tomándose de forma aproximada una semicircunferencia de diámetro
igual a la separación entre puntos de la base.
Una vez obtenida la forma final del perfil, todas aquellas líneas no necesarias para el mismo
son eliminadas. Tales como las circunferencias de base, pie y primitivas junto a toda línea
recta de apoyo.
Este último paso ha constituido uno de los principales problemas encontrados durante la
generación de los perfiles engranados debido al distinto comportamiento del programa en
sus modos manual y automático.
El proceso de obtención del perfil, pasa por la eliminación de todo elemento de dibujo que
no constituya parte final del perfil. Para la construcción del perfil de diente, de las curvas
dispuestas en el modelo base utilizado, sola serán necesarias ambas curvas evolventes, el
arco de cierre y la circunferencia de cabeza del diente. El resto de elementos han de ser
eliminados.
La principal dificultad presentada en este paso surge del algoritmo de recorte que Solid
Edge utiliza. Para efectuar el recorte de cualquier elemento de dibujo, Solid Edge exige de la
introducción de elementos auxiliares que intersecten con aquel elemento que se pretenda
recortar. El proceso de corte depende de un vector encargado de determinar aquella parte
del elemento que ha sido intersectado, como sujeto de ser eliminado.
Dicho proceso de corte genera nuevos elementos de dibujo, pasando de un elemento
original a otro nuevo cuya posición en la lista de elementos del mismo tipo no conocemos.
Para poder entender esta dificultad se presenta un ejemplo:
En la ilustración aquí presente se
observa la existencia de un círculo y
dos líneas rectas. Dichas líneas
representan aquellos elementos de
dibujo que utilizaremos como apoyo
para recortar el círculo.
como los del ejemplo, sino que esa misma tarea ha de ser realizada apoyándose en muchos
más elementos y teniendo que determinar de una forma aproximada los puntos de corte de
los mismos.
Dado que este proceso sería altamente ineficaz se optó por una simplificación del perfil que
se debe de recortar. Como solo ciertos elementos constituirán parte del perfil final, se
genera un nuevo perfil auxiliar, que contenga esos elementos necesarios y ninguno
adicional, reduciendo considerablemente la dificultad de la tarea a realizar.
Para ello los elementos necesarios son copiados al perfil auxiliar serán recortados aquellas
partes del mismo que no se deseen. El modelo a generar será guardado sin efectuar
modificación alguna al modelo base, evitando la pérfida por lo tanto de la plantilla de trabajo
en el proceso.
El perfil obtenido al final de este algoritmo será utilizado consecuentemente como base de
las operaciones de recorte que definirán la forma final de la rueda engranada. Dicha
operación dependiendo del tipo de engranaje que se trate habrá de efectuarse con una
trayectoria perpendicular al lateral de la rueda si se trata de un engranaje recto o con una
trayectoria helicoidal si es oblicuo.
Si dicha operación fuese realizada manualmente las funciones a ejecutar serían distintas, al
hacer dicha misma operación por código, basta con la introducción de un ángulo de diente
igual a 0 en caso de diente recto o distinto para el oblicuo.
Tratando el caso más general de engranaje, de diente oblicuo, la operación a realizar para
obtener el modelo final es un corte helicoidal. Como ya se parte de un modelo previo, no es
necesaria la extrusión de nuevo material, bastando solo con el cambio de dimensiones del
mismo en función de los parámetros introducidos.
La ejecución del mencionado corte helicoidal utilizará el perfil creado en el apartado anterior
y posteriormente será repetida dicha operación tantas veces como le sea indicado.
Siguiendo un patrón circular, el número de repeticiones es igual al número de dientes de la
rueda.
Dicha operación ha constituido con diferencia la mayor dificultad presentada durante la
elaboración de un algoritmo capaz de generar modelos de engranajes. Para poder entender
la problemática es necesario comprender una serie de puntos básicos en lo relacionado a
las operaciones de construcción de volúmenes en Solid Edge.
Toda operación de construcción en Solid Edge, parte de utilizar perfiles cerrados (dibujos
esquemáticos de la forma a construir) que sean interpretados como correctos por el propio
programa, siendo estos perfiles ajustados, aplicando cotas donde sean necesario.
De cara al usuario, Solid Edge ofrece dicho perfil como un elemento perteneciente a los
llamados Sketches (Bocetos) con los cuales se podrá trabajar directamente sin la necesidad
de realizar acción alguna. En toda operación volumétrica se escoge el boceto con el que se
desea trabajar y se seleccionan los parámetros de la operación según necesidad del
usuario. Más concretamente en el caso de operaciones de corte helicoidal los parámetros
pedidos serían tales como el eje entorno al cual se elaborará la operación, el paso de la
misma, la longitud y el perfil a utilizar.
Cada elemento dispone de una serie de características que lo definen, en el caso de una
imagen tales como sus dimensiones, si esta es re-escalada al tamaño del documento,
número de pixeles entre otros Se puede observar en la ilustración 30 un ejemplo de
definición de lo anteriormente explicado. Todos estos elementos han de ser introducidos
manualmente en el documento mediante una especificación por código.
PSF Sharp interpreta los documentos como elementos de extensión finita, determinada esta
misma en función del formato elegido (A2, A4, etc…) que salvo explicita definición no
contempla saltos de página. Esta aparente complejidad permite que el código del mismo sea
altamente versátil, permitiendo la creación de documentos capaces de contener más
información de aquella que pueden representar. Por otro lado esta especificación implica
que el proceso de formación del documento se base en constante ensayo y error. La
elaboración de un documento relativamente simple requiere grandes cantidades de tiempo,
pero aporta la ventaja de que una vez creado el documento, la presentación de información
es automática.
Este algoritmo aunque fiable en la versión actual de Solid Edge, es una solución
considerable como temporal. Al hacer uso directo de comandos por número de identificación
dentro Solid Edge, no se puede garantizar que en futuras actualizaciones dichos número no
varíen. En consecuencia puede que el programa deje de funcionar en futuras versiones.
Esta una de las principales mejoras a realizar de cara a proyectos futuros, pero ante las
exigencias que implicaría la búsqueda de una solución mediante el uso Python no resulta
viable para la extensión de este proyecto.
IMPLEMENTACIÓN
En este apartado nos disponemos a explicar cuál ha sido la implementación final del
proyecto expuesto y las principales funciones desarrolladas para la elaboración del mismo.
Internamente para facilitar el uso de las funciones creadas, estas mismas han sido
recogidas en único espacio de nombres (NamesSpace) llamado Functions, habiendo sido
explicada su definición en el apartado 4.4.2. Este agrupa en su conjunto 4 tipos distintos de
clases, en las que todas las funciones creadas son definidas.
Como fue explicado en apartados anteriores, para garantizar el mejor rendimiento posible
del programa diseñado, ha sido necesaria la implementación de unos protocolos de
actuación sobre Solid Edge. Para evitar repetición de lo explicado consultar Ilustración 9.
Cada uno de los pasos lógicos explicados en dicho diagrama de flujo, se corresponde con
una función creada específicamente para su cumplimiento. Por lo tanto para interactuar con
Solid Edge se han creado 3 funciones:
IsSolidEdgeOpen()
OpenSolidEdge()
CloseSolidEdge()
Sus nombres son auto explicativos pero haremos un breve inciso sobre el funcionamiento
interno que permite que estas trabajen.
Toda interacción que se pretenda realizar sobre Solid Edge se efectúa tratando de hacer
una asignación por referencia a un objeto del mismo tipo que la aplicación de Solid Edge.
Como se ha mencionado en anteriores apartados, cada elemento de funcionamiento de
Solid Edge tiene su relativo informático, en forma de un dato particular. La propia aplicación
no constituye una excepción y el control sobre la misma se realiza a través de un tipo de
objeto llamado:
SolidEdgeFramework.Application
Como puede ser observado este objeto pertenece a la librería de SolidEdgeFramework, que
como fue explicado supone la librería encargada del control de toda la estructura principal
de Solid Edge. Cuadro se genera un nuevo objeto, dicho objeto carece de asociación en
memoria alguna, y cualquier acción que se realice sobre el, carecerá de efecto. El proceso
de interacción con Solid Edge se establece tratando de realizar dicha conexión.
En caso de estar abierto Solid Edge, solo existirá un objeto de este tipo y haciendo llamada
a una función propia del entorno Visual Basic podemos recoger los objetos que estén siendo
utilizados en ese mismo momento y tratar de establecer esa asociación por una etiqueta.
Cada objeto tiene asociada una etiqueta, con la cual podemos hacer llamada al mismo. El
espacio de nombres que guarda dicha función se llama Marshall, este espacio es propio del
sistema operativo Windows y se encarga de establecer conexión en memoria con los
recursos de los que haga uso el ordenador.
Para el caso de este proyecto, bien la asociación con el objeto en memoría se hará poque
este ya este activo o bien sea necesario crearlo. En caso de estar activo, una función propia
de Marshall se encarga de buscar en memoria un objeto que tenga la misma etiqueta que se
le ha introducido. SI lo encuentra, lo devuelve y de esa forma ya es posible actuar sobre
Solid Edge.
En caso de no poder encontrar
el objeto, la activación de Solid
Edge se realiza creando un tipo
de dato igual al indicado
anteriormente. Para llevar a
cabo esta operación, como
Windows no conoce los tipos
de datos internos usados por
un programa es necesario
buscar esa información de
entre los archivos de programa
instalados. Salvo los tipos de
datos propios sean cargados
previamente, como ocurre
durante la definición de
funciones al importar librerías,
Windows no podrá establecer
conexión.
Numerosas funciones han sido necesitadas para poder establecer control de datos y poder
interactuar con el conjunto archivos de los que depende la arquitectura interna del programa.
Estas mismas funciones se pueden agrupar en una serie de sub-divisiones:
Funciones para la interacción con documentos de parte.
Funciones de apertura/escritura en Excel.
Función para la elaboración del informe.
Funciones de Gestión de datos y variables.
Función de Calculo paramétrico.
Este protocolo será emulado para todo tipo de archivo que se necesite guardar durante el
funcionamiento del programa. La interacción es la misma siempre: primero el objeto
informático que se desea guardar activa una función encargada de determinar si ya existe
un archivo en la posición preestablecida de guardado con un nombre predeterminado, que
será diferenciado del resto por el digito añadido al final del mismo. Si encuentra que dicho
objeto existe, cambiará dicho digito hasta que encuentre uno que no exista, momento en el
cual guardará el archivo con ese nuevo digito.
Para evitar la sucesiva acumulación de archivos cada vez que se inicie el programa de
nuevo los archivos creados en la sesión anterior serán sobre-escritos, en el caso de que el
usuario así lo especifique. Dicha acción será realizada a través de una variable booleana en
el Excel común de datos de todo EDIMPO, dando permiso o no a la sobre-escritura de cada
uno de los archivos. Se ha realizado por lo tanto una función de guardado y cambio de
nombre de archivo para: documentos de pieza, imágenes e informe.
Dado que la generación de los arboles motrices es de ejecución muy rápida la orden de
sobre-escritura será ejecutada para todos ellos en vez de por separado. Esta es la única
particularidad presente en el algoritmo de guardado.
Dicha función se encarga por un lado de abrir el archive Excel y de ir circulando por todas
las celdas almacenadas en el documento. Cada celda contendrá una información bien sea
numérica, en forma de variable Verdadero/Falso o como una palabra. Un ejemplo de ello es
visualizable en la ilustración 10.
Independientemente del tipo de dato, toda esta información es leída como si de una palabra
se tratase y se somete a un algoritmo, tal que en función del parámetro que se esté leyendo
dejará dicha información en forma de palabra, la transformará en un número decimal o
entero o a un valor de tipo booleano. Como se conoce en todo momento que dato está
siendo leído y a que parámetro se corresponde este proceso no implica dificultad alguna.
Una vez se finaliza el proceso, el documento es cerrado sin guardar, por motivos de
seguridad y se proporciona a la salida de la función de una tabla de valores en forma de
matriz de varios tipos de datos la cual será utilizada posteriormente en la fase de gestión de
datos.
Las únicas modificaciones destacables son el hecho de que a diferencia del archive anterior,
no se leen todos la información del archivo, limitando esta misma a las coordenadas XY de
la curva evolvente, correspondiente a las 2 primeras columnas del archivo junto con un
diferente algoritmo de cierre.
Una particularidad de Excel es que cuando los archivos son accedidos a través de código y
dichos archivos contienen gráficas o ecuaciones internas de cálculo si el archivo es
guardado toda esa información en forma de reglas internas se elimina. Al cerrar un archivo
Excel automáticamente se pide al usuario mediante un menú que guarde los cambios
realizados, como no se desea eliminar la información contenida se debe forzar el cierre del
mismo, borrando el proceso de memoria.
Este hecho es de especial importancia para el manejo del archivo de engranajes, pues para
poder renovar la curva evolvente, contenida en el mismo por cada nueva rueda engranada,
se han de modificar ciertos parámetros internos.
Haciendo en consecuencia inevitable la necesidad de guardar el archivo, pues solo una vez
guardado se ejecutan los cálculos internos. Dado que no se puede garantizar que todos los
equipos que ejecuten el programa creado dispongan de la versión más reciente de Office, se
realiza el guardado en una versión anterior.
Existen medios para evitar esta problemática, sin embargo al ser un programa de uso
académico se ha determinado que la estructura utilizada es ideal para los objetivos
planteados. En caso de querer extender las capacidades del mismo, la estructura habrá de
ser modificada en consecuencia.
El proceso descrito es emulado por los engranajes, añadiendo como particularidad el hecho
de que previa lectura de los datos se inicia la sobre-escritura del documento de generación
para evolventes y a posteriori se obtienen los datos de las variables modificadas.
La función creada para la realización de esta labor se corresponde con la rutina llamada:
CreateSummary()
Dicha función, como ha sido comentado con anterioridad, se encarga por un lado de
organizar la información necesaria para la correcta descripción de cada modelo en pantalla,
junto con la colocación de las imágenes anteriormente obtenidas de los modelos y la
elaboración de una portada.
El proceso seguido para obtener el documento final es el siguiente:
De la estructura de datos interna se obtienen los parámetros deseados.
Se crea una página por cada modelo a representar.
En cada página se añade la fotografía del modelo y se monta una tabla con los
parámetros.
Particularidades tales como numeraciones, pies de página, marcas de agua y otro tipo de
elementos de escritura han debido ser añadidos manualmente, eligiendo la posición en
pantalla bien por coordenadas establecidas mediante ensayo y error o en posicione
predeterminadas. Actualmente el informe, añade facultades tales como la fecha de creación
del documento y el nombre del autor.
La rutina encargada de la creación de los ejes de transmisión, constituye junto con aquella
destinada a la generación de ruedas engranadas las principales funcionalidades aportadas
por el módulo a crear. Se explicará a continuación exclusivamente el algoritmo seguido para
la consecución de dicho objetivo.
El proceso comienza con la preparación del plano sobre el que se dibujará el perfil inicial.
Para conseguir la formación de una única pieza cilíndrica de distintos radios y longitudes, a
las que hay que añadir la presencia de radios de acuerdo, se ha optado por la extrusión por
revolución de la mitad superior de la silueta del mismo.
Para la consecución de este objetivo se ha diseñado un algoritmo que seguirá los siguientes
principios:
I. Primero se establece una línea vertical de igual extensión al radio de la primera
sección del árbol, seguida de una horizontal de misma extensión que la longitud de
esa primera sección.
II. Para las consiguientes secciones en función de si el radio siguiente es superior o
inferior al anterior, se dibujará una línea ascendente o descendente, acompañada de
del respectivo radio de acuerdo. La diferenciación entre secciones ascendentes y
descendentes es importante debida a la distinta curvatura del radio de acuerdo.
III. La sección hasta ahora dibujada es completada por la línea horizontal
correspondiente a la misma.
IV. Una vez dibujadas todas las secciones el proceso finaliza con una última línea
horizontal, inferior al perfil, con el objetivo cerrar el boceto.
Este tipo de sentencia ha sido utilizada en numerosas ocasiones durante la elaboración del
código. Para el caso explicado, al ordenar la ejecución de la misma, si se intenta unir una
línea horizontal con una vertical en presencia de un radio de acuerdo mediante un punto,
naturalmente la orden fallará y dicho proceso no podrá ser completado.
Dicho plano será posicionado a una distancia del eje principal, tal que la separación sea
igual al diámetro de la cara sobre la que se vaya a realizar el corte, siendo esta misma
controlada por un parámetro dentro de los datos del archivo Excel principal.
Sobre este plano se dibujará el perfil del tipo de chaveta indicado manteniendo este una
distancia del origen de coordenadas previamente acumulada durante la elaboración del
perfil de revolución del eje. La chaveta tomará una posición central a la cara a recortar y
finalmente se ejecuta el proceso de corte, haciendo un corte recto cuya profundidad será
igual al parámetro T1 de la chaveta. Toda chaveta posteriormente realizada, se formará
gracias a la rotación del plano descrito alrededor del eje principal del modelo.
Una vez acabado el modelo, se toma una fotografía del mismo y es guardado, iniciando el
proceso de generación del siguiente árbol. Cuando todos los arboles hayan sido generados,
sus modelos son acumulados en la colección de árboles diseñada durante la gestión de
datos.
GetDimensionByName(objDims, "Da")
dimensión pasa a ser mayor que los valores numéricos que definen la geometría, actual del
modelo.
Para poder obtener el perfil del diente se siguen los pasos explicados en el apartado de
generación de ruedas engranadas (apartado 4.4.5.) Como el modelo engranado va a ser
conectado a los modelos generados en el apartado anterior, se incluye en el algoritmo una
operación de recorte de material en forma de circunferencia tal que el diámetro de la misma
se corresponda con el de la sección al que ira unido.
A posteriori de haber dibujado el diente, se realiza el corte helicoidal, teniendo por longitud
de corte la misma que la rueda engranada. El resto de dientes son formados tras de haber
asociado a la circunferencia de cabeza un patrón circular.
Todo patrón de tipo gráfico no se encuentra asociado al modelo sino a un perfil, el cual se
encargará de definir como se repetirá dicho patrón. En el caso de un patrón circular la
operación necesita de una circunferencia que haga de trayectoria para el mismo o si fuese
lineal, de una recta. Dicho patrón representa la base en torno a la cual la operación será
repetida y solo se ejecutará el corte final, una vez se haya añadido el patrón con la
operación deseada a la lista de patrones asociada al modelo.
El uso del mismo nombre para indicar dos conceptos distintos, hace que el proceso de
definir operaciones con repetición resulte confuso. Por eso es importante entender que no
es lo mismo un patrón gráfico, que uno operacional.
Primeramente el sistema trata de hacer una asignación al objeto pasado por referencia a la
función y en caso de ser exitosa, fuerza la eliminación de la misma. En caso de no serlo no
es necesaria actuación ninguna. A pesar de ser un algoritmo muy sencillo es fundamental
que este sea efectuado, de lo contrario el peso en memoria de todas las variables de tipo
objetos utilizados no se elimina y es acumulado progresivamente hasta que se fuerce el
cierre de Solid Edge. Se recuerda que se manejan cientos de estos tipos de objetos activos
en todo momento, el omitir esta operación haría rápidamente inviable el proceso de
automatización.
4.11. Release
El programa una vez acabado ha de ser adaptado para la distribución a terceros usuarios.
Visual Basic toma como estado predeterminado del programa la versión de debug, esto
significa que todavía pueden ser realizados cambios sobre la misma. Una vez se haya dado
la orden a la plataforma de considerar la aplicación creada como finalizada, se generan unos
archivos esta vez no modificables, salvo por el propio autor de los mismos.
Es fundamental destacar la importancia que tienen los paquetes de interoperabilidad. Como
explicado en el apartado 4.4.2. No se puede dar un programa por finalizado sin haber
incluido dentro de sí todas las librerías necesarias para la ejecución del mismo.
En el caso que atañe a este proyecto las librerías propias de Solid Edge han de ser
incluidas dentro del propio código junto con las de PDFSharp. Estas irán incluidas en la
carpeta generada automáticamente por Visual Basic durante la compilación del programa.
No se incluyen las librerías de
Microsoft Office debido al hecho de
que estas mismas al tratar de ser
incluidas dentro de los archivos del
programa darán lugar a fallo. El fallo
no es por accidente sino por diseño, de
esta forma Microsft se asegura que sus
productos no sean libremente
distribuidos. Al no poder incluir dichas
librerías en el programa se debe
garantizar que antes de lanzar la
versión de salida los paquetes de
interoperabilidad del mismo han sido
activados, en caso contrario no
funcionará el programa.
El código del programa estará recogido
exclusivamente en forma de un
ejecutable encargado de llamar a la
información contenida en otro archivo
de extensión .pbd. Dichos dos archivos
junto a las librerías incluidas dentro del
código constituyen los archivos que
deberán ser compartidos.
Finalmente, para almacenar todas las
imágenes obtenidas durante el
proceso de modelado, junto a las
imágenes necesarias en el informe se
ha creado una carpeta llamada bin.
Los modelos serán guardados en la
carpeta de modelos y finalmente el
informe será almacenado en su propia
Ilustración 41: Esquema funcionamiento programa. carpeta, llamada informe.
La primera solución explorada para el desarrollo del algoritmo de generación de los ejes
paso primeramente por tratar de construir el modelo mediante la unión de sub-modelos de
forma cilíndrica.
Cada cilindro sería formado por una operación de extrusión sobre un perfil circular, cuya
extensión y radios serían los correspondientes a la sección tratada. El modelo una vez
terminado, sería guardado en un archivo para ser posteriormente utilizado en un documento
de conjunto.
El desarrollo de esta solución fue conllevado hasta la finalización de este segundo paso. A
pesar de que la solución no acabó siendo finalizada sí que existió un tiempo de desarrollo y
familiarización con la generación de documentos de conjunto. Se dará a continuación una
breve explicación de cómo funciona este entorno.
A diferencia de los documentos de pieza, Solid Edge no trata los modelos que sean
introducidos en este tipo de documentos como elementos geométricos de “solidos”. Se
entiende por sólido que el modelo tiene unas barreras físicas, no traspasables, que definen
perfectamente los límites del mismo. El modelo dispone igualmente de una posición fija
respecto al eje de coordenadas global utilizado en el documento.
Esto no ocurre así en un documento de conjunto, pues los modelos pueden intersectarse
mutuamente, tomar posiciones espaciales variables y en general comportarse como
elementos incapaces de interactuar mutuamente. Nuestra interacción con los modelos
funciona por lo tanto de forma completamente distinta. Este es el concepto de “ocurrencia” u
ocurrence como es llamado internamente por Solid Edge.
Al iniciar un documento de conjunto, este se encuentra vació y es a través de la inclusión de
dichas ocurrencias como se podrán montar los modelos finales. Los modelos constitutivos
del conjunto final son introducidos en forma de ocurrencia y se establecen las restricciones
que permiten fijar los unos a los otros. En el caso planteado se consiguió elaborar un
algoritmo capaz de fijar entorno a un mismo eje todos los modelos de cada sección junto a
una restricción de coincidencia entre caras finales de la sección e iniciales de la siguiente.
Cada ocurrencia como debería de ser obvio, no representa el modelo real y por lo tanto el
resultado final del documento de conjunto no será un modelo sino una serie de ocurrencias
relacionadas mutuamente.
Este hecho hace que no pueda ser utilizado como vía para resolver el problema. Al no poder
garantizar que el resultado fuese a trabajar adecuadamente en el módulo encargado de
hacer análisis F.E.M. dicha solución tuvo que ser abandonada.
De este intento fallido se obtuvo conocimiento sobre cómo trabajar con documentos de
conjunto, como establecer restricciones entre ocurrencias y como utilizar elementos
geométricos en modelos.
Inicialmente se contempló como parte del proyecto la inclusión del tallado de los piñones en
los ejes de transmisión. El algoritmo de generación de los mismos, no podía partir en
consecuencia del mismo principio utilizado para las ruedas engranadas.
Al tener que hacer uso de modelos generados de forma automática, no se dispondría de
ninguna de las facilidades incluidas dentro de un modelo base, previamente generado a
mano como si ocurre en la formación de las ruedas. Para circunvalar dicho problema se optó
por la utilización del mismo algoritmo de formación del perfil de diente que en las ruedas
engranadas.
Una vez hubiese sido obtenido el perfil, este sería copiado a un plano, que previamente ha
sido definido en la cara horizontal anterior a la sección contenedora del piñón. Se optó
inicialmente por establecer el código necesario para disponer el plano mencionado. La
propia determinación de la cara a utilizar constituyo por si sola un gran problema en tiempo y
resolución técnica. Como ya se ha mencionado, Solid Edge a veces genera superficies de
área nula, no visibles para el usuario y cuya ordenación dentro de la lista de elementos
geométricos no puede ser controlada.
Para resolver este problema se ideó una rutina capaz de identificar la etiqueta interna
asociada a la cara deseada y por lo tanto con ello determinar la posición de esta misma en
la lista de caras.
Una vez se había concretado tanto el proceso a seguir para poder llevar a cabo el corte solo
bastaba con conseguir transferir el perfil de un documento a otro, pues se recuerda se parte
de dos modelos distintos. Es en este paso que se hizo clara una gran limitación de Solid
Edge y es que es perfectamente posible copiar una pieza en su totalidad de un documento a
otro pero no así elementos individúales de cada modelo. Esto implica que una unidad más
básica que el modelo no es transferible entre documentos y en consecuencia el proceso no
podía ser llevado a cabo mediante este algoritmo.
Por limitaciones de tiempo se optó por omitir de los objetivos planteados al proyecto, la
inclusión de los tallados sobre ejes motrices. De este proceso sin embargo se obtuvo
conocimientos sobre la selección de elementos internos de Solid Edge según su etiqueta y
de aquellas limitaciones aparentemente inexplicables que Solid Edge presenta.
5. RESULTADOS
En este apartado se adjuntan los resultados obtenidos por el programa diseñado. Para po-
der mostrar el correcto funcionamiento del mismo se introducirán los valores paramétricos
utilizados en un trabajo del año anterior.
6.1. Conclusiones
6.1.1. Didáctica
Este bloque a pesar de no ser el objeto de estudio principal del proyecto sí que constituye
una meta fundamental para considerar el proyecto como exitoso. El punto de vista del estu-
dio ha de realizarse teniendo presente la posible implementación del trabajo realizado en las
clases de la asignatura de Diseño de Maquinas I.
Con este proyecto se pretendía ofertar al alumno de una herramienta que le permitiera ad-
quirir conocimientos de una forma más rápida y efectiva. Este proceso de aprendizaje de-
pende de la capacidad que tenga el alumno de verificar rápidamente las soluciones obteni-
das. Mediante la lectura del informe el alumno es capaz de obtener una representación
aproximada de cuales han sido los resultados a nivel de modelo, junto con la posibilidad de
chequear rápidamente que datos han sido introducidos.
Una vez aprobada la comprobación visual, el chequeo de la solución obtenida dependerá a
continuación de su validación por análisis FEM. Como el objetivo marcado es permitir al
alumno un flujo rápido de información entre las tareas de comprobación y diseño, se puede
considerar que los resultados obtenidos han sido satisfactorios.
Dado que la elaboración de modelos de alta complejidad tales como las ruedas engranadas
se reducen a la mera incorporación de detalles, el tedioso proceso de su construcción es
eliminado. De esta forma se permite al alumno utilizar el tiempo anteriormente reservado a
la elaboración de los documentos CAD en la mejor comprobación y validación de los con-
ceptos enseñados en la asignatura.
Finalmente como la comprobación de los diseños obtenidos se realiza mediante un informe,
este mismo vale como medio de comunicación entre equipos, permitiendo establecer un
proceso de mejora mutua o también llamado peer-learning.
6.1.2. Optimización
Desde el punto de vista de la optimización la parte fundamental del trabajo irá destinada a
garantizar un rápido proceso de generación.
Tomando como referencia las herramientas habilitadas por Solid Edge para la elaboración
de ejes o engranajes, se puede comprobar que el algoritmo diseñado efectua el mismo tra-
bajo más rápidamente. Esto es especialmente notable cuando se trata de las ruedas engra-
nadas.
En consecución dado que el proyecto elaborado se demuestra a la altura de lo esperable
por un producto comercial, podemos afirmar que el programa ha sido satisfactoriamente
optimizado.
En lo relativo a los objetivos inicialmente planteados, se puede afirmar con total seguridad
que los siguientes objetivos han sido cumplidos en su totalidad:
Objetivo B: Estudio de la herramienta de trabajo en la API Solid Edge ST10 de cara usos
futuros.
Objetivo C: Verificación e integración de la herramienta diseñada en software EDIMPO.
Objetivo D: Actualización de los modelos creados de una forma eficiente y en la que la inter-
acción del usuario con Solid Edge se limite a la modificación de datos en el programa princi-
pal.
Objetivo E: Elaboración de auto-documento PDF de modelos y parámetros de especial im-
portancia para los mismos.
Finalmente se considera como parcialmente cumplido el objetivo:
Objetivo A: Creación automática de modelos 3D de árboles motrices y ruedas engranadas
en reductoras.
Al no poder integrarse el tallado de los dientes en los ejes engranajes, no se puede conside-
rar como completo en su totalidad, pero como objetivo principal del trabajo se puede afirmar
que ha sido cumplido satisfactoriamente.
En este apartado se presentan brevemente que posibles mejoras y líneas futuras están
abiertas para la continuación de este proyecto.
Debido a que el proyecto se ha fundamentado en un campo, carente de suficiente documen-
tación y ha implicado un proceso de aprendizaje muy intenso en Visual Basic, lenguaje pre-
viamente desconocido, gran parte del tiempo utilizado para la consecución del mismo se ha
destinado al aprendizaje y resolución de errores inesperados.
Un ejemplo de las limitaciones que esto ha supuesto se encuentra fácilmente en la genera-
ción de piñones dentro de los objetivos del proyecto es debido a la existencia de errores
internos en Solid Edge. Por eso mismo, partiendo de la base explicada y ya programada en
este proyecto la final consecución de dicho objetivo no resulta especialmente complicada, el
motivo por el cual no se llevó a cabo fue por una limitación temporal.
Se puede añadir como objetivo la inclusión de los modelos generados dentro de un docu-
mento de conjunto y la formación de lo que constituirían las bases del modelo final.
7. ANEXOS
8. TABLA DE ILUSTRACIONES
9. REFERENCIAS BIBLIOGRÁFICAS
1. Foxall JD. VISUAL BASIC 2012: Paso a paso. Anaya Multimed. 2012;(ISBN 10: 8441533474 /
ISBN 13: 9788441533479).
2. Som G. Curso de iniciación a la programación con Visual Basic.
3. Mauer L, St E. More Visual Basic . NET in. East.
4. Edge S, Api ST. . NET Programmer ’ s Guide. 2015;193.
5. Siemens Product Lifecycle Management Software Inc. Solid Edge fundamentals. 55 p.
6. Blog: Undocumented Matlab (2018). http://undocumentedmatlab.com/blog/running-vb-code-
in-matlab. Último acceso 21/06/2018.
7. Foro: Página Web Siemens, Solid Edge Blog (2018). https://community.plm.automation.
siemens.com/t5/Solid-Edge-Blog/bg-p/solid-edge-news. Último acceso 21/06/2018.
8. Página Web, Solid Edge Community (2018), https://github.com/SolidEdgeCommunity. Último
acceso 14/02/2018.
9. Página Web, PDFSharp and Migradoc Wiki (2018), http://www.pdfsharp.net/wiki/. Último
acceso 24/04/2018.