DISEÑO Y ESADORA - 148.206.53.84148.206.53.84/tesiuami/UAM3437.pdf · - Esquemas de...
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
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
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
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
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 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
? - 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 -
?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
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 - 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
.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