DISEÑO Y ESADORA - 148.206.53.84148.206.53.84/tesiuami/UAM3437.pdf · - Esquemas de...

102
Casa Abierta al Tiempo / . UNIVERSIDAD AUTONOMA METROPOLITANA DISEÑO Y CONSTRUCCION DE UNA ESADORA Alfredo Bobadilla Sierra Gustavo Portillo Sandoval Asesor: Alejandro Martinez

Transcript of DISEÑO Y ESADORA - 148.206.53.84148.206.53.84/tesiuami/UAM3437.pdf · - Esquemas de...

Casa Abierta al Tiempo /

.

UNIVERSIDAD AUTONOMA METROPOLITANA

DISEÑO Y CONSTRUCCION DE UNA

ESADORA

Alfredo Bobadilla Sierra Gustavo Portillo Sandoval

Asesor: Alejandro Martinez

INDICE GENERAL

INTRODUCCI~N 3

LQUÉ ES UN ROBOT?.- PRIMERA ETAPA SEGUNDA ETAPA TERCERA ETAPA CUARTA ETAPA QUINTA ETAPA SEXTA ETAPA SEPTIMA ETAPA CLASES DE ROBOTS. cLASIFICACI6N DE ROBOTS EN FUNCI~N DEL TIPO DE f&TICuLACIONES. SEGURIDAD EN ROBOTS INDUSnUALES BENEFICIOS DE SU USO AUTOMATIZACI~N EN PROCESOS INDUSTRIALES. AUTOMATIZACI~N INDIJSTRIAL Y su INGENIERIA HERRAMDNTAS Y TODOS (CONCEPTO DE MEDIOS) PLANTEAMENTO

4 4 4 5 5 5 5 5 5 6 6 6 7 7 8

10

ETAPA ELECTR~NICA 11

MICROPROCESADOR 2-80 OPERACI~N INSTRUCCI~N PROGRAMA PROGRAMA EMSAMBLADOR

INTERFACE CON RS-232 CONTROLOLADOR DE MOTORES PASO A PASO

MOTORES PASO A PASO ACCIONAMIENTO POR MICROPROCESADOR ETAPAS DE POTENCIA

12 12 13 13 14 16 20 22 24 25

1

ETAPA MECANICA 27

LIMITES EJE X EJE Y EJE Z smTRIc0

CONSTRUCCI~N

28 29 29 29 29 30

MANUAL DEL USUARIO 31

PRÓLOGO INTRODUCCI~N

CAPITULO 2 MENUS CAPÍTULO 1 DISEÑO DEL OBJETO

32 32 34 37

CAPÍTULO 3 FRESADO Y PRESENTACI~N DEL TRABAJO 40

DESARROLLO DEL CÓDIGO 41

DESARROLLO DEL PROGRAMA CONTROLADOR DE LA FRESADORA ESTRUCTURA BASICA DE DATOS UTILIZADA

CONFIGURACIONES: HERRAMIENTAS DE EDICIÓN PROGRAMAS AUXILIARES DE PRESENTACIóN DE LA FIGURA UTILERhS PARA MANEJO DE DISCO PROCESO DE M S A D O DEL DISCO

42 42 43 44 45 45 46

2

INTRODUCCI~N

3

G *QUÉ ES UN ROBOT?.-

Un robot es una unidad programable, multifuncional, diseñada para mover materiales ,piezas, herramientas y dispositivos especiales , por medio de movimientos variables programables para la ejecucion de diferentes trabajos.Haciendonos la pregunta ¿por qué un robot ? ,podemos decir que hay 6 puntos escenciales a tener encuenta :

a) Mayor productividad. b) Ahorro de materia prima y energía. c) Flexibilidad total. d) Calidad de trabajo Humano :

Seguridad: trabajos peligrosos e insalubres . Comodidad :trabajos repetitivos monótonos y en posiciones forzadas.

e) Acumulación instantánea de experiencias.

Por decir algo podriamos nombrar las aplicaciones convencionales: 1) Automotriz (Japón 62% ,Inglaterra 39%) 2) Linea blanca. 3) PlAsticos y goma. 4) Control de calidad (inspección).

Para tener un idea de como esta industria a estado avanzando a travez de los años tenemos las siguientes Etapas:

Primera Etapa Aiio 1950 aparece por primera vez el manipulador "Amo Esclavo 'I para el manejo

de materiales radioactivos en el laboratirio Argonne de los Estado Unidos de Norteteamerica .

Segunda Etapa Año 1956 ,cuando el señor George Devol considerado el pionero de la robotica

industrial ,patenta por primera vez el manipulador programable .

4

Tercera Etapa Año 1958, Mr. Engel Engelberger, de los Estados Unidos de Norteamérica

,escribe el primer proyecto de robot industrial , en la firma UNIMATION, concibiéndose el primero de ellos en el año 1961 y un conjunto de ellos en 1965 en la General Motors de los Estado Unidos de Norteamérica.

Cuarta Etapa En el año 1968, Japón comienza a interesarse en el tema de la robotica industrial ,y

recién en en el año de 1970 se implanta en Europa.

Quinta Etapa En el año 1970, en la Universidad de Stanford se concibe por primera vez el robot

con computadora.

Sexta Etapa Desde 1975 y hasta 1980 fue el periodo de apolicación de la robótica industrial ,

que significo un 25%.

Septima Etapa después del año 1980 , se concibe por primera vez el robot inteligente capaz de

adaptarse al ambiente y tomar decisiones en tiempo real.

Clases de Robots. * por sistema de accionamiento:

- eléctrico - Hidráulico

* por nivel de control de sus trayectorias: - Punto a punto sin servocontrol (Paso a paso) - Punto a punto con servo control (especial para soldadura por puntos

-de control continuo (pintura a chorro y soldadura de arco). -Por estructura de manipulado. (verticales ,Horizontales , Pórtico)

),montaje y manipulación.

5

Clasificación de Robots en Funcibn del tipo de Articulaciones. A continuacion nombramos la clses de robots de acuerdo al tipo de articulaciones

que usan para hacer sus movimientos.

1. Cartesirnos.- Sus tres articulaciones son prismhticas .Si estan suspendidos del techo son de

p6rtico 2. CilindriC0S.- Poseen la primera articulación angular y las otras dos prismáticas. 3. - Polares. - Las dos primeras articulaciones son angulares y la tercera Prismáticas . 4.-h@ms*- Todas las articulaciones son angulares.

Seguridad en Robots Industriales La rob6tica industrial genera nuevos riesgos ,por lo cual debemos tener en

cuenta una nueva politica de control en seguridad e higiene industrial al respecto, por ello debemos tener en cuenta lo siguiente:

lro. Peligro de los accidentes en empleados y visitantes. 2do. Desperfectos fisicos directos en los sistemas robóticos y en sus equipos de

control y soporte. 31-0. Errores y omisiones por parte de los creadores del sofware.

Beneficios de su Uso Uno de los ejemplos mas importantes y descriptivo es el robot de pintura con

pistola :es el trabajo mas insalubre de la industria automotriz..

1:- permite trabajar con alto nivel de ruido y con materiales t6xicos y cancerigenos

2.- Permite el ahorro de energía en ventilacih y calefacción. sin problemas.

6

3.- optiene mejor calidad de pintura -Capa más omogénea y sin fallas -Reducción en el costo de los materiales. -Ahorro en los toques finales. -Reducción del costo de garantia por defectos de pintado. -Ahorro de mano de obra (de trabajo y de retrabajado)

Automatizacih en Procesos Industriales. Un análisis crítico y exhaustivo de la problemática de los sistemas de control en

instalciones Industriales indica que la mayoría de las automatizaciones realiiadashasta el momento actual ,aunque hayan sido hechas por sociedades más competentes del sector,han suphesto que el cliente ha quedado cutivo del suministrador.

Esta situación que en condiciones normales habría supuesto una relación continuada entre suministradores y clientes , se ha traducido en realidad en una desconfianza frente a las soluciones personaliiadas para cada instalación y cliente.

Automatizacibn Industrial y su Ingenieria Las prestaciones en proyectos de automatización indutrial se han duplicado en

los últimos 5 años en Europa y parecen claras las expectativas de crecimiento de automatización de la producción,automatización de oficinas y mercado del software.

,equipos) y asesorías (por ejemplo ingeniería o actividades administrativas).

25 % de los costos totales del proyecto .

En el negocio de instaciones y sistemas hay suministros (productos técnicos

El volumen de las asesorias en costo representan ya un porcentaje superior al

El crecimiento de este negocio sólo serh posible aumentando la calidad y la productividad de la ingeniería.

El centro de gravedad de la ingenieria se desplaza al Area de automatización y a la ingeniería de sofware.

Herramientas y mbtodos (concepto de medios) Las ingenierías esth evolucionando rApidamente, pasando de formas de

trabajo convencionales a ingeniería apoyada por el ordenador , sistemas de desarrollo CAlACAT van tomando una importancia creciente y un mercado innovador aporta permanentemente nuevas herramientas que permite la racionaliiación de los trabajos de ingeniería.

Es imposible quedarse al margen de esta solución, pero es necesario establecer un concepto moderno de medios de trabajo para que secumplan los determinados requisitos

* en primer lugar que sirva para las tareas que tiene encomendadas un departamento de ingeniería, desde la administrativas y comerciales hasta las de elaboración de software de un sistema especial de automatización .

* Capacidad de adaptación flexible a procesos dinámicos de trabajo. * Sistemas con esthndares internacionales, confort en el servicio, tiempo

real, acoplamiento a otros sistemas, etc. Sin olvidar la compatibilidad de estos sistemas con los sistemas de los clientes

finales, para minimizar costos durante el ciclo de vida de la instalación. Modificaciones , ampliaciones y en definitiva el mantenimiento de la intalación podria ser realizado sin intercambio de documentos.

Estos requisistos dificimente pueden conseguirse con un sistema centra ímico.

El nivel administrativo y comercial , por lo general, suele estar integrado dentro del propio sistema administrativo de la empresa (Planificación, facturación,etc.), o por sistemas en islas acoplados al sistema central ,

El nivel de ingeniería debe consistir en una red de estaciones de trabajo para racionalizar las tareas propias de la ingeniería.

-Desarrollo del Proyecto -Cuadernos de tareas\diseño -Ingeniería eléctricauistas -documentation software y hardware, etc.

8

Estos puestos de trabajo multifuncionales interconectados en anillo en una red local debe permitir establecer un concepto individual óptimo para cada tipo de ingenieria según su tamaño .

La flexibilidad debe conseguirse en base a : e Equipos con pantallas gráficas de diferentes prestaciones . e Capacidad de almacenar grandes volumenes de datos, seguridad de la

e Acoplamiento esthdar con los equipos de programación de los

e Sistemas operativos universales para acudir a un mercado de software

información, salidas de documentos a impresoras y plotters comunes.

sistemas finales .

de paquetes y procedimientos de ingeniería (generar documentación , ingenieria electrica , construcciones en 2 dimensiones, etc.) .

En el nine1 del sistema, existen tambien una gran variedad de sistemas específicos en:

1. Mktodos: - Programar. - Estructurar. - Parametrizar.

2. Documentación : - Esquemas de regularización - Esquemas funcionales. - Diagramas estructurales. - Diagramas de Flujo.

3. Sistemas de programación : - Aparatos de programacion. - Miniordenadores. - Computadoras personales etc.

9

No existe, por lo tanto, una única herramienta para este nivel , ademas de las empresas suministradoras venden tambien equipo de programación que utilizan a su vez los clientes para mantener y modificar sus instalaciones .

Desde la perspectiva de la ingeniería se avanza en soluciones que permitan acoplar los equipos de programación con el nivel de ingeniería, con lo que conseguiría una mayor racionaliiación.

Planteamiento Despuks de todo lo expuesto, la importancia de entrar en este campo aumenta

con ese fin se plantea hacer una mhquina la cual se acerque a todos los puntos antes tratados ,ante esto trabajamos en construir una FRESADORA, esta idea crecio cuando se plante6 que & a debia estar manejada por una computadora que tendria una buena plataforma grafica además de la interface con la fresadora en si.

De principio se plantea hacer un proyecto que este a la vanguardia de la tecnologia para este punto escogimos una de las plataformas más estables del mercado y usado en toda la industria de nuestro medio, WINDOWS ,con lo que incursionamos en la programacion de Visual Basic para aplicaciones en Windows Se conectó una interface para RS-232 y un controlador de motores paso a paso ademas de construir la parte de potencia que finalmente fue a los motores instalados en máquina.

A continuacion se hace una descripción de todas las etapas del proyecto dividiendolas en tres problemas que se atacaron, sin ser una excluyente de la otra: etapa Electrdnica, mecanica, de software.

10

Etapa Electrónica

11

MICROPROCESADOR 2-80

Para esta parte del proyecto de planteó la idea de tener una interface que sea compatible con RS-232 además de darnos la posibilidad de ampliar aún más la gama de aplicaciones , es decir , que podamos conectar otro tipo de tarjetas las cuales se comuniquen entre si, es decir una especie de motherboard.

Para esto escogimos un microprocesador que sea estandar en el mercador además del ser el m& usado como controlador de maquinas grandes y procesos en linea, nos referimos al 280 el cuál describiremos acontinuación.

Antes de entrar en materia vermos algunos conceptos importantes:

Operacih

Una operación es una acción específica que realiza el microprocesador siempre que ejecuta una instrucción

Existe diferentes operaciones que puede realizar el microprocesador. las operaciones asociadas con el microprocesador 280 son :

O Transferencia de información O Operaciones aritméticas O Operaciones lógicas O Subrutinas O Entrada y salida O Incremento y decremento O Saltos O Probar, poner y limpiar bits O Otras como ajuste a decimal e interrupciones

12

Instmccih Una instrucción es un padrón de bits que ordena a la microcomputadora a

ejecutar una operación espécifica. La serie de instrucciones de un microprocesador es simplemente es una serie de patrones de bits que genera una serie de acciones definidas en la CPU . Cada microprocesador tiene una serie de instrucciones particular y cada instrucción de esta un patrón, Algunas instrucciones se encuentran implementados en la mayoria se los microprocesadores pero probablemente tendrá diferente patrón de bits y/o mnemónico

Las instrucciones se obtienen de la memoria durante un ciclo de Fech y se cargan en el registro de instrucción , pasando a continuación al decodificador de instruciones para su intepretación y generar una acción específica. Cada instrucción o patrón de bits genera una acción invariable, por ejemplo, el microprocesador 280 interpreta el patr6n de bits 01111000 como una istruccion para :

“Mover el contenido del registro B al acumulador

El microprocesador (como cualquier computadora ) únicamente reconoce patrones binarios como instrucciones o datos no reconoce números octales , hexagesimales o decimales.

Programa Un programa es un grupo de instrucciones organizadas en una forma

secuencial que comanda a la CPU a realizas funciones mas complejas que las que logra con se logran con simples instrucciones. La organización adecuada de las instruciones permite al programador ordenador la ejecucion de muchas y deferentes cálculos o procesamentos con los datos de su interés y obtener los resultados en una forma que le es útil. En algunos casos, se requiere de complicadas funciones matemáticas, mientras que en otros casos se requiere de funciones sencillas.

13

Un programa puede estar formado no sólo por instruciones sino tambien por datos y direcciones los cuales se requieren para realizar las tareas especificadas por los instruciones todos los microprocesadores ejecutan las instruciones secuencialmente a menos que la instrución de salto cambie la secuencia de ejecución.

Programa Emsamblador

Una vez que el programador tiene en papel su programa utilizando mnemónicos se le presenta el problema de cargarlo en memoria. Una forma de resolver esto es “traduciendo” cada instrucción a su código de operación en hexagesimal y utilizando después el “cargador hexagesimal” como ejemplo tenemos:

3A0015H 47H 3A2030H 80H 320030H

LD LD LD ADD

A, (1500H) B,A A, (3020H) B 3000H

Al proceso de traducir o convertir cada mnemónico de las instrucciones de un programa a su código de operación se conoce como “emsamblar el programa” y al resultado se conoce como “programa objeto”.

El proceso de ensamblar un programa instrucción por instrución es tedioso y por lo mismo se puden cometer errores. Esto se complica debido a que existen instrucciones de una, dos, tres y cuatro palabras.

14

Para solucionar este problema los fabricantes de microcomputadoras proporcinan un programa que permite traducir los mnemónicos de las instrucciones a los patrones binarios o códigos de operación. Este programa se conoce como ensamblador . En otras palabras, el programa ensamblador traduce un programa fuente a un programa objeto. Cualquier programa fuente que se va a ensamblarutiliiando el programa ensamblador debe cumplir con ciertas reglas (sinthis) Estas reglas constituyen al lenguaje ensamblador . El lenguaje ensamblador no lo constituyen los mnemónicos.

El programador debe pasar su programa en papel a un medio de entrada que permita al ensamblador leerlo. Entre los dispositivos mas usuales se encuentran :

+ Tarjetas perforadas + Cinta perforada + generando un archivo en disco por medio de una terminal (disco flexible o duro)

Una vez que se obtuvo el programa fuente , el programador debe llamar al ensamblador a ejecución para que genere el programa objeto y posteriormente debe llamar el Cargador Binario (Binary Loader) para cargar el programa objeto en la memoria de la microcomputadora. Una vez echo lo anterior el programador puede ordenar su ejecución. El programa objeto se obtiene generalmente de un archivo de disco o en una cinta perforada.

El mecanismo de ensamblar un programa fuente y la ejecución del programa objeto involucra los siguientes pasos.

a) Poner el programa fuente en el dispositivo de entrada. b) Llamar a ejecución al programa ensamblador. c) El ensamblador lee el programa fuente, lo traduce y genera el programa

objeto en un dispositivo de salida. Durante la traducción del programa fuente el ensamblador checa si no existen errores en el formato de las instrucciones y marca las lineas que tienen errores. El programa fuente debe indicarle al ensamblador la direcci6n en donde el programador quiere que corra el programa.

15

d) Una vez obtenido el programa objeto el ensamblador ya no se utiliza m&. El programador debe llamar ahora a ejecucibn al programa Cargador Binario.

e) El cargador binario carga el programa objeto en la memoria de la computadora a partir de la direcci6n especiticada al comienzo del programa objeto.

f) Se ordena a la computadora a ejecutar el programa y a generar los resultados.

Despuks de tener una idea de como programar el 280 y además de ver las grandes ventajas que tiene kste, decidimos, usar esta tecnologia y apegarnos a un bus de datos que usa éste tipo de comunicacion y tener una interface con la computadora a travez del RS232.

InteYface con RS-232

Para podernos comunicar con por medio de una interface confiable ademas que nos provea de un bus de datos que se pueda accesar desde otro tipo de tarjetas, hicimos una busqueda intensa de investigación de los productos del mercado, de esa forma encontramos una de las interfaces mas confiables y baratas del mercado, nos referimos a :A-BUS de ALPHA PRODUCTS.

Este producto tiene una interface que conecta del RS23.2 a la motherboard de A-BUS en dode se pueden conectar una serie de tarjetas para diferentes aplicaciones entre ellas las de control de motores . A continuación haremos una descripción de la interface de A-BUS con RS-232.

16

La interface de estos productos tiene nombre de SA-129 esta interface tiene las siguientes características :

+ Convierte cualquier puerto seria RS-232 en un standart A-BUS + Un solo SA-129 puede controlar hasta 25 tarjetas A-BUS (5

motherboards). + Un RS-232 puede soportar hasta 16 SA-129. + Una programación a base de comandos fkiles. + Controlador inteligente con el microprocesador 2-80. + Configurable en la velocidad de transmición de 300, 600, 1200, 2400,

4800,9600 . + Configurable en la paridad Par, Impar, Ninguna. + Arriba de 500 pies de distancia del RS-232 al SA-129.

Acontinuación veremos la forma de conectar la tarjeta con el RS-129

o 0 0000 O 0 o O000 o o o O000 o 2 3 5 6 7 8

0 0 0 0 0 0 0 0 0 0 0 0 0 0

17

Para la parte de la configuración del la velocidad se tiene unos Switch los cuales son 5 y tienen la siguiente configuración.

SWITCH 1,2,3,4,5 Off 1 on 2,3,4,5 off 2 on 1,3,4,5 off 3 on 1,2,4,5 off 4 on 1,2,3,5 off 5 on 1,2,3,4 off 6,7 off 6on7off 7on6off 8 on 8 off

ACCIÓN 300 Baud 600 baud 1200 baud 2400 baud 4800 baud 9600 baud paridad ninguna paridad impar paridad par echo test modo standart

Pra comunicarnos con la tarjeta después de configurarla es atraves de enviarle comandos a traves del puerto serial para esto y como prueba fina usamos una de la aplicaciones de Windows la cual hace las comunicaciones con los puertos esta plicación se llama TERMINAL.

Esta aplicación aparece en todas las intalaciones de windows tanto como las usuales 3.0 y anteriores como en la version de Windows para trabajo en grupo.

Para esta prueba conectamos la tarjeta con el RS-232 y la configuramos como nodo 1 y con una velocidad de 9600 baud y paridad ninguna, el programa tambien se configuro de la misma manera por lo que de principio no tuvimos problemas, la respuesta de la tarjeta no tardo en llegar y con los comandos de nodo y KILL pudimos ver que esta respondia.

18

Lo siguiente era conectar la tarjeta controladora de motores de paso esta no necesitaba de una motherboard pues solo seria una tarjeta.

Una de las configuraciones que debiamos ver era el hecho de que se podia hacer una coneccion en cascada de varios dispositivos para tener una gran red controladora de varias aplicaciones.

La siguiente gr4fica muestra la forma de conectar cada uno de los elementos y los dispositivos correctos para tener una red de varias aplicaciones.

Forma de conección de varia aplicaciones de A-BUS

19

Para configurar el numero de nodio se debe de poner en binario los cuatro switch para que de esa forma se pueda decir exactamente cual es el nodo

Switch de decodjfícación.

Contrololador de Motores Paso a Paso

Esta es una tarjeta del mismo tipo de bus por lo que despuks del salir del RS 232 se conectara la interface y luego la tarjeta controladora a continuaci6n pondremos la parte de potencia que luego ira a los motores en la maquina fresadora.

Estas son alguna de las características dela tarjeta SC-149 (controladora de motores de paso a paso).

Contiene un microprocesador 280 que es alimentado por una voltaje regulado de 5V. y una corriente minima de 500mA. EL 280 es un miroprocesador de 8 bits.y un reloj de cristal de 4Mhz.

La parte operable del sistema y el programa principal estan almacenados en un ROM de 16 Kb. Este programa esta escrito en ensamblador para tener una mayor eficiencia y ve1ocidad.h tarjeta de motherboard puede aceptar facilmente otra mnmnvio rln I C U h rln R n h A nn rlnnrln n11nAnn xrnnir 11nq cnrin dn pnmqnrlAc

También cuenta con 8Kb. de memoria RAM en donde se guardan los parAmetros del usuario entre ellos los nombres de los motores, la maxima velocidad, la eficiencia.aceleraci6n de rampa, etc.

Algo muy importante es que en la memoria de 8 Kb. se pueden guardar “macros” los cuales a comparación de otros sistemas no se pierden cuando se apaga todo el sistema , lo que se hace es guardar esta información gracias a que se usa CMOS y una batería de litio. La cual puede conservar la información al rededor de un año sin fuente de corriente.

El SC149 puee manejar hasta 4 motores pues tiene 16 lineas (4 por motor). A la salida del circuito se encuentran 2 chips ampliicadores de potencia los cuales van a los motores.cabe recalcar que estos no fueron suficientes por lo que se tuvo que hacer una segunda parte de potencia la cual describimos mhs adelante.

La parte de la comunicacion con la computadora de alguna manera es mas fAcil pues esta tarjeta tine la ventaja de traern un memoria ROM la cual continen una serie de comandos los cuales son obedecidos por los motores en si la manera de su funcionamiento basico es sencillo : Le llega un comando al contolador este lo decodifica y pone la variables y parhmetros en direcciones de momoria disponibles, de acuerdo a la codificacion sigui una secuencia de las cuatro lineas del motor para que este se empiece a mover de aqui en adelante es llevar un conteo de cada uno de los paso (step) para tener el control de estos.

La serie de comandos que maneja este controlador es muy sencillo de principio no usa una sintaxis rigida, es decir , que no importa el orden de agunnas instrucciones por ejemplo:

Si nosotros deseamos mover 1 motor 1,500 pasos las intruciones serian:

move1 200

200 motor1 moue

200 mvl

21

Cualquiera de estas intruciones seran obedecidas por el controlador y todas significan lo mismo.

Este tipo de lenguaje lo que realmente lo hace fácil de usar es el echi de que se le pueden hacer preguntas del tipo " en que posición esta x motor " por lo que devuelve una cantidad que es la cantidad de pasos desde el momento inicial.

Lo que sigue es construir la parte de potencia la cual se conectara a la salida de los motores de esta tarjeta.

Como comentario todas esta instrucciones se puden dar desde el terminal de Windows simplemente ecribiendolas en pantalla o desde un programa de basic el cual escriba al puerto.

Motores Paso a Paso

La presici6n en el movimiento de los mecanismos como las lectoras de discos rigidos o diskettes en microcornputadoras, de cabeza de impresión en impresoras y de brazos de robots usados en aplicaciones industriales experimentales y hasta de investigación depende fundamentalmente de un tipo de motor especial que es el motor paso apaso. ( step motor )

Sin embargo, el motor paso a paso solo, no nos brinda dispositivos precisos, ya que necesitamos una serie de elementos de control externo que involucran la electrónica.

De esta forma, asociados al desarrollo de los motores paso a paso, surgieron diversos circuitos integrados especiales justamente proyectados para controlar estos nuevos elementos mecánicos intimamente ligados a la nueva ciencia que se desarrolla y que es la rob6tica 11 ,

22

Uno de los integrados más versátiles para el control de los motores paso a paso es el SAAl027 ( Philips Componentes ) que pueden servir tanto para aplicaciones prácticas importantes hasta el estudio de aplicaciones y desarrollos en escuelas o laboratorios de robótica. EISU1027 es proyectado para controlar motores paso a paso de 4 fases y puede servir para las siguientes aplicaciones:

0 Brazoz o robots completos 0 Impresoras c] Automatismos mecánicos diversos 0 Control remoto OMáquinas de escribir electrónicas 0 Plotters ( graficadoras )

Los motores paso a paso, consisten en elementos especiales de la familia de los motores de corriente continua, siendo dotados de diversos bobinados.

Para girar el eje de este tipo de motor aplicamos pulsos. Cada pulso hace que el eje se desplace un ángulo preciso que varía normalmente entre 1.8 y 7.5 grados. Con una secuencia apropiada de pulsos podemos hacer que el eje gire en cualquier dirección y además, se ubique en lugares bien precisos, múltiplos de valor del paso.

El integrado SU1027 de Philips Componentes, consiste en un driver para motores paso apaso de 4 fases con dos estatores . El circuito basicamante consiste en un contador direccional de 4 estados y un conversor de código capaz de excitar cuatro salidas en la secuencia necesaria al funcionamiento de un motor paso a paso,

El SAAl027 puede excitar directamente motores paso a paso con tensiones de trabajo de 9.5 a 18 volt y corientes de hasta 500mA.

Para corrientes mayores de 500mA, brindamos algunas sugerencias de etapas adicionales que se pueden usar en los proyectos. Observe que las salidas del integrado van al nivel bajo para la exitación de la bobina correspondiente.

Los únicos componentes externos son elementos cuyos valores dependen del tipo de motor usado .

23

Accionamiento por Microprocesador Para el accionamiento por microprocesador solo se necesita un ina interfase

la cual es conectada en la compuerta de salida @/O) , y basta recordar los niveles altos aplicados en la base de los transistores , corresponden a niveles bajos en las entradas correspondientes del integrado SSA1027 , pues en la configuracion emisor comun , con la saturacíon del transistor , tenemos una inversión de los niveles lógicos.

Los transistores usados pueden ser los BC548 o incluso para una conmutación mas eficiente, los 2N2222.

Para este circuito , el nivel bajo corresponde a una tensión que debe quedar en menos de IV , y el nivel alto sera reconocido si la tension de entrada fuera superior a 3.W. Una de las desventajas de este circuito , está en el hecho de que no hay aislamiento entre el circuito del motor paso a paso y el microprocesador .

Estye inconveniente , que puede ser importante en aplicaciones más criticas , es salvado con la utilización de una interfase de acopladores ópticos, este circuito también sirve de base para controles de motores paso a paso y el microcompuador y otros circuitos lógicos ,

24

CIRCUITO DE CONTROL - I I I I I 7

I "I

I

Etapas de Potencia

Para el accionamiento de motores de paso de mayor potencia, con corrientes superiores a 500mA , que el integrado puede proveer , tenemos diversas posibilidades .Una de ellas, que permita el control de motores con corrientes de hasta 2 6 3 amperes por fase .

El transistor TE32 debe ser montado en un disipador de calor . Evidentemente , para un motor de 4 fases presisamos 4 transistores en esta configuración conectados una a cada saloda del integrado

25

Con la utiliiacibn de los transistores PNP en este circuito el pase de salida a nivel bajo (LO) hace que el transistor inicialmente en corte pase a saturación energizando asi la fase correspondiente del motor.

CIRCufTO DE POTENCIA

1K

1N4004

TIP 32

lNm a

+=V.

m

MOTOR

26

Etapa Mecanica

27

Lidtí?S

Realmente en esta clase de proyectos ,cuando todo lo que se puede invertir sin medida es la voluntad y la imaginación , tuvimos cmo en todos los proyectos el problema de contruir una maquina Fresadora la cual tenga :precisión, fuerza confianza y a bajo costo .

El primer problema a atacar fue el de definir cada uno de los limites de la maquina tomando encuenta el costo y la realacion con precisi6nJ mientras los materiales y las piezas mas precisas su costo en el mercado era mas elevado por lo que tuvimos que limitarnos a cuatro ejes los cuales hace que cualquier pieza que se vaya hacer no tenga que tomar grandes tiempos.

Para resolver todos estos problemas tomamos os siguientes ejes;

O Eje X . (largo) O Eje Y . (ancho) O Eje 2 . (alto) O circular (disco con movimiendo en ambos sentidos)

28

Cada uno de estoy ejes tiene la finalidad de crear las piezas con la menos dificultad posible esto significa que la paret circular que mas bien es como una mesa rotativa la cual al igual que a los alfareros les sirve para crear cosas simetricas las cuales se haran en forma rhpida y precisa.

Para manejar cada uno de estos ejes se puso un motor el cual manejara todo ese rango. Eje X

Se pens6 en usar para la parte del eje X dos barras paraleas circulares las cuales por la presición debian ser idénticas , al fijar las barras tuvimos que poner unos tornillos de Error los cualse eran movibles en un espacio de milimetros , todo esto para que siempre esten paralelas y no tengamos errores.

El limite de movimiento para este esje fue de 20 cm. Eje Y

Para ese eje el limite debido al mismo movimiento es de 20 cm. tomando encuenta que este debe cargar el peso del motor que moverá el eje 2. Eje Z

El limite para este movimiento es de 10 cm. los cuales seran de arriba hacia abajo con el cero en la parte superior.

Sim4trico Esta mesa giratoria en la parte inferior tendra un giro de 360 grados y no tine

limite en la cantidad de vueltas o el sentido que se le dé.

La precisión de los motores es de 1.7 grados por paso lo cual sumando al error de lo tornillos el torque y el movimiento brusco de recorrer mucho espacio con velocidad.

29

Construcción Esta es la parte del proyecto que nos costo mucho trabajo, esta parte

realmente no la conociamos por lo que tuvimos que investigar una serie de materiales debido a la precisión que de alguna menera deseabamos fuera minima.

Para lograr nuestro fin hicimos que el eje X viajará sobre dos rieles por asi llamarlos los cuales son dos barras idénticas sobre los que viaja una caman la cual pusimos el segundo motor que hace girar una placa circular.

En la parte supeior pusimos con la misma idea otras dos placas las cuales llevan el ultimo motor que hace girar un tornillo el cual hace subir o baja un cilindro dentro de otro echos de Nilamyd, usamos esta material pues es muy liviano y tiene la ventaja de ser fácil en su construcción.

30

Manual del Usuario

31

Las fresadoras computarizadas y en general todo el desarrollo en el campo de la robótica ha incursionado en la mayoría de las actividades de la vida moderna, en unas debido a las altas normas de calidad necesarias para algunas ramas como son: la medicina, y la industria electrónica; en otras por la reducción tanto de los costos de producción como de los problemas que ocasionarían los trabajadores se necesitarían para llevar a cabo el trabajo de el robot ( sindicatos, Seguro social, prestaciones, jubilación, etc...),cabe mencionar que la robótica tiene una aplicación muy importante en actividades que ponen en peligro la integridad fisica de cualquier persona demás o todas aquellas que sobrepasan las capacidades del ser humano.

Introducción

Bienvenido a el Programa de Control de Fresado, esta herramienta es indispensable para la automatización en el desarrollo, de objetos tales como: esculturas, moldes, piezas mecánicas ... etc.

Esto puede avarcar campos tan diferentes como lo son: la medicina, joyeria, juguetería, máquinaria, industria eletrónica, publicidad, arte, numismática, etc. obteniendo productos de gran calidad.

El programa corre bajo ambiente Windows por lo cual la curva de aprendizaje es corta, siendo su uso es bastante sencillo, aunado a ello el sistema puede correr simultaneamente con otros programas los cuales pudieran o nó estar auxiliando para en el diseño de un objeto.

El Programa de Control de Fresado es nuestra interface, con el robot fresador, en otras palabras: es el como nosotros daremos una serie de instrucciones de una forma gráfica y sencilla a el robot fresador, esta interface es capaz de crear, editar, guardar, y llamar los objetos que nosotros queramos fresar.

32

El programa tiene múltiples aplicaciones, y no solo la que nosotros exponemos como principal, estas pueden ser tan variadas como las que se mencionan a continuación:

el pintado de objetos el hacer las pistas de una tablilla de circuito hacer rótulos realizar moldes pulir grabar en cualquier superficie o objeto manejar sustancias peligrosas etc.. .

Como anteriormente mecionamos el paquete cuenta con una interface gráfica en ella encontraran una serie de herramientas (zoom, herramienta para dibujar cuadros, herramienta para borrar en cuadros, herramienta para dibujar en círculos, herramienta para borrar en círculos, herramienta para copiar toda una rebanada del modelo y herramienta para mostrar el objeto en 3a dimensión.) que hacen que uno pueda dibujar el objeto en cuestión de manera sencilla. Entre las tareas más relevantes que el paquete puede realizar encontramos las siguientes:

m Editar el objeto y poderlo ver en 3" dimensión m Ver como el algoritmo le indicaría a la fresadora como moverse para lo

realizar por medio de un simulador. m El paquete le indicaría como realizar el objeto en cuestión a la fresadora. m Mover la fresadora de manera manual.

Guardar trabajos para posteriores modificaciones o fresados.

33

Capítulo 1 Diseño del Objeto

Primeramente necesitamos explicar el como nosotros podemos diseñar los objetos, la primera ventana que presenta el programa nos lleva directamente a la parte de edici6n de objetos en ella solo nos presenta una rebanada de nuestra figura, dicho de otra forma nuestro objeto estarh formado de pequeños cubitos dentro de una matriz cubica, de la cual solo podemos ver por esta ventana una revanada a vez.

I -Archivo Ver Confiauraciiin I

Fig.1. Ventana de Edici6n

En la figura 1 podemos visualiiar la ventana principal de nuestro programa, en la cual tenemos al centro el área donde nosotros podemos visualiiar nuestro trabajo, del lado izquierdo encontraremos una serie de herramientas y nuestra posición dentro de la matriz de trabajo.

34

A continuación describiremos la función de cada una de los botones de la Izquierda.

Herramienta de pegado de forma cuadrada, con ella nosotros podemos agregar material a nuestra figura u objeto de esta forma simulamos el soldarle un cubo a la figura ya hecha

Herramienta de corte de forma cuadrada, con ella podemos retirar material de nuestro objeto.

Herramienta de pegado de material en forma de cilindros, simulando si al objeto le soldaramos un cilindro macizo

Herramienta de corte en forma circular, con ella simulamos el hacer un barreno con una broca

Este control nos permite configurar el tamaño de la herramienta en cuanto al plano o rebanada.

Con este control podemos indicar que profundidad tendrá efecto la herramienta seleccionada

Nos indica la posición en el eje x de el centro de nuestra herramienta

Nos indica la posición en el eje y de el centro de nuestra herramienta

Con este control nos permite cambiarnos de plano dentro de la matriz indicandonos el plano en el cual nos encontramos, si presionamos el boton de ok hark un refresco de la pantalla de edición ya que este no se hace de forma automática

Llama la ventana de representación del objeto, fresado real y simulacion del fresado

35

Abre una ventana la cual nos permite ver un zoom de plano

Hace una Rotación de la figura, sobre el eje de las X en el sentido que muestra la figura.

Rota toda la figura en el eje de las 2 Habre la ventana de traramiento de Archivos Hace una copia de la rebanada actual

La manera de crear un objeto es sencilla, y el primer paso que hay que dar es elegir alguna de las herramientas de pegado de material, dado que al inicio de el programa la matriz se encuentra vacia, para esto basta el posicionarce con el mouse en alguno de estos dos botones y dar un click, posterior a ello se ajusta el tamaño y la profundidad de la heramienta, para que el la herramienta haga su trabajo debemos colocarla en la posición deseada y dar un dobleclick al mouse en esa posición,

La forma en la cual desgastamos o cortamos nuestro objeto es similar a la anterior, la única diferencia es la elección de la herramienta.

En esta ventana contamos con algunas ayudas para poder apreciar mejor la figura que estamos realizando como es la rotación de la figura, la representación en tercera dimención y el zoom del plano.

36

Capitulo 2 Menus

Nuestro sistema cuenta con tres menus importantes el primero de ellos denominado Archivo cuenta con tres opciones y esth organizado de la Siguiente manera:

Archivo Nuevo Con esta opción permite al usuario crear una nueva figura, comenzando

de cero Trabajos Al elegir trabajos nosotros podremos llamar figuras ya hechas con

anterioridad por nuestro paquete, podremos, ademas grabarlas y borrarlas del disco donde se encuentren nuestros datos.

Archivo:

1 /’.he c: !

El Path:

Tipo de Archivo

I “he I

S& Con ella como es de suponer nos salimos de nuestra aplicación de fresado.

Otra opción de el Menú principal es la de Verla cual solo tiene la opción de guias

Por último se cuenta con la opcion de Coniigurar la cual esa organizada de la siguiente manera:

37

Puerto En primera instancia el programa se comunica con la fresadora a travks de un puerto de comunicaciones serial, al cual nosotros podemos configurarlo para que se pueda entender no solo con nuestro robot si no que se puede configurar para otros, similares.

38

Fresadora En esta opcion nos permite elegir el cero o posición origen de el material a fresar, tambikn podemos configurar el número de pasos de el motor que representarían una unidad, dicho de otra forma: los motores que se emplearon para el movimiento de el robot son los llamados motores a pasos, esto motores tienen la peculiaridad de que su movimiento es hecho a base de pequeños movimientos angulares de su eje, así bien nosotros podemos definir en esta pantalla cuantos pasos representa un cuadro dentro de nuestra matriz, lo que significa que nosotros podemos escalar nuestras figuras de esta forma.

39

Capítulo 3 Fresado y Presentación del Trabajo

En este breve capítulo hablaremos de como nosotros podemos representar el objeto en tercera dimensi6n y hacer el proceso de fresado o simulacidn de este proceso.

Para activar esta ventana solo basta el presionar el botón con un cubo en el. Inmediatamente despuhs aparecerla una ventana, la cual tiene como menús: Fresar y G M w , si presionamos graficar, en esta ventana nos harh la representación gráfica en tercera dimensi6n de nuestro objeto ver siguiente figura.

En el caso de elegir fresar encontraremos dos opciones, la primera de ellas es simulador la cual mediante una línea que representaría la fresa muestra como realizaría el proceso de fresado nuestro equipo.

La opción de fresar manda las instrucciones necesarias a nuestro robot para que realice todos los movimientos pertinentes para hacer el objeto.

40

Desarrollo del Código

41

Desarrollo del Programa controlador de la fresadora

Debido a al corto tiempo con el que se contó se diseño un programa lo sencillo que cumpliera los requisitos para el manejo del objeto tanto en la fresadora como en el diseño de la figura.

El programa consta de varios módulos y pantallas los cuales los podemos dividir según su tarea dentro del manejo de la figura y su funcionalidad en:

Configuracibn Comunicaciones Manejo de la Fresadora Edicibn de la figura Herramientas de Edicibn Programas auxiliares de presentacibn de la figura Utilerias para manejo de disco Proceso de fiesado del disco

Donde cada uno de estos módulos los describiremos desde el punto de vista de programación, también en este documento explicaremos algunos puntos importantes de el como se hicieron mejoras en el código para aumentar la velocidad de los procesos.

Estructura Bhsica de datos utilizada Para la representación de el objeto se utilió una matriz tridimensional, la cual se

llena con unos y ceros para indicar si hay material o no en dicho punto, se utilió una matriz dado su facilidad de manejo, ademas que por el método de visualización de la figura esta representación nos lleva de la mano dado que se utilió el método de cubipixeles para la representación de la figura en tres dimensiones, este método es sumamente sencillo y eficaz para este tipo de representaciones y se basa en pintar por cada punto de la matriz con material un pequeñisimo cubito, de forma análoga a muchos tipos de grAficos en dos dimensiones; como los pcx, bmp, etc. en la figura siguiente presentamos una amplificación de dicho efecto.

42

Como se puede Ver la aproximación a un tamaño grande es bastante burda pero si esto lo llevamos a un tamaño muy pequeño las aristas y pequeñas imperfecciones prácticamente desaparecen para el ojo humano

Configuraciones:

Dentro de el programa encontraremos dos módulos para configurar, el primero de ellos se encarga de darle los parámetros de comunicaciones del puerto RS232 tal como la velocidad de transmisión, bits de parada, bits de datos, etc ....

La segunda se encarga de posicionar en el cero a la fresadora dado que el proyecto no contempla este paso de forma automática, ademhs de ello permite el movimiento manual de la fresadora, así como la escalabilidad de el objeto que deseamos fresar.

El posicionamiento se hace de manera muy sencilla enviando comandos ya preestablecidos por el fabricante a las tarjetas que controlan los motores a pasos. a través del movimiento de unos scrol bars.

43

La escalabilidad se maneja a travks de unas constantes las cuales nos indicaran de forma individual el número de pasos que representarán una unidad o una arista de nuestro cubipixel en su correspondiente dimensión.

Edición de la figura Para que el usuario pudiera desarrollar de forma sencilla la tarea de editar su

figura se hizo uso de la interface gráfica que es nativa de Windows. en la cual presentamos una rebanada a la vez de el objeto en cuestión, el presentar solo una rebanada representa en si el tomar en cuenta algunas tareas como el poder visualiiar cualquier rebanada de nuestra matriz, o el poder rotar el objeto para poder ver desde otro ángulo nuestra figura.

Debido a el gran número de puntos que manejamos dentro de la matriz fue necesario el acotar nuestro objeto. con lo cual nosotros podemos manejarlo mucho más rápido dado que no es necesario analizar toda la matriz, si no tan solo el espacio que ocupa el modelo.

Herramientas de Edición

Las herramientas de edición se plantearon que fueran 4 pero no todas fueron habilitadas, en realidad el paquete solo cuenta con dos de ellas, estas son la pareja de pegado de material y eliminación de este en forma de cubos, nosotros dentro de la ventana principal podemos escoger el tamaño de la operación, así como la profundidad de esta misma.

Otros botones que también podemos llamarles herramientas son los botones de rotación los cuales nos permiten rotar a el objeto dentro de la matriz principal, con esta utilería nos permitirá además que podamos fresar el objeto por otra de sus caras, dado que solo se estAn manejando tres dimensiones en vez de 5, con las cuales nos permitiría un mayor grado de movimiento a la hora de fresado. Estos botones de rotación nos permiten hacer rotaciones en el eje de las 2 y X.

44

Programas a d a r e s de presentación de la figura

El otro módulo nos permitirA hacer una representación en pantalla de nuestro objeto en tercera dimensión, esto se logra con la t6cnica antes descrita, pero es bueno señalar algunas mejoras que se le hicieron al el proyecto en cuanto a la presentación, en la primera aproximaci6n el código, analizaba y pintaba cada una de las celdas de la figura, esto realmente era sumamente tardado, posterior a ello se tomó la iniciativa de solo pintar los cubos de los que estaba compuesto la figura. esto redujo en un 30% el tiempo que se tomaba el algoritmo en presentar nuestra escultura, despuks se añadió un algoritmo que solo pintaba las caras de aquellos cubos que se veían, de tal suerte que los cubos o puntos dentro de la matriz que estaban en el centro de la figura nunca se pintaban (reducción de tiempo de 40%) por último solo se analizan la matriz que acota a nuestro objeto, con ello reducimos aún 8% del tiempo original, siendo realmente un avance dado que este proceso duraba 15 minutos, quedando ahora de 1 minuto aproximadamente para una figura de tamaño regular.

Utilerías para manejo de disco

En las utilerias de manejo de los archivos encontramos el grabado de la información de la matriz con cualquier nombre del archivo, así como el proceso inverso el cargado de los datos desde un archivo en disco, en este proceso utilizamos un archivo secuencial, dado que no es necesario el cargar los dato de un orden diferente al secuencial.

45

También se cuenta con la opción de borrado de alguno de los archivos, esto con el fin de poderle dar mantenimiento al disco duro desde el mismo sistema.

Proceso de fresado del disco

Por último el algoritmo del proceso de fresado es completamente sencillo, dado que solo se están controlando tres dimensiones dentro de nuestro proyecto, el proceso va leyendo rebanada por rebanada la matriz hasta que se encuentra con un punto dentro de ella que contiene material de ahí trata de generar un contorno y seguirlo, buscando m8s material a su alrededor de esta misma forma ordena a las tarjetas por medio de comandos trasmitidos por el puerto RS232 el movimiento de cada uno de los motores.

46

CODIGO DEL PROGRAMA

? - FRE.FRM - 1 3ION 2.00 in Form Conf- 3orderStyle zaption ZlientHeight ZlientLeft XientTop ZlientWidth Ieight left

3 'Fixed Double "Configuracion de la fresadora" 3360 1095 14 85 5430 3765 1035

AnkTopic - - I' Form2 " 4axButton = O 'False 4inButton = O 'False ScaleHeight = 3360 Scalewidth = 5430

Jidth = 5550 3egin SSPanel Pane13D7

COP = 1140

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 1455 Left = o TabIndex = 23

Width = 5445 Begin SSCommand Command3D1

TOP = 1950

Caption - - "&Salir" Font 3D = O 'None Height = 465 Left = 4140 Picture = (none) TabIndex = 35 TOP = 840 Width = 1125

End Begin HScrollBar MV B

Height = 255 Left = 2460 Max = 360 Min = 1 TabIndex = 34 TOP = 1080 Value = 180 Width = 1185

-

End Begin HScrollBar MV-A

Height = 240 Left = 2490 Max = 360 Min = 1 TabIndex = 33

Value = 180 Width = 1185

TOP = 540

End Begin HScrollBar MV 2

Height = 240 Left = 450 Max = 1000

-

F - FRE-FRM - 2 TabIndex = 32 TOP = 1140 Value = 500 Width = 1425

End Begin HScrollBar MV Y

Height Left - -

- - - Max TabIndex - - TOP Value - - Width -

- -

End Begin HScrollBar MV-X

-

Height - - Left - - Max Min TabIndex - - TOP Value - - Width -

- - - - - -

End Begin Label Label18

-

Backcolor - - Caption - - Height - - Left - - TabIndex - - TOP Width

- - - - End Begin Label Label17

Backcolor - - Caption - - Height - - Left E

TabIndex - TOP Width

- End Begin Label Label16

-

Backcolor - Caption - - Height - - Left - - TabIndex - TOP Width -

- - - End Begin Label Label15

-

Backcolor - - Caption - Height Left - TabIndex TOP Width -

- - - - - - - -

End Begin Label Label14

240 450 1000 31 840 500 1425

240 450 1000 1 30 540 500 1425

&HOOCOCOCO& B 255 2250 29 1080 345

&HOOCOCOCO& "A 225 2250 28 570 345

&HOOCOCOCO& 2 225 210 27 1140 315

&HOOCOCOCO& II y I1

225 210 26 84 O 315

? FRE.FRM - 3 - Backcolor - - Caption - Height Left - - TabIndex - - TOP Width

- - -

- - - -

End Begin Label Label13

Backcolor - Caption - - Height - Left TabIndex - - TOP Width - -

- - - -

End Cnd 3egin SSPanel Pane13D5

&HOOCOCOCO& " x 'I

225 210 25 5 4 0 315

&HOOCOCOCO&

150 24 180 3465

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 -

Font3D = O 'None Height = 1965 Left = 2670 TabIndex = 14 TOP = o Width = 2775 Begin SSPanel Panel3D6

Backcolor = &HOOCOC OCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 1275 Left = 120 TabIndex = 16 TOP = 540 Width = 2535 Begin HScrollBar Paso A

Height Left = 9 0 Max = 1000 TabIndex = 21 TOP = 750 Value = 1000 Width = 1155

- = 285

End Begin HScrollBar Paso-B

Height = 285 Left = 1290 Max = 1000 TabIndex = 20 TOP = 750 Value = 1000 Width = 1155

End Begin Label pb

Backcolor = &HOOCOCOCO& Caption - - 11 0 I'

Height = 225 Left = 1680

? - FRE .FRM - 4 TabIndex - - TOP Width

- - - - End Begin Label pa

Backcolor Caption - - Height - - Left TabIndex - - TOP Width - -

- -

- - - -

End Begin Label Label10

Backcolor - Caption - - Height - Left TabIndex - - TOP Width

- - - - - -

End Begin Label Label9

Backcolor - - Caption - - Height - Left TabIndex TOP Width - -

- - - - -

End End Begin Label Label8

22 270 795

&HOOCOCOCO& 'I 0 11

225 480 19 270 975

&HOOCOCOCO& " B " 255 1470 18 270 225

&HOOCOCOCO& " A 255 210 17 270 255

Backcolor = &HOOCOCOCO& Caption = "Número de grados por paso'' Height = 225 Left = 210 TabIndex = 15 TOP = 180 Width = 2355

End ~ nd begin SSPanel Panel3D1 Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 1965 Left = o TabIndex = o TOP = o Width = 2685 Begin SSPanel Panel Z -

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 435 Left = 120 TabIndex = 10 TOP = 1380

F - FRE.FRM - 5 Width = 2475 Begin HScrollBar Paso Z

Height Left - -

- - - Max - TabIndex TOP Value - Width - -

- - - - -

End Begin Label pz

Backcolor - - Caption - - Height - - Left - TabIndex TOP Width

- - - - - -

End Begin Label Label6

Backcolor - - Caption - - Height - Left TabIndex TOP Width - -

- - - - - - - End

End

255 360 1000 11 90 100 1335

&HOOCOCOCO& I' 0 11

255 1740 13 90 675

&HOOCOCOCO& '' z " 195 150 12 12 o 195

Begin SSPanel Pane13D3 BackColor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 435 Left = 120 TabIndex = 6 TOP = 960 Width = 2475 Begin HScrollBar Paso Y

Height = 255 Left - -

-

Max - - TabIndex - - TOP - Value - Width -

End Begin Label py

Backcolor - - Caption - Height Left TabIndex TOP - Width

- = - - - - -

End Begin Label Label4

Backcolor - Caption Height - -

- - -

360 1000 7 120 100 1335

&HOOCOCOCO& " o " 255 1740 9 90 645

&HOOCOCOCO& I' Y " 225

? FRE .FRM - 6 - Left = 180 TabIndex = 8 TOP = 120 Width = 195

End End Begin SSPanel Pane13D2

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Caption - - "Pane13D2 Font3D = O 'None Height = 435 Left = 120 TabIndex = 2 TOP = 540 Width = 2475 Begin HScrollBar Paso X

Height = 255 Left = 360 Max = 1000 TabIndex = 3 TOP = 9 0 Value = 100 Width = 1335

-

End Begin Label px

Backcolor = &HOOCOCOCO& Caption - - 'I o Height = 255 Left = 1740 TabIndex = 5 TOP = 90 Width = 675

End Begin Label Label2

Backcolor = &HOOCOCOCO& Caption - - In X Height = 195 Left = 180 TabIndex = 4 TOP = 120 Width = 165

End End Begin Label Labell

Backcolor = &HOOCOCOCO& Caption = "Número de pasos por unidad" Height = 255 Left = 120 TabIndex = 1 TOP = 180 Width = 2445

End nd

? FRE .FRM - 1 -

Command3Dl-Click ( ) Jnload conf - fresa

Sub

Form-Load ( )

On Error Resume Next Dim OpenFlag

D3.MSComml.PortOpen = Not D3.MSComml.PortOpen If Err Then MsgBox Error$, 4 8

OpenFlag = D3.MSComml.PortOpen D3,fresar.Checked = OpenFlag If D3.MSComml.PortOpen Then

End If px.Caption = esc-x py.Caption = escqT pz.Caption = esc-z pa.Caption = esc a pb.Caption = esc-b Paso X.Value = esc-x Paso-Y.Value = escx Paso-Z.Value = esc z Paso-A.Value = esc-a Paso-B.Value - = esc-b

D3. MSComml . Output = "TERMO" +

-

-

Chr$ (13)

Sub

MV-A Change ( ) posiciones% posiciones = A anterior - MV A.Value A anterior = A.Value IT D3 .MSComml. Portopen Then

-

cadena = "MV M4 + Str$(posiciones) + ChrS(13) D3.MSComml.Output = cadena

End If

Sub

MV " X Change ( ) posiciones% posiciones = X anterior - MV X.Value X anterior = MT X.Value IT D3.MSComml.P%tOpen Then

-

cadena = "MV M1 I' + Str$(posiciones) + ChrS(13) D3.MSComml.Output = cadena

End If Sub

MV-Y-Change ( ) posiciones% posiciones = Y anterior - MV Y.Value Y anterior = MT Yevalue 17 D3.MSComml.PGrtOpen Then

-

cadena = "MV M2 'I + Str$(posiciones) + ChrS(13)

F - FRE.FRM - 2 D3.MSComml.Output = cadena

End If Sub

MV " Z Change ( ) posiciones% posiciones = Z anterior - MV Z.Value z anterior = Mv Z.Value IT D3.MSComl.P&tOpen Then

-

cadena = "MV M3 + Str$(posiciones) + ChrS(13) D3.MSComl.Output = cadena

End If Sub

Paso " A Change ( ) pa.Caption = Str$(Paso - A.Value) ese a% = Paso A.Value Sub-

-

Paso " B Change ( ) pb.Caption = Str$(Paso - A.Value) ese b% = Paso A.Value Sub-

-

Paso " X Change ( ) px.Caption = Str$(Paso-X.Value) esc x% = Paso X.Value Sub-

-

Paso " Y Change ( ) py.Caption = Str$(Paso-Y.Value) esc_y% = Paso Y.Value Sub

-

Paso Z Change ( ) pz.Caption = Str$(Paso Z.Value) ese 2% = Paso Z.Value

"

- -

Sub -

M

?RM - 1

; ION 2 . 0 0 i n Form D 3 2utoRedraw 3orderSty le l a p t i o n l l i e n t H e i g h t X ien tLef t 3lientTop I l ien tWidth ?oreColor ] e igh t [con Left LinkTopic jcaleHeight k a l e w i d t h

aidth 'op

. -1 'True O 'None 'I 3D 2040 4545 2070 3330 &HOOCOFFCO& 2730 ( I c o n ) 4485 "Form2 'I 2040 3330 144 O 3450

3egin T i m e r Timer1 L e f t = 2160 TOP = o

End jegin MSComm MSComml

Handshaking = 2 'RTS In te rva l = 1000 L e f t = 2910 TOP = o

: nd legin Shape cortadora

Backcolor = &HOOOOFFOO& Backs ty le = 1 'Opaque Bordercolor = &HOOOOOOFF& F i l l C o l o r = &HOOOOFFOO& F i l l s t y l e = O ' S o l i d Height = 135 L e f t = 3180 TOP = 570 V i s i b l e = O ' F a l s e Width = 105

nd e g i n Menu cuerpo

Capt ion - - "&Fresado" Begin Menu G r a f i c a

End Begin Menu f r e s a r

End

Capt ion - - 'I & S imu 1 ador I'

Caption - - "&Fresar"

nd eg in Menu d ibu ja

nd Capt ion " &Dibujar I'

?RM - 1 ;t TIM - ESP - COMANDO = 10

dibuja Click ( ) 3.MouseFointer = 11 ill TerceraDim 3.MousePointer = O Sub

Form-Unload (Cancel As Integer) Dim T&

If MSComml.PortOpen Then I "- Espera 10 segundos para que los datos sean transmiktidos

T& = Timer + 10 Do While MSComml.0utBufferCount

Ret = DoEvents( ) If Timer > T& Then

1 "- Abortar Case 3

Select Case MsgBox("Los datos no se pudieron transmitir", 34)

Cancel = True Exit Sub

1 "- Reintentar Case 4

T& = Timer + 10 1 Ignorar Case 5

Exit Do End Select

End If Loop

MSComml.PortOpen = O End If

I "- If log file is open, flush and close it brm1.B - 3d.Value = False Sub

fresar Click ( ) ' Intercambia el estado del puerto (Abierto o Cerrado).

On Error Resume Next Dim OpenFlag Dim motor% Dim cadena aux$ motor = 10 MSComml.PortOpen = Not MSComml.PortOpen If Err Then MsgBox Error$, 48

-

OpenFlag = MSComm1,PortOpen fresar.Checked = OpenFlag If D3.MSComml.PortOpen Then

D3.MSComml.Output = "TERMO" + Chr$( 13) espera TIM-ESP COMANDO, 5 D3.MSComml.Out@1t = "all p O I' + ChrS(13) espera TIM ESP COMANDO, 5 D3.MSCommlTbut~ut = "sf1 'I + Str$(esc-x) f ChrS(13) espera TIM-ESP COMANDO, 5 D3.MSComml.Output = "sf2 'I + Str$(escy) + ChrS(13)

FRM - 2

espera TIM ESP COMANDO, 5 D3.MSCommlTOutput = "sf3 I' + Str$(esc-z) + ChrS(13) espera TIM ESP COMANDO, 5 D3.MSCommlTOut'i;ut = "sf4 It + Str$(esc a) + ChrS(13) espera TIM ESP COMANDO, 5

D3.cortadora.Visible = True D3.cortadora.Width = TAMA PUNTO D3.cortadora.Left = 10 D3.cortadora.Top = 10 D3.ScaleMode = 1

- - -

-

Call fresado End If

Sub

grafica Click ( ) Call Siiiulacion Sub

q1.FRM - 1

jION 2.00 in Form Form1 3ackColor 3orderStyle zaption XientHeight XientLef t XientTop XientWidth ?illstyle loreColor leight [con Left LinkTopic lousepointer 3caleHeight kalewidth ?op Jidth

&HOOCOCOCO& 3 'Fixed Double "Editor de Figuras Para Fresar" 6015 1680 1725 7710 O 'Solid &H00004080& 6705 (Icon) 1620 " r r I' 2 'Cross 6015 7710 1095 7830

3egin SSPanel Pane13D8 Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 1410 Left = 45 TabIndex = 21 TOP = 4275 Width = 1095 Begin SSPanel Pane13D12

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 405 Left = 495 TabIndex = 27 TOP = 540 Width = 495 Begin SSRibbon GroupPush3D4

Backcolor = &HOOCOCOCO& Bevelwidth = o Height = 330 Left = 90 Outline = O 'False PictureDisabled = (none) PictureDn = (none) PictureDnChange = 1 'Dither 'Pictureup' Bitmap Pictureup = (Bitmap) TOP = 45 Width = 360

End End Begin SSPanel Panel3D11

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 405 Left = 540

I1.FRM - 2 TabIndex = 26

Width = 495 Begin SSRibbon GroupPush3D3

Backcolor = &HOOCOCOCO& Bevelwidth = o Height = 330 Left = 45 Outline = O 'False PictureDisabled = (none) PictureDn = ( none) PictureDnChange = 1 'Dither 'Pictureup' Bitmap Pictureup = ( Bitmap ) TOP = 45 Width = 360

TOP = 945

End End Begin SSPanel Pane13D2

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Font3D = O 'None Height = 420 Left = 90 TabIndex = 25 TOP = 90 Width = 435 Begin SSRibbon B-3d

Backcolor = &HOOCOCOCO& Bevelwidth = o Height = 330 Left = 45 Outline = O 'False PictureDisabled = (none) PictureDn = (none) PictureDnChange = 1 'Dither 'Pictureup' Bitmap Pictureup = ( Bitmap ) TOP = 45 Width = 360

End End Begin SSPanel Panel3D10

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 405 Left = 90 TabIndex = 24 TOP = 945 Width = 465 Begin SSRibbon GroupPush3D2

Backcolor = &HOOCOCOCO& Bevelwidth = o Height = 330 Left = 45 Outline = O 'False PictureDisabled = (none) PictureDn = ( none) PictureDnChange = 1 'Dither 'Pictureup' Bitmap Pictureup = ( Bitmap ) TOP = 45

Y1.FRM - 3 Width = 360

End End Begin SSPanel Panel3D9

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 405 Left = 45 TabIndex = 23

Width = 495 Begin SSRibbon GroupPush3Dl

Backcolor = &HOOCOCOCO& Bevelwidth = o Height = 330 Left = 90 Outline = O 'False PictureDisabled = (none) PictureDn = (none) PictureDnChange = 1 'Dither 'Pictureup' Bitmap Pictureup = (Bitmap) TOP = 45 Width = 360

TOP = 540

End End Begin SSPanel Pane13D5

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font 3D = O 'None Height = 420 Left = 585 TabIndex = 22

Width = 435 Begin SSRibbon B Zoom

TOP = 90

Backcolor = &HOOCOCOCO& Bevelwidth = o Height = 330 Left = 30 Outline = O 'False PictureDisabled = (none) PictureDn = (none) PictureDnChange = 1 'Dither 'Pictureup' Bitmap Pictureup = (Bitmap) TOP = 30 Width = 360

-

End End

:nd legin SSPanel Pane13D3

BackColor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 1770 Left = 45 TabIndex = 9 TOP = 2475

!Il.FRM - 4 Width = 1095 Begin SSPanel Pane13D7

Backcolor = &HOOCOCOCO& Font3D = O 'None Height = 285 Left = 150 TabIndex = 12 TOP = 450 Width = 825 Begin Label YY

Backcolor = &HOOCOCOCO& Height = 225 Left = 390 TabIndex = 16 TOP = 30 Width = 345

End Begin Label Label3

Backcolor = &HOOCOCOCO& Caption - - " Y " Height = 225 Left = 6 0 TabIndex = 15 TOP = 30 Width = 165

End End Begin SSPanel Panel3D6

Backcolor = &HOOCOCOCO& Font 3D = O 'None Height = 930 Left = 135 TabIndex = 11 TOP = 765 Width = 825 Begin SSCommand ok

Caption - - Font3D - - FontBold - - FontItalic - - FontName - - FontSize - - FontStrikethru = Fontunderline = Height - Left Picture - - TabIndex - - TOP Width

- - -

- - - - End Begin HScrollBar ZZZ

Height - Left Max - Min TabIndex - TOP Value - Width

- - - - - - - - - - -

End

11 Ok If

O 'None -1 'True O 'False "MS Serif '' 8.25 O 'False O 'False 255 30 ( none ) 19 480 765

240 30 99 1 18 270 1 765

Y1.FRM - 5 Begin Label ZZ

Backcolor Caption - - Height - - Left TabIndex TOP Width

- -

- - - - - - - -

End Begin Label Label1

Backcolor Caption - - Height - Left TabIndex - - TOP Width

- - - - - - - - -

End End Begin SSPanel Pane13D4

&HOOCOCOCO& I' 1 II 225 390 20 30 375

&HOOCOCOCO& 'I z 'I 195 6 0 17 60 195

Backcolor = &HOOCOCOCO& Font3D = O 'None Height = 285 Left = 150 TabIndex = 10 TOP = 120 Width = 825 Begin Label XX

Backcolor - - Height - - Left - - TabIndex - - TOP Width - -

- - End Begin Label Label2

Backcolor - - Caption - - Height - - Left - - TabIndex - - TOP Width

- - - -

End End

Ind legin SSPanel Panel3D1

&HOOCOCOCO& 225 420 14 30 345

&HOOCOCOCO& I' x 'I

195 6 0 13 30 195

Backcolor = &HOOCOCOCO& BevelInner = 2 'Raised Borderwidth = 1 Font3D = O 'None Height = 2265 Left = 6 0 TabIndex 3 3 TOP = 150 Width = 1095 Begin SSRibbon C vacio -

Backcolor = &HOOCOCOCO& Bevelwidth = o Height = 330 Left = 540

q1.FRM - 6 Outline = O 'False PictureDisabled = (none) PictureDn = (none) PictureDnChange = 1 'Dither 'PictureUp' Bitmap Pictureup = (Bitmap) TOP = 120 Width = 360

End Begin SpinButton Sgrofundidad

Delay = 150 Height = 285 Left = 240

Width = 195 TOP = 1800

End Begin SSRibbon C lleno

Backcolor = &HOOCOCOCO& Bevelwidth = o Height = 330 Left = 180 Outline = O 'False PictureDisabled = (none) PictureDn = (none) PictureDnChange = 1 'Dither 'Pictureup' Bitmap Pictureup = (Bitmap) TOP = 120 Width = 360

-

End Begin SSRibbon O-lleno

Backcolor = &HOOCOCOCO& Bevelwidth = o Height = 330 Left = 180 Outline = O 'False PictureDisabled = (none) PictureDn = ( none) PictureDnChange = 1 'Dither 'Pictureup' Bitmap Pictureup = (Bitmap) TOP = 450 Width = 360

End Begin SSRibbon O - vacio

Backcolor = &HOOCOCOCO& Bevelwidth = o Height = 330 Left = 540 Outline = O 'False PictureDisabled = (none) PictureDn = (none) PictureDnChange = 1 'Dither 'Pictureup' Bitmap Pictureup = (Bitmap) TOP = 450 Width = 360

End Begin HScrollBar Tama Herramienta

Height = 240 Left = 180 Max = 100 Min = 1 TabIndex = 4

..-

TOP = 780

Y1.FRM - 7 Value Width

- - - -

End Begin Label Label6

Caption - - Height - - Left TabIndex TOP Width

- - - - - - -

End Begin Label Label5

Caption - - Height - - Left TabIndex TOP Width

- - - - - - - -

End

1 735

"Prof. 'I 195 150 8 1530 765

'' Tamaño '' 195 180 7 1050 735

Begin Label Profundidad Caption - - " 1 " Height = 195 Left = 480 TabIndex = 6 TOP = 1800 Width = 435

End Begin Label T herramienta -

Height = 195 Left = 480 TabIndex = 5 TOP = 1290 Width = 435

End :nd legin PictureBox Regla-X

Height = 225 Left = 1215 ScaleHeight = 195 Scalewidth = 6165 TabIndex = 2 TOP = 5670 Width = 6195

Ind legin PictureBox Regla-Y

Height = 5535 Left = 7380 ScaleHeight = 5505 Scalewidth = 195 TabIndex = 1 TOP = 135 Width = 225

nd 'egin PictureBox grafica AutoRedraw - - -1 'True Clipcontrols = O 'False DragIcon = (Icon) FillColor = &HOOCOCOCO& Forecolor = &HOOFFFFFF& Height = 5535 Left = 1215

!fl.FRM - 8

MousePointer ScaleHeight - - Scalewidth TabIndex TOP Width Begin Shape figura

- - - - - - - - -

FillColor Height Left TOP Width

End 3nd 3egin Menu Archivo

Caption - - Begin Menu Nuevo

End Beqin Menu Guardar

Caption

1 'Arrow 5505 6165 O 135 6195

= &HOOCOCOCO& = 225 = 5520 = 90 = 225

"&Archivo"

- - &Nuevo

- Caption - - 'I &Trabajos

End Begin Menu Salir

End Caption - - "&Salir"

3nd 3egin Menu Ver

Caption - - 'I &Ver 'I

Begin Menu Guias

End Caption - - "&Guias"

end legin Menu configuración

Caption - - "&Configuración" Begin Menu conf_puerto

Caption - - "&Puerto" End Begin Menu Conf - fresadora

End Caption - - "&Fresadora"

: nd

Y1.FRM - 1 st TAMAÑO~ = 1 st MARGEN% = 1500 st TIPO DE - ESCALA% = 1 minimog largo& Activa Zoom% Activa-3D% -

b Click (Index A s Integer, Value As Integer) SePointer = 11 If b 3d = True Then

Else

End If

d5. Show

d3. Hide

Sub

Dibujacuadro (x-As Integer, y As Integer)

qrafica.ForeColor = StHCOCOCO zadro de abajo a la izq.

-

Sub

B - - 3d Click (Value As Integer)

If b 3d = True Then

Else

End If

d3. Show

d3. Hide

Sub

B - Zoom Click (Value As Integer) If B zoom = True Then

Else

End If

ZGom. Show

Zoom.Hide

Sub

c lleno Click (Value As Integer) ii¿jura.SKape = 1 Sub

C vacio Click (Value As Integer) fzgusa.Shape = 1 Sub

Conf fresadora Click ( ) Conf-fresa.Show Sub

-

conf_puerto-Click ( ) 'abre la ventana de configuración ConfigScrn.Show

Y1.FRM - 2 Sub

Form-Load ( )

r herramienta.Caption = fll'' 3Z.Caption = 11111 3rafica.FillStyle = O ?Lofundo = 1 3sc x = 20

3sc z = 20 zsc-a = 20 3sc b = 20 ?OS z = 1 nin x = max ninJ = max nin z = max

3scy = 20 -

-

- - -

-

?orml.ScaleMode = TIPO DE ESCALA 3rafica.ScaleMode = TIFO DE ESCALA legla Y.ScaleMode = TIPO-DE-ESCALA Zegla-X.ScaleMode = TIPOZDEIESCALA leglaY.ForeColor = O legla-X.ForeColor - = O

porml.Height = 6850 ?orml.Width = Forml.Height + 100 .ongitud = Forml.Height - MARGEN lrafica.Height = longitud írafica.Width = longitud :scala = longitud / 100 iigura.Height = escala iigura.Width = escala

legla Y.Left = grafica.Width + gra legla-Y.Height - = grafica.Height

fica.Le ft

kegla X.Top = grafica.Height + grafica.Top :egla-X.Width - = grafica.Width

Sub

Form - MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Sing1

Forml.MousePointer = 1 Sub

Form - Resize ( )

:f Forml.Height >= (Forml.Width + 100) Then llse

:nd If f Forml.WindowState = O Then ' Cero es el estado normal

minimo = Forml.Height

minimo = Forml.Height

uno es minimizado dos es Maximizado

Forml.Height = minimo

41.FRM - 3 Forml.Width = minimo + 100 largo = minimo - MARGEN escala = largo / 100 grafica.Height = largo grafica.Width = largo

Regla Y.Left = grafica.Width + grafica.Left Regla-Y.Height - = grafica.Height

Regla X.Top = grafica.Height + grafica.Top ReglaIX.Width = grafica.Width

If Guias.Checked = True Then i tiene prendida la opcion de gias

grafica.ForeColor = &HCOCOCO For i = O To 100 Step 10 aux int = Int(esca1a * i) graFica.Line (aux int, O - (aux int, largo) grafica.Line (O, aux int)-(lar<o, aux int)

- -

Next i -

End If

fnd If

Sub

Form Unload (Cancel As Integer) Jnloaa Zoom Jnload d3 Sub

grafica - Click ( )

If B - Zoom = True Then 'tenemos que pintar el pedacito de matriz 2oom.ScaleMode = 7 For i = O To 9 For j = O To 9 If matriz(pos-x + j - 5, p o s 2 + i - 5, pos-z) = 1 Then

Zoom.ForeColor = &HCOCOCO ' lo pintamos en gris Else

Zoom.ForeColor = &HFFFFFF ' lo pintamos en blanco End If Zoom.Line (j / 4, i / 4 ) - ( j / 4 + . 2 5 , i / 4 + .25), , BF

Next j Next i

End If

Sub

grafica-DblClick ( ) .m herramienta% .m izq% .m arriba%

irramienta tiene el la mitad del tamaño de la herramienta L las medidas propias de la ventana y no en mm o alguna otra medida xramienta = escala * Tama herramienta.Value / 2 ,q debe guardar la posición inicial del eje de las X largo guardar6 la longitud final de el eje de las x

I es en sí cuantos son, si no más bien hasta donde

-

M1.FRM - 4

stas a diferencia que las anteriores, se transformaron ara usarlas como indices en una matriz

= Val(XX.Caption) * escala = Val(YY.Caption) * escala zq = Int((X / escala) - (Tama herramienta.Value / 2)) wgo = izq + Tama-herramientaTValue rriba = Int((Y / escala) - Tama-herramienta.Value / 2) acho = arriba + Tama-herramienta.Value E O 1leno.Value = True Then ' dibujamos todo el CIRCULITO grafica.ForeColor = &HCOCOCO grafica-FillColor = &HCOCOCO grafica.Circle (X, Y), herramienta

LseIf O vacio.Value = True Then ' B0Rfiij;MOS todo el CIRCULITO grafica-Forecolor = &HFFFFFF grafica.FillColor = &HFFFFFF grafica.Circle (X, Y), herramienta

LseIf C 1leno.Value = True Then dibuTamos todo el cuadradito grafica.ForeColor = &HCOCOCO grafica.Line (X - herramienta, Y - herramienta)-(X + herramienta, Y + herr

-

mta), , BF ' MANEJO DE LA MATRIZ ' Reacotamos la figura If max x < largo Then max x = largo If minx > izq Then min x = izq If max3 .e ancho Then mgx2 = ancho If minqT > arriba Then min3 = arriba If max z < (pos z + profundo) Then max-z = (pos-z + profundo) If min-z - > pos - 2 Then min - z = pos-z

'Llenamos la matriz For k = pos - z To (pos z + profundo - 1)

For j = arriba To ancho

Next j

1 For i = izq To largo

1 matriz(i, j, k) = 1 1

I

I Next i Next k

llenamos la matriz con unos dependiendo el tamaño de la herramienta For k = pos - z To (pos-z + profundo - 1)

For j = arriba To ancho matriz(i, j, k) = 1

Next j

For i = izq To largo

Next i Next k

se BORRAMOS todo el cuadradito grafica.ForeColor = &HFFFFFF grafica.Line (X - herramienta, Y - herramienta)-(X + herramienta, Y + herr

Y1.FRM - 5 snta), , BF ' BORRAMOS la matriz con ceros dependiendo el tamaño de la herramienta For k = pos z To (pos z 3. profundo - 1 )

For j = arriba To ancho matriz(i, j, k) = O

Next j

For i = izq To laygo -

Next i Next k

Id If

Dibujacuadro pos-x, POSI matriz(pos-x, posy, pos-z) = 1

Sub

grafica - MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Si 2 )

)s-x = Int(X / escala) ) s y = Int ( Y / escala) <.Caption = Str$(pos-x) !.Caption = Str$(posy) -gura.Left = X - ((escala / 2) * Tama herramienta.Value) -gura.Top = Y - ( (escala / 2) * Tama - 'i;erramienta.Value) Sub

grafica Paint ( ) graficaTDrawStyle = SOLID

DibujaRebanada 40, 30, 30, 40 DibujaRebanada 39, 31, 29, 41 DibujaRebanada 38, 32, 28, 42 DibujaRebanada 37, 33, 27, 43 DibujaRebanada 36, 34, 26, 44 DibujaRebanada 35, 35, 25, 45 DibujaRebanada 34, 36, 24, 46 DibujaRebanada 33, 37, 23, 47 DibujaRebanada 32, 38, 22, 48 DibujaRebanada 31, 39, 21, 49

Sub

GroupPush3Dl - Click (Value As Integer)

' ROTACIdN EN EL PLANO X Y z Y Z X

If maxqT > max-z Then max aux = max2

Else max aux = max z

End If- If minqT < min - z Then

1

-

min - aux = minx Else

min - aux = min-z

41.FRM - 6

End If

Forml.MousePointer = 11 For R k = min x To max x Step 1

'Copia en-la rebanzda For R-i = min2 To max2 Step 1

-

For R-j = min z To max z Step 1 Rebananada(R if R-j ) = matriz (R k, R-if R j ) - - Next R-j -

Next R i 'Rotac%n en la matriz For R i = 1 To max Step 1

FO? R j = 1 TO max Step 1 - a = max + 1 - R-j matriz(R - k, R-i, R j) = Rebananada(a, R i) - -

Next R j - Next R i

Next R k 'max aux = max-x 'min aux = min x 'max x = max2 'min-x = min2 'max_y = max aux 'min2 = min aux minly = 1 min-z = 1 max2 = max max-z = max

- -

- - - -

- -

'DibujaRebanada pos-z Forml.MousePointer = O

Sub

GroupPush3D2 Click (Value As Integer) ManagerArchivo Show Sub

GroupPush3D4 - Click (Value As Integer)

If max-x > maxqT Then ROTACI~N EN EL PLANO x Y

-

max-aux = max x Else

- max aux = max2

End If- If min - x < min2 Then

min-aux = min x

min aux = min_y

- Else

End If-

Forml.MousePointer = 11 For R k = min z To max z Step 1 -

'Copia en-la rebangda For R-i = rnin x To max x Step 1 -

For R j = min2 To &ax2 Step 1 Reb&anada(R i, R-j) = matriz(R i, R-j, R-k) - Next R-j -

Next R-i 'Rotación en la matriz

Y1.FRM - 7 For R i = 1 To max Step 1

For R-j = 1 To max Step 1 a = max + 1 - R-j matriz(R i, R-j, R-k) = Rebananada(a, R i)

Next R j - -

Next R-i Next R k 'max aux = max-x 'min-aux = min-x 'max-x = max2 'min x = min2 'max2 = max-aux 'min_y = min aux

-

- -

-

min2 = 1 min2 = 1 max x = max max3 = max

- 'DibujaRebanada pos z Forml.MousePointer = O

-

Sub

Guardar-Click ( ) 4anagerArchivo.Show 'DibujaRebanada pos-z Sub

Guias Click ( ) If Gu%-as.Checked = True Then

Guias.Checked = False Else

Guias.Checked = True End If Sub

Nuevo Click ( ) grafica.Refresh Sub

O lleno Click (Value As Integer) fxgura.;hape = 3 Sub

O - vacio Click (Value As Integer)

Sub figu?a.Shape = 3

ok Click ( ) IibÜjaRebanada pos-z Sub

Regla-X Paint ( ) !gla X. Refresh : i = O To 100

- aux int = Int(esca1a * i) If -d = (i Mod 10) Then

Else Regla - X.Line (aux int, O)-(aux int, 250) - - Regla - X-Line (aux int, O)-(aux int, 75)

End If - -

:t i

M1.FRM - 8

Sub

Regla ” Y Paint ( ) sgla - Y.Refresh r i = O To 100 Step 1 aux int = Int(esca1a * i) If 0 = (i Mod 10) Then

Else Regla - Y.Line (O, aux int)-(250, aux int) - -

Regla-Y.Line (O, aux int)-(75, aux int) - - End If

Kt i Sub

SJrofundidad SpinDown ( ) If profundo >-1 Then profundo = profundo - 1

End If profundidad.Caption = Str$(profundo) Sub

SJrofundidad SpinUp ( ) If profundo <-98 Then

End If profundidad.Caption = Str$(profundo) Sub

profundo = profundo + 1

Salir Click ( ) Jnload-Form1 Jnload Zoom Inload d3 Sub

Tama Herramienta Change ( ) T heFramienta.Ca5tion = Str$(Tama herramienta.Value) fTgura.Width = Tama herramienta.Vglue * escala figura.Height = Tamz herramienta.Value * escala Sub

-

ZZZ - Change ( ) )os z = Int(ZZZ.Value) I~.Caption = Str$(pos z ) Dibu jaRebanada pos-; Sub

:him: Path

I

,bdir.bas 12new.ico 12new.doc j2new.exe

10 de Archivo Disco

AGERA.FRM - 1

SION 2.00 in Form ManagerArchivo Borderstyle = 1 'Fixed Single Zaption - - "Control de Archivos" ZlientHeight = 3435 ZlientLeft = 795 2lientTop = 1515 2lientWidth = 6030 ZlipControls = O 'False SontrolBox = O 'False Height = 3840 Left = 735 LinkTopic - - Form2 'I YaxButton = O 'False YinButton = O 'False ScaleHeight = 3435 Scalewidth = 6030 FOP = 1170 iJidth = 6150 3egin TextBox TipoArchivo

Height = 285 Left = 270 TabIndex = 1 3

Width = 1860 3 nd 3egin CommandButton CommSalirA

TOP = 2835

Caption - - "&Salir" Height = 420 Left = 4950 TabIndex = 12 TOP = 2610 Width = 870

Z nd 3egin CommandButton CommBorrarA

Caption - - "&Borrar" Height = 420 Left = 4950 TabIndex = 11 TOP = 2025 Width = 870

Cnd 3egin CommandButton CommGrabarA

Caption - - &Grabar Height = 420 Left = 4950 TabIndex = 10 TOP = 1440 Width = 870

End 3egin CommandButton CommCargarA

Caption - - "&Cargar" Height = 420 Left = 4950 TabIndex = 9 TOP = 855 Width = 8'70

: nd iegin TextBox Archivo

Height = 285 Left = 225

AGERA. FRM - 2 TabIndex = 5

Width = 1905 TOP = 540

End Begin FileListBox File1

Height = 1395 Left = 225 TabIndex = 4 TOP = 900 Width = 1905

End Begin DriveListBox Drivel

Height - - Left - - TabIndex TOP Width

- - - - - -

3nd 3egin DirListBox Dirl

Height - Left TabIndex - Width -

- - - -

TOP - - - 3nd 3egin Label Label5

Caption - - Height - - Left TabIndex - - TOP Width

- - - - -

2nd 3egin Label Label4

Caption - - Height - Left TabIndex - - TOP Width - -

- - - -

Z nd 3egin Label Label3

Caption - - Height - Left TabIndex - -

Width -

- - -

TOP - - End iegin Label Path

-

Height - - Left - TabIndex

Width

- - -

TOP - - =

: nd begin Label Label1

Caption - - Height - Left TabIndex - -

- - -

315 2520 1 2700 2130

1380 2520 O 900 2130

"Disco" 195 2520 8 2430 2040

"Tipo de Archivo" 195 225 7 2430 1860

"Archivo : l1

240 225 6 180 780

195 2520 3 585 3165

"Path: I' 195 2565 2

AGERA.FRM - 3 TOP Width

End

= 180 = 510

AGERA.FRM - 1

Command4 - Click ( )

Sub

CommBorrarA Click ( )

Sub Kill archivoTText

CommCargarA - Click ( ) Cargar Sub

CommGrabarA - Click ( ) Grabar Sub

CommSalirA Click ( ) load ManagerArchivo S z = Int(forml.ZZZ.Va1ue) 1i DibujaRebanada(p0s z ) Sub

-

Dirl Change ( ) th.Caption = dirl.Path 1el.Path = dirl.Path Sub

Drivel Change ( )

Sub rl.Path= Drivel.Drive

File1 DblClick ( )

Sub rchivorText = Filel.FileName

Form Load ( ) Air 1 .Fath = 'IC : \ \ I'

Path.Caption = dirl.Path Filel.Path = dirl.Path Filel.Pattern = "*.fie" 3rchivo.Text = "*.fie" FipoArchivo.Text = "*.fie" Sub

TipoArchivo Change ( ) ilel.Pattern-= TipoArchivo.Text rchivo.Text = TipoArchivo.Text Sub

Ll N-Puerto - Control-Flujo-

O None O XonlrXoff @ FITS O XoniRTS

.MSET.FRM - 1 SION 2.00 in Form ConfigScrn Borderstyle - - Caption - - ClientHeight - - ClientLeft - ClientTop Clientwidth - Height - - Icon Left LinkMode - - LinkTopic - - ScaleHeight - Scalewidth TOP Width

- - -

- - - -

- - - - - - -

3 'Fixed Double "Conf iguracion del puerto" 3840 1980 1920 4980 4245 ( none ) 1920 1 'Source "Form3 3840 4980 1575 5100

Begin OptionButton ComPort Caption - - "Coml Height = 252 Index = 1 Left = 1920 TabIndex = 31 TOP = 2340 Width = 852

End Begin OptionButton ComPort

Caption - - I' C om4 'I

Height = 252 Index = 4 Left = 1920 TabIndex = 30 TOP = 3240 Width = 852

End Begin OptionButton ComPort

Caption - - "Corn3 Height = 252 Index = 3 Left = 1920 TabIndex = 29 TOP = 2940 Width = 852

2nd 3egin OptionButton ComPort

Caption - - Height Index Left TabIndex TOP Value Width

3nd 3egin Frame

Caption Height Left TabIndex TOP Width

'' C om2 'I

255 2 1920 28 2670 -1 'True 855

"&Vel-Baud" 975 270 2 120 3315

MSET.FRM - 2 Begin OptionButton Baud3

Caption - - 3 o o Height = 255 Left = 300 TabIndex = 3 TOP = 240 Width = 735

End Begin OptionButton Baud6

Caption - - 'I 6 O O *I

Height = 255 Left = 1260 TabIndex = 4 TOP = 240 Value - - -1 'True Width = 615

End Begin OptionButton Baud12

Caption - "1200" Height = 255 Left = 2220 TabIndex = 5 TOP = 240 Width = 735

End Begin OptionButton Baud24

Caption - - "2400" Height = 255 Left = 300 TabIndex = 6 TOP = 600 Width = 735

End Begin OptionButton Baud48

Caption - - "4800" Height = 255 Left = 1260 TabIndex = 7 TOP = 600 Width = 735

End Begin OptionButton Baud96

Caption - - "9600" Height = 255 Left = 2220 TabIndex = 8 TOP = 600 Width = 735

End 3nd 3egin CommandButton OKButton

Caption - - 'I OK 'I

Default - - -1 'True Height = 375 Left = 3780 TabIndex = o TOP = 240 Width = 975

Cnd kgin CommandButton CancelButton

Cancel - -1 'True

MSET.FRM - 3 Caption - - Height Left TabIndex - TOP Width

- - - - - -

End Begin Frame Frame2

Caption - - Height - - Left TabIndex TOP Width

- - - - - - -

"Cancelar" 375 3780 1 750 975

"&Bits-Datos" 615 240 9 1260 1275

Begin OptionButton Data7 Caption - - 7 Height = 255 Left = 180 TabIndex = 10 TOP = 240 Width = 375

End Begin OptionButton Data8

Caption - - 8 Height = 255 Left = 720 TabIndex = 11 TOP = 240 Value Width = 435

- - -1 'True

End End 3egin Frame Frame3

Caption - - &Bit s-Parada" Height = 615 Left = 1800 TabIndex = 12

Width = 1335 Begin OptionButton Stop1

TOP = 1260

Caption - - I' 1 Height = 255 Left = 240 TabIndex = 13 TOP = 240 Width = 435

End Begin OptionButton Stop2

Caption - - 11 2 11

Height = 255 Left = 810 TabIndex = 14 TOP = 240 Value - - -1 'True Width = 495

End Znd 3egin Frame Frame7

Caption - - "&Echo" Height = 615 Left = 3300

Caption Height Left TabIndex TOP Width

End 2nd 3egin Frame Frame6

Caption - Height Left - - TabIndex - - TOP - - Width - -

- - -

MSET-FRM - 4 TabIndex = 15 TOP = 1260 Width = 1455 Begin OptionButton EchoOff

Caption - "Off It Height = 315 Left = 810 TabIndex = 17 TOP = 240 Value - - -1 'True Width = 615

End Begin OptionButton EchoOn

Caption - - I* On I' Height = 195 Left = 180 TabIndex = 16 TOP = 300 Width = 555

End End Begin Frame Frame4

Caption - - "&Paridad" Height = 1575 Left = 270 TabIndex = 18

Width = 1275 Begin OptionButton NoParity

TOP = 2040

Caption - - "None Height = 255 Left = 180 TabIndex = 19 TOP = 300 Value - - -1 'True Width = 855

End Begin OptionButton OddParity

Caption - - "Odd I' Height = 255 Left = 180 TabIndex = 20

Width = 735 End Begin OptionButton Evenparity - "Even"

TOP = 600

- = 255

180 = 21 = 900 = 855

"&N-Puerto" 1575 1740 22 2040 1335

MSET-FRM - 5 End Begin Frame Frame5

Caption - - "&Control-Flu jo" Height = 1575 Left = 3300 TabIndex = 23 TOP = 2040 Width = 1455 Begin OptionButton NoFlow

Caption - - "None Height = 255 Left = 180 TabIndex = 26 TOP = 300 Width = 855

End Begin OptionButton XonFlow

Caption = "Xon/Xof f Height = 255 Left = 210 TabIndex = 24 TOP = 6 0 0 Width = 1095

End Begin OptionButton RTSFlow

Caption - - RTS I* Height = 255 Left = 180 TabIndex = 25 TOP = 900 Value - - -1 'True Width = 735

End Begin OptionButton BothFlow

Caption = "Xon/RTS" Height = 255 Left = 180 TabIndex = 27 TOP = 1200 Width = 1155

End 3nd

.MSET.FRM - 1 ********* Forma de configuración del puerto

pyright (c) 1993, UAMISOFTWARE

Int A-2

Shared NewPort Shared NewBaud$, NewParityS Shared NewDataS, Newstop$ Shared NewShake

'CONFIGURACION POR DEFAULT

- Boton de 1200 baud Baudl2-Click ( )

NewBaud$ = "1200"

Sub

- Boton de 2400 baud Baud24-Click ( )

NewBaud$ = "2400"

Sub

- Boton de 3 0 0 baud

Baud3-Click ( )

NewBaud$ = " 3 0 0 "

Sub

- Boton de 4800 baud Baud48 - Click ( )

NewBaud$ = "4800"

Sub

- Boton de 6 0 0 baud

Baud6 - Click ( )

NewBaud$ = 11600"

Sub

- Boton de 9600 baud Baud96-Click ( )

MSET.FRM - 2

NewBaud$ = 9 6 O O

Sub

- Boton de protocolos RTS y Xon/Xoff en handshaking ( ambos )

BothFlow-Click ( )

NewShake = 3

Sub

- Cancel button actions CancelButton-Click ( )

Unload ConfigScrn

Sub

ComPort-Click (Index As Integer) NewPort = Index Sub

- Boton de 7 bits de datos Data7-Click ( )

NewDataS = " 7 "

Sub

- Boton de 8 bits de datos Data8 - Click ( )

NewData$ = 8"

Sub

- Boton de desactivación EchoOff - Click ( )

Echo = O

Sub

- boton de activación del ECHO EchoOn - Click ( )

Echo = True

.MSET.FRM - 3 Sub

- Boton de paridad par EvenParity-Click ( )

NewParityS = ''E''

Sub

- inicialización y deaplegado de la Configuración Form Load ( )

' "- Obten el puerto actual OldPort = 1 NewPort = 2 If NewPort <> OldPort Then ado

If d3.MSComml.PortOpen Then d3.MSComml.PortOpen = False Reopen = True

End If

d3.MSComml.CommPort = NewPort

'Si el número de puerto fue ca

'Cerramos el puerto viejo

'Ponemos el nuevo número de puert

If Err = O Then If Reopen Then

d3.MSComml.PortOpen = True d3.fresar.Checked = d3.MSComml.PortOpen

End If End If If Err Then

MsgBox Error$, 4 8 d3.MSComml.CommPort = OldPort Exit Sub

End If End If

d3.MSComml.Settings = "600,n,8,Z1' d3.MSComml.Handshaking = 2 Port = 2 d3.MSComml.ComniPort = Port Port% = d3.MSComml.CommPort ConfigScrn.ComPort(Port).Value = True 'Pon la opcion

FirstComma = InStr(d3.MSComml.Settings, " , " ) Baud$ = Left$(d3.MSComml.Settings, FirstComma - 1) 1"- Obten la velocidad actuales

Select Case Val(Baud$) 'seleccion la velocidad Case 300 'pon la velocidad

ConfigScrn.Baud3.Value = True 'apachurra el boton Case 600

ConfigScrn.Baud6.Value = True

ConfigScrn.Baudl2.Value = True

ConfigScrn.Baud24.Value = True

Case 1200

Case 2400

T4SET.FRM - 4 Case 4800

Case 9600

End Select

ConfigScrn.Baud48.Value = True

ConfigScrn.Baud96.Value = True

' "m Obten la paridad actual Parity$ = Mid$(d3.MSComml.Settings, Firstcomma + 1, 1) Select Case UCase$(Parity$) 'Selecciona la paridad Case "N" 'pon la paridad actual

ConfigScrn.NoParity.Value = True 'apachurra el boton Case "E"

ConfigScrn.EvenParity.Value = True Case "O"

ConfigScrn.OddParity.Value = True End Select

' "- Obten los bits de datos SecondComma = Firstcomma + 2 DBits$ = Mid$(d3.MSComml.Settings, SecondComma + 1, 1) Select Case Val(DBits$) 'seleccion de los bits de datos Case 7 'Activa la opcion

Case 8

End Select

ConfigScrn.Data7.Value = True 'apachurra el boton

ConfigScrn.Data8.Value = True

' "- Obteniendo los bits de parada Thirdcomma = SecondComma + 2 SBits$ = Mid$(d3.MSComml.Settings, Thirdcomma + 1, 1) Select Case Val(SBits$) 'seleccion de los bits de paridad Case 1 'Activa la opcion

ConfigScrn.Stopl.Value = True 'Apachura el boton Case 2

End Select ConfigScrn.Stop2.Value = True

Select Case d3.MSComml.Handshaking Case O

ConfigScrn.NoFlow.Value = True Case 1

ConfigScrn.XonFlow.Va1ue = True Case 2

ConfigScrn.RTSFlow.Va1ue = True Case 3

ConfigScrn.BothFlow.Value = True End Select

If Echo Then

Else

End If

ConfigScrn.EchoOn.Value = True

ConfigScrn.EchoOff.Value = True

.MSComml.CommPort = 2 1figScrn.ComPort(2).Value = True 1figScrn.NoParity.Value = True 1figScrn.Baud6.Value = True 1figScrn.Data8.Value = True 1figScrn.Stop2.Value = True

'Elije la opcion activa 'Apachurra el boton

'Pon la opcion

:MSET.FRM - 5 1nfigScrn.EchoOff.Value = True . Sub

- Boton de Protocolo sin handshake NoFlow - Click ( )

NewShake = O

Sub

- El boton para no tomar en cueta la paridad NoParity - Click ( )

NewParityS = "N"

Sub

- Boton de paridad impar Oddparity - Click ( )

NewParityS = "O"

Sub

- Acciones cuando apachurran el OK buttom

OkButton Click ( ) On Error-Resume Next

OldPort = d3.MSComml.CommPort If NewPort <> OldPort Then

2do If d3.MSComml.PortOpen Then

d3.MSComml.PortOpen = False Reopen = True

End If

d3.MSComml.CommPort = NewPort

'Si el número de puerto fue ca

'Cerramos el puerto viejo

'Ponemos el nuevo número de puert

If Err = O Then If Reopen Then

d3.MSComml.PortOpen = True d3.fresar.Checked = d3.MSComml.PortOpen

End If End If If Err Then

MsgBox Error$, 4 8 d3.MSComml.CommPort = OldPort Exit Sub

End If End If

d3 .MSComml .Settings = NewBaud$ + " , I' + NewParityS + " , " + NewData$ + " , " + N

.MSET. FRM - 6

top$ If Err Then

MsgBox Error$, 4 8 Exit Sub

End If d3.MSComml.Handshaking = NewShake If Err Then

MsgBox Error$, 4 8 Exit Sub

End If

Unload ConfigScrn ción

Sub

- Boton de protocolo RTS handshaking

RTSFlow Click ( ) - NewShake = 2

Sub

- Boton de 1 bit de parada Stop1 - Click ( )

Newstop$ = "1"

Sub

- Boton de 2 bit de parada Stop2 - Click ( )

Newstop$ = "2"

Sub

- Boton de protocolo XON handshaking XonFlow Click ( ) -

'Quitamos la forma de config

NewShake = 1

Sub

IM.FRM - 1 .SION 2.00 .in Form Zoom Borderstyle Caption ClientHeight ClientLeft ClientTop Clientwidth Height Icon Left LinkTopic MaxButton ScaleHeight ScaleMode Scalewidth TOP Width

3 'Fixed Double

2250 6420 2610 2730 2655 (Icon) 6360 "Form2 I' O 'False 39.688 6 'Millimeter 48.154 2265 2850

Zoom"

!H - TXT.BAS - 1

f Cargar ( ) Dim FileData, Msg, ML I Declare variables. Dim cadena$ Dim Aux txt$ NL = ChF(l0) Define newline. ManagerArchivo.MousePointer = 11 Open ManagerArchivo.Dirl.Path + ManagerArchivo.Archivo.Text For Input As #1

For i = MAX To 1 Step -1 'pen to read file.

For j = 1 To MAX Step 1 Line Input #1, cadena Read a line of data. For k = MAX To 1 Step -1

'Aux txt$ = Mid$(cadena, (MAX - k) + 1, 1) Aux-Ext$ = Mid$ (cadena, k, 1 ) If Aux-txt$ = " 0 " Then Pintamos el CubiPixel

matriz( j, k, i) = O Else

matriz(j, k, i) = 1 End If

Next k Next j

Next i Close #1 Close file. ManagerArchivo.MousePointer = O

Sub

Graba ( ) Dim FileData, Msg, NL * Declare variables. NL = Chr(l0) Define newline. Open "TESTFILE" For Output As #1 Open to write file. Print #1, "This is a test of the Print # statement. 'I

Print #1, ' Print blank line to file. Print # 1 , "Zone l", "Zone 2" Print in two print zones. Print # 1, "With no space between"; 'l. Print two strings together. Close #1 Close file. Open "TESTFILE" For Input As #1 ' Open to read file. Do While Not EOF(1)

Line Input #1, FileData Read a line of data. Msg = Msg & FileData & NL Construct message.

Loop Close #1 Close file. MsgBox Msg Display message. Kill "TESTFILE" ' Remove file from disk.

Sub

Grabar ( ) Dim FileData, Msg, NL Declare variables. Dim cadena$ ManagerArchivo.MousePointer = 11 NL = Chr(l0) Define newline. Open ManagerArchivo.Dirl.Path + ManagerArchivo.Archivo.Text For Open to write file. For i = MAX To 1 Step -1

For j = 1 To MAX cadena$ = 1111

For k = 1 To MAX Step 1 If matriz(j, k, i) > O Then ' Pintamos el CubiPixel

Output As #1

H TXT.BAS - 2 - cadena = cadena + "1"

cadena = cadena + "O" Else

End If Next k Print #1, cadena

Next j Next i Close #1 Close file. ManagerArchivo.MousePointer = O Sub

lULE1. BAS - 1 lbal lbal bal lbal lbal 'bal 'bal bal bal 'bal 'bal 'bal bal bal Dim bal bal bal bal bal bal bal bal bal bal bal bal bal bal bal bal

Const TAMA-MATRIZ% = 100 aux-int% matriz%(TAMA MATRIZ, TAMA-MATRIZ, TAMA-MATRIZ) Rebananada%(AMA-MATRIZ, TAMA-MATRIZ) Const MAX% = 100 Const REFERENCIA% = 5 0 ' REFERENCIA = MAX / 2 Const TAMA PUNTO% = 20 X anterior5 YIanterior% Z anterior% AIanterior% B anterior% eZc-x% escala I escala! escy% ese z% esc-a% esc-b% pos-x% pos-J% pos-z% prof undo% cad-transmición$ cad-recepción$ max x% max>% max-z % min-x% minqT% min-z %

DibujaRebanada (AZ As Integer)

i% j%

sepointer = 11 For i = O To TAMA MATRIZ For j = O To Tm-MATRIZ

If matriz(j, i, AZ) = 1 Then ' REALMENTE DIBUJAMOS EL CUADRITO Forml.grafica.ForeCo1or = &HCOCOCO Forml.grafica.Line (j * escala, i * escala)-((j + 1) * escala, (

1) * escala), , BF Else

' BORRAMOS CUALQUIER CUADRITO QUE PUDIERA ENCONTRARSE EN ESA POS 3N

Forml.grafica.ForeColor = &HFFFFFF Forml.grafica.Line (j * escala, i * escala)-((j + 1) * escala, (

1) * escala), , BF End If

Next j

sepointer = 0 Next i

Sub

disco-flip ( ) Dim FileData, Msg, NL ' Declare variables. Dim cadena$ Dim Aux-txt$ Forml.MousePointer = 11

1ULEl.BAS - 2 NL = Chr(l0) Define newline. Open "c:fresa.tmp" For Output As #1 ' Open to write file. For i = MAX To 1 Step -1

cadena$ = 1 1 1 '

For k = MAX To 1 Step -1

For j = 1 To MAX

If matriz(j, k, i) > O Then Pintamos el CubiPixel

Else

End If

cadena = cadena + ''1'' cadena = cadena + "O"

Next k Print #1, cadena

Next j Next i Close #1 Close file.

NL = Chr(l0) I Define newline. Open "c:fresa.tmp" For Input As #1 ' Open to read file. For i = MAX To 1 Step -1

For j = 1 To MAX Step 1 Line Input #1, cadena Read a line of data. For k = 1 To MAX Step 1

Aux txt$ = Mid$(cadena, k, 1) If &x txt$ = 11011 Then Pintamos el CubiPixel

mgtriz(j, k, i) = O Else

matriz(j, k, i) = 1 End If

Next k Next j

Next i Close #1 Close file. Kill "c:fresa.tmp" DibujaRebanada pos-z Forml.MousePointer = O

Sub

espera (fin As Long, motor As Integer) inc&

x t Case motor Case 1

Case 2

Case 3

Case 4

Case Else

Select

fin = 8 0 0 0 + fin * esc x * 5 0

fin = 8 0 0 0 + fin * escJ * 50 fin = 8 0 0 0 + fin * esc z * 50

fin = 8 0 0 0 + fin * esc a * 50 fin = 8 0 0 0 + fin * 360

-

-

-

For inc = 1 To fin Step 1

Next inc Sub

S% = DoEvents()

fresado ( )

ULE1.BAS - 3 X% Y% 2% X % Y-% XInuevo% Y nuevo% posición x% posición_Y% posición-2% cadena$ incremento% prueba% ición x = O iciÓn2 = O ición - z = O

-

For z = 1 To 99 prueba = z Mod 2 If prueba = 1 Then

For X = O To 99

Y = Y + 1 While (matriz(X, Y, z) = O ) And (Y < 100)

Wend ' y contiene la verdadera posicion en la matriz de el nuevo punto ' daremos la indicacion de mover el motor que controla a las y has

su posicion Mueve 2, Y, posiciónqr posiciónqr = Y X nuevo = (X + (z + REFERENCIA) / 2) * TAMA PUNTO Y-nuevo = (Y - / 2 + REFERENCIA) * TAMA PÜNTO D3.cortadora.Left = X nuevo Y = O

' m&emos en el eje de las x -

- ' movemos en el eje de las y ' hay que elevar la cortadora ' Y es una variable global que contiene el valor de la anterior Y ' aKora bien Y - nuevo se calculó hace unas lineas y tiene el valor

y en la gráfica If (Y nuevo - Y ) < O Then For-i = Y To-Y nuevo Step -1

Next i

For i = Y To Y nuevo Step 1

Next i

D3.cor~adora~Top = i - D3.cortadora.Height Else

D3.corradoraTTop = i - D3.cortadora.Height End If Y = Y nuevo MÜeve i, X, posición - x posición x = X

Next X 'movemos en el eje de las z

For X = 99 To O Step -1

-

Else

While (matriz(X, Y, z) = O) And (Y < 100)

Wend Y = Y + l

' y contiene la verdadera posicion en la matriz de el nuevo punto ' daremos la indicacion de mover el motor que controla a las y has

su posicion