Vista previa del material en texto
INSTITUTO TECNOLOGICO DE ESTUDIOS SUPERIORES DE MONTERREY CAMPUS ESTADO DE MEXICO SISTEMA COMPUTACIONAL PARA LA REALIZACION DE ESQUEMAS NEUMATICOS UTILIZANDO EL SISTEMA DE CASCADA DE MANDO SECUENCIAL TESIS QUE PARA OPTAR EL GRADO DE MAESTRO EN SISTEMAS DE MANUFACTURA PRESENTA ING. JAIPRAKASH RAJARAM PRASAD Asesor: Dr. ALEJANDRO RAFAEL VEGA SALINAS Comité de Tesis: Dr. Cuauhtémoc Sergio Carbajal Fernández Dr. Pedro Grasa Soler Jurado: Dr. Pedro Grasa Soler Dr. Cuauhtémoc Sergio Carbajal Fernández Dr. Alejandro Rafael Vega Salinas Dr. Basilio del Muro Cuéllar Atizapán de Zaragoza, Edo. Méx., Marzo de 1998. Presidente Secretario Vocal Vocal 3 RESUMEN. Actualmente la necesidad de incrementar la competividad en el mercado, se ha vuelto cada día más dificil para cualquier industria. El programa computacional de esta tesis automatiza la generación de circuitos neumáticos para crecer la competitividad de una empresa a un bajo costo. La diferencia principal que existe entre este paquete computacional y entre los diferentes paquetes que simulan un circuito neumático, consiste en que ninguno de los programas comerciales generan ni dibujan los circuitos neumáticos. Este código se basa en el método secuencial, montaje cascada simple y trabaja por medio de la introducción de los datos en forma binaria para que posteriormente se genere el diagrama de movimientos y el circuito neumático. Cabe mencionar que solo se dibuja dicho circuito si se cumple con la condición de cascada simple que significa que el programa no contempla casos de repetitividad, simultaneidad, condiciones de paro de emergencia, etc. Pero es importante recalcar que utilizando las técnicas de programación de dicho código es posible cubrir prácticamente todas las condiciones del método cascada y posteriormente aplicar la programación a otros métodos sistemáticos de generación de circuitos de tecnologías de este índole: eléctrica, hidráulica, mecánica, etc. CONTENIDO. LISTA DE FIGURAS LISTA DE TABLAS ANTECEDENTES OBJETIVO Y PLANTEAMIENTO DEL PROBLEMA JUSTIFICACION INTRODUCCION CAPITULO l. 1.1 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.5.1 1.3.5.2 1.3.5.3 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.4.10 1.4.11 1.4.12 NEUMATICA Introducción Aplicaciones en la neumática Neumática en desarrollo de aplicaciones aplicaciones automatizadas Accionamiento neumático. Manipuladores neumáticos. Comparación de la neumática con energías de otras índole Técnicas de transmisión o energías Características de la transmisión regulada Mantenimientos de las energías Factores adicionales a considerar para la utilización de energía neumática. Características de las energías Características eléctricas Características hidráulicas Características neumáticas Aplicaciones industriales de neumática Agricultura y explotación forestal Industria de protección de energía Explotación minera Industria química Industria petrolífera Industria de plástico Aridos, vidrios Industria metalúrgica Industria de la madera Industria de papel - industria gráfica Industria textil Industria alimenticias 8 10 11 12 14 16 21 22 22 23 24 30 30 32 35 37 37 37 39 41 45 46 47 47 47 48 48 49 49 50 51 52 52 4 1.4.13 1.4.14 1.4.15 1.4.16 CAPITULO 11. 2.1 2.2 2.2.1 2.2.1.1 2.2.1.2 2.2.1.3 2.2.2 2.2.2.1 2.2.2.1.1 2.2.2.1.2 2.2.2.2 2.2.2.2.1 2.2.2.2.2 2.2.2.2.3 2.2.2.2.4 2.2.2.2.5 2.2.2.3 2.3 2.4 2.4.1 2.4.2 2.4.2.1 2.4.2.2 2.4.3 2.4.4 2.4.4.1 2.4.4.2 2.4.4.3 2.4.5 2.4.6 2.4.7 2.5 2.5.1 2.5.2 2.6 2.6.1 2.6.2 2.6.3 2.6.4 Construcción Transporte y trafico Enseñanza y publicidad Construcción de maquinas CIRCUITOS NEUMATICOS. SISTEMA CASCADA. Introducción Elementos de sistemas neumáticos Cilindros Cilindros de simple efecto Cilindros de doble efecto Características técnicas de cilindros neumáticos Válvulas o distribuidores Elección de válvulas neumáticas Vías y posiciones Factores de caudal Grupos de válvulas Válvulas de vías o distribuidores Válvulas de bloqueo Válvulas de presión Válvulas de caudal Válvulas de cierres Localización de válvulas Símbolos gráficos normalizados Realización de esquemas neumáticas Croquis de situación Designación de los elementos Designación por cifras Designación por letras Secuencia Diagrama de movimientos Diagrama de espacio-fase Diagrama de espacio-tiempo Diagrama de mando Trazado de esquemas en neumática Plano de situación Lista de los elementos 53 53 54 54 57 59 60 61 61 63 63 64 64 65 66 66 72 73 73 74 74 75 77 77 78 78 78 80 81 81 82 83 83 84 85 Mandos para equipos neumáticos. Métodos de generación 86 de sistemas de mandos neumáticos Mandos programados Mandos secuenciales Sistema Cascada Conexión paso a paso usando método cascada Limites del montaje en cascada Sistema cascada con movimientos repetitivos de un cilindro Sistema cascada con movimientos simultáneos 87 87 89 89 97 97 98 5 CAPITULO 111. 3.1 3.2 3.3 CAPITULO IV. 4.1 4.2 4.2.1 4.2.2 4.3 4.3.1 4.4 4.4.1 CAPITULO V. 5.1 5.2 5.2.1 5.2.2 5.2.3 5.2.3.1 5.2.3.2 5.2.3.3 5.3 5.3.1 5.3.2 5.3.3 5.3.3.1 5.3.3.2 5.3.3.3 5.4 5.4.1 5.4.2 5.4.3 5.4.3.1 5.4.3.2 5.4.3.3 5.5 5.5.1 5.5.2 5.5.3 5.5.3.1 CODIGO DEL PROGRAMA COMPUTACIONAL Introducción Diagrama de flujo del programa computacional Código del programa USO DEL PROGRAMA COMPUTACIONAL Introducción Pasos generales para utilizar el programa Ejecución del programa neucas Uso del programa Uso del programa-ejemplo 1 Presentación gráfica del programa utilizando Ejemplo 1 y pasos generales. Uso del programa-ejemplo 2 Presentación gráfica del programa utilizando Ejemplo 2 y pasos generales. PRUEBAS Y RESULTADOS Introducción Caso 1 - Cascada simple - Dispositivo para remachar Croquis de situación Planteamiento del problema Resultados del programa computacional neucas Entrada de datos Verificación de datos Circuito neumático Caso 2 - Cascada simple - Marcado de piezas Croquis de situación Planteamiento del problema Resultados del programa computacional neucas Entrada de datos Verificación de datos Circuito neumático Caso 3 - Cascada simple - Dispositivo para doblar Croquis de situación Planteamiento del problema Resultados del programa computacional neucas Entrada de datos Verificación de datos Circuito neumático Caso 4 - Simultaneidad - Dispositivo para cizallar Croquis de situación Planteamiento del problema Resultados del programa computacional neucas Entrada de datos 100 101 116 118 119 119 121 128 129 140 141 152 153 153 154 155 155 155 156 157 157 158 159 159 159 160 161 161 162 163 163 163 164 165 165 166 167 167 6 5.5.3.2 5.6 5.6.1 5.6.2 5.6.3 5.6.3.1 5.6.3.2 CAPITULO VI. 6.1 6.2 BIBLIOGRAFIA Verificación de datos Caso 5 - Repetividad - Dispositivo para embutir Croquis de situación Planteamiento del problema Resultados del programa computacional neucas Entrada de datos Verificación de datos CONCLUSIONES Y PERSPECTIVAS Conclusiones Perspectivas ANEXO A PROGRAMA NEUCAS 167 168 168 169 170 170 170 172 174 176 178 7 8 LISTA DE FIGURAS. Figura 1.1 Gráfico facilidad-longitud de transmisión 33 Figura 1.2 Gráfico facilidad de amplificacion-potencia de la transmisión 34 Figura 1.3 Gráfico facilidad de regulacion-potencia de la transmisión 35 Figura 1.4 Gráfico dificultad de mantenimiento-potencia de la transmisión 36 Figura 2.1 Sección de un cilindro doble efecto 62 Figura 2.2 Sección de válvula 4/2 67 Figura 2.3 Sección de válvula de marcha 71 Figura 2.4 Sección de válvula de accionamiento mecánico - 3/2 71 Figura 2.5 Sección válvula selectora de circuito 72 Figura 2.6 Secciónválvula de simultaneidad 73 Figura 2.7a Tabla de símbolos neumáticos normalizados 75 Figura 2.7b Tabla de símbolos neumáticos normalizados 76 Figura 2.8 Croquis de situación 77 Figura 2.9 Identificación por letras 79 Figura 2.10 Secuencias 80 Figura 2.11 Diagrama de movimientos/Espacio-fase 82 Figura 2.12 Diagrama de movimientos/Espacio-tiempo 82 Figura 2.13 Diagrama de movimientos/Mando 83 Figura 2.14 Esquema de mando de un ciclo rectangular 84 Figura 2.15 División en grupos de una secuencia 90 Figura 2.16 Lineas de grupos con designación de salidas 91 Figura 2.17 Montaje en cascada, forma escalonada 91 9 Figura 2.18 Conexión cascada de dos grupos 92 Figura 2.19 Conexión cascada de tres grupos 93 Figura 2.20 Conexión cascada de cuatro grupos 93 Figura 2.21 Conexión cascada de cinco grupos 94 Figura 2.22 Circuito neumático montaje cascada 96 Figura 4.1 Uso programa - Movimientos de cilindros 122 Figura 4.2 Ejemplo 1 - Diagrama de fases 128 Figura 4.3 Ejemplo 2 - Diagrama de fases 140 Figura 5.1 Croquis de situación Caso 1 153 Figura 5.2 Diagrama de movimientos Caso 1 154 Figura 5.3 Croquis de situación Caso 2 157 Figura 5.4 Diagrama de movimientos Caso 2 158 Figura 5.5 Croquis de situación Caso 3 161 Figura 5.6 Diagrama de movimientos Caso 3 162 Figura 5.7 Croquis de situación Caso 4 165 Figura 5.8 Diagrama de movimientos Caso 4 166 Figura 5.9 Croquis de situación Caso 5 168 Figura 5.10 Diagrama de movimientos Caso 5 169 10 LISTA DE TABLAS. Tabla 2.1 Características de los cilindros neumáticos 63 11 ANTECEDENTES Dentro del campo de la producción industrial, la neumática tiene una aplicación creciente en las más variadas funciones, especialmente en aplicaciones automatizadas. No solamente entra a formar parte en la construcción de máquinas sino que va desde el uso doméstico, hasta la utilización en la técnica de investigación nuclear, pasando por la producción industrial [l]. Por otro lado, la evolución rápida de la industria cada vez está requiriendo más y más la integración de herramientas computacionales dentro del proceso de manufactura con el fin de cumplir con la demanda del mercado, con calidad y eficiencia. 12 OBJETIVO Y PLANTEAMIENTO DEL PROBLEMA. En ésta tesis, se propone automatizar la realización de esquemas neumáticos, utilizando el sistema de cascada de mando secuencial, usando tecnología de herramientas computacionales. El objetivo es hacer un programa computacional, en el cual, usando la secuencia de movimientos de cada cilindro como entrada de datos, se dibuje automáticamente el esquema neumático en ambiente gráfico. Para cumplir con el objetivo se requiere resolver los siguientes pasos, dentro de la programación: 1. Entrada de la secuencia de movimientos en forma binaria. 2. Algoritmo para examinar datos de la entrada (forma binaria) examinar y sacar los grupos. 3. Algoritmo para examinar datos de la entrada (forma binaria) y dibujar el diagrama de movimientos (espacio-fase). 4. Algoritmo para examinar datos de la entrada (forma binaria) y sacar la secuencia de movimientos. 5. Algoritmo para dibujar los cilindros, válvulas y líneas. Pasos 3, 4 y 5 del sistema cascada. 6. Algoritmo para examinar la secuencia de movimientos y dibujar los sensores y las líneas restantes del circuito. 7. Algoritmo para impresión del esquema neumático y del diagrama de movimientos. 13 Este programa solo cubre montaje de sistemas en cascada simple. Con simple se refiere a que cada movimiento de un cilindro origina el siguiente movimiento, es decir, una función origina la siguiente. Este programa no cubre sistema cascada con movimientos repetitivos de un cilindro en el mismo ciclo, sistema cascada con movimientos simultáneos de cilindros, sistema cascada con un cilindro de simple efecto, paro de emergencias y cualquier otro escenario que no se considere simple. Este programa utiliza los siguientes elementos de neumática: Cilindros de doble efecto. Válvulas 4/2 como accionamiento de los cilindros. Sensores. Funciones AND. Válvula de MARCHA. Este programa dibuja esquemas de secuencia de mandos de máximo 5 grupos y mínimo de 2 grupos. Adicionalmente, nada mas contempla máximo 9 movimientos por grupo. Se utilizan máximo 9 cilindros y 18 fases. 14 JUSTIFICACION. En la actualidad, la necesidad de automatizar la producción no afecta únicamente a las grandes empresas, sino también a la mediana y pequeña industria. Para cualquier proceso de producción, se desarrollan métodos que excluyan el trabajo manual y no dependan de la habilidad humana [2]. Incluso la industria artesana se ve obligada a desarrollar métodos de producción racionales que excluyan el trabajo manual [ 1]. La automatización tiene como fin aumentar la competitividad de la industria por lo que requiere la utilización de nuevas tecnologías [3]. Es importante mencionar que dichas nuevas tecnologías son costosas. La extensión de la automatización de forma sencilla en cuanto a mecanismo, y además a bajo costo, se ha logrado utilizando técnicas relacionadas con la neumática, y es empleada en la mayor parte en las máquinas modernas [3]. Cabe mencionar que cualquier automatización es sólo un paso dentro del proceso de la producción industrial [ 1] y no sustituye de ninguna manera el trabajo de ser humano. Más bien, todas la mejoras aplicadas por automatización están encaminadas, al igual que otras muchas, a obtener el máximo provecho con un costo mínimo [I]. El programa computacional propuesto en ésta tesis está enfocada principalmente para la industria pequeña y mediana. Igual que en las empresas grandes, las industrias pequeñas y medianas también requieren aumentar la competitividad, en este mercado de demanda, para sobrevivir y requieren invertir en tecnologías nuevas, pero la mayoría, no cuentan con los recursos económicos. Por lo tanto, son forzados a seguir utilizando la misma tecnología vieja, que no cuenta con la calidad que el mundo de hoy está exigiendo. Este programa computacional ofrece a las industrias pequeñas y medianas la opción de automatizar UN PASO, dentro de sus 15 procesos de la producción, a un costo bajo usando herramientas de la era infonnática para ser más competitivos. Adicionalmente, les ayuda a aumentar la productividad de su industria reenfocando y/o reasignando habilidades humanas a otras áreas de mejora continua. Por otro lado, la industria está evolucionando constantemente en la aplicación de nuevas tecnologías para conseguir los múltiples procesos que en ella se realizan, incorporando automatismos cada vez más sofisticados. Sin embargo, toda tecnología debe apoyarse en bases sólidas [ 4]. En esta automatización propuesta se esta utilizando la tecnología de herramientas computacionales. Igualmente, éste programa computacional también está dirigido a los estudiantes y profesores de escuelas profesionales y técnicas para ser utilizada como una herramienta educativa. 16 INTRODUCCION. La automatización puede ser considerada como el paso más importante del proceso de evolución de la industria del siglo XX, al permitir la eliminación total o parcial de la intervención humana, obteniéndose las siguientes ventajas [3]: Reducción de los costos de mano de obra directa. Uniformidad de la producción y ahorro de material. Aumento de la productividad. Mayor control de la producción, al poder introducir en el proceso, sistemas automáticos de muestreo. Aumento de la calidad del producto final. En todo proceso de automatización se distinguen tres partes: a. Elementos periféricos de entrada, a través de los cuales llega al sistema la información. b. Unidad central de tratamiento de la información. c. Elementos periféricos de salida, que, de acuerdo con las órdenes elaboradas por la unidad central, gobiernan los elementos de potencia. 17 UNIDAD CENTRAL Datos Movirnimtos;. PERIFERICOS p - . DE TRATAMIENTO PERIFERICOS p - DE ; DE Ordenes DE LA Indicaciones . -p ENTRADA p - !" . SALIDA INFORMACION Existen diversas técnicas para la realización de automatismos: la electromecánica, la electrónica, la neumática, etc. [3]. La automatización neumática es la que se realiza usando las propiedades del aire comprimido. Las señales deben traducirse a presencia o ausencia de presión neumática. El tratamiento de las señales es realizado por los distribuidores neumáticos, por lo que las señales de salida son generalmente, posiciones de cilindros neumáticos [3]. Los términos neumático y Neumática provienen de la palabra griega <<Pneuma>>, que significa <<aliento>> o <<soplo>>. La Neumática abarca la totalidad de las aplicaciones de las instalaciones neumáticas. Esta palabra es de uso internacional, aunque en parte se escriba o se pronuncie con ligeras diferencias, ya que en todos los idiomas occidentales hay que remontarse al término original griego [7]. La neumática ofrece ventajas, pero es importante compararla con energías de otras índoles para asegurar que se cumplan los objetivos de la tarea a realizar. 18 Para poder aplicar la energía neumática en la automatización es indispensable diseñar circuitos neumáticos. Para diseñar los circuitos neumáticos se requiere tener un entendimiento muy claro de los elementos básicos, símbolos normalizados y métodos de generación. En nuestro caso particular aparte de utilizar la tecnología neumática, se está utilizando tecnología de herramientas computacionales para automatizar aun más el proceso de producción de una aplicación industrial. Actualmente la manera de trazar circuitos es manual utilizando las técnicas de generación de mandos neumáticos sistemáticos. Existen varias herramientas computacionales para simular circuitos neumáticos pero no se conoce de ninguna que genere el dibujo en sí. En este trabajo se elabora un código de programa, en Visual Basic 3, para dibujar el circuito neumático utilizando sistema cascada simple. Se escogió Visual Basic 3 por la ventaja de amigabilidad que ofrece el paquete. El sistema cascada es un mando secuencial. En un mando secuencial, una función origina la siguiente. Para escribir el programa es indispensable entender los conceptos en detalle de generación de circuitos neumáticos utilizando montaje en cascada simple. El nombre del programa elaborado se denomina NEUCAS. La parte de "NEU" proviene de neumática y la parte de "CAS" proviene de cascada. El programa se identifica como "SISTEMA COMPUTACIONAL PARA GENERAR CIRCUITOS NEUMATICOS USANDO MONTAJE EN CASCADA". 19 El presente trabajo esta organizado de la siguiente manera: En el capitulo uno se compara la energía neumática con otras energías y se presentan aplicaciones. En el capitulo dos se explican los elementos básicos de la neumática, métodos de generación de mandos y sistema cascada. En el capitulo tres se presenta el código y su respectivo diagrama de flujo. En el capitulo cuatro se presenta el uso detallado del programa. En el capitulo cinco se muestra el resultado del programa utilizando casos industriales. En el capitulo seis se concluye y se elaboran perspectivas del objetivo de esta tesis. La automatización industrial, a través de componentes neumáticos y herramientas computacionales, es una de las soluciones más sencillas, rentables y con mayor futuro de aplicación en la industria, debido a que puede aumentar la competitividad de una empresa a un bajo costo. l. NEUMATICA 118UO?'E'CA 21 1.1 INTRODUCCION. Antes de utilizar una herramienta computacional para generar un circuito neumático es importante entender las ventajas de la utilización de la energía neumática. Esto es con el fin de asegurar que el circuito va a cumplir las necesidades del trabajo a realizar. La tecnología neumática es ampliamente usada en aplicaciones automatizadas. Los accionamientos y manipuladores neumáticos pueden generar movimientos mecánicos que se asemejan a movimientos de una mano de un ser humano. La neumática permite construir máquinas especiales de una manera simple, que cumplen las necesidades del trabajo a realizar óptimamente. Por otro lado, antes de inclinarse hacia la energía neumática es indispensable comparar con energías de otras índoles: eléctrica, hidráulica, mecánica, etc. Cada energía ofrecen ventajas y desventajas dependiendo de la necesidad del trabajo. La tecnología neumática ofrece simplicidad y fiabilidad a un costo bajo pero es importante asegurar que el trabajo a realizar va a tener resultados óptimos vía un circuito neumático, sino es esencial utilizar otra energía. 22 1.2 APLICACIONES EN LA NEUMATICA. 1.2.1 NEUMA TICA EN DESARROLLO DE APLICACIONES AUTOMATIZADAS. ¿ Dónde puede ser empleada la neumática? Esta pregunta no puede responderse con exactitud, pues las aplicaciones de la neumática pueden contestarse mejor si se toma como base la función de trabajo a realizar [2]. La tecnología de la neumática juega un papel muy importante en la mecánica desde hace mucho tiempo. Entretanto es incluida cada vez más en el desarrollo de aplicaciones automatizadas [5]. En ese sentido, la neumática es utilizada para la ejecución de las siguientes funciones [5]: • Detección de estados mediante sensores • Procesamiento de información mediante procesadores • Accionamiento de actuadores mediante elementos de control • Ejecución de trabajos mediante actuadores 23 Para controlar máquinas y equipos, suele ser necesario efectuar una concatenación lógica y compleja de estados y conexiones. Ello se logra mediante la actuación conjunta de sensores, procesadores, elementos de accionamiento y actuadores incluidos en un sistema neumático o parcialmente neumático [5]. El progreso experimentado en relación con materiales y métodos de montaje y fabricación ha tenido como consecuencia una mejora de la calidad y diversidad de elementos neumáticos, contribuyendo así a una mayor difusión de la neumática en el sector de la automatización [5]. 1.2.2 ACCIONAMIENTO NEUMATICO. El accionamiento neumático es aplicable a todas las partes de la producción que se caracterizan por sus movimientos lineales. En una máquina-herramienta, el movimiento de giro de la pieza o de la herramienta se produce sólo durante el mecanizado, y quedan un gran número de movimientos lineales necesarios para un proceso completo [2]. Los elementos neumáticos de accionamiento permiten realizar los siguientes tipos de movimientos [5]: • Movimiento lineal • Movimiento giratorio • Movimiento rotativo 24 Tomando como base la función de movimientos, hay que resaltar la extensa gama de elementos sencillos para la obtención de movimientos lineales y rotativos [2]. Los cilindros neumáticos son utilizados con frecuencia como elementos de accionamiento lineal, porque, entre otras razones, se trata de unidades de precio relativamente bajo, de fácil instalación, simples y robustas y, además, están disponibles en los tamaños más diversos [5]. 1.2.3 MANIPULADORES NEUMATICOS Si comparamos la posibilidad de aplicación de la neumática para la manipulación de piezas, y el accionamiento de útiles, se puede responder con exactitud que los elementos neumáticos pueden emplearse de manera racional para la manipulación de piezas, incluso puede decirse que es el campo de mayor aplicación. Sin embargo, en el accionamiento de útiles sus aplicaciones son más limitadas, sobre todo en máquinas con arranque de viruta. También es evidente que, si comparamos los tres grupos de procesos de trabajo, conformación con arranque de viruta, conformación sin arranque de viruta y montaje, el último grupo citado es el que ofrece mayores posibilidades de aplicación [2]. Con la palabra manipulación, hacemos referencia a las diferentes acciones a que está sometido un elemento para que adopte las posicionesdeseadas dentro de un proceso de producción. La palabra manipulación proviene de <<accionar con la mano>>, pero en los procesos de producción la utilizamos aunque la acción se produzca mecánicamente. Naturalmente, esta manipulación se referirá indistintamente a las piezas de trabajo o las 25 herramientas. El maneJo de las herramientas está integrado generalmente en la máquina excluyendo el cambio manual de herramientas. Generalmente, cuando se trata de máquinas corrientes, las herramientas de trabajo están fijas en sus dispositivos de sujeción y de translación. No ocurre lo mismo con las modernas máquinas automáticas de gran capacidad, en las cuales, durante el proceso de producción deben cambiarse las herramientas. Partiendo de un punto de almacenamiento para las mismas se extraen y vuelven a colocar según determinados procesos. También a estas acciones se les denomina manipulación [I]. La mano humana es un elemento de trabajo muy complejo que puede realizar funciones como: asir, ordenar, distribuir, alimentar, posicionar, sacar, trasladar, dentro de sus límites físicos. Un elemento de trabajo mecánico, solamente puede realizar una o dos de estas funciones, y rara vez varias. La consecuencia de esto es que, para obtener un proceso de trabajo automático, son necesarios varios elementos mecánicos de manipulación [2]. En un dispositivo cualquiera, deben montarse tantos elementos de trabajo, como operaciones individuales deban realizar dicho dispositivo. Esta es una de las razones principales, por la cual se utilizan mucho los sistemas neumáticos para la manipulación. Un cilindro neumático, y con él, el elemento de trabajo, pueden montarse directamente donde se precise la fuerza y el movimiento. El cilindro neumático se transforma así en un <<músculo de la mano mecánica>> [1]. Con tres cilindros de dimensiones adecuadas puede llegarse teóricamente hasta cualquier punto dentro de una dimensión espacial determinada. Añadiendo un accionamiento giratorio (cilindro de giro), funcionalmente el conjunto se acerca más al ideal de la mano humana [1]. 26 Para asir un objeto, el ser humano tiene cinco dedos en cada mano, con ellos puede realizar la sujeción de todas las formas posibles. En los sistemas industriales de producción, para esta función basta por regla general un elemento fijo y otro móvil; sólo en algunos casos especiales se necesitan dos y hasta tres elementos móviles [2]. No se trata precisamente de comparar la mano mecánica con las posibilidades de la mano humana, ya que cada aplicación está mas o menos limitada a la forma, tamaño y material de una pieza determinada a manipular. En un sistema mecánico, son posibles generalmente ligeras modificaciones de forma y tamaño, dentro de ciertos límites que dependen en gran parte del recorrido de los elementos de trabajo [1]. Actualmente éstas funciones se realizan fácilmente mediante manipuladores neumáticos, los cuales están constituidos por elementos modulares estándar de diferentes tamaños. Gracias a su sistema modular los manipuladores aportan una solución muy flexible para todos los problemas, ya que permiten [2]: Elegir los módulos únicamente necesarios a las carreras y los grados de libertad requeridos. Una fácil adaptación de la capacidad de la unidad a las necesidades reales. Estos manipuladores pueden ser asociados a controladores electrónicos y a autómatas programables. Realizan diversas operaciones, tales como la alimentación de puestos de trabajo, carga y descarga de máquinas de cadencia rápida o peligrosa, realización de operaciones apremiantes. Estas unidades modulares de manipulación presentan las siguientes ventajas [2]: 27 Proporcionan una importante economía de mano de obra. Aseguran de forma permanente cadencias de trabajo muy elevadas. Permiten una perfecta precisión y repetibilidad de las operaciones, asegurando una calidad constante. Son insensibles a los ruidos e indiferentes a las tareas manuales repetitivas y fatigosas. Se amortizan rápidamente, pues permiten aumentar la productividad y reducir los costos. Aplicación general de la neumática en la técnica de manipulación [5]: • Sujeción de piezas • Desplazamiento de piezas • Posicionamiento de piezas • Orientación de piezas • Bifurcación del flujo de materiales La clásica máquina-herramienta y de conformación está diseñada para una amplia variedad de posibilidades dentro de las funciones de producción. Su potencia, capacidad, dimensionado y realización técnica no se ajustan a una determinada pieza. La construcción de una pieza sencilla mediante una máquina universal, puede producir un costo muy elevado, ya que sólo se utilizan algunas partes de la misma. Por esta razón, la producción en serie tiende al estudio de máquinas especiales, según cada caso, para poder obtener resultados óptimos y económicos. Esto conduce a la construcción de máquinas especiales adaptadas a una pieza determinada, ó bien a algunas piezas similares respecto a su forma, tamaño, material y proceso 28 de trabajo, pennitiendo una producción racional. Sin embargo, no sólo es necesario racionalizar, y con ello automatizar la producción en serie, sino también para pequeñas series y piezas individuales [2]. La neumática simplifica en muchos casos el esfuerzo técnico que implica la realización de máquinas especiales y sistemas auxiliares. Los costos de inversión, relativamente reducidos, son los motivos principales para construir una máquina especial, un dispositivo auxiliar o cualquier tipo de útil para un detenninado trabajo. La mecanización y manipulación de las piezas, así como la automatización en relación con las funciones de un mando común, producen un gran número de estaciones de trabajo completo o parcialmente automáticos, pudiendo llegar a sistemas de producción completamente neumáticos [2]. La fuerza necesana, la velocidad de avance y la exactitud de un movimiento son decisivas para elegir entre la aplicación de un cilindro ·neumático, ó de una unidad de avance hidroneumática bajo una fonna de ejecución detenninada. En la aplicación de sistemas neumáticos para el trabajo de la madera, del plástico, y en la técnica de confonnación en general, se utiliza predominantemente el cilindro neumático como elemento de accionamiento [2]. Las unidades de trabajo con elementos de accionamiento neumáticos, pueden integrarse fácilmente en un proceso de trabajo, mediante el mando neumático. También los accionamientos rotativos eléctricos, pueden incluirse en un proceso automático con mando neumático. Esto ha conducido a la utilización de máquinas de producción automáticas, pudiendo realizarse varias funciones de montaje, y diferentes funciones de mecanizado. También se pueden construir elementos de trabajo neumáticos especiales para un uso específico, incluyéndolos en las máquinas automáticas. Quitando o agregando diferentes unidades de mecanizado o mediante una 29 modificación en la sucesión de las operaciones de trabajo, se obtiene cierta flexibilidad en el sistema de producción [2]. Estas posibilidades son válidas sobre todo para el diseño de nuevos sistemas de producción. Sin embargo, los mismos principios pueden aplicarse al automatizar unidades de trabajo y máquinas ya existentes. El grado de automatización dependerá en muchos casos del presupuesto previsto para la adquisición de material para automatización [2]. Contestando la pregunta¿ Dónde puede ser empleada la neumática?, según hemos visto, hay diversas aplicaciones en donde se puede utilizar la tecnología neumática. La fiabilidad y simplicidad obtenidas son evidentes a un costo bajo. 1.3 COMPARACION DE LA NEUMATICA CON ENERGIAS DE OTRAS INDOLE 1.3.1 TECNICAS DE TRANSMISION O ENERGIAS. Las técnicas de transmisión o energías más corrientes se listan a continuación [2]: Mecánica. Hidráulica. Eléctrica. - Neumática. Electrónica.Neumática de baja presión. 30 La energía neumática no es utilizable en todos los casos de automatización. Las posibilidades técnicas de la neumática están sometidas a ciertas limitaciones en lo que se refiere a la fuerza, espacio, tiempo y velocidad en el proceso de la información. Esta tecnología tiene su ventaja de más importante en la flexibilidad y variedad de aplicaciones en casi todas las ramas de la producción industrial [I]. 31 Toda técnica empleada en automatización presenta ventajas e foconvenientes, teniendo una aplicación limitada. La valoración de todos los factores que conducen a una aplicación debe realizarse cuidadosamente. El aire comprimido como medio, sólo por su naturaleza física impone unos límites que no pueden eludirse. Con la utilización racional de la neumática pueden complementarse, de manera eficiente, otras técnicas e incluso ser sustituidas por ésta [2]. La compresibilidad del aire es una característica que presenta ventajas e inconvenientes según el tipo de aplicación. La lección de la neumática depende de muchos factores, pero fundamentalmente del factor rentabilidad. La utilización óptima del aire comprimido se conseguirá aprovechando las propiedades físicas que posee. Estas mismas propiedades son las que conducen a los límites de utilización de los sistemas neumáticos y que son principalmente debidos a la compresibilidad del aire. Existe otro límite económico, principalmente cuando la aplicación exige fuerzas muy grandes o un notable consumo continuo de aire comprimido. En la práctica es indispensable comparar la energía neumática con otras fuentes de energía [1]. Para ello debe tenerse en cuenta, el conjunto completo del mando, desde la entrada de señales hasta los elementos de trabajo. Los elementos individuales pueden facilitar bastante la elección de una determinada técnica, pero es absolutamente necesario elegir el tipo de energía que mejor cumpla con las exigencias del conjunto. A menudo se comprueba que el elevado coste del aire comprimido no tiene importancia comparado con el rendimiento del equipo. En muchos casos la facilidad de regulación de la fuerza y la velocidad son mucho más importantes que el costo. En otros casos el montaje, el servicio y muy principalmente la seguridad son factores decisivos. Debe considerarse siempre también el factor mantenimiento [ 1]. 32 Los órganos motores de los mandos neumáticos son, generalmente, los cilindros de aire comprimido, obteniéndose en consecuencia accionamiento lineal. En esto reside uno de los principales argumentos para las aplicaciones de la neumática: la fácil generación de los movimientos rectilíneos son órganos intermedios. La utilización de este tipo de accionamiento lineal viene limitado por los requisitos de fuerza, velocidad y longitud de carrera. La fuerza de un cilindro depende del diámetro del émbolo y de la presión de alimentación, quedando limitada alrededor de los 3000 Kp. Respecto a la velocidad, la neumática cumple las exigencias de altas velocidades mejor que otros medios situándonse el campo principal de aplicación entre 0.3 y 1 mis [2]. 1.3.2 CARACTERISTICAS DE LA TRANSMISION REGULADA. Para poder justificar la utilización de la energía neumática empleamos tres de las más importantes características de una transmisión regulada [2]: - Facilidad de transmisión. Facilidad de amplificación. Facilidad de regulación. 33 Si se representa sobre un gráfico los valores en ordenadas y abscisas de un coeficiente . relativo de facilidad y la longitud de transmisión, se observa que tanto la energía eléctrica como la neumática se sitúan en la parte superior de plano así definido. Ver Fig. 1.1 [2]. Fadlldad de la transmisión E N H lm 10m 100m Longitud de transmisión lilg. l.l - Gráfico fadlldad-longltud de transmisión Podemos entonces entrever la posibilidad de obtener sistemas simples y mandados a distancia sin ninguna dificultad [2]. Si hacemos lo mismo con la facilidad de amplificación de un esfuerzo o una velocidad en función de la potencia de la transmisión, la neumática tiene un coeficiente inferior a la hidráulica y la electricidad. Ver Fig. 1.2 [2]. 34 Fadlldad de ampllflcadón E N Potenda (CV) l 10 100 1000 J:i1g. 1.2 - Gráflco facilidad de ampllflcaclón-potenda de la transmisión Dejaremos a la electrónica las amplificaciones de bajas potencias y la hidráulica las altas [2]. Si nos fijamos ahora en la facilidad de regulación, se pueden hacer las mismas observaciones que anteriormente. Sin embargo, conviene resaltar los costos que son los sistemas eléctricos de regulación. Ver Fig. 1.3 [2]. 35 FadUdad de regulación E N Potenda (CV) 1 10 100 1000 F1g. 1.J - Gráflco facilidad de regulactón-potenda de la transmisión 1.3.3 MANTENIMIENTO DE LAS ENERGIAS También, como anterionnente mencionado, debe considerarse el factor mantenimiento. Ver Fig. 1.4. Las dificultades de mantenimiento de una instalación neumática bien diseñada son mínimas para pequeñas potencias, aumentando considerablemente cuando las potencias son elevadas. La detección de averías eléctricas es siempre más dificil por ser menos palpable o visible a nuestros sentidos. Este mantenimiento se hace aún más difícil para la electrónica. La dificultad de mantenimiento se elimina rápidamente en función de los conocimientos que se posean de estos sistemas [2]. Respecto a este punto es necesario valorar las siguientes observaciones [2]: 36 a) Neumática: Con pocos conocimientos se obtienen buenos resultados. El montaje y puesta en servicio de sistemas de mando es simple. b) Oleohidráulica: Ofrece más dificultades que la neumática. c) Electricidad: Se requieren conocimientos profesionales, aparece el peligro de cortocircuito; una conexión equivocada puede destruir los elementos de mando. Dificultad de mantenimiento N H Potenda (CV) 1 10 100 1000 Ftg.1.4- Gráfico dlflcultad de mantenimiento-potencia de la transmisión 37 1.3.4 FACTORES ADICIONALES A CONSIDERAR PARA LA UTILIZACION DE ENERGÍA NEUMATICA Por otro lado, también se deberán tomar en cuenta los siguientes factores para la utilización de la energía neumática [5]: Medios de control preferidos. Equipos ya instalados. Conocimientos técnicos disponibles. Sistemas ya instalados. 1.3.5 CARACTERISTICAS DE LAS ENERGIAS El ultimo punto a considerar para la utilización de la energía neumática son las características de los medios de trabajos o técnicas de transmisión antes mencionados: Mecánica, Hidráulica, Eléctrica y Neumática. Adicionalmente, existen combinaciones de estos medios [5]. 1.3.5.1 Características Eléctricas. Producción de energía: A nivel nacional generalmente, dependiendo de la localización (hidráulica, térmica, atómica) [1]. 38 Almacenaje de energía: La acumulación resulta muy dificil y costosa; en la mayoría de los casos sólo es practicable en cantidades muy reducidas (baterías) [ 1]. Transporte de energía: Fácilmente se puede transportar a distancias ilimitadas [1]. Fugas: Sin conexión con otras piezas no hay pérdida de energía (peligro de muerte con alta tensión) [1]. Coste de la energía: Mínimo coste de energía [1]. Influencias ambientales: Insensible a cambios de temperatura (zona normal material de aislamiento). En zonas peligrosas es necesario un dispositivo de protección contra incendio y explosión [ 1]. Movimiento lineal: Sólo para recorridos cortos, motor lineal [ 1]. Movimiento giratorio: Obtención de movimientos giratorios con elementos mecánicos [1]. Movimiento rotativo: Rendimiento óptimo con accionamiento rotativo [1]. Fuerza lineal: Poca eficacia debido a los elementos mecánicos post conectados, no sobrecargable, gran consumo de energía con marcha en vacío [ 1]. 39 Fuerza rotativa: Bajo momento de giro en la posición de paro, no sobrecargable, pequeño desarrollo de potencia [ 1]. Regulabilidad:Sólo posibilidades reducidas, muy costoso [1]. Manejo: Sólo con conocimientos profesionales, peligro de cortocircuito, una conexión puede destruir los elementos y el mando [ 1]. Ruidos: Los contactores y los electroimanes producen ruido al ser conectados [1]. Tiempos de respuesta de los elementos: > I O ms [6]. Fiabilidad: Insensibilidad a las condiciones ambientales (polvo, humedad) [6]. Dimensiones: Grandes [6]. Tratamiento de las señales: Digital [6]. Componentes: Contactores, relés [6]. 1.3.5.2 Características Hidráulicas. Producción de energía: En grupos moto-bomba estacionarios o móviles, accionados con motores eléctricos, en casos excepcionales con motor de combustión interna. Pequeñas instalaciones 40 también con accionamiento manual. Las instalaciones móviles son excepcionales. Grupo moto- bomba a elección según presión y caudal necesario [1]. Almacenaje de energía: El almacenaje es limitado, con aire como medio auxiliar, sólo es económico en pequeñas cantidades [1]. Transporte de energía: Se puede transportar en líneas hasta aproximadamente 100 metros (pérdida de presión) [1]. Fugas: Pérdida de energía y polución del ambiente debido al aceite (peligro de accidentes) [1]. Influencias ambientales: Sensible a cambio de temperatura, cuando hay fugas existe peligro de incendio [ 1]. Movimiento lineal: Fácil de obtener con cilindros, muy buena regulación con velocidades reducidas [1]. Movimiento giratorio: Fácil de obtener hasta 360° o más mediante cilindros, cremalleras y piñones [ 1]. Movimiento rotativo: Motores hidráulicos en diferentes tipos de construcción, el número de giros es inferior al de motores neumáticos, mejor regulabilidad a velocidades reducidas [1]. 41 Fuerza lineal: Gran desarrollo de potencia debido a la alta presión, sobrecargable hasta el límite de seguridad (válvula de seguridad); para fuerzas estáticas (parado) consumo continuo de energía [ 1 ]. Fuerza rotativa: Momento de giro total, incluso en la posición de paro, mayor consumo de energía, sobrecargable hasta el límite de seguridad (válvula de seguridad) gran desarrollo de potencia [l]. Regulabilidad: Fuerza: Según presión con amplio margen poco dependiente de la carga. Velocidad: Muy buena y constante en trabajos lentos [l]. Manejo: Más dificil que con neumática, seguridad con altas presiones. Líneas de fuga y retomo, problemas de densidad [1]. Ruidos: Con altas presiones, ruido de las bombas y se producen vibraciones en la tubería [l]. 1.3.5.3 Características Neumáticas. Producción de energía: Por medio de compresores estacionarios o móviles, accionados con motores eléctricos o motores de combustión interna. Sistema de compresores a elegir según la presión y el caudal necesario. En todas partes existe aire en cantidades ilimitadas para su compresión [ 1]. Almacenaje de energía: El almacenaje en grandes cantidades es posible sin demasiados esfuerzos. El aire comprimido almacenado se puede transportar (botellas de gas) [l]. 42 Transporte de energía: Fácilmente se puede transportar en líneas hasta aproximadamente 1000 metros (pérdida de presión) [ 1]. Fugas: Aparte de pérdida de carga no existen otros inconvenientes; el aire comprimido se expulsa a la atmósfera [l]. Coste de la energía: Bastante alto comparado con hidráulica y electricidad, un metro cúbico de aire comprimido a 6 bar cuesta entre 0,45 ptas. a 0,90 ptas., según la instalación y rendimiento [l]. Influencias ambientales: El aire comprimido es insensible a los cambios de temperatura. No hay peligro de incendio o de explosión, aún sin medidas especiales de protección. Con gran cantidad de humedad en el aire, elevadas velocidades de flujo y bajas temperaturas ambientales existe el peligro de congelación [l]. Movimiento lineal: Fácil de obtener con cilindros hasta aproximadamente 2000 metros de carrera, gran aceleración y reducción de velocidad aproximadamente 1 O mm/s - 1500 mm/s [ 1 ]. Movimiento giratorio: Con cilindros cremalleras y piñ.ones, es fácil obtener hasta 360° con cilindros giratorios [ 1]. Movimiento rotativo: Motores neumáticos en diferentes tipos de construcción, elevado número de r.p.m., hasta más de 500.000 r.p.m. por minuto sencilla inversión del sentido del giro [1]. 43 Fuerza lineal: Reducida potencia debido a la baja presión sobrecargable hasta el paro, en cuya posición no se consume energía; esfuerzos económicos según presión de aire y tamaño de cilindro de 1 kp-3000 kp. (9,81 N-29430 N) [1]. Fuerza rotativa: Momento de giro total, incluso en la posición de paro sin consumo de aire, sobrecargable hasta el paro sin consecuencias negativas, reducida potencia, mayor consumo de energía con marcha en vacío [ 1]. Regulabilidad: Fuerza: Según presión (válvula reductora de presión) en la zona 1: 1 O pendiente de carga. Velocidad: Por válvula estranguladora o válvula de escape rápido, velocidad constante dificil [ 1]. Manejo: Con pocos conocimientos se obtienen buenos resultados. El montaje y puesta en servicio de sistemas de mando es simple, buen instrumento de enseñanza [1]. Ruidos: Ruidos del aire de escape desagradables; se pueden reducir mucho aplicando silenciadores [ 1]. Tiempos de respuesta de los elementos:> 10 ms en presión normal,> 1 ms en presión baja [6]. Fiabilidad: Insensible a las condiciones ambientales y gran longevidad en presión normal, insensible a las condiciones ambientales, sensibilidad al aire comprimido contaminado en presión baja [6]. Dimensiones: Muy grandes en presión normal, pequeñas en presión baja [6]. 44 Tratamiento de las señales: Digital en presión nonnal, digital analógico en presión baja [6]. Componentes: Distribuidores en presión nonnal, elementos estáticos y dinámicos en presión baja [6]. La energía a utilizar depende altamente de la aplicación industrial. La aplicación define las características de transmisión regulada, medios de control y las características requeridas para la elección entre las energías: mecánica, hidráulica, neumática, eléctrica o mixta. Es indispensable hacer el estudio antes de implementar cualquier sistema que podría usar estas energías. 45 1.4 APLICACIONES INDUSTRIALES DE NEUMATICA. Para dar una idea general de las posibilidades de aplicación de la neumática, exponemos una lista de varios procesos industriales y de posibles aplicaciones en ellos; no obstante esta lista se ve ampliada constantemente debido a la investigación y desarrollo de nuevas tecnologías. Los ejemplos indicados se refieren exclusivamente a aplicaciones de automatización neumática, es decir, la aplicación de elementos de mando y accionamiento neumáticos tales como válvulas, cilindros o unidades de avance. En muchos casos se puede realizar una clasificación generalizada de las aplicaciones, ya que es imposible exponer aplicaciones particulares [l]. En general existen grandes diferencias, puesto que en los diferentes procesos se introdujo la neumática en momentos muy diferentes. Un criterio muy importante es la existencia de compresor. Si existe, la elección del sistema neumático tiene muchas más posibilidades. Esto es especialmente importante para procesos de especialización no técnicos, tales como la agricultura, jardinería, etc. En la construcción de máquinas, la existencia de un compresor desaparece como criterio básico. Aquí, se encuentran naturalmente el mayor número de aplicaciones, similares en muchos casos [l]. 46 1.4.1 AGRICULTURA Y EXPLOT ACION FORESTAL. Agricultura: Dispositivos oscilantes, de elevación y giratorios en maqumana agrícola, para la protección de plantaciones, elevadores de sacos y otros medios auxiliares para carga y descarga [ 1]. Industria agropecuana: Distribución y alimentación controlada de piensos, extracción de estiércol, dispositivos de clasificación para huevos, instalaciones de ventilación, esquilado, aparatos de sacrificio [ 1]. Industriasforrajeras: Aparatos para la manipulación de forrajes, y material de embalaje, dispositivos de dosificación y mezcla, unidades para almacenaje en silos, dispositivos de control [1]. Explotación forestal: Instalaciones de control para almacenes [1]. Jardinería: Dispositivos de ventilación para invernaderos, aparatos de corte, dispositivos de clasificación para fruta y verdura [l]. 47 1.4.2 INDUSTRIA DE PROTECCION DE ENERGÍA. Centrales eléctricas: Dispositivos de ventilación para edificios de calderas, correderas telemandadas, mandos de interruptores neumáticos [ 1]. Centrales nucleares: Entrada y salida de barras de combustible y dispositivos de frenado, cierres de compuertas, dispositivos de control y de medición [1]. Abastecimiento de agua: Control de nivel y servomecamsmos de corredera, accionamiento de válvulas y de rejillas en instalaciones depuradoras y de suministro [1]. 1.4.3 EXPLOTACION MINERA. Dispositivos auxiliares para la explotación minera de superficie y subterránea [l]. 1.4.4 INDUSTRIA QUIMICA. Dispositivos para cierre de tapas, instalaciones de dosificación, accionamiento de rodillos en mezcladores de laboratorio, dispositivos de elevación y descenso para baños, 48 accionamiento de compuertas, mandos de balanzas, técnica de embalaje, regulaciones de nivel, dispositivos de regulación de procesos [1]. 1.4.5 INDUSTRIA PETROLIFERA. Dispositivos auxiliares para fábricas y laboratorios, similares a los de la industria química [ 1]. 1.4.6 INDUSTRIA DE PLASTICO. Dispositivos de mando para el transporte y la distribución de material fluido, accionamiento de válvulas y cierre de silos [ 1]. Fabricación de piezas de plástico: Ajuste de los rodillos de la calandra, accionamiento de cuchillas, dispositivos de cierre para embutición profunda, dispositivos de prensado y soldadura, control de avance de cintas, dispositivos de confonnación, encolar, accionamiento de dispositivos de seguridad tales como ventanas y puertas en máquinas e instalaciones, moldeadoras, dispositivos de corte a medida [1]. Fabricación de piezas de goma: Dispositivos de seguridad, accionamiento de mando y de trabajo para dispositivos encadenados de transporte y de producción, 49 dispositivos de cierre en mezcladores e instalaciones de vulcanización, dispositivos de control [1]. 1.4.7 ARIDOS, VIDRIO. Aridos, minerales: Accionamiento de avance para sierras [1]. Materiales para la construcción: Accionamiento de moldes, cierres de silos, dispositivos de alimentación en lijadoras, multivibradores contra la formación de atascos en depósitos de arena, cemento y sustancia adicionales en silos, instalaciones de transporte, accionamiento de puertas en hornos para tejas y compuertas de distribución [ 1 ]. Vidrio, cerámica, porcelana: Accionamiento de crisoles, cierres de silos, máquinas de decoración [ 1]. 1.4.8 INDUSTRIA MET ALURGICA. Siderurgia: Dispositivos auxiliares en laminadoras, accionamiento para máquinas separadoras, dispositivos para poner flejes [ 1]. 50 Metalúrgica-materia pnma: Dispositivos auxiliares en horno de fusión, dispositivos de sujeción y de accionamiento en cizallas y sierras, dispositivos de atar rollos de alambre, aparatos para marcar [1]. Fundición: Moldeadoras, dispositivos para la extracción de hoyos, dispositivos de transporte y almacenamiento, máquinas de desbarbado, cierres de lingoteras, dispositivos de accionamiento de cuchara, accionamiento auxiliar en máquinas de moldeo, mandos de puertas en hornos [ 1]. Construcción metálica y en acero, carpintería metálica: Dispositivos auxiliares de montaje, dispositivos de estampado, de corte y de rebordeado, accionamiento para remachadoras. Chatarras: Aplanador de chatarra, instalaciones de embalar virutas y desperdicios, avances para el transporte de viruta [ 1]. 1.4.9 INDUSTRIA DE LA MADERA. Desplazamiento de rodillos en sierras alternativas, accionamiento en sierras tronzadoras, prensas de bastidor, dispositivos de alimentación [ 1]. Industria de muebles: Accionamiento de alimentación y de montaje pa~a piezas de herraje, dispositivos de sujeción, medios auxiliares de montaje, prensas de bastidoras, 51 dispositivos de avance de taladrado, dispositivos para cortar chapa de madera, mandos para el transporte de placas, dosificación de cola, dispositivos para prensas de moldeo y de sujeción , dispositivos de encolar [ 1]. Máquinas para madera: Accionamiento de transmisión en copiadoras, dispositivos para el fresado de perfiles. Accionamiento longitudinal de taladrar dispositivos de transporte [1]. 1.4.10 INDUSTRIA DEL PAPEL-INDUSTRIA GRAFICA. Fabricación de papel: Dispositivos para el desplazamiento de rodillos y tensores en máquinas productoras de papel, dispositivos de apilar [1]. Manipulados de papel y de cartón: Dispositivos de transporte, dispositivos de sujeción, de corte, de plegado y de prensado, dispositivos de empaquetado, accionamiento de prensas de recortes, accionamiento de dosificadores de grapas, control de cinta [ 1 ]. Industria de artes gráficas: Accionamiento para máquinas estampadoras y de serigrafia, dispositivos de acuñación, dispositivos auxiliares en lugares de accionamiento manuales [1]. 52 1.4.11 INDUSTRIA TEXTIL. Hilandería y tejidos: Accionamiento de válvulas para instalaciones de limpieza, dispositivos de ventilación [ 1]. Industria de la confección: Dispositivos auxiliares máquinas de cocer, dispositivos de apilado y transporte, dispositivos de corte [ 1]. Bordados y tejidos en lana: Dispositivos para enrollar ovillos, dispositivos de prensado, programación de muestras mediante programadores neumáticos y alimentación de los hilos con cilindros, dispositivos de corte [ 1]. Cordelería: Mandos y accionamiento para máquinas de prensado, en la producción de cordeles [ 1]. 1.4.12 INDUSTRIA ALIMENTICIAS. Molinos: Mandos de cierres de silos, mandos dosificadores para balanzas, máquinas de empaquetado [ 1]. Productos lácteos: Dispositivos de envases, empaquetadoras múltiples, dispositivos moldeadores de bolsas y de cierre [l]. 53 Carnes y pescados: Aparatos de sacrificio, dispositivos de transporte, dispositivos de selección de conservas, de cierre y de control, empaquetador colectivo [1]. Industria de bebidas: Dispositivos de transporte y selección de botellas, dispositivos de control de cierres, máquinas de etiquetar, dispositivos de llenar barriles y botellas, dispositivos de dosificación [ 1]. 1.4.13 CONSTRUCCION. Mandos de cierres de silos para material de construcción, mandos para mezcladores según peso, prensas moldeadoras para bloques de materiales sintéticos, .dispositivos de transporte para hornos de ladrillos y la industria de materiales prefabricados, instalaciones de dosificación para material de construcción y asfalto, instalaciones para pintar a pistola [ 1]. 1.4.14 TRANSPORTE Y TRAFICO. Dispositivos de frenado para vehículos sobre carriles, accionamiento de puertas correderas en vehículos de transporte, mandos de cierre para difusores, bloqueo, 54 dispositivos en frenos de emergencia, accionamiento y mandos de barreras, aparatos de señalización y pintado de carreteras [ 1]. 1.4.15 ENSEÑANZA Y PUBLICIDAD. Mandos para multivisión, dispositivos de accionamiento para pantallas y pizarras, modelos de demostración, modelos de enseñanza para mandos y procedimientos lógicos, visualizadores de ferias [ 1 ] . 1.4.16 CONSTRUCCION DE MAQUINAS. En este apartado en dónde la neumática encuentra las mayores posibilidades de aplicación. Se puede decir que a cualquier máquina se le pueden aplicar elementos neumáticos. Las aplicaciones de la neumática en la construcción de máquinas se pueden englobar en dos grupos principales: manipulación y producción [2]. Dentro de cada uno de estos dos grupos generales, las funciones de trabajo a realizar son muy variadas [l]: Máquina de soldaduraMáquina de material de construcción Máquina para vidrio y cerámica Máquina de imprimir y papelera Máquina de fundición Aparejos y medios de transporte Máquinas para trabajar madera Máquinas agrícolas Hornos industriales - Instalaciones aerotécnicas Máquinas de ensayo Máquinas embaladoras Balanzas Máquinas herramientas Taladrar Tornear Fresar Bruñir Lapilar Vaciar Escariar Aserrar Máquina de conformación Máquinas elaboradoras de plástico Ensambladora 55 2. CIRCUITOS NEUMATICOS. SISTEMA CASCADA. 57 2.1 INTRODUCCION. Cada tecnología se caracteriza por sus particularidades y propiedades fundamentales bien precisas de sus elementos. Conocer las características de dicha tecnología es indispensable para el diseño de circuitos funcionales. Para elaborar un circuito neumático es importante saber primero los elementos básicos que consisten de válvulas, cilindros y canalizaciones. El uso de los símbolos gráficos normalizados garantiza que el dibujo lo entiendan todos los técnicos de mandos neumáticos. Para comprender las particularidades de la tecnología neumática, es indispensable conocer las siguientes características: Croquis de situación. Reglas para designación de los elementos. Secuencia. Diagrama de movimientos. Elementos complementarios. Plano de situación. 58 Finalmente, pueden indicarse dos posibilidades generales para dibujar esquemas: 1) El método llamado <<intuitivo>>, a menudo calificado también de método convencionales o de tanteo practico. 2) Métodos sistemáticos basados en recomendaciones establecidos. En este capitulo se reseñan los conceptos básicos para poder dibujar el circuito neumático utilizando método sistemático: MONTAJE EN CASCADA. Cabe mencionar que se detallan nada mas conceptos necesarios que se utilizan para el diseño del programa computacional, pero si se presentan de manera general los conceptos básicos de la neumática. Esto es debido a que es muy importante entender todos los pasos y procesos de realización de esquemas neumáticos, para poder automatizar el trazado de los circuitos, utilizando herramientas computacionales. 59 2.2 ELEMENTOS DE SISTEMAS NEUMATICOS Los elementos principales que integran una automatización neumática se pueden clasificar en cuatro grupos principales [2]: 1) Fuentes de energía. 2) Organos operativos. 3) El cerebro. 4) Canalizaciones. Haciendo una relación directa a los elementos básicos de neumática: 1) Fuentes de energía 7 Neumática [2]. 2) Organos operativos 7 Cilindros [2]. 3) El cerebro 7 Válvulas de vías o distribuidores, válvulas de bloqueo, válvulas de presión, válvulas de caudal y válvulas de cierre [8]. 4) Canalizaciones 7 Conexiones de aire [2]. 60 2.2.1 CILINDROS Los cilindros neumáticos son, por regla general, los elementos que realizan el trabajo. Su función es la de transformar la energía neumática en trabajo mecánico de movimiento rectilíneo, que consta de carrera de avance y carrera de retroceso [3]. Generalmente, el cilindro neumático está constituido por un tubo circular cerrado en los extremos mediante dos tapas, entre las cuales se desliza un émbolo que separa dos cámaras. Al émbolo va unido un vástago que, saliendo a través de una o ambas tapas, permite utilizar la fuerza desarrollada por el cilindro en virtud de la presión del fluido al actuar sobre las superficies del émbolo [3]. Los dos volúmenes de aire en que queda dividido el cilindro por el émbolo reciben el nombre de cámaras. Si la presión de aire se aplica en la cámara posterior de un cilindro, el émbolo y el vástago se desplazan hacia adelante ( carrera de avance). Si la presión de aire se aplica en la cámara anterior del cilindro, el desplazamiento se realiza en sentido inverso ( carrera de retroceso). Existen diferentes tipos de cilindros neumáticos. Según la forma en que se realiza el retroceso del vástago, los cilindros se dividen en dos grupos. Cilindros de simple efecto Cilindros de doble efecto 61 2.2.1.1 Cilindros de simple efecto El cilindro de simple efecto sólo puede realizar trabajo en un único sentido, es decir, el desplazamiento del émbolo por la presión del aire comprimido tiene lugar en un solo sentido, pues el retomo a su posición inicial se realiza por un muelle recuperador que lleva el cilindro incorporado o bien mediante la acción de fuerza exteriores. En la practica existen varios tipos. Los mas empleados son los cilindros de émbolo. El movimiento de trabajo es efectuado por el aire a presión que obliga a desplazarse al émbolo comprimiendo el muelle y, al desaparecer la presión, el muelle hace que regrese a su primitiva posición de reposo. Por eso los cilindros de simple efecto se utilizan cuando el trabajo debe realizarse en una sola dirección. Hay que tener presente que existe aire a la presión atmosférica en la cámara opuesta, pero puede escaparse a la atmósfera a través de un orificio de escape. 2.2.1.2 Cilindros de doble efecto Al decir doble efecto se quiere significar que tanto el movimiento de salida como el de entrada son debido al aire comprimido, es decir, el aire comprimido ejerce su acción en las dos cámaras del cilindro, de esta forma puede realizar trabajo en los dos sentidos del movimiento [3]. El campo de aplicación de los cilindros de doble efecto es mucho más extenso que el de los cilindros de simple efecto; incluso si no es necesario ejercer una fuerza en los dos sentidos, el cilindro de doble efecto es preferible al cilindro de simple efecto con muelle de retomo incorporado [3]. 62 El cilindro de doble efecto se construye siempre en forma de cilindro de émbolo y posee dos tomas para el aire comprimido situadas a ambos lados del émbolo. Al aplicar aire de presión en la cámara posterior y comunicar la cámara anterior con la atmósfera a través de válvula, el cilindro realiza la carrera de avance. La carrera de retroceso se efectúa introduciendo aire de presión en la cámara anterior y comunicado la cámara posterior con la atmósfera, igualmente a través de una válvula para la evacuación del aire contenido en esa cámara de cilindro [3]. Ver Figura 2.1. Para una presión determinada en el circuito, el movimiento de retroceso en un cilindro de doble efecto desarrolla menos fuerza que el movimiento de avance, ya que la superficie del émbolo se ve ahora reducida por la sección transversal del vástago. Normalmente, en la practica no se requieren fuerzas iguales en los dos movimientos opuestos [3]. Figura 2.1 Sección de un cilindro doble efecto. 63 2.2.1.3 Características técnicas de cilindros neumáticos. La lista que se incluye a continuación ofrece una noción general sobre los datos característicos de los cilindros neumáticos [5]: Diámetro Desde 6 hasta 320 mm Carrera Desde 1 hasta 2000 mm Fuerza Desde 2 hasta 50000 N Velocidad del émbolo Desde 0.02 hasta 1 mis Tabla 2.1- Características de los cilindros neumáticos 2.2.2 V ALVULAS O DISTRIBUIDORES. Las válvulas de control de dirección, mas conocidas en la practica como válvulas distribuidoras, son las que gobiernan el arranque, paro y sentido de circulación del aire comprimido. La misión que se encomienda a los distribuidos dentro de un circuito de automatización es la de mantener o cambiar, según unas ordenes o señales recibidas, las conexiones entre los conductos a ellos conectados, para obtener unas señales de salida de acuerdo con el programa establecido [3]. Simultáneamente, los distribuidores actúan transductores o como amplificadores, ya que controlan una potencia neumática con otra menor, también neumática (amplificación), o de otra naturaleza: eléctrica o mecánica (transducción y amplificación) [3]. 64 2.2.2.1 Elección de válvulas neumáticas. Se ha de destacar que en general, salvo aplicaciones muy particulares, los distribuidores neumáticos no trabajan en forma proporcional sinoque lo hacen en forma todo o nada, lo que significa que permiten el paso de aire o lo impiden. Por lo tanto, los distribuidores proporcionan señales discretas, por lo que los automatismos en los que intervienen son digitales. Para llevar a cabo la elección de una válvula neumática es conveniente recurrir a ciertos criterios de elección, los cuales pueden abarcar los siguientes conceptos [3]: Número de vías y posiciones. Características de caudal. 2.2.2.1.1 Vías y posiciones. Se entiende por número de vías el número máximo de conductos que pueden interconectarse a través del distribuidor. El número de posiciones es el de conexiones diferentes que pueden obtenerse de manera estable entre las vías del distribuidor [3]. Las válvulas de vías se designan en los catálogos de los fabricantes por el número de las vías controladas y de las posiciones de maniobra estables. Así, una válvula 3/2 vías quiere decir que posee tres vías y dos posiciones de maniobra. Hay que observar que la primera cifra es siempre indicativa del número de vías, indicando la segunda el número de posiciones [3]. 65 Según DIN 24300, las válvulas se identifican así [3]: p = Alimentación de aire comprimido. A,B,C = Salidas de trabajo. R, S, T = Escape de aire. X,Y,Z = Conexiones de mando. Según normas CETOP, las válvulas se identifican así [3]: 1 = Alimentación de aire comprimido. 2y4 = Salidas de trabajo. 3y5 = Escape de aire. 12 y 14 = Conexiones de mando. 2.2.2.1.2 Factores de Caudal. La relación entre caudal y presiones de entrada y salida influye en la velocidad y la fuerza de los cilindros. Aunque entre los diámetros de las entradas roscadas y el caudal de una válvula distribuidora existe una relación directa, lo cual permite hacerse una idea del caudal que admite tal distribuidor, no es un procedimiento aconsejable considerar la elección de un distribuidor basándose únicamente en los racores del mismo, ya que en realidad puede suceder que dos válvulas distribuidoras de función idéntica y con los mismos racores de entrada, tengan diferentes pasos internos, así como distintas resistencias a la circulación del fluido por su interior. Evidentemente, tal elección no permite comparar distribuidores de diferentes fabricantes 66 o diferentes gamas ya que, naturalmente, no existe ninguna relación matemática entre los pasos internos de un distribuidor y el paso de rosca de sus vías [3]. 2.2.2.2 Grupos de válvulas. 2.2.2.2.1 Válvulas de vías o distribuidores. Estas válvulas son los componentes que determinan el camino que ha de tomar la corriente de aire [8]. Su función es la de suministrar aire directamente a los actuadores neumáticos y permitir igualmente escape [3]. La designación de una válvula distribuidora depende de la cantidad de orificios activos y de las posiciones de trabajo [8]. Tipos de válvulas de vías coinunes. Válvulas 2/2 - Esta válvulas dificilmente pueden llamarse distribuidores, ya que de hecho solo abren y cierran un conducto. Tienen un orificio para la entrada de aire y otro para la utilización. Solo admiten dos posiciones: vías cerradas o vías abiertas [3]. Válvulas 3/2 - Una válvula de tres vías consta de un orificio de entrada, otro de salida y un tercer orificio para la descarga del aire. El accionamiento de la válvula comunica la entrada la entrada con la salida, quedando el escape cerrado. Al retomar la válvula a su posición inicial, se cierra la entrada de aire y se comunica la salida con el escape [3]. 67 Válvulas 4/2 - La válvula de cuatro vías consta de un orificio para la entrada, dos salidas para la utilización y un escape [3]. A R B l l l z l l p y FIGURA 2.2 Sección de Válvula 4/2. Válvulas 5/2 - La válvula de cinco vías consta de un orificio para la entrada, dos salidas para la utilización y los dos escapes correspondientes. Todas las válvulas de cinco vías son de émbolo deslizante. Cada desplazamiento de este comunica la entrada con una u otra salida, quedando la otra salida conectada exterior mediante el escape correspondiente [3]. Válvulas 3/3, Válvulas 4/3, Válvulas 6/3 68 Accionamiento de los distribuidores. Una característica importante de toda válvula es su clase de accionamiento debido a que, de acuerdo con ello, dentro de la cadena de mando de un equipo neumático es el elemento emisor de señal, órgano de control o de regulación. Los accionamientos comprenden de dos mecanismos, el de mando y el de retomo, que pueden ser distintos o iguales. Los retornos pueden ser automáticos, entrando en función al cesar la acción contraria [3]. Se debe tener siempre presente que, para cambiar el estado de un distribuidor, es preciso que se ejerza una acción en un solo extremo del distribuidor. Esta observación es muy importante en el caso de trabajar con distribuidores de doble accionamiento piloto, pues en ellos por error de diseño, puede darse el caso de que tenga presión de piloto en los dos extremos, lo que inutiliza el circuito [3]. De una manera general podemos dividir los accionamientos en: Accionamiento mecánico- Tipos de accionamientos mecánicos [8]: Leva. Muelle . • Rodillo. Rodillo escamoteable. 69 Accionamiento por fuerza muscular - Por medio de este mando es posible supeditar una acción neumática a lo ordenado por el operario que se encarga de accionarla. Entre estos accionamientos figuran todos los que son realizados con la mano o con el pie [3]. Tipos de accionamientos musculares [8]: General. Pulsador. Palanca. Pedal. Accionamiento neumático - Estos accionamientos utilizan aire de presión; se utilizan en accionamientos a distancia. En el mando a distancia de un distribuidor el elemento emisor de seriales esta separado del punto de accionamiento. El accionamiento neumático puede realizarse por impulso de aire a presión - pilotaje positivo - o por reducción de la presión - pilotaje negativo- [3]. Tipos de accionamientos neumáticos [8]: Por presión. Por depresión. Por presión diferencial. Servopilotaje. Accionamiento eléctrico - Por medio de este mando se subordina una acción neumática por el paso de la corriente a través de un electroimán. Las válvulas 70 provistas de este sistema de mando reciben el nombre de válvulas magnétic_as o electro válvulas [3]. Tipos de accionamientos eléctricos [8]: Electroimán con un solo arrollamiento. Electroimán con dos arrollamientos de acción en un mismo sentido Electroimán con dos arrollamientos de acción reciproca. Construcción de válvulas distribuidoras utilizando válvulas de vías y accionamientos. Válvulas de asientos o MARCHA - El principio de las válvulas de asiento asegura un funcionamiento sin coincidencia con el escape, es decir, durante el proceso de conmutación el escape de aire se cierra antes de que pueda pasar el aire que entra [3]. En estas válvulas, los empalmes se abren y cierran por medio de bolas, discos, placas o conos [8]. Las válvulas de asiento plano son mas utilizadas para ofrecer mejores condiciones de estanqueidad. Pueden estar construidas como válvulas de 2/2, 3/2 y 4/2 vías. Sin accionamiento, estas válvulas se mantienen en posición normalmente cerrada, provocada por el muelle de retroceso. Se puede utilizar accionamiento por fuerza muscular [3]. !11!! • .. • ' Figura 2.3 Sección de válvula de marcha - 3/2. 71 Válvulas de accionamientos mecánicos o SENSORES - Son necesarios en todas aquellas partes en las que la válvula deba ser accionada mediante un órgano mecánico del equipo, por ejemplo: levas en el vástago de un cilindro, carros de las maquinas, etc. A veces las válvulas con este dispositivo de mando actúan como finales de carrera. En estos accionamientos habrá que tener en cuenta una serie de precauc10nes para prever la protección de los mecanismos de mando del distribuidor [3]. Figura 2.4 Sección de válvula de accionamiento mecánico - 3/2.72 Se pueden construir diversos tipos de válvulas, aunque no se cubren en este capitulo. 2.2.2.2.2 Válvulas de bloqueo. Son elementos que bloquean el paso del caudal preferentemente en un sentido y lo permiten únicamente en el otro sentido. La presión del lado de salida actúa sobre la pieza obturadora y apoya el efecto de cierre hermético de la válvula [8]. Válvulas antirretomo. Válvula selectora de circuito o elemento OR - Aísla las señales emitidas por válvulas de señalización desde diversos lugares e impide que el aire escape por una segunda válvula de señalización. f - Figura 2.5 Sección Válvula Selectora de Circuito. Válvula de escape rápido. Válvula de simultaneidad o elemento AND - Se utiliza principalmente en mandos de enclavamiento, funciones de control y operaciones lógicas. 73 Figura 2.6 Sección Válvula de Simultaneidad. 2.2.2.2.3 Válvulas de presión. Estas válvulas influyen principalmente sobre la presión, o están acondicionadas al valor que toma la presión [8]. Válvulas de regulación de presión. Válvulas de limitación de presión. Válvulas de secuencia. 2.2.2.2.4 Válvulas de caudal. Estas válvulas influyen sobre la cantidad de circulación de aire comprimido; el caudal se regula en ambos sentidos de flujo [8]. Válvulas de estrangulación. Válvulas de restricción de turbulencia. Válvulas de estrangulación regulable. 74 Válvulas de estrangulación de accionamiento mecánico, actuando contra la fuerza de un muelle. 2.2.2.2.5 Válvulas de cierres. Son elementos que abren o cierran el paso del caudal, sin escalones [8]. Grifo de cierre. 2.2.2.3 Localización de válvulas. Para la localización de válvulas o distribuidores en máquinas o mecanismos, deben tenerse en cuenta los siguientes puntos [3]: Las válvulas de vías deben de montarse lo más próximos posible a los cilindros [3]. La válvula con accionamiento o de fin de carrera viene fijada por el punto y la manera en que han de ser controlados [3]. La colocación de los distribuidores auxiliares (presión, caudal, cierre) es independiente, teniendo cuidado, sin embargo, de evitar las longitudes innecesarias de tubería [3]. 75 2.3 SIMBOLOS GRAFICOS NORMALIZADOS. Para desarrollar sistemas neumáticos, es necesano recumr a símbolos gráficos normalizados que representan elementos y esquemas de distribución. Los símbolos aplicados en la neumática corresponden a la norma industrial DIN ISO 1219 "Símbolos de sistemas y equipos de la técnica de fluido" [5]. En la Figura 2.7 a y b se presentan los símbolos utilizados en el programa computacional. VALVULAS DE ASIENTO 3/2 2 Normalmente Cerrado. N ormlllm ente Abierto. V ALVULAS DE VIAS 4/2 CANALIZACIONES é Alimentación Permanente Escape Canalizado Canalización Figura 2.7a Tabla de símbolos neumáticos normalizados. CR.INDRO DE DOBLE EFECTO. V ALVULAS DE ACCIONAMIENTO MECANICO-RODILLO 3/2 ~ Qw 1 J 1 3 N ormalmmte Cerrado. N ormlllmmte Alllerto. VALVULA DE SIMULTANEIDAD V ALVULA SELECTORA DE CIRCUITO Figura 2. 7b Tabla de símbolos neumáticos normalizados. Para mas detalles, consultar las siguientes normas [3]: DIN ISO 1219. ISO: DP5784. CETOP: RP 33. 76 77 2.4 REALIZACION DE ESQUEMAS NEUMATICAS La base de todo equipo neumático de mando realizado en la práctica es el plano o esquema. Al igual que el arquitecto determina con unos planos la forma y las dimensiones de un edificio, el técnico de mando determina en un esquema el contenido de un equipo neumático. En este plano no se consideran las longitudes de las tuberías de unión, sino que se considera la interrelación mutua de los elementos, funciones y magnitudes [2]. 2.4.1 CROQUIS DE SITUACION. Se recomienda en todos los casos, confeccionar un croquis de situación de los elementos partiendo del planteamiento del problema. Esto es para comprender mejor la acción de los elementos de trabajo, y el funcionamiento del mando [9]. Ver figura 2.8 Figura 2.8 Croquis de situación. 2.4.2 DESIGNACION DE LOS ELEMENTOS. Dos tipos de designación han resultado ser favorables y se encuentran a menudo [9]: Designación por cifras. Designación por letras. 2.4.2.1 Designación por cifras. 78 Existen diferentes posibilidades en la identificación por cifras, utilizándose aquí dos sistemas [9]: a) Numeración continua -Es recomendable para los mandos complejos y, sobre todo, cuando el método b) no es aplicable, en razón de coincidencias. b) La identificación se compone de un numero de grupo y numeración continua en el interior del grupo. Para mayor detalle referirse a bibliografia. 2.4.2.2 Designación por letras. Los elementos de trabajo se identifican por letras mayúsculas y los fines de carrera por minúsculas, numeradas en función de su posición respecto al cilindro que los acciona [9]. La figura 2.9 muestra un ejemplo. 79 A 11 al 1 Figura 2.9 Identificación por letras. A, B, C, . . . . . . . . . . . . . . . Elementos de trabajo. aO, bO, cO........ ..... Captadores de información colocados en la posición de vástago entrado. al, bl, el............ Captadores de información colocados en la posición final de vástago salido. La ventaja de este tipo de identificación consiste, en que de inmediato puede decirse, que órgano de señal queda accionado, cuando un cilindro pasa a una determinada posición. Así es que, por ejemplo, al movimiento A+ le da una señal el final de carrera al y al movimiento B- le da señal el final de carrera bO [9]. Queda indicar además, que también existe la posibilidad, de utilizar, como en la electricidad, una combinación de cifras y letras para la identificación de los elementos. 80 2.4.3 SECUENCIA. Usando el croquis de situación, se requiere investigar la fonna en que puede conseguirse una secuencia dada. Para ello no es necesario considerar detalles, tales como, tiempos de respuesta, regulación de velocidad de los cilindros, y el tipo de trabajo a realizar por ellos. Tampoco se consideran las exigencias de construcción del mecanismo, sino que el propósito real es encontrar las combinaciones correctas entre un número de movimientos de entrada y salida [2]. Ejemplos de secuencias. Ver figura 2.10. Marcha, A+, B+, A-, B- Marcha, A-, B+, A+, B- Marcha, A+, B+, C+, A-, B-, C- Figura 2.10 Secuencias 81 2.4.4 DIAGRAMA DE MOVIMIENTOS Las posiciones de los vástagos en las diferentes etapas de la secuencia pueden indicarse por medio de tablas o diagramas. Cualquiera que sea el sistema escogido, ambos presentan la secuencia de un modo más sencillo de entender que si se explica por palabra [2]. A continuación se presentan tres tipos de diagramas [9]: a) Diagrama espacio-fase. b) Diagrama espacio-tiempo. c) Diagrama de mando. Dependiendo de la complejidad del mando a realizar se utiliza uno u otro diagrama [2]. 2.4.4.1 Diagrama de espacio-fase. Aquí se representa el ciclo de un elemento de trabajo, quedando en función de las fases respectivas (fase: cambio de estado de cualquier unidad operatoria) anotado el espacio recorrido. Cuando para un mando existen varios elementos de trabajo, quedan representados estos de la misma manera y dibujados uno bajo el otro. La relación queda establecida por las fases [9]. Ver figura 2.11. 82 Sale 1 2 3 4 5=1 Vl N 1 CILINDRO A Entra 1 2 3 4 5=1 Sale 1 Vl N CJLINDROB Entra r Espacio Fases Figura 2.11 Diagrama de movimientos/Espacio-fase 2.4.4.2 Diagrama de espacio-tiempo. El espac10 de una unidad operatoria es representado en función del tiempo. En contraposiciones al diagrama de espacio-fase se aplica aquí el tiempo ta escala, representando la unión entre las distintas unidades [9]. Ver figura 2.12. Sale CILINDRO A Entra Sale CILINDROB Entra 1 2 3 4 5=1 vrsJ21SJ 1 1 2 3 4 5=1 VI tsJ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Tiempo! Figura 2.12 Diagrama de movimientos/Espacio-tiempo83 2.4.4.3 Diagrama de mando. En el diagrama de mando queda representado el estado de conmutación de un elemento de control en función de la fase o tiempo, no considerándose el tiempo de conmutación [9]. Por ejemplo, estado de la válvula al en la figura 2.13. Válvula al Abiero ( Cerrado 2 3 4 5 6 1 1 1 1 IQ r Estado Fases -- Figura 2.13 - Diagrama de movimientos/Mando La válvula abre en fase 2 y vuelve a cerrar en fase 5. 2.4.5 TRAZADO DE ESQUEMAS EN NEUMATICA. Una vez resuelto el modo de realizar la secuencia, se pasa a completar el circuito para adecuar las necesidades prácticas de la operación. Se añaden los símbolos de reguladores de flujo a los cilindros en que haya que controlar su velocidad. 84 Se complementan los distribuidores con los mecanismos de accionamiento deseados. Después de esto pueden escribirse las referencias de los cilindros y las válvulas. La figura 2.14 muestra un esquema correspondiente de un ciclo rectangular [2]. A r---• al ----, 1 1 1 1 1 I B ~-------------~----~ 7 1 1 1 '+-,:'-,..........~ 1 1 1 1 • 1 l _____________ b ,_J , ________________ r1b ~-------------------------- "{ Figura 2.14 Esquema de mando de un ciclo rectangular. 2.4.6 PLANO DE SITUACION. bl Lo más usual, para comprender mejor un equipo neumático de mando, es completar el esquema con un plano de situación del que puede deducirse la disposición espacial de los elementos de trabajo. Este plano debe ser claro y estar limitado a lo esencial [2]. 85 2.4.7 LISTA DE LOS ELEMENTOS. Para esquemas muy complejos, puede añadirse una lista de los elementos del circuito, indicando la cantidad y el tipo de los mismos, así como indicaciones referentes a la firma proveedora. La lista de elementos de un esquema neumático debe ser semejante a la lista de piezas de un plano de conjunto de una máquina [2]. 86 2.5 MANDOS PARA EQUIPOS NEUMATICOS. METODOS DE GENERACION DE SISTEMAS DE MANDOS NEUMATICOS. En el concepto de eqmpo neumático quedan comprendidos todos los elementos neumáticos de mando y trabajo unidos entre sí por tuberías, por lo que el equipo neumático puede estar constituido por una, ó varias cadenas de mando empleadas para la resolución de un determinado problema [2]. Lo fundamental, y por lo tanto lo que más caracteriza a una maquina o a un aparato, es el mando. Conociéndolo puede averiguarse mucho sobre la maquina, por ejemplo, si es adecuado para fabricación de piezas en serie, si es apta para la mecanización semiautomática o automática, y también la capacidad de producción. El punto principal de toda maquina es el mando y, por lo tanto, debe dedicársele una atención especial, independientemente del tipo de mando que se aplique [2]. Existen diferentes formas de realizar el mando de un equipo neumático para generar circuitos neumáticos [2]: Mandos programados. Mandos secuenciales. 87 2.5.1 MANDOS PROGRAMADOS. El mando programado se desarrolla siguiendo un ciclo previsto, Para ello se utilizan los programadores que, en general, consisten en un árbol arrastrado por motor eléctrico sobre el que van montadas un cierto número de levas regulables que accionan varias válvulas [2]. El programa esta contenido en el árbol de levas regulables perfectamente ajustadas. Esta modalidad de mando es también dependiente del tiempo; el número de revoluciones del motor corresponde a la duración de la fase de trabajo que se desarrolla por completo en cada revolución del árbol de levas [2]. A cada cilindro de doble efecto le corresponde una válvula de 5/2 de rodillo, con retomo por muelle, que hace volver la válvula a la posición de reposo en cuanto termina el accionamiento de la leva [2]. 2.5.2 MANDOS SECUENCIALES El mando secuencial funciona en dependencia del movimiento, pudiendo estar presentes también elementos temporizadores como complemento. En este tipo de mando, cada movimiento de un cilindro origina el siguiente, es decir: una función origina la siguiente [2]. Si por cualquier causa una función no se efectúa, la siguiente tampoco tiene lugar y el mando permanece en la posición de perturbación [7]. Esta modalidad de mando precisa mas emisores de señales que cualquier otra, pero en ella se cumple con seguridad el desarrollo previsto de los movimientos [2]. 88 Los mandos secuenciales pueden ser de ciclo semiautomáticos. En los mandos automáticos se impone, a veces, la exigencia de que también sea posible un ciclo independiente sin repetición, además del ciclo de trabajo automático con repetición continua [2]. La sistematización de los montajes de mando secuencial constituye el SISTEMA CASCADA [2]. 89 2.6 SISTEMA CASCADA. El punto de partida radica en que todas las válvulas de fin de carrera que hay en el circuito solo reciben presión durante el periodo en que se necesita de ellas una señal neumática. Después quedan sin presión durante el resto del ciclo, por lo que no pueden producir señal, incluso estando accionadas [2]. 2.6.1 CONEXION PASO A PASO USANDO METODO CASCADA. 1) Elaborar croquis de situación [10]. 2) Establecer la secuencia abreviada (ecuación de movimientos) [10]. 3) Realizar el diagrama de movimientos [10]. 4) Descomponer la secuencia en grupos [10]. Reglas para la división en grupos: a) Una orden de maniobra (salida o entrada de un cilindro) para un mismo cilindro, debe aparecer solo una vez en un grupo [9]. 90 b) Para mantener bajo el costo en válvulas conmutadoras, se recomienda formar grupos lo más grandes posibles [9]. Ver figura 2.15. Grupo 1 Grupo2 GrupoJ A+B+ B-C+ A- C- Figura 2.15 División en grupos de una secuencia. Cada raya de separación significa que es preciso un cambio de grupo, siendo idénticas las rayas de separación al final y al principio de la secuencia [9]. 5) Dibujar cilindros y válvulas de mando [10]. 6) Dibujar letras de identificación de final de carreras se usen o no [10]. 7) Dibujar tantas lineas como grupos existan [ 1 O]. Las lineas representan salidas y se le designa las siguientes nomenclaturas [9]: Ver figura 2.16. sl------------- s2------------- s3------------- s4------------- s5------------- Figura 2.16 Lineas de grupos con designación de salidas. 8) Dibujar tantas válvulas 4/2 o 5/2 en la cascada como grupos existan menos uno [10]. 91 9) Conectar las válvulas en serie de tal forma de tal forma que cada señal de entrada provoque la conexión del grupo correspondiente y a la vez emita una señal de borrar de inmediato la anterior [10]. La denominación <<montaje en cascada>> atiende a la conexión de forma escalonada [9]. Ver figura 2.17. s1-----.----------s2-----+-o--------s3-----+-+--------s4-----+---+-+-----+--- e2 e3 e4 Figura 2.17 Montaje en cascada, forma escalonada. 92 Con esta disposición se asegura que la presión no este disponible mas que en una sola salida, estando a escape todas las demás. Otra característica es la clara correspondencia de las entradas <<e>> a las salidas <<s>> así como la sucesión 1 ... n en el orden del mando. Con este montaje puede conseguirse la anulación de señales con relativa facilidad. Aun hay que procurar, sin embargo, el que una señal de entrada aplicada durante un lapso prolongado, no puede perturbar el funcionamiento. Esto puede lograrse, cuando una señal de entrada~ solo pueda conmutar, si existe la señal de salida B Con la técnica de los circuitos puede realizarse esto mediante una función Y en la entrada, elemento que quedara activado por las señales en y sn -1 a) Conexión cascada con dos grupos. Ver figura 2.18. sl ------------. ........ --------------- sz -----,..---------.,......,.------------+---- el e2 Figura 2.18 Conexión cascada dos grupos. b) Conexión cascada con tres grupos. Ver figura 2.19. sl ----------,------------....------ s2 ---------+-i-----------1-----,.--- s3 ----,-----,----+-+-------..-----+-----+--- el e2 e3 Figura2.19 Conexión cascada tres grupos. c) Conexión cascada con cuatro grupos. Ver figura 2.20. 93 sl ----------,-----------,------- s2 ---------+-i------------1--....------ s3 --------.---+-+-----~~-----t--+-----.---- s4 ----,-----,---+--+-+-----~~ ...... ----t--+-----+---- el e2 e3 e4 Figura 2.20 Conexión cascada cuatro grupos. d) Conexión cascada con cinco grupos. Ver figura 2 .21. sl ---------,-------------.------ s2 ---------+-T------------l-----,,........--- s3 -------~-+-+-------,,------l-~1--....... -- s4 ------r-+--+-+------+~,--.-----1-~i----+--- s5 --""'T"-""'T"-+--+--+-+------+~1--,-----1-~-....¡.-....¡. el e2 e3 e4 e.S Figura 2.21 Conexión cascada cinco grupos. 1 O) Conexiones de mandos o sensores. 94 Una vez determinado el número de grupos y válvulas se hacen las conexiones de mandos o sensores según el siguiente método [2]: El final de carrera correspondiente a cada movimiento manda el inicio del siguiente. 95 Al encontramos con la barra de separación de grupo, no manda el próximo movimiento sino que actúa sobre el distribuidor para cambiar de grupo, y el movimiento siguiente vendrá mandado por la propia línea de grupo. 11) Conexiones de elementos adicionales como podrían ser distribuidores de marcha, paro, emergencia, etc. Notas: a) Al inicio del ciclo se deberá tener aire en el ultimo grupo [10]. b) Las válvulas de señal tomaran presión de alimentación del grupo en el que se encuentran al momento de ser atuadas [10]. c) Todos los primeros movimientos de cada grupo tomaran su alimentación de manera directa (pilotaje) del grupo correspondiente [10]. d) El paso 5 siempre se dibuja arriba de las lineas de grupos. e) El paso 8 siempre se dibuja debajo de las lineas de grupos. f) Los sensores, en el paso 1 O, que hacen el cambio de grupos siempre van dibujados debajo de las lineas de grupos. Los demás sensores van dibujado con la válvulas que accionan los cilindros. Figura 2.22 muestra un circuito neumático montado usando método cascada. sl s2 Marcha al bO al Figura 2.22 Circuito neumático montaje cascada. 96 bl 97 2.6.2 LIMITES DEL MONTAJE EN CASCADA. 1) Los limites de esta clase de conexiones están dadas por la particularidad de que la energía es introducida a través de una conexión única. Debido a ello el aire pasa a través de todas las válvulas del montaje en cascada, antes de inciarse el proceso de mando. La caída de presión que se origina por ello se hace notar mas al existir un mayor numero de válvulas conectadas en serie, siendo el resultado un mando mas lento [9]. El limite recomendado es de máximo cuatro válvulas, significando que el número mínimo de grupos es de dos y el número máximo de grupos es de cinco [ 1 O]. 2) Debido a la caída de la presión por el sistema cascada, la carrera del vástago es de aproximadamente 1 O cm en un cilindro de simple efecto. Por lo tanto es recomendable usar cilindros de doble efecto [ 1 O]. 2.6.3 SISTEMA CASCADA CON MOVIMIENTOS REPETITIVOS DE UN CILINDRO. Esto se refiere a que un cilindro realiza más de una carrera en un ciclo. Normalmente, la dificultad que se encuentra al aplicar el sistema cascada, estriba en como responder a las siguientes preguntas [2]: ¿De que grupos se alimentan los cilindros repetitivos? ¿Cómo se conectan las salidas de los cilindros repetitivos? ¿Cómo puede pasar el cilindro repetitivo de un grupo a otro? 98 2.6.4 SISTEMA CASCADA CON MOVIMIENTOS SIMULT ANEOS. Se trata de desarrollar un ciclo en el que los movimientos no se inicien siempre después de la terminación del anterior, sino que admita la posibilidad de movimientos simultáneos. En estos ciclos tenemos dos posibilidades [2]: Que hasta que terminen todos los movimientos que se han iniciado simultáneamente no empiece el siguiente. Que uno o varios de estos movimientos qµeden desencadenados y la continuación de la secuencia dependa únicamente del o de los restantes. 3. CODIGO DEL PROGRAMA COMPUTACIONAL. 100 3.1 INTRODUCCION. El código de este programa fue escrito en Visual Basic 3.0, versión para Windows 3.1. Dicho programa es compatible con el ambiente Windows 95 y cualquier versión posterior a Visual Basic 3.0. Los requerimientos técnicos mínimos para ejecutar el programa son: 1. Plataforma PC IBM compatible. 2. Procesador Pentium. 3. Raton. 4. 32 Megabytes de memoria. 5. Monitor SuperVGA, Large fonts. 6. Resolución 1024 X 768 pixeles, 12 X 12 pulgadas por pixel. Para entender la lógica de la programación se presenta un diagrama de flujo del programa. Dicho diagrama explica el proceso, paso a paso, de la ejecución del programa y resalta la estructura de los procedimientos usados. Adicionalmente, como documentación complementaria, en la programación se presentan lineas de bloques o frases explicando el uso de comandos o bloques de comandos. Dichas lineas se pueden encontrar en cuadros, después de la palabra "Rem" y después del signo ·. 3.2 DIAGRAMA DE FLUJO DEL PROGRAMA COMPUTACIONAL. INICIO Calculando # Cilindros, # Fases y# Tiempos Crmción de matriz para entrada de datos de movimientos de cilindros Entnda de dalos en forma binaria de movimieotos de cilindros. Escoger# Cilindros y#Fases Subrutina Relniciali:z3r Panlalla 1 Activar Icono Relniciali:z3r 101 Creando matriz diagrama de rases (CII.F ASE) de entrada de datos Calculando # de Grupos y creando matriz (CAMBIOGRUPOS) para guardar información Descarga Forma Pantalla 1 Calcular dimesiones de line-as para dibujar diagrama de movimientos usando matriz de entrada de movimientos de cilindros. Diagrama de Movimientos gtáficamente Carga Forma Pantalla 2 IniclBlización de Forma Pantalla 2 #de Grupos gráficamente Calcular Secuencia de Movimientos usando matriz CILF ASE Secuencia de Movimientos gráficamente 102 Aceptar# de Grupos, Secuencia de Movimientos y Diagrama de Movimientos Activar Icono Dibujar Circuito Neumático Descarga Forma Pantalla 2 Carga Forma Pantalla 3 Inicialización de Forma Pantalla 3 Checando condiciones de cascada simple verficando # de grupos, simultaneidad y repet.ividad. Descarga Forma Pantalla 3 NO Activar Icono Imprimir 103 Carga Forma Pantalla 5 Inicialización de 1----------. Forma Pantalla 5 Calculando las dimensiones de los cilindros, vástago, válvulas y letras Dibujar Cilindros Tipo de Válvula - 1 Llamar procedimiento para dibujar Válvula Llamar procedimiento para Dibujar Circuito Neumático Llamar procedimiento para Dibujar Cilindros y Válwlas Correspondientes Carga Forma Pantalla4 Inicialización de F onna Pantalla 4 Impresión de # de grupos, secuencia de movimientos y diagrama de movimientos. Descarga Forma Pantalla4 104 Calculando las posiciones de entradas de las válvulas correspondientes Conectando conexiones de aire entre cilindros y válvulas correspondientes Llamar Procedimiento para dibujar lineas de grupos Calculando las dimensiones de lineas de grupos Dibujando Líneas de Grupos Llamar Procedimiento para Dibujar Válvulas de Cascadas Calculando las dimensiones y posiciones de las válvulas, líneas de aire y Elemento Y Determinando tipo de válvula >-S_I __ ~ Tipo de Válvula - 1 Tipo de Válvula - 2 Llamar Procedimiento para dibujar válvulas 105 Dibujando Líneas entre Válvwas y conectando a Líneas de Grupos NO Dibujando Líneas Lado Izquierdo de Válvwas y conectando a Líneas de Grupos Dibujando Lado Derecho, lineas de válvulas a Elemento Y Llamar Procedimiento Para Dibujar Elemento y Calculando Posición de entrada para sensor de Elemento Y Calculando Posiciones para dibujar Elemento Y Llamar Procedimiento Para Dibujar Elemento y Dibujando Líneas entre Elemento Y y conectando a Líneas de Grupos Calculando Posición de entrada para sensor de Elemento Y LlamarProcedimiento para Dibujar Todos Los Sensores Calculando dimesiones y posiciones de Sensores, Conexiones a Líneas de Grupos y Válvulas, Letras 106 Buscando Matriz Cll.FASE para 1, indica movimiento de rase Calculando si rase hace un cambio de grupo Buscando el sensor de activación de dicho movimiento de fase Calculando si sensor se conecta al lado m¡uierdo 0 derecho de válvula de cilindros Determinando si el vástago esta afuera 0 adentro NO Asignando letra al sensor de activación 107 • Calculando desplazamiento de sensor al lado izquierdo Dibujar Línea de Aire al Válvula Cilindro Tipo de Sensor= 1 SI SI Llamar Procedimiento Dibujar Un Sensor Dibujar Líneas de Sensor a Grupos de Líneas y Letra de Sensor NO NO Calculando desplazamiento de sensor al lado derecho Dibujar Línea de Aire al Válvula Cilindro Tipo de Sensor - 2 108 Tipo de Sensor .. l Llamar Procedimiento Dibujar Un Sensor Dibujar Letra de Sensor Tipo de Sensor• 3 SI Conectar Uneas de Sensor Válvula Cilindro a Líneas de Grupos NO Tipo de Sensor= 2 Tipo de Sensor - l Llamar Procedimiento Dibujar Un Sensor Llamar Procedimiento para Dibujar Presiones de Aire t Tipo de Sensor - 2 109 Llamar Procedimiento Dibujar Un Sensor Llamar Procedimiento para Dibujar Presiones de Aire Dibujar Letra de Sensor 110 Calculando dimensiones de válvulas SI SI Calculando posiciones de conexiones de aires Calculando posiciones de conexiones de aire Calculando posiciones de escapes de aire Llamando Procedimiento para dibujar Escapes de Aire Calculando posiciones de presión de aire Llamando Procedimiento para dibujar Presiones de Calculando posiciones de escapes de aire Aire i~------~ Llamando Procedimiento para dibujar Escapes de Aire 111 Dibujando Escapes de Aire NO NO Dibujando Presiones de Aire NO 112 Calculando Posiciones para unir a Líneas de Grupos. Llamado desde procedimiento Dibujar Válvulas de Cascadas, Sección Líneas Lado Izquierdo ? Llamado desde procedimiento Dibujar Válvulas de Cascadas, Sección Líneas Lado Derecho ? 113 SI Calculando Dimensiones de Sensores, Rodillo, Resorte, Pared Dibujando Rectángulo del Sensor Llamar Procedimiento para Dibujar Escapes de Aire Dibujando Rodillo del Sensor Dibujando Pared Llamado desde Procedimiento Dibujar Todos Los Sensores, Sección - Si hay un cambio de grupo? 114 Subrutina SALIR Pantalla 1 Activar Icono Salir FIN Subrutina SALIR Pantalla 2 Activar Icono Salir FIN Subrutina SALIR Pantalla 5 Activar Icono Salir FIN Subrutina. Reinicializar Pantalla 2 Subrutina Reinicializar Pantalla 5 Activar Icono Relniciali2ar 115 116 3. 3 CODIGO DEL PROGRAMA. Ver Anexo A. 4. USO DEL PROGRAMA COMPUTACIONAL. 118 4.1 INTRODUCCION Para que un programa sea fácil de utilizar es importante ofrecer al usuario un ambiente gráfico. En la actualidad el ambiente gráfico más utilizado es Microsoft Windows. La amigabilidad que ofrece un ambiente gráfico fue la razón principal por la que el código se escribió en Visual Basic 3.0 para Windows. Adicionalmente, es importante escribir el código de tal manera que ofrezca al usuario una guía durante el uso del programa. Por ejemplo: Si el número máximo de un elemento es nueve, entonces que el programa te permita escoger gráficamente de uno a nueve de dicho elemento. Por ultimo, también es indispensable mostrar documentación de ayuda en pantallas criticas. El programa computacional desarrollado cumple con los tres puntos. Se escogieron dos ejemplos para mostrar el uso del programa. En el primer ejemplo se simula que cada cilindro cumple su ciclo completo de salida y retomo antes de que empiece el ciclo de salida de otro cilindro. En el segundo ejemplo se simula que los cilindros se desplazan hacia fuera de manera consecutiva. Una vez que todos los vástagos del cilindro están afuera, los vástagos se empiezan a regresar, empezando por el último y terminando por el primero. 119 4.2 PASOS GENERALES PARA UTILIZAR EL PROGRAMA. Las teclas claves se muestran en mayúsculas y negritas. Las notas aparecen en itálico. 4.2.1 EJECUCION DEL PROGRAMA NEUCAS. Para usuarios de Windows 3 .1 : 1) Del Administrador del Programa (Program Manager) escoger Archivo (File). 2) Del Archivo (File) escoger Ejecutar (Run). 3) Aparecerá el cuadro de Ejecutar (Run); escoger Explorar (Browse). 4) Del cuadro de Explorar (Browse), buscar el directorio en donde se encuentra instalado NEUCAS. 5) Escoger NEUCAS.exe. 120 6) Aparecerá nuevamente el cuadro de Ejecutar (Run); escoger Aceptar (OK). Para usuarios de Windows 95: 1) Escoger Start. 2) Escoger Ejecutar (Run). 3) Aparecerá el cuadro de Ejecutar (Run); escoger Explorar (Browse). 4) Del cuadro de Explorar (Browse), buscar el directorio en donde se encuentra instalado NEUCAS. 5) Escoger NEUCAS.exe. 6) Aparecerá nuevamente el cuadro de Ejecutar (Run); escoger Aceptar (OK). 121 4.2.2 USO DEL PROGRAMA. 1) Aparecerá la pantalla de presentación. "NEUCAS". Presionar CONTINUAR. 2) Aparecerá la pantalla "Entrada de Datos". 3) Escoger el# De Cilindros. 4) Escoger el # De Fases. 5) Presionar ACEPT AR-CIL/F ASE. Nota: Esta tecla nada más se activa una vez que se haya seleccionado el# De Cilindros y # De Fases. 6) Aparecerá matriz ~ # Cilindros X # de Tiempos. Nota: # de Tiempos =#De Fases + 1 El programa ajusta automáticamente el tamaño de la matriz con respecto al # de cilindros y fases. 122 7) Llenar en fonna binaria el tiempo de movimientos de cada cilindro usando el siguiente ejemplo: TO T1 T2 T3 T4 CILINDRO A VI N 1 T(n) = O 1 1 o o Figura 4.1 Uso Programa - Movimientos de Cilindros. Registrar el tiempo inicial de cada fase 7 TO ... T(n); y el tiempo final del ultimo fase. Nota: El programa nada más permite llenar O o l. En caso de que se presione otro carácter, sale un cuadro que dice "Solamente Entrada Binaria - Teclear O o 1 ". Si aparece el cuadro, presionar OK para continuar. 8) Presionar ACEPTAR-MOVIMIENTOS DE CILINDROS. Nota: Esta tecla permite continuar si se llena por completo la matriz de movimientos de cilindros. 9) Presionar REINICIALIZAR si se desea hacer otro circuito. 123 Nota: Dicha tecla se puede presionar en cualquier tiempo durante e/proceso. 1 O) Presionar SALIR si se desea salirse del programa. Nota: Dicha tecla se puede presionar en cualquier tiempo durante e/proceso. 11) Presionar CONTINUAR. Nota: Esta tecla nada más se activa una vez que se haya aceptado los movimientos de los cilindros. 12) Aparecerá la pantalla "Diagrama de Movimientos". Verificar la información desplegada. 13) Presionar ACEPTAR-DIAG. 14) Aparecerá la pantalla "Chequeo de Condiciones". Verificar la información desplegada. 15) Presionar O.K. 124 Nota: El programa nada más le permite presionar esta tecla. 16) Si el circuito NO es cascada simple, se activa solamente la tecla de IMPRIMIR. Ir a paso 18. 17) Si el circuito SI es cascada simple, se activan las teclas de IMPRIMIR y DIBUJAR. Ir a paso 25. 18) Presionar IMPRIMIR si se desea imprimir. Nota: Es importante tener la impresora lista y configurada en Windows. Se puede presionar cancelar cuando se desee. 19) Aparecerá la pantalla de "IMPRESION". Escoger CONFIGURAR. 20) Aparecerá la pantalla de "CONFIGURACION DE IMPRESION". En orientación escoger "LANDSCAPE". 21) Presionar O.K. de la pantalla de "CONFIGURACION DE IMPRESION". 22) Presionar O.K. de la pantalla de "IMPRESION". 125 23) Presionar REINICIALIZAR si se desea hacer otro circuito. Nota: Dicha tecla se puede presionar en cualquier tiempo durante e/proceso. 24) Presionar SALIR si se desea salirse del programa. Nota: Dicha tecla se puede presionar encualquier tiempo durante e/proceso. 25) Presionar IMPRIMIR si se desea imprimir. Nota: Es importante tener la impresora lista y configurada en Windows. Se puede presionar cancelar cuando se desee. 26) Aparecerá la pantalla de "IMPRESION". Escoger CONFIGURAR. 27) Aparecerá la pantalla de "CONFIGURACION DE IMPRESION". En orientación escoger "LANDSCAPE". 28) Presionar O.K. de la pantalla de "CONFIGURACION DE IMPRESION". 126 29) Presionar O.K. de la pantalla de "IMPRESION". 30) Presionar DIBUJAR. 31) Aparecerá la pantalla "Circuito Neumático Montaje Cascada Simple". 32) Presionar IMPRIMIR si se desea imprimir. Nota: Es importante tener la impresora lista y configurada en Windows. Se puede presionar cancelar cuando se desee. 33) Aparecerá la pantalla de "IMPRESION". Escoger CONFIGURAR. 34) Aparecerá la pantalla de "CONFIGURACION DE IMPRESION". En orientación escoger "LANDSCAPE". 35) Presionar O.K. de la pantalla de "CONFIGURACION DE IMPRESION". 36) Presionar O.K. de la pantalla de "IMPRESION". 37) Presionar REINICIALIZAR si se desea hacer otro circuito. 127 38) Presionar SALIR si se desea salirse del programa. 128 4.3 USO DEL PROGRAMA- EJEMPLO l. Se simula que cada cilindro cumple su ciclo completo de salida y retomo antes de que empiece el ciclo de salida de otro cilindro. Tomando en cuenta las reglas de montaje en cascada simple, el número de cilindros serian cuatro y el número de grupos serian cinco. A continuación se muestra el diagrama de fases. A B e D Figura 4.2 - Ejemplo 1 - Diagrama de fases. 4.3.1 PRESENTACION GRAFICA DEL PROGRAMA EJEMPLO 1 Y PASOS GENERALES. 1) Aparece la pantalla de presentación. Presionar Continuar. 2) Aparece la pantalla "Entrada de Datos". PROGRUL\.DOR: ! Jaiprnk:islt &1jnmm i J. &co,er # ik d/Jadnn:, # ikfoses. Z. Pre-Aupl,lr-C/VFa,. J. u.., e11f.,.. bútarla el linqH ,k ---• ce4:r dH,,,dro ---40 ~, dfrúnú(/e..,,o: T2 T3 H N ,_,,,_,-~_., .•• ,_,.TI""' Jurlsbw el linqH W cW de m4ofose • TO .•. T(II); :,eltJ-,ofl-',k/ ""'-• fase. -t. Presi,,,wuAupt,,r.!,f.., J. ,.,,-c.-. &....,ar SALIR para salirse atulquitt tinapo 129 UTILIZANDO 3) Escoger# De Cilindros. 4) Escoger# de Fases. J. En:oger # tk cllwlros y # tkjlues. Z. Pnsl- .4ceptar-CIVFtU. J. L/mare,,f.,_,u-ria el tln,q,o de mtn'ÚIÚelUos tk coda cüwlro ....,,,,,,. el sf8llinúe (/e111plo: TO T2 T3 H N R,:lstrar el tielllpO lnklal tk codajlue • TO ... T(II); :, el iwNpo jl,,aJ tkl --fose. 4. Pn-.4cq,tar-ilf,w, $.l'n_C_,_, J. Escoger # tk cUwlros:, # tkjlues. 1. Pnsl-.4ceptar-CIVFtU. ]. u,.,,, e•.flw*a - ti ti-,o tk ""'"'""'""" tk---el siflUenle ,jn,q,lo: TO T2 T3 T4 N Re¡rlstrar el tielllpO IAk/al tk codajlue • TO ... T(II); :, el iwNpo jl,,aJ tkl """"º jiu,. 4. Pnsl"""'.4ceptar-Mo,,. ,. Pnst_, e_,_, 130 5) Presionar Aceptar-Cil/Fase. 6) Aparece la matriz de cilindros X tiempos. I. Escorer # deci/úulros:, #defoses. 2. PreSÚHUlr Auptar,-CJVFas. J . Limar e1tfumu, blaarla el tin,q,o de a,,n{mimtos de t:at1a cllt,,dro - el sfgllit1•1< dn,q,lo: o o luglstnu el 11e_,,o Wdal de c:adafose = TO ... T(-); :, el tiea,po fl,,al del ""'-fose. 4. Presi01U1r Ac,púlr-MOK S. Pre"- Contúuu,r, ]. Escorer # de dll•dnu:, # defoses. 2. PresiOIUlr Acq,u,r-CIVFas. J. Limar e1tforMa blaarla el tin,q,o de .,,,.{,,,Jmtos de c:a4a cllút4ro IUa1'4o el !dgllle,úe dn,q,lo: TO TI T2 T3 T4 CilAVl N 1, T(n)=O 1 1 O O Reglstnu el tle.po Wc/41 de c:a4a fose • TO . ..T(•); :, el tüa,po fl,,al del Jdtiaofose. 4. PreSÜlllar Auptar-MOK S. Pre"- Contúuu,r. 131 7) Llenar en forma binaria el tiempo de movimientos. En caso de que se apriete otra tecla: Presionar OK y terminar el llenado: l . Eno,er # de cl/Ja4rm:, # 4ejlues. Z. Prt_ A,,_.c/VF,u. J,U,-,oj'o,--e/ linq#4<•--,,, ___ e, "'"""'e (/,..,,., T(,>-<I Rq,-dtinyobtk/al <k todafos, • 711 ... T(-J; ? el tinyo fl-1 ,kl altJMofose. ~ ,,,,,_Auptar-M.._ ,.,,,,,_e_,._, 1. En-,er# de tllia4ro#? # 4,jluu. Z.l'rt-At~Fa. J. u,-,.fo,__., ti,.,.,,, __ ,ktodatl/"'4n-d sftlflelfle (/,..,,., T2 Tl T4 N 1 O R~dtinyoWdal ,k todajlue • 711 ... T(-); , ti "-fl-1 ,kl ,dtlao.fiue. ,l. Pnsi"""'1' Acq,lar-!,,fOM 5. Pnm,aar Coalúu,ar. 132 8) Presionar Aceptar-Movimientos de Cilindros. 9) Presionar Continuar. 1. Escoger # fk c/Jútdros y # 4ejlues. 1. PreSÜHfar Aceplar-Cil/Fos. J. Llettar "'fo,._, binario ti He..,. 4e ..,,.t,,,J,,úqs fkco4ac/JúMlro""""4otl sittúenie ,Je-,Jo: T(n)=O l R'lútmr el H""I"' ú,k/111 fk co4ajlue = TIJ ••• T(11); :, el He..,. fo,al fkl ldtiaojlue. 4. PrcSÜHfar Actpfar-MOK S. PrtSÜHfar C°""""'1r. 1. Escogu # fk c/Jútdros:, #defases. 1. Prcsí-Aceptar-Cil/Fos. J. Llettar •• fo,._, binario el tielltpO tk -.ovi-1eaJos fk co4a clJúMlro """"4o el slttúellll ,Jn,¡,lo: TO TI CilAIZI T(•J=G T2 Tl T4 N Rl8útmr el He-,,o /túc/111 (Ú co4ajlue m TO ... T(11); :, el ru,,.,.fo,al fkl ldti•oflue. 4. Presí-Aceptar-Mtw. s. Prest-e_,,__ 133 1 O) Aparece la pantalla "Diagrama de Movimientos". Presionar Aceptar-Diag. l. V•tifieor # t1e Gn,ptt,s, S-nela ti. Mtw. y mo,,,,_ tk Mtw. Z. Sl hlly •rrons - > Prm-&4LIR. J. Slnohoy.--> P,vi-,A~DIAG. 134 4. P,m-, ImprJn,J,sl t1aM Jnq,,in,i,, s. ~ DDn,Ja, Clrt:ldlo. 11) Aparece la pantalla "Chequeo de Condiciones". Presionar O.K. 12) Presionar Imprimir. A B e D l. Vnflbr # u GnqM,, ____ ., o..---z.s1-.1•--> -&-ILIR. J.SJ--.1--> Prm-,~DL4G. ,{, l'naiMMr lmpri,,,irsi 4- Jmr,i,,,ir. S.PnaiMMrDO.,, Cin,,áo. l. Vnflbr # u Gnq,#, S-.Clt,tk.M.,,.y o..---2. SI,__,,,..__, Pw,d-,S,4LIR. J. s,,,.,...,,~l"l"Ol'N-> Prm-, Aeq,,,,-DL4G. ,{, PnaiMMrlmpri,,,irsi4- Jmrimlr. S.-DO.,, Cin,,áo. 135 136 13) Aparece la pantalla de "Impresión". Presionar Configurar. 1 DIAGRAMA DE MOVIl\flENTOS 1 14) Aparece la pantalla de "Configuración de Impresión". Escoger orientación Landscape. Presionar O.K. 1 DIAGRAMA DE MOVll\flENTOS 1 ...... D 137 15) Presionar O.K. de la pantalla de "Impresión". / DIAGRAMA DE MOVIMIENTOS j 16) Aparecerá un cuadro avisando que se está imprimiendo la pantalla. / DIAGRAMA DE MOVIMIENTOS j 1 ¡ .. ¡.. ~ ~ e,~-js Grupos o,p- ~ ... 1 2 3 , 5 6 7 B 9 =l A I 1\ .. B L/ \ e I \ D l/ \ 17) Presionar Dibujar. A B e D 1. V,,ffit:,w # u Gn,p,,,, -·-:, m.i-·-z. S/1111;¡, ,,,,_ - > P,m.,,.,SALIR. J.Slu1*!,,--> l',m.,,.,A,.,..,..DIAG. 4.-htq,nm/r,i- Imprimi,. s.--,m,,,,¡., Cl,n,Jio. 138 139 18) Aparece la pantalla "Circuito Neumático Montaje Cascada Simple". Presionar Salir para salirse o Reinicializar para hacer otro circuito. Aatll •w,1 cctd .1•e .1----+---+--+--.....-,f----+--+---+--------------------.2,----+---+--+-----+-,i-----1--+--+---+----+-----------------13:-----------+--+o---+---+----+----+-------.---------··----------------------+-------.---------,s--.----.----1-....--+----1-....-+---.-----1----+--------i-----,------ ->----+---....----__,I .. 140 4.4 USO DEL PROGRAMA- EJEMPLO 2. Se simula que los cilindros se desplazan hacia fuera de manera consecutiva. Una vez que todos los vástagos del cilindro están afuera, los vástagos se empiezan a regresar, empezando por el último y terminando por el primero. Tomando en cuenta las reglas de montaje en cascada simple, el numero de cilindros serian nueve y el numero de fases serian dieciocho. A continuación se muestra el diagrama de fases. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 =l A B e D E F G H I I \ I \ I \ I \ I \ I \ I \ I \ I i\ Figura 4.3 - Ejemplo 2- Diagrama de fases. 141 4.4.1 PRESENTACION GRAFICA DEL PROGRAMA UTILIZANDO EJEMPLO 2 Y PASOS GENERALES. 1) Aparece la pantalla de presentación. Presionar Continuar. 2) Aparece la pantalla "Entrada de Datos". l. Esco,er # tk cll"'4ros 1 # tkjlu,s. Z. h,,1_,,,. Acep,a,..CJVFas. J. Llnoreafo,wabutarla~Idna,ode11t~ 4,-,.c11--e1 s/illinlu{f,,,.,io: TI TI T2 T3 T4 CiAIZI I(,)-() l N I Rqlsbor d tlnyo lak/DI tk codajluc • TIJ ••• T(n); , ,J tu-jllllú 4,/ lllliMoj/u, . ./.,.,.._Auptar-MOK J. Pnn__,c-. o 3) Escoger# de Cilindros. 4) Escoger# de Fases. I . Es cor u # tk cllw/ros 1 # tlejiues. z. Presimtar Aceplar-CJVFos. J . Lle,,,., eaf"""" ""'4rül el dn,,po tle •mi,,.JmJos tk catla cllilftlro .-o el n,llhllle qeMplo: Jle&lstrarel túa,po Wdal tk catlafase - To ... T(•); 1 el túa,po jb,al tkl tdtiMo fase. 4.l'resioftarAcepiar-Mo,,. J. PresúMar ColllÚular. J. Escorer # tk cUintlros 1 # tkfases. Z. Presimtar Auptar,-CIVFos. J. L/,_ Mf"""4 b""""1 el "'-,o tk .uMIIUQÚOS tk catla ciHNlro .-o el sftlllellle qeMplo: ro TI caAl7l T(n):O 1 T2 Tl T4 N I Rqlmor el túa,po Wc/al tk catlafase - TO ... T(•); y el de"'l'o jb,al tlel tdtiMo fase. 4. Presimtar Acqnar-M.., J. Presimtar ColllÚular. Pnaionar SALIR pani saline a cualquier tiempo 142 5) Presionar Aceptar-CH/Fase. 6) Aparece la matriz de cilindros X tiempos. J. E.rcoter# ,k clJúuJ,,os:, # lkfases. 2. PresiONU" Aceptar-ClVFas. J. u,,.,,,. mfont111 binaria el dntpo de •tnúúnúos ,k cada cUINlro IUQll(/o el sigtdellle ,jm,plo: T2 T3 T4 N Rqistrar el 11,_ W clal ,k cada fase ~ TO ... T(•); y el tle1'f{IO ji,,al 1kt "'1/mojl,se. 4. Presiotuu Aceplllr-Mtl'A $, Presio,,ar COIÚÚNltlr. J. Esco,,r # tú cU/Nlrosy # dejl,ses. Z. Pre-Aceplor-CiJ/Fos. J. L/n,ar afom,a bbtarla el túapo tú ..,,,,;,.¡n,1o, tú cado ___ ,, sJ:tdente ,)-,to: TI T1 F-::=11-t-t--l-++-t--+-t--J--!l--l-t-t--l-++-t--t.--!!\\1CilA[.¿'] , ........ ¡ - T2 T3 T4 N 143 7) Llenar en forma binaria el tiempo de movimientos. En caso de que no llene todos los campos. J.Enoger#dedlbldrn7 # dejl,su. Z. Pr,"""'1r Ac.,.,,..C/VFa,. J. u..., .. ¡.,.,,- d "~""" tk •IWIMJe,,Uu dec«ladlúttln,-e/ s/f11Ú111ú(/a,p/o: T2 Tl T4 N 1 O llq-eltúa,-Wc/ol u .j.!~~~.!:'f:::¡':='f=í:::::¡::=¡=::¡::=¡:::¡::::¡.:+~Dr de c«lafose = ro. .. T(II); - 7el~fl-/del Presionar OK y terminar el llenado. ""'-•Jlue. -1. Pr,,;,,,,,,,Auplllr-M.,. J.Pre"-C-. J. Escoger# de di-., T # dejl,se .. Z. PreSWMrAcq,617-C/VFa,. J. u-••fe-_,, tu-,.tk-tle ___ ,, sffllÚ/Jlú (!e-,lo: TD TI T2 Tl T4 -====--+--+-t--t-1r1-+-rl-+-lrl-+-lrl-+-lrl-+-lrl-+-lrO~O-'~~Al7l N -+--+-+-t-+-+--+-+l-+-1+1-+-1+-1 t-1--+-l+O-+-O+O-;_O_n rw:"iw'....,, ~ ""•"" 1 1 1 1 1 1 0 0 0 0 0 tk-jlue = TO ... T(II); 1 1 1 1 1 O O O O O O ~~del -1.Pr,"-Auplllr-M.,. J. Pr,,;,,,,,,, e_,,_, 144 8) Presionar Aceptar-Movimientos de Cilindros. J. Escoza # de d//Nlrosy # defasts. l. Presioltar Auplar-ClVFtu. 3. L/mareaf...,,,,, blaarla el d""I"' de .,o,;,,,JeaJo, de cado cl//Nlrr, ruaNlo el sftllle,ue 9-,lo: TO TI T2 Tl I4 111111111100 171 N !!ii~llit1tttt~~~~~~~f~f.7~~~~~llcaAV1 i'= T(o)=O l l O O 9) Presionar Continuar. ~ 001 111111111111100 ~ o o o 1111111111111 o o o ~ 0000111111111110000 ~ o o o o o 111111111 o o o o o ~ o o o o o o 1111111 o o o o o o ~ 0000000111110000000 ~ 0000000011100000000 ~ O O O O O O O O O 1 O O O O O O O O O Registrar el dn,q,o lllldal de cado fase = TO .• ,T(1t); , el lúllfPO fl"'1I del 11/túao fase. 4. Pres/-, Auplar-llftw. 5. Pre"'-arc-. INSTRUCCIONES PARA MANEJO DE PANTALLA ]. Escozer # de dli,,dn, y #defasts. l . Pre"'-ar Aceptar-CIVFtu. 3. u,.,,,.,,.Jor-"""""' ,1 dnq,o de ·""""'""°' de cado cl//Nlrr, ---40 el st,lllellh (/-,fo: TO TI T2 Tl I4 N I T(n)=O , l Rqlstrtlr el lln,po Wdal de cadofase = 1YJ ... T(•); , ti lúllfPO.Jbtal del 11/túao fase. 4, Pre"'-ar Acep,ar-Mu,,, 5. PredtMar COIUÍJUlar, o 145 10) Aparece la pantalla "Diagrama de Movimientos". Presionar Aceptar-Diag. l 2 3 4 5 6 7 8 9 ro ll ll U U e M IT IB~~ I \ I \ ~ \ I \ I \ ll \ I \ ll \ I \ C+ O+ E+ F+ G• H• ,.,. l. Verflicor # de Gnq,os, St!Clllnela de Mtw. y Diafroma de Mtw. Z. SI hay errores - > Pnsionar SALIR. J. SI no hoy errores-> PnsionarA~DL4G. 4. Prmonar Imprimir si tlesea Imprimir. 5. Presionar Di1n,Jar D CircuJJo. 146 11) Aparece la pantalla "Chequeo de Condiciones". Presionar O.K . I 12) Presionar Dibujar. 1 l 3 , 5 6 7 8 9 W U D D W U M U A B e D E F G H I / l/ / l/ l/ / l/ ~ !\ r\ \ !\ !\ r\ !\ l/ [\ r\ 0-,. ,. G- 1. Vnffb, # k en,,-, -kllfr,.:, m..-'-- z. Si "":, - - > -SALIR. .. .. ,. J. s,,.,,,..,,,rwo-> --,A..,.,.DL-IG. 4.Proi-1,,,,,,;,,,;, ...... I,,,,,..i,,,¡,. S.-0,,.,, C"""1t& , . ... .. 0-,. , . .. c- MANEJO DE PANTALLA 1. Vnflb, # k Gntr-, _,,__:, oi..-"-"'- 1.s11,..,---> --&tl/R. J.s,,.,,.:,,--> Proi_A..,..,..DMG. 4.Pw.á-Im¡,,/Mlr.á"- I,,,,,..i,,,¡,. S. --DDw,¡,,, D Clff:ttllA 147 148 13) Aparece la pantalla "Circuito Neumático Montaje Cascada Simple". ,1 ...... ---------+-------------------------1----i---.2-------+--+----------------------------- •• 11 149 14) Presionar Imprimir. 15) Aparecerá la pantalla de "Impresión". Presionar O.K. • .. d ... " ..... t i ~ ~ ~ --(HPDeV<JollJIC - - lPTl:J " 8 C,,plN: c:J ¡/J Cohlecopjos 150 16) Aparecerá un cuadro avisando que se está imprimiendo la pantalla. Pri•1ing ... 17) Presionar Salir para salirse o Reinicializar para hacer otro circuito. 5. PRUEBAS Y RESULTADOS. 152 5.1 INTRODUCCION. La tecnología de la computación se ha desarrollado rápidamente desde que se invento en los 1940's. Debido a la computación, cada día que pasa, es más viable ofrecer a la industria y a su vez al usuario, herramientas que le permite hacer su trabajo más eficientemente y con más calidad. Por otro lado, antes de aplicar una herramienta computacional es indispensable probar su uso en aplicaciones industriales. Se escogieron cinco casos industriales de la neumática para probar la funcionalidad del programa computacional. Tres casos comprueban el trazado de circuitos neumáticos utilizando montaje en cascada simple. El cuarto caso comprueba que el programa es capaz de identificar simultaneidad de cilindros, aunque no se permite dibujar el circuito. El ultimo caso comprueba que el programa es capaz de identificar repetividad de cilindros, aunque no se permite dibujar el circuito. 153 5.2 CASO 1 - CASCADA SIMPLE - DISPOSITIVO PARA REMACHAR. 5.2.1 CROQUIS DE SITUACION. Figura 5.1 Croquis de situación Caso l. 154 5.2.2 PLANTEAMIENTO DEL PROBLEMA. Dos piezas han de quedar unidas con un remache en una prensa parcialmente automatizada. Las piezas y el remache se colocarán a mano, retirándose la pieza acabada también a mano después del proceso de remachado. La parte automatizada del ciclo consiste en el agarre y sujeción de las piezas (cilindro A), así como el remachado (cilindro B), previo pulsado de un botón de marcha, ha de realizarse la operación hasta volver a la posición de partida [9]. A continuación se muestra el diagrama de movimientos [9]: 1 2 3 4 5 = 1 1 A o 1 B o Figura 5.2 - Diagrama de movimientos Caso 1 5.2.3 RESULTADOS DEL PROGRAMA COMPUTACIONAL NEUCAS. 5.2.3.1 Entrada de datos. 5.2.3.2 Verificación de datos. J 2 3 4 5 6 =l :~ J. MCO,et' # de dlútdras y # dej/u,s. 1. Presionar Aceptar-CiVFas. J. u,_. m.flm,,a binaria ú tteapo d, .-,a1os de.- dHadro asaada el s/fllUllle ~,apio: TO TI T2 Tl T4 cuVl N I (n)=O 1 R,glstnlr ,1 tletllflD bucial de ,,_jiu,= TO ..• T(n); y ú tin,po j1aaJ del ,útútu, Jiu•. 4. Presuma, Aceptar-MM\ 5. Prestonar Ctllllltuulr. l. Vnflicor # i# G,.,_, s-i.kM,,.,. :, o.r---· l. SI,_:,.,._ - > PrmM.rSALIR. J. s,,..,_y.,,..,,.,..-> PralM.r Ac:wpa,-DL1G. ,f. P,al-, f,,,,,,.-Jd- Inq,,i,,,Jr. S.Pral-,Da..¡,,, Cln:tdu. 155 156 5.2.3.3 Circuito neumático . • .. •1 ,1 -_::::j:::::::::;;:::::í::¡:::::;:::::::::¡::::::::::::::::::::::::::::::::::::::::::= •l •• ~, 5.3 CASO 2 - CASCADA SIMPLE - MARCADODE PIEZAS. 5.3.1 CROQUIS DE SITUACION. Cilindro A CillooroB Estampado Alirnenticiijn/ Fijaa __ ón...._~~::...":._.~-::.,i;--u·~J-f~~~~·~, CilindroC E',cpulsiOn Figura 5.3 - Croquis de situación Caso 2. 157 158 5.3.2 PLANTEAMIENTO DEL PROBLEMA. En una máquina especial han de marcarse unas piezas. La alimentación de las piezas es a través de un deposito de caída, siendo empujadas contra un tope y sujetadas mediante el cilindro A, marcadas mediante el cilindro B y expulsadas mediante el cilindro C [9]. A continuación se muestra el diagrama de movimientos [9]: 1 2 3 4 5 6 7=1 1 A o 1 B o 1 e o Figura 5.4 - Diagrama de movimientos Caso 2. 5.3.3 RESULTADOS DEL PROGRAMA COMPUTACIONAL NEUCAS. 5.3.3.1 Entrada de datos. 5.3.3.2 Verificación de datos. J. Escoger # tk cilútdros:, # d•Jlu•:t. 2. Pnsúmar Auptar-ClVFas. 3. Ll..ar •• fonaa biliaria •I tJe,apo d, mf1Vlaú'8/os tk cado cilútdro IUlrRfda ,1 dpúaú ~-,Jo: TO TI T2 T3 T4 N Rqlstmr ., tJe,apo úúdal tk cadoJlu• = TO ..• T(a); J' "tumpajlaal tkl "1tiJIIOjlu,. -t. l're!IÜJllar Auptt,r-Mtw. 5. PruiaatR" Caalbuuu. J. SJ,,. ,__,, arora-> _A..,,..,.DUG. "- "-'-lmp,lndrJd4- Jmp,lndr. s. - Di1»,JM 159 5.3.3.3 Circuito neumático . . 1 ...... .,___.¡......_.....,._-+--o-4----+----------------------------.2---+-----+--.... -..--+-----+------------------------s3-------....--+---+ ..... ....-----+------+------------------ ,. " 160 161 5.4 CASO 3- CASCADA SIMPLE - DISPOSITIVO PARA DOBLAR. 5.4.1 CROQUIS DE SITUACION. CilindtoC Se,gllndo doblado Cilindro .ti SujedOn Figura 5.5 - Croquis de situación Caso 3. 162 5.4.2 PLANTEAMIENTO DEL PROBLEMA. Con un útil de accionamiento neumático han de doblarse piezas de chapa. Sujeción de la pieza mediante el cilindro A. Primer doblado por la acción de un cilindro B y segundo doblado por el cilindro C. Todos los cilindros son de doble efecto. El ciclo se inicia accionando un pulsador de marcha y esta concebido de manera que realiza todas las operaciones automáticamente [9]. A continuación se muestra el diagrama de movimientos [9]: 1 2 3 4 5 6 7=1 1 A o 1 B o 1 e o Figura 5.6 - Diagrama de movimientos Caso 3. 5.4.3 RESULTADOS DEL PROGRAMA COMPUTACIONAL NEUCAS. 5.4.3.1 Entrada de datos. 5.4.3.2 Verificación de datos. J. Escora # de cUINlros y #defbs•s. Z. PnsúHtar Acq,tar-CIJ/Fas. J. u---forswbuurla ., tkr,q,o de m""'-lm/os de cada clliNlro lUtllldo ., slp/ntJeQ•mp/o: TO TI T2 Tl T4 cu[/1 N T(np() 1 R,gistrar ,t turwpo úuclal de cada jiu, = TO .•. T(a); , ., tkr,q,o jllUII d,I altimojbs .. ,t. PnsúHtar Auptar-M,,._ 5. PnsliRNTCOIÚUIIIIIT. MANEJO DE PANTALLA 1. v..g¡,-#" a,_, ----, D-,,._kM,,. Z.S/,.,,..,,._-> -,SAUR. J.SI,..,.,,.,,,__> __,AeqflU'-DIAG. -4.--,1,,..._,n'- 1_,,,¡,,,¡,. s.-,Da,,,,Jt,r C/,n,ltA 163 5.4.3.3 Circuito neumático . . 1-------1----.-1----t------.----------------------.2----------t--..--t------t----------------------s3---I,.-....-----,--+-+-....,.----+-----+----------------- t-----------+--------11 •• ,1 164 165 5.5 CASO 4 - SIMULTANEIDAD - DISPOSITIVO PARA CIZALLAR. 5.5.1 CROQUIS DE SITUACION. CilindroA Pinta Cillndro B Attan~a, ctlíndroO Sbj~i6n Figura S. 7 - Croquis de situación Caso 4. 166 5.5.2 PLATEAMIENTO DEL PROBLEMA. Con un dispositivo de cizallar ha de cortarse material en barras. La alimentación tendrá lugar por el cilindro neumático B, el cual moverá en la carrera de ida la pinza neumática A previamente cerrada. Una vez introducido el material contra un tope fijo, queda sujetado por el cilindro de sujeción C. Luego el cilindro A puede abrir y el cilindro B regresar. Después del cizallado del material por el cilindro D, afloja el cilindro de sujeción C y un nuevo ciclo puede comenzar [9]. A continuación se muestra el diagrama de movimientos [9]: 1 2 3 4 5 6 7=1 1 A o 1 B o 1 e o 1 D o Figura 5.8 - Diagrama de movimientos Caso 4. 5.5.3 RESULTADOS DEL PROGRAMA COMPUTACIONAL NEUCAS. 5.5.3.1 Entrada de datos. 5.5.3.2 Verificación de datos. J. EscOfer # tk t:U/adros y #tkjlues. 2. Presionar Aceplar-CIVF,u. J. Limar mfomu, binaria el tiempo de ,.,,,,¡,.¡mios tk coda cll/adro IIJIIDllo el s/pJale 9""1'10: T2 T3 T4 N l o Regúbar el tin,,po búdal tk codajlue = TO ..• T(a); y d tiempo jüto/ tkl IÚJÚIIDj/ue. 4. Pre"-1- Aceptar-Mm,. 5. Pre"-1- ConJbuuu. J. Vnflia,r # ilG- -•M..,_:, 0.,-ilM..,_ z. SJ '-:,- - > -SALIR. J. SJ,.. .. ., .,,,..,,,s - > -~DL-IG. 4.-i,,,,,,_--1,,,,,_,. 5.-Da.Jor e 167 168 5.6 CASO 5 - REPETIVIDAD - DISPOSITIVO PARA EMBUTIR. 5.6.1 CROQUIS DE SITUACION. Figura 5.9 - Croquis de situación Caso 5. 169 5.6.2 PLANTEAMIENTO DEL PROBLEMA. En un montaje debe ensamblarse una pieza en el interior de otra, y luego introducir un pasador a través de ambas. El cilindro A introduce lentamente la pieza, luego retrocede y da un pequeño golpe, a velocidad mayor, para acabar de colocarla en su asiento, sujetando a las dos, para que el cilindro B introduzca el pasador [9]. A continuación se muestra el diagrama de movimientos [9]: 1 2 3 4 5 6 7=1 1 A o 1 B o Figura 5.10 - Diagrama de movimientos Caso 5 5.6.3 RESULTADOS DEL PROGRAMA COMPUTACIONAL NEUCAS. 5.6.3.1 Entrada de datos. 5.6.3.2 Verificación de datos. J. Escorer # de d/""1rosy # de fases. 2. Presionar Aceplar-Cil/Fas. J. u,_, eafonaa b/Nuia <I tJe,,ya de au,ú,,Jenlu de - dJJMdro lUONla el slplenle (fe-,lo: TO TI T2 Tl T4 N T(n)a() 1 R,r{stmr el tie"'PO úúdal de-fl,se - TO ... T(a); J <I tte.pojw,I del altiao fase. 4. Pre~ Aceptar-Mtw. 5.Pre~COllluuulr. l . Vnflbr # k Gnq,., -·--, o,.,_.-. Z.SJ1,ay,,,.....-> "-'-S.4UR. J. SJ,.. ,_F.,,..,.-> "-'-A""P'""'DIAG. 4._/ __ ,d_ I,rq,,lmlr. s.-~ c...,,._ 170 6. CONCLUSIONES Y PERSPECTIVAS. 172 6.lCONCLUSIONES. En esta tesis se elaboró un programa computacional para dibujar un circuito neumático. Se resolvieron todos los pasos básicos de programación, mencionados en la sección de objetivo y planteamiento del problema, para poder finalmente trazar el circuito utilizando mando secuencial, montaje cascada simple. Algunas de las posibles razones del porque dicha herramienta no existía en el mercado podrían ser: Las grandes empresas no quisieron ofrecer dicha funcionalidad al mercado para poder cobrar el tiempo de ingenieros a empresas. A nadie se le había ocurrido. No se había visto el valor de ofrecer una herramienta de este índole a las empresas o instituciones educativas. No se creía que fuera posible. Etc. 173 Cualquiera que fuese la razón, esta tesis comprueba que si es posible automatizar la realización de circuitos neumáticos utilizando montaje cascada simple. El capitulo cuatro muestra la funcionalidad del programa. El capitulo cinco muestra la aplicación del programa en casos reales del mercado. Esto comprueba que dicha herramienta se puede ofrecer a empresas medianas y chicas y a instituciones educativas, y a un costo muy accesible. El valor comercial estimado de dicho programa es de veinte dólares americanos o ciento setenta pesos mexicanos (año 1998). Adicionalmente se pudo comprobar que la realización de circuitos neumáticos de manera automática ahorra tiempo valioso del usuario. Utilizando esta herramienta se puede obtener el circuito en un tiempo promedio de 2 minutos. 174 6.2PERSPECTIV AS. El presente trabajo de investigación puede continuarse en un futuro, cubriendo todos los aspectos del método cascada: Movimientos repetitivos de cilindros. Movimientos simultáneos de cilindros. Utilización de otros elementos de neumática: cilindros de simple efecto, etc. Numero de cilindros mayores que nueve. Una vez comprobado que se cubren todas las condiciones del método cascada, se puede utilizar las técnicas de programación elaboradasen esta tesis para dibujar circuitos con otros métodos sistemáticos de la neumática: Método paso a paso mínimo. Método paso a paso máximo. 175 Adicionalmente, una vez cubierta la elaboración de los circuitos neumáticos es posible expandir las técnicas de programación a otras tecnologías que tengan métodos sistemáticos para generar circuitos: Eléctrica. Hidráulica. Mecánica. Etc. 176 REFERENCIAS Y BIBLIOGRAFIAS. [1] W. DEPPERT; K. STOLL, Aplicaciones de la neumática.Traducido por Departamento Técnico de Festo. Marcombo BOIXAREU EDITORES, 1977. 168 p. [2] ANTONIO GUILLEN SALVADOR, Aplicaciones industriales de la neumática. Marcombo BIOXAREU EDITORES: Productiva, 1988. 160 p. [3] ANTONIO GUILLEN SALVADOR, Introducción a la neumática. Marcombo BIOXAREU EDITORES: Productiva, 1983. 156 p. [4] JOSE ROLDAN VILORIA, NEUMATICA, HIDRAUUCA Y ELECTRICIDAD APUCADA. Física aplicada. Otros fluidos. editorial Paraninfo: Segunda Edición, 1991. 242 p. [5] P. CROSER, Neumática. Festo Didactic, Manual de estudio, Nivel básico TP 101, 1991. 230 p. [6] J.P. HASEBRINK/R. KOBLER, Técnica del mando automático l. INICIACION AL MANDO NEUMATICO/ELECTRONEUMATICO. FESTO 73 Esslingen 1 (Berkheim), Manual de Instrucción para el Seminario El-FESTO, 212 p. [7] W. DEPPERT/K. STOLL, Dispositivos neumáticos. Marcombo BOIXAREU EDITORES, 1991, 188 p. 177 [8] Introducción en la Neumática. FESTO DIDACTIC, Manual de Estudio. [9] J. P. HASEBRINK/R. KOBLER. Introducción a la técnica neumática de mando, Pesto Didactic, Esslingen, Manual de estudio, 1992, 202 p. [10] CRISTOBAL JIMENEZ J. Seminario Pl22 Diseño de Mandos Neumáticos, FESTO DIDACTIC, México, 1997. [l l] GARY CORNELL. The Visual Basic 3 for Windows Handbook, Osbome McGraw-Hill, 1993, 885 p. ANEXO A PROGRAMA NEUCAS. Modulo Module - Modulo de Visual Basic que define los variables globales y los procedimientos globales (dibujar el diagrama fase, movimientos de cilindros) usada por las formas. Procedimiento que define las variables a usar en esta fonna. Rem Declaración de Variables Globales Option Explicit Rem Constantes Globales Global Const MaxCil = 9 Global Const MaxFases = 18 Global Const MaxTiempos = MaxFases + 1 Global Const PORTRAIT = 1 Global Const LANDSCAPE = 2 Rem Variables Globales Global NumCil As lnteger Global NumFases As Integer Global NumTiempos As Integer Global NumGrupos As Integer Global CilTiempo() As Integer Global CilFase() As lnteger Global CambioGrupos() As Integer Global Screen WidthTwip As Integer Global ScreenHeightTwip As Integer Global Screen WidthPixel As Integer Global ScreenHeightPixel As Integer Rem Banderas Globales Global CascadaSimple As Integer Rem Variables Globales para Impresión Type OrientStructure Orientation As Long Pas As String * 16 End Type 179 Declare Function Escape% Lib "GDI" (ByVal hDc%, ByVal nEsc%, ByVal nLen%, lpData As OrientStructure, lpOut As Any) Procedimiento que dibuja gráficamente el diagrama fase usando los movimientos de cilindros. Sub DrawDiagFaseMov (Pantalla As Fonn) Dim I, XPos, J, YPos As Integer Const LengthX = 411 Const Length Y = 596 Const CilY = Length Y / 4 Dim StartX, StartY As Integer Dim Pl, P2, P3, P4, CilPY As Integer Pantalla.DiagFaseMov .Cls StartY = 770 CilPY=CilY For I = O To NumCil - 1 StartX = 535 CilPY = CilPY + 596 Pantalla.DiagFaseMov.CurrentX = 100 Pantalla.DiagFaseMov.CurrentY = CilPY Pantalla.DiagFaseMov.FontName = "Times New Roman" Pantalla.DiagFaseMov.FontSize = 24 Pantalla.DiagFaseMov.ForeColor = &HO& Select Case I Case O Pantalla.DiagFaseMov.Print "A" Case 1 Pantalla.DiagFaseMov .Print "B" Case 2 Pantalla.DiagFaseMov.Print "C" Case 3 Pantalla.DiagFaseMov .Print "D" Case4 Pantalla.DiagFaseMov.Print "E" Case5 Pantalla.DiagFaseMov.Print "F" Case6 Pantalla.DiagFaseMov.Print "G" Case? Pantalla.DiagFaseMov .Print "H" Case 8 Pantalla.DiagFaseMov.Print "I" End Select For J = O To NumFases - 1 Pl = StartX P2 = StartX + LengthX P3 = StartY P4 = StartY + LengthY If J <= NumTiempos - 2 Toen Pantalla.DiagFaseMov.DrawWidth = 5 Pantalla.DiagFaseMov.ForeColor = &HFF& Endlf Pantalla.DiagFaseMov.DrawWidth = 2 Pantalla.DiagFaseMov.ForeColor = &HO& 180 Pantalla.DiagFaseMov.Line (P2, Pl)-(P2, P3) Pantalla.DiagFaseMov.Line (Pl, P2)-(P2, P4) Pantalla.DiagFaseMov.Line (P3, P4)-(P2, P4) Pantalla.DiagFaseMov.Line (P2, P4)-(P3, P3) If I = O Then Pantalla.DiagFaseMov.ForeColor = &HO& Pantalla.DiagFaseMov.FontSize = 10 Pantalla.DiagFaseMov.CurrentX = Pl - 150 Pantalla.DiagFaseMov.CurrentY = P3 - 225 Pantalla.DiagFaseMov.Print J + 1 If J = NumFases - 1 Then Pl = Pl +P2 Pantalla.DiagFaseMov.CurrentX = Pl - 300 Pantalla.DiagFaseMov.CurrentY = P3 - 225 Pantalla.DiagFaseMov.Print J + 2; "=1" Endlf Endlf StartX = StartX + LengthX NextJ StartY = StartY + LengthY Nextl EndSub Procedimiento que dibuja gráficamente los movimientos de cilindros. Sub DrawSecMov (Pantalla As Form) Pantalla.SecMov .Cls IPos = 100 For I = O To (NumCil - 1) JPos = 50 For J = 1 To NumFases Pantalla.SecMov.CurrentX = JPos Pantalla.SecMov.CurrentY = IPos If CilTiempo(I, J - 1) = O Then Sign = "+" Else Sign = "-" End If Select Case I Case O If CilFase(I, J) = 1 Then Pantalla.SecMov.Print "A"+ Sign Case 1 If CilFase(I, J) = 1 Then Pantalla.SecMov.Print "B" + Sign Case2 If CilFase(I, J) = 1 Then Pantalla.SecMov.Print "C" + Sign Case3 IfCilFase(l, J) = 1 Then Pantalla.SecMov.Print "D" + Sign 181 Case4 lf CilFase(I, J) = 1 Then Pantalla.SecMov.Print "E"+ Sign Case 5 lf CilFase(I, J) = 1 Then Pantalla.SecMov.Print "F" + Sign Case6 lf CilFase(I, J) = 1 Then Pantalla.SecMov.Print "G" + Sign Case7 lf CilFase(I, J) = 1 Then Pantalla.SecMov.Print "H" + Sign Case 8 lf CilFase(I, J) = 1 Then Pantalla.SecMov.Print "I" + Sign End Select JPos = JPos + 160 NextJ IPos = IPos + 140 Nextl JPos = 50 + 157.5 Pantalla.SecMov.DrawWidth = 1 For I = 2 To NumFases lf CambioGrupos(I) = 1 Then Pantalla.SecMov.CurrentX = O Pantalla.SecMov.CurrentY = JPos Pantalla.SecMov.Line (JPos, 0)-(JPos, 2268) Endlf JPos = JPos + 157 .5 Next I EndSub Forma PantallaO - Esta forma ejecuta la pantalla de entrada de presentación del programa. Informa de los requerimientos mínimos técnicos de sistema para ejecutar el programa. Procedimiento que define los variables a usar en esta fonna. Option Explicit Rem Variables a Nivel Fonna Dim SWidthTwipPant0 As Integer Dim SHeightTwipPant0 As Integer Dim SWidthPixelPant0 As Integer Dim SHeightPixelPant0 As Integer Procedimiento que descarga la fonna Pantalla0 y carga la fonna Pantallal. 182 Sub CONTP0_Click () Picture = LoadPicture() Unload Pantalla0 Pantalla! .Show O End Sub Procedimiento que se ejecuta al inicio de carga de fonna pantalla0. Carga el *.bmp de presentación de entrada e inicializa los elementos de la fonna. Sub Fonn_Load O DimMsg ScreenWidthTwip = Screen.Width ScreenHeightTwip = Screen.Height Screen WidthPixel = Screen. TwipsPerPixelX ScreenHeightPixel = Screen.TwipsPerPixelY SWidthTwipPant0 = Screen WidthTwip SHeightTwipPant0 = ScreenHeightTwip SWidthPixelPant0 = Screen WidthPixel SHeightPixelPant0 = ScreenHeightPixel Rem Inicializar Pantalla O InitializePantalla0 Rem Termina Inicializacion de Pantalla0 Rem Agregar elementos en SSCommand = CONTP0 CONTP0.Caption = "CONTINUAR" Rem Termina agregar elementos en SSCommand = CONTP0 Rem Cargando Bitmap de Entrada Picture = LoadPicture("c:\mydocu-1 \vbasic\NEUCAS.BMP") EndSub Procedimiento que inicializa todos los valores de todos los elementos de la fonna pantalla0. Sub InitializePantalla0 O Rem Inicializando Fonna = Pantalla0 Pantalla0.Height = SHeightTwipPant0 Pantalla0.Left = O Pantalla0.Top = O Pantalla0.Width = SWidthTwipPant0 Pantalla0.AutoRedraw = -1 'Verdadero 183 Pantalla0.BackColor = &HFF8080 Rem Pantalla0.BorderStyle- Inicializado Manualmente Pantalla0.Caption = "Pantalla0" Rem Pantalla0.ClipControls - Inicializado Manualmente Rem Pantalla0.ControlBox - Inicializado Manualmente Pantalla0.DrawMode = 13 'Copy Pen Pantalla0.DrawStyle = O 'Solido Pantalla0.DrawWidth = 1 Pantalla0.Enabled = -1 Pantalla0.FillColor = &H0 Pantalla0.FillStyle = 7 Pantalla0.FontBold = -1 Pantalla0.Fontltalic = O 'Verdadero 'Diagonal Cruzado 'Verdadero 'Falso Pantalla0.FontName = "Times New Roman" Pantalla0.FontSize = 9.6 Pantalla0.FontStrikethru = O 'Falso Pantalla0.FontTransparent = -1 'Verdadero Pantalla0.FontUnderline = O 'Falso Pantalla0.ForeColor = &HCOOOOO Pantalla0.HelpContextID = O Rem Pantalla0.lcon - Agregar si se requiere Pantalla0.KeyPreview = O 'Falso Rem Pantalla0.LinkMode - Inicializado Manualmente Pantalla0.LinkTopic = "Pantalla0" Rem Pantalla0.MaxButton - Inicializado Manualmente Rem Pantalla0.MDIChild - Inicializado Manualmente Rem Pantalla0.MinButton - Inicializado Manualmente Pantalla0.MousePointer = O 'Default Rem Pantalla0.Name - Inicializado Manualmente Rem Pantalla0.Picture - Agregar si se requiere Pantalla0.ScaleHeight = SHeightTwipPant0 / SHeightPixelPant0 Pantalla0.ScaleLeft = O Pantalla0.ScaleMode = 3 'Pixel Pantalla0.ScaleTop = O Pantalla0.ScaleWidth = SWidthTwipPant0 / SWidthPixelPant0 Pantalla0.Tag = "" Pantalla0.Visible = -1 'Verdadero Pantalla0.WindowState = 2 'Maximizado Rem Tennina Incializando Forma = Pantalla0 Rem Inicializando SSCommand en Forma Pantalla} = CONTP0 CONTP0.Height = SHeightTwipPant0 / SHeightPixelPant0 * .1 CONTP0.Left = SWidthTwipPant0 / SWidthPixelPant0 * .83 CONTP0.Top = SHeightTwipPant0 / SHeightPixelPant0 * .57 CONTP0.Width = SHeightTwipPant0 / SHeightPixelPant0 * .2 CONTP0.AutoSize = O 'Ninguno CONTP0.BevelWidth = 8 CONTPO.Caption = "CONTPO" Rem CONTP0.Draglcon - Agregar si se requiere 184 CONTP0.DragMode = O 'Manual CONTPO.Enabled = -1 'Verdadero CONTP0.Font3D = 2 'Levantado w/heavy shading CONTP0.FontBold = -1 'Verdadero CONTP0.Fontltalic = O 'Falso CONTP0.FontName = "Times New Roman" CONTPO.FontSize = 9.6 CONTPO.FontStrikethru = O 'Falso CONTP0.FontUnderline = O 'Falso CONTP0.ForeColor = &H0 CONTPO.HelpContextID = O Rem CONTP0.Index - Agregar si se requiere CONTP0.MousePointer = O 'Default CONTPO.Outline = -1 'Verdadero Rem CONTPO.Picture - Agregar si se requiere CONTP0.RoundedComers = -1 'Verdadero CONTP0.Tablndex = 239 CONTPO.TabStop = -1 'Verdadero CONTP0.Tag = "" CONTP0.Visible = -1 'Verdadero Rem Termina Inicializacion SSCommand en Forma Pantalla!= CONTPO EndSub Forma Pantallal - Forma que solicita la entrada de los datos de movimientos de los cilindros en forma binaria. Procedimiento que define los variables a usar en esta forma. Option Explicit Rem Constantes a Nivel Forma Const MsgCil = "Teclear O o l" Const MsgCil2 = "Favor de Llenar Todos Los Movimientos De Todos Los Cilindros" Rem Variables a Nivel Forma Dim CharPressed As String Dim KeyCaptured As lnteger Dim lndexl As Integer Dim SWidthTwipPantl As lnteger Dim SHeightTwipPant 1 As Integer Dim SWidthPixelPant 1 As Integer Dim SHeightPixelPant 1 As Integer Rem Banderas a Nivel Forma 185 Dim GotCilindros As Integer Dim GotFases As Integer Dim Got0OrlFlag As Integer Dim GotMov As Integer . Procedimiento que confirma que ya fueron seleccionados los # de cilindros. Sub Cilindros_ Click O NumCil = Cilindros.Listlndex + 1 GotCilindros = 1 'Verdadero If GotCilindros = 1 And GotFases = 1 Then GetCilFasesData.Enabled = -1 End If EndSub Procedimiento que crea la matriz cilfase basado en la entrada de movimientos de cilindros, calcula el numero de grupos, descarga la forma pantalla 1 y carga la forma pantalla 2. Sub CONTPl_Click () Dim I, J, K, IPos, JPos As Integer Dim LastCambioGrupos, NewCambioGrupos As Integer Dim NextllnFases, GotNextllnFases, IndexFases As Integer ReDim CilFase(NumCil - 1, Numfases) ReDim CambioGrupos(Numfases) Rem - Inicializando CambioGrupos -> No usados = 2, De 1 a NumFases = O CambioGrupos(0) = 2 CambioGrupos( 1) = 1 For I = 2 To Numfases CambioGrupos(I) = O Next I Rem - Creando Matriz CilFase Usando Xor del Matriz CilTiempo For I = O To NumCil - 1 K=O For J = 1 To Numfases CilFase(I, J) = CilTiempo(I, K) Xor CilTiempo(I, K + 1) K=K+l NextJ Nextl Rem - Checando CilFase de Manera Horizontal para detectar Cambio de Grupos Rem - Si se encuentra 2 unos seguidos se dice que en dicho fase hay cambio de grupo For I = O To NumCil - 1 186 187 For J = l To Numfases - 1 If CilFase(I, J) = 1 And CilFase(I, J - 1) = 1 Then CambioGrupos(J) = 1 Endlf NextJ Nextl Rem - Checando CilFase de Manera Vertical para detectar Cambio de Grupos Rem - Si se encuentra 1 uno, se scanea hacia atras (direccion horizontal) si hay otro uno, si existe otro uno se dice que hay cambio de grupo. LastCambioGrupos = 1 For I = 2 To Numfases NextllnFases = O J=O Do Until J = NumCil If CilFase(J, 1) = 1 Then NextllnFases = J GotNextllnFases = O Do Until CilFase(NextllnFases, K) = 1 Or K = LastCambioGrupos K=K+l Loop If CilFase(NextllnFases, K) = 1 Then GotNextllnFases = 1 Else GotNextllnFases = O End If If GotNextllnFases = 1 Then CambioGrupos(I) = 1 LastCambioGrupos = I GotNextllnFases = O Exit Do Endlf J=J+l Else J=J+l Endlf Loop Next I NumGrupos = O For I = 1 To Numfases If CambioGrupos(I) = 1 Then NumGrupos = NumGrupos + 1 Next I Pantalla2.Show O Unload Pantalla! End Sub Procedimiento que confirma que ya fueron seleccionados los # de fases. Sub Fases_ Click O Numfases = Fases.Listlndex + 1 GotFases = 1 'Verdadero If GotCilindros = 1 And GotFases = 1 Toen GetCilFasesData.Enabled = -1 Endlf EndSub Procedimiento que se ejecuta al inicio de carga de forma pantalla!. Inicializa los elementos de la forma. Sub Form_Load O Rem Variables Locales Dim I As Integer Dim CilNumStr As String Dim FasesNumStr As String ScreenWidthTwip = Screen.Width ScreenHeightTwip = Screen.Height Screen WidthPixel = Screen. TwipsPerPixelX ScreenHeightPixel = Screen. TwipsPerPixel Y SWidthTwipPantl = ScreenWidthTwip SHeightTwipPantl = ScreenHeightTwip SWidthPixelPantl = ScreenWidthPixel SHeightPixelPant 1 = ScreenHeightPixel Rem Inicializacion de valores de default de Pantalla 1 Ini tializePantalla 1 Rem Posicionar cursor en elemento Cilindros Cilindros.SetFocus Rem Agregar elementos en SSPanel = NombrePantallal NombrePantallal.Caption = "ENTRADA DE DATOS" Rem Termina agregar elementos en SSPanel = NombrePantallal Rem Agregar elementos en SSPanel = TextCil TextCil.Caption ="#De Cilindros" Rem Termina agregar elementos en SSPanel = TextCil 188 Rem Agregar elementos en SSPanel = TextFases TextFases.Caption ="#De Fases" Rem Terminar agregar elementos en SSPanel = TextFases Rem Agregar elementos en ComboBox = Cilindros NumCil=0 GotCilindros = O For I = 1 To MaxCil CilNumStr = Str(I) Cilindros.Addltem CilNumStr + " Cilindros" ' Add each item to list. Nextl Rem Terminar Agregar elementos en ComboBox = Cilindros Rem Agregar elementos en ComboBox = Fases Numfases = O GotFases = O For I = 1 To MaxFases FasesNumStr = Str(I) Fases.Addltem FasesNumStr +"Fases"' Add each item to list. Nextl Rem Termina Agregar elementos en ComboBox = Fases Rem Agregar elementos en SSCommand = GetCilFasesData GetCilFasesData.Caption = "Aceptar-CH/Fas" Rem Termina agregar elementos en SSCommand = TextCil Rem Agregar elementos en Picture Box = AyudaPl AyudaPl.FontSize = 13.5 AyudaPl.FontBold = -1 AyudaPl.CurrentX = 20 AyudaPl.CurrentY = 100 AyudaPl.Print" INSTRUCCIONES PARA" AyudaPl.CurrentX = 20 AyudaPl.Print" MANEJO DE PANTALLA" AyudaPl.DrawWidth = 3 AyudaPl.Line (O, 750)-(SWidthTwipPantl, 750) AyudaPl.FontSize = 12 AyudaPl.Fontltalic = -1 AyudaPl.CurrentX = O AyudaPl.CurrentY = 900 AyudaPl.Print" l. Escoger# de cilindros y" AyudaPl.Print" # de fases." AyudaPl.Print"2. Presionar Aceptar-CH/Fas." AyudaPl.Print" 3. Llenar en forma binaria el" AyudaPl.Print" tiempo de movimientos" AyudaPl.Print" de cada cilindro usando el" AyudaPl.Print" siguiente ejemplo: " AyudaPl.Print " " AyudaPl.Fontltalic = O 189 AyudaPl.Print " TO Tl T2 T3 T4" AyudaPl.DrawWidth = 1 AyudaPl.Line (SWidthTwipPantl * .15, 3414)-(SWidthTwipPantl * .95, 3414) AyudaPl.Line (SWidthTwipPantl * .15, 4000)-(SWidthTwipPantl * .95, 4000) AyudaPl.Line (SWidthTwipPantl * .15, 3414)-(SWidthTwipPantl * .15, 4000) AyudaPl.Line (SWidthTwipPantl * .35, 3414)-(SWidthTwipPantl * .35, 4000) AyudaPl.Line (SWidthTwipPantl * .55, 3414)-(SWidthTwipPantl * .55, 4000) AyudaPl.Line (SWidthTwipPantl * .75, 3414)-(SWidthTwipPantl * .75, 4000) AyudaPl.Line (SWidthTwipPantl * .95, 3414)-(SWidthTwipPantl * .95, 4000) AyudaPl.DrawWidth = 3 AyudaPl.Line (SWidthTwipPantl * .15, 4000)-(SWidthTwipPantl * .35, 3414) AyudaPl.Line (SWidthTwipPantl * .35, 3414)-(SWidthTwipPantl * .55, 3414) AyudaPl.Line (SWidthTwipPantl * .55, 3414)-(SWidthTwipPantl * .75, 4000) AyudaPl.Line (SWidthTwipPantl * .75, 4000)-(SWidthTwipPantl * .95, 4000) AyudaPl.CurrentX = O AyudaPl.CurrentY = 3600 AyudaPl.FontSize = 10 AyudaPl.Print " Cil A" AyudaPl.CurrentX = O AyudaPl.CurrentY = 4050 AyudaPl.Print " T(n)=O 1 1 O O" AyudaPl.Fontltalic = -1 'Verdadero AyudaPl.CurrentX = 20 AyudaPl.CurrentY = 4400 AyudaPl.FontSize = 12 AyudaPl.Print" Registrar el tiempo inicial" AyudaPl.Print" de cada fase= TO ... T(n);" AyudaPl.Print" y el tiempo final del" AyudaPl.Print" ultimo fase." AyudaPl.Print" 4. Presionar Aceptar-Mov." AyudaPl.Print" 5. Presionar Continuar." AyudaPl.DrawWidth = 3 AyudaPl.Line (O, 6140)-(SWidthTwipPantl, 6140) AyudaPl.CurrentY = 6240 AyudaPl.CurrentX = 20 AyudaPl.FontSize = 10 AyudaPl.Fontltalic = O AyudaPl.Print " Presionar SALIR para salirse" AyudaPl.Print" a cualquier tiempo" Rem Termina agregar elementos en Picture Box = AyudaPl Rem Agregar elementos en SSPanel = TextCill(n) For I = O To (MaxCil - 1) TextCill(l).Caption ="Cilindro"+ Chr$(1 + 65) Nextl Rem Termina agregar elementos en SSPanel = F(n) Rem Agregar elementos en SSPanel = F(n) For I = O To (MaxTiempos - 1) 190 F(l).Caption = "T" + Str((I)) Nextl Rem Termina agregar elementos en SSPanel = F(n) Rem Agregar elementos en SSCommand = OKMOVPl OKMOVPl.Caption = "Aceptar-Movimientos de Cilindros" Rem Termina agregar elementos en SSCommand = OKMOVPl Rem Agregar elementos en SSCommand = CONTP 1 CONTPl.Caption = "Continuar" Rem Termina agregar elementos en SSCommand = CONTPl Rem Agregar elementos en SSCommand = QUITPl QUITPI.Caption = "SALIR" Rem Termina agregar elementos en SSCommand = QUITPl Rem Agregar elementos en SSCommand = INITPl INITPI.Caption = "Reinicializar" Rem Termina agregar elementos en SSCommand = INITPl End Sub Procedimiento que crea la matriz que solicita los datos de entrada a base de # de cilindros y # de fases seleccionados. Sub GetCilFasesData_Click O Dim I, J As Integer Dim CurrentCil As String If GotCilindros = 1 And GotFases = 1 Then GotCilindros = O GotFases = O Cilindros.Enabled = O Fases.Enabled = O ChooseCilFases.Cls ChooseCilFases.Print Str(NumCil) + " Cilindros" ChooseCilFases.Print Str(Numfases) +"Fases" NumTiempos = Numfases + 1 ChooseCilFases.Print Str(NumTiempos) +"Tiempos" For I = O To (NumCil - 1) TextCil 1 (l).Enabled = -1 TextCil 1 (1). Visible = -1 For J = O To (NumTiempos - 1) Select Case I Case O MovCilsA(J).Enabled = -1 191 MovCilsA(J).Visible = -1 Case 1 MovCilsB(J).Enabled = -1 MovCilsB(J). Visible = -1 Case2 MovCilsC(J).Enabled = -1 MovCilsC(J). Visible = -1 Case 3 MovCilsD(J).Enabled = -1 MovCilsD(J).Visible = -1 Case4 MovCilsE(J).Enabled = -1 MovCilsE(J).Visible = -1 Case5 MovCilsF(J).Enabled = -1 MovCilsF(J).Visible = -1 Case6 MovCilsG(J).Enabled = -1 MovCilsG(J). Visible = -1 Case? MovCilsH(J).Enabled = -1 MovCilsH(J).Visible = -1 Case8 MovCilsl(J).Enabled = -1 MovCilsl(J).Visible = -1 End Select NextJ Nextl OKMOVPl.Visible = -1 OKMOVPl.Enabled = -1 CONTPl.Visible = -1 For J = O To (NumTiempos - 1) F(J).Enabled = -1 F(J). Visible = -1 NextJ ReDim CilTiempo(NumCil - 1, NumTiempos - 1) For I = O To (NumCil - 1) For J = O To (NumTiempos - 1) CilTiempo(I, J) = 2 NextJ Nextl MovCilsA(0).SetFocus GetCilFasesData.Enabled = O End If End Sub Procedimiento que inicializa todos los valores de todos los elementos de la forma pantalla!. 192 Sub InitializePantallal () Dim I As lnteger Dim TempPos As Integer Rem Inicializando Forma = Pantalla! Pantalla! .AutoRedraw = O 'Falso Pantalla!. Width = SWidthTwipPant 1 Pantalla l .Height = SHeightTwipPant 1 Pantallal.Left = O Pantallal.Top = O Pantalla! .BackColor = &HFF8080 Rem Pantalla! .BorderStyle - Inicializado Manualmente Pantalla! .Caption = "Pantalla!" Rem Pantalla! .ClipControls - Inicializado Manualmente Rem Pantalla! .ControlBox - Inicializado Manualmente Pantallal.DrawMode = 13 'Copy Pen Pantalla! .DrawStyle = O 'Solido Pantalla! .DrawWidth = 1 Pantalla! .Enabled = -1 Pantalla! .FillColor = &HO Pantalla! .FillStyle = 7 Pantalla! .FontBold = -1 Pantalla! .Fontltalic = O 'Verdadero 'Diagonal Cruzado 'Verdadero 'Falso Pantallal.FontName = "Times New Roman" Pantallal.FontSize = 18 Pantalla! .FontStrikethru = O 'Falso Pantallal.FontTransparent = -1 'Verdadero Pantallal.FontUnderline = O 'Falso Pantalla! .ForeColor = &HCOOOOO Pantallal.HelpContextID = O Rem Pantallal.lcon - Agregar si se requiere Pantalla! .KeyPreview = O 'Falso Rem Pantalla! .LinkMode - Inicializado Manualmente Pantallal.LinkTopic ="Pantalla!" Rem Pantallal.MaxButton - Inicializado Manualmente Rem Pantalla! .MDIChild - Inicializado Manualmente Rem Pantalla! .MinButton - Inicializado Manualmente Pantallal.MousePointer = O 'Default Rem Pantalla! .Name - Inicializado Manualmente Rem Pantallal.Picture -Agregar si se requiere Pantalla! .ScaleHeight = SHeightTwipPantl Pantallal.ScaleLeft = O Pantalla! .ScaleMode = 1 'Twip Pantallal.ScaleTop = O Pantallal.ScaleWidth = SWidthTwipPantl 193 Pantallal.Tag = "" Pantallal.Visible = -1 'Verdadero Pantallal.WindowState = 2 'Maximizado Rem Termina Inicializacion Forma = Pantalla! Rem Inicializando SSPanel en Forma Pantalla!= NombrePantallal NombrePantallal.Align = O 'Ninguno NombrePantallal.Height = SHeightTwipPantl * .09 NombrePantallal.Left = SWidthTwipPantl * .01 NombrePantallal.Top = SHeightTwipPantl * .005 NombrePantallal.Width = SWidthTwipPantl * .4 NombrePantallal .Alignment = 7 'Centro - Medio NombrePantallal.AutoSize = O 'Ninguno NombrePantallal .BackColor = &HCOOOOO NombrePantallal .Bevellnner = 1 NombrePantallal.BevelOuter = 2 NombrePantallal.BevelWidth = 5 'Inset 'Levantado NombrePantallal .BorderWidth = 4 NombrePantallal.Caption = "NombrePantallal" NombrePantallal.DataField = "" Rem NombrePantallal .DataSource - Inicializado Manualmente Rem NombrePantallal .Draglcon - Agregar si se requiere NombrePantallal .DragMode = O 'Manual NombrePantallal.Enabled = -1 'Verdadero NombrePantallal.FloodColor = &H0 NombrePantallal.FloodShowPct = -1 'Verdadero NombrePantallal.FloodType = O NombrePantallal.Font3D = 4 NombrePantallal .FontBold = -1 NombrePantallal.Fontltalic = O 'Ninguno 'Inset w/heavy shading 'Verdadero 'Falso NombrePantallal.FontName = "Times New Roman" NombrePantallal.FontSize = 18 NombrePantallal .FontStrikethru = O 'Falso NombrePantallal.FontUnderline = O 'Falso NombrePantallal .ForeColor = &HFFFF& NombrePantallal.HelpContextID = O Rem NombrePantallal .Index - Agregar si se requiere NombrePantallal .MousePointer = O 'Default NombrePantallal.Outline = O 'Falso NombrePantallal.RoundedComers = -1 'Verdadero NombrePantallal .ShadowColor = 1 'Negro NombrePantallal.Tablndex = O NombrePantallal.Tag = "" NombrePantallal.Visible = -1 'Verdadero Rem Termina inicializacion de SSPanel en FormaPantalla!= NombrePantallal Rem Inicializando SSPanel en Forma Pantalla!= TextCil TextCil.Align = O 'Ninguno TextCil.Height = SHeightTwipPantl * .07 194 TextCil.Left = SWidthTwipPantl * .03 TextCil.Top = SHeightTwipPantl * .11 TextCil.Width = SWidthTwipPantl * .17 TextCil.Alignment = 7 'Centro - Medio TextCil.AutoSize = O 'Ninguno TextCil.BackColor = &HC0COC0 TextCil.Bevellnner = 2 TextCil.BevelOuter = 2 TextCil.BevelWidth = 6 TextCil.BorderWidth = 3 TextCil.Caption = 11TextCil11 TextCil.DataField = 1111 'Levantado 'Levantado Rem TextCil.DataSource - Inicializado Manualmente Rem TextCil.Draglcon - Agregar si se requiere TextCil.DragMode = O 'Manual TextCil.Enabled = -1 'Verdadero TextCil.FloodColor = &HFF TextCil.FloodShowPct = -1 'Verdadero TextCil.FloodType = O TextCil.Font3D = 4 TextCil.FontBold = -1 TextCil.Fontltalic = O 'Ninguno 'Inset w/heavy shadow 'Verdadero 'Falso TextCil.FontName = "Times New Roman 11 TextCil.FontSize = 9.6 TextCil.FontStrikethru = O 'Falso TextCil.FontUnderline = O 'Falso TextCil.ForeColor = &H80000008 TextCil.HelpContextID = O Rem TextCil.Index - Agregar si se requiere TextCil.MousePointer = O 'Default TextCil.Outline = O 'Falso TextCil.RoundedComers = -1 'Verdadero TextCil.ShadowColor = 1 'Negro TextCil.Tablndex = 1 TextCil. Tag = "" TextCil.Visible = -1 'Verdadero Rem Termina Inicializacion de SSPanel en Forma Pantalla!= TextCil Rem Inicializando SSPanel en Forma Pantalla!= TextFases TextFases.Align = O 'Ninguno TextFases.Height = SHeightTwipPantl * .07 TextFases.Left = SWidthTwipPantl * .03 TextFases.Top = SHeightTwipPantl * .185 TextFases.Width = SWidthTwipPantl * .17 TextFases.Alignment = 7 'Centro - Medio TextFases.AutoSize = O 'Ninguno TextFases.BackColor = &HC0C0C0 TextFases.Bevellnner = 2 'Levantado 195 TextFases.BevelOuter = 2 'Levantado TextFases.BevelWidth = 6 TextFases.BorderWidth = 3 TextFases.Caption = "TextFases" TextFases.DataField = "" Rem TextFases.DataSource - Inicializado Manualmente Rem TextFases.Draglcon - Agregar si se requiere TextFases.DragMode = O 'Manual TextFases.Enabled = -1 'Verdadero TextFases.FloodColor = &HFF TextFases.FloodShowPct = -1 'Verdadero TextFases.FloodType = O TextFases.Font3D = 4 TextFases.FontBold = -1 TextFases.Fontltalic = O 'Ninguno 'Inset w/heavy shadow 'Verdadero 'Falso TextFases.FontName = "Times New Roman" TextFases.FontSize = 9.6 TextFases.FontStrikethru = O 'Falso TextFases.FontUnderline = O 'Falso TextFases.ForeColor = &H80000008 TextFases.HelpContextID = O Rem TextFases.Index - Agregar si se requiere TextFases.MousePointer = O 'Default TextFases.Outline = O 'Falso TextFases.RoundedComers = -1 'Verdadero TextFases.ShadowColor = 1 'Negro TextFases.Tablndex = 2 TextFases.Tag = "" TextFases. Visible = -1 'Verdadero Rem Termina Inicializacion de SSPanel en Forma Pantalla}= TextFases Rem Inicializando ComboBox en Forma Pantalla} = Cilindros Rem Cilindros.Height - Inicializado Manualmente Cilindros.Left = SWidthTwipPantl * .22 Cilindros.Top= SHeightTwipPantl * .11 Cilindros.Width = SWidthTwipPantl * .16 Cilindros.BackColor = &HE0FFFF Rem Cilindros.Draglcon - Agregar si se requiere Cilindros.DragMode = O 'Manual Cilindros.Enabled = -1 'Verdadero Cilindros.FontBold = -1 'Verdadero Cilindros.Fontltalic = O 'Falso Cilindros.FontName = "Times New Roman" Cilindros.FontSize = 14 Cilindros.FontStrikethru = O 'Falso Cilindros.FontUnderline = O 'Falso Cilindros.ForeColor = &H80000008 Cilindros.HelpContextID = O Rem Cilindros.Index - Agregar si se requiere 196 Cilindros.MousePointer = O 'Default Rem Cilindros.Sorted - fuicializado Manualmente Rem Cilindros.Style - fuicializado Manualmente Cilindros.Tablndex = 3 Cilindros.TabStop = -1 'Verdadero Cilindros.Tag = "" Rem Cilindros.Text- fuicializado Manualmente Cilindros. Visible = -1 'Verdadero Rem Termina inicializacion de ComboBox en Forma Pantalla! = Cilindros Rem fuicializando ComboBox en Forma Pantalla} = Fases Rem Fases.Height = SHeightTwipPantl * .07 Fases.Left = SWidthTwipPantl * .22 Fases.Top= SHeightTwipPantl * .185 Fases.Width = SWidthTwipPantl * .16 Fases.BackColor = &HEOFFFF Rem Fases.Draglcon - Agregar si se requiere Fases.DragMode = O 'Manual Fases.Enabled = -1 'Verdadero Fases.FontBold = -1 'Verdadero Fases.Fontltalic = O 'Falso Fases.FontName = "Times New Roman" Fases.FontSize = 14 Fases.FontStrikethru = O 'Falso Fases.FontUnderline = O 'Falso Fases.ForeColor = &880000008 Fases.HelpContextID = O Rem Fases.Index - Agregar si se requiere Fases.MousePointer = O 'Default Rem Fases.Sorted - Inicializado Manualmente Rem Fases.Style - fuicializado Manualmente Fases.Tablndex = 4 Fases.TabStop = -1 'Verdadero Fases.Tag = '"' Rem Fases.Text - Inicializado Manualmente Fases. Visible = -1 'Verdadero Rem Termina Inicializacion de ComboBox en Forma Pantalla} = Fases Rem fuicializando SSCommand en Forma Pantalla! = GetCilFasesData GetCilFasesData.Height = SHeightTwipPantl * .095 GetCilFasesData.Left = SWidthTwipPantl * .41 GetCilFasesData.Top = SHeightTwipPantl * .12 GetCilFasesData.Width = SWidthTwipPantl * .13 GetCilFasesData.AutoSize = O 'Ninguno GetCilFasesData.BevelWidth = 6 GetCilFasesData.Caption = "GCFD" Rem GetCilFasesData.Draglcon - Agregar si- se requiere GetCilFasesData.DragMode = O 'Manual GetCilFasesData.Enabled = O 'Falso 197 GetCilFasesData.Font3D = 4 GetCilFasesData.FontBold = -1 GetCilFasesData.Fontltalic = O 'Inset w/heavy shading 'Verdadero 'Falso GetCilFasesData.FontName = "Times New Roman" GetCilFasesData.FontSize = 9.6 GetCilFasesData.FontStrikethru = O 'Falso GetCilFasesData.FontUnderline = O 'Falso GetCilFasesData.ForeColor = &880000008 GetCi1FasesData.8elpContextID = O Rem GetCilFasesData.Index - Agregar si se requiere GetCilFasesData.MousePointer = O 'Default GetCilFasesData.Outline = -1 'Verdadero Rem GetCilFasesData.Picture - Agregar si se requiere GetCilFasesData.RoundedComers = -1 'Verdadero GetCilFasesData.Tablndex = 5 GetCilFasesData.TabStop = -1 'Verdadero GetCilFasesData.Tag = "" GetCilFasesData.Visible = -1 'Verdadero Rem Termina Inicializcion de SSCommand en Forma Pantallal = GetCilFasesData Rem Inicializando Picture Box en Forma Pantallal = ChooseCilFases ChooseCilFases.8eight = S8eightTwipPantl * .095 ChooseCilFases.Left = SWidthTwipPantl * .56 ChooseCilFases.Top = S8eightTwipPantl * .12 ChooseCilFases.Width = SWidthTwipPantl * .11 ChooseCilFases.Align = O 'Ninguno ChooseCilFases.AutoRedraw = -1 'Verdadero ChooseCilFases.AutoSize = O 'Falso ChooseCilFases.BackColor = &880FFFF Rem ChooseCilFases.BorderStyle - Inicializado Manualmente Rem ChooseCilFases.ClipControls - Inicializado Manualmente ChooseCilFases.DataField = "" Rem ChooseCilFases.DataSource - Inicializado Manualmente Rem ChooseCilFases.Draglcon - Agregar si se requiere ChooseCilFases.DragMode = O 'Manual ChooseCilFases.DrawMode = 13 'Copy Pen ChooseCilFases.DrawStyle = O 'Solido ChooseCilFases.DrawWidth = 1 ChooseCilFases.Enabled = -1 'Verdadero ChooseCilFases.FillColor = &80 ChooseCilFases.FillStyle = O 'Solido ChooseCilFases.FontBold = -1 'Verdadero ChooseCilFases.Fontltalic = O 'Falso ChooseCilFases.FontName = "Times New Roman" ChooseCilFases.FontSize = 9.6 ChooseCilFases.FontStrikethru = O 'Falso ChooseCilFases.FontTransparent = -1 'Verdadero ChooseCilFases.FontUnderline = O 'Falso ChooseCilFases.ForeColor = &880000008 198 ChooseCiIFases.HelpContextID = O Rem ChooseCilFases.Index - Agregar si se requiere ChooseCilFases.Linkltem = "" Rem ChooseCilFases.LinkMode - Inicializado Manualmente ChooseCilFases.LinkTimeout = 50 ChooseCilFases.LinkTopic = "" ChooseCilFases.MousePointer = O 'Default Rem ChooseCilFases.Picture - Agregar si se requiere ChooseCiIFases.ScaleHeight = 948 ChooseCilFases.ScaleLeft = O ChooseCiIFases.ScaleMode = 1 Twip ChooseCilFases.ScaleTop = O ChooseCilFases.ScaleWidth = 1320 ChooseCilFases.Tablndex= 6 ChooseCilFases.TabStop = -1 'Verdadero ChooseCilFases.Tag = "" ChooseCilFases.Visible = -1 'Verdadero Rem Termina Inicializacion de Picture Box en Forma Pantalla!= ChooseCilFases Rem Inicializando Picture Box en Forma Pantalla!= AyudaPl AyudaPl.Height = SHeightTwipPantl * .75 AyudaPl.Left = SWidthTwipPantl * .7 AyudaPl.Top = SHeightTwipPantl * .04 AyudaPl.Width = SWidthTwipPantl * .28 AyudaPl.Align = O 'Ninguno AyudaPl.AutoRedraw = 1 'Verdadero AyudaPl.AutoSize = O 'Falso AyudaPl.BackColor = &H80FFFF Rem AyudaPl.BorderStyle - Inicializado Manualmente Rem AyudaPl.ClipControls - Inicializado Manualmente AyudaPl.DataField = "" Rem AyudaPl.DataSource - Inicializado Manualmente Rem AyudaPl.Draglcon -Agregar si se requiere AyudaPl.DragMode = O 'Manual AyudaPl.DrawMode = 13 'Copy Pen AyudaPl.DrawStyle = O 'Solido AyudaPl.DrawWidth = 1 AyudaPl.Enabled = -1 'Verdadero AyudaPl.FillColor = &HO AyudaPl.FillStyle = O 'Solido AyudaP l .FontBold = -1 'Verdadero AyudaPl.Fontltalic = O 'Falso AyudaPl.FontName = "Times New Roman" AyudaPl.FontSize = 7.8 AyudaPl.FontStrikethru = O 'Falso AyudaPl.FontTransparent = -1 'Verdadero AyudaPl .FontUnderline = O 'Falso AyudaPl.ForeColor = &H80000008 AyudaPl.HelpContextID = O 199 Rem AyudaPl.Index - Agregar si se requiere A yudaP 1.Linkltem = '"' Rem AyudaPl.LinkMode - Inicializado Manualmente AyudaPl.LinkTimeout = 50 AyudaPl.LinkTopic = 1111 AyudaPl.MousePointer = O 'Default Rem AyudaPl.Picture -Agregar si se requiere AyudaPl .ScaleHeight = SHeightTwipPantl AyudaPl.ScaleLeft = O AyudaPl .ScaleMode = 1 'Twip AyudaPl.ScaleTop = O AyudaPl.ScaleWidth = SWidthTwipPantl AyudaPl.Tablndex = 7 AyudaPl.TabStop = -1 'Verdadero AyudaPl.Tag = 1111 AyudaPl.Visible = -1 'Verdadero Rem Termina Inicializacion de Picture Box en Forma Pantalla!= AyudaPl Rem Inicializando Shape en Forma Pantalla!= ShapelPl ShapelPl.Height = SHeightTwipPantl * .01 ShapelPl.Left = SWidthTwipPantl * .01 ShapelPl.Top = SHeightTwipPantl * .27 ShapelPl.Width = SWidthTwipPantl * .67 ShapelPl.BackColor = &H0 ShapelPl.BackStyle = 1 'Opaco Shape 1 P l .BorderColor = &HFFFF& ShapelPl.BorderStyle = 1 'Solido ShapelPl.BorderWidth = 2 ShapelPl.DrawMode = 13 'CopyPen ShapelPl.FillColor = &H0 ShapelPl.FillStyle = O 'Solido Rem ShapelPl.Index - Agregar si se requiere ShapelPl.Shape = O 'Rectangulo ShapelPl.Tag = 1111 ShapelPl.Visible = -1 'Verdadero Rem Termina Inicializacion Shape en Forma Pantalla!= ShapelPl Rem Inicializando SSPanel en Forma Pantalla! = F(n) 1=0 TempPos = SWidthTwipPantl * .11 For I = O To (MaxTiempos - 1) F(I). Visible = O 'Falso F(l).Height = SHeightTwipPantl * .05 F(l).Left = TempPos TempPos = TempPos + SWidthTwipPantl * .03 F(l).Top = SHeightTwipPantl * .29 F(l).Width = SWidthTwipPantl * .03 F(l).Align = O 'Ninguno F(l).Alignment = 7 'Centro - Medio 200 F(l).AutoSize = O 'Ninguno F(l).BackColor = &HCOC0C0 F(l).Bevellnner = 2 'Levantado F(l).BevelOuter = 2 'Levantado F(l).BevelWidth = 2 F(l).BorderWidth = 1 F(l).Caption = 11T 11 F(l).DataField = 1111 Rem F(l).DataSource - Inicializado Manualmente Rem F(l).Draglcon - Agregar si se requiere F(l).DragMode = O 'Manual F(l).Enabled = O 'Falso F(l).FloodColor = &HFF F(l).FloodShowPct = -1 'Verdadero F(l).FloodType = O 'Ninguno F(l).Font3D = 4 'Inset w/heavy shadow F(l).FontBold = -1 'Verdadero F(l).Fontltalic = O 'Falso F(l).FontName = "Times New Roman" F(l).FontSize = 7.6 F(l).FontStrikethru = O 'Falso F(l).FontUnderline = O 'Falso F(l).ForeColor = &H80000008 F(l).HelpContextID = O Rem F(l).Index - Inicializado Manualmente F(l).MousePointer = O 'Default F(l).Outline = O 'Falso F(l).RoundedComers = -1 'Verdadero F(l).ShadowColor = 1 'Negro F(l).Tablndex = (1 + 18) F(l).Tag = 1111 Nextl Rem Termina Inicializacion SSPanel en Forma Pantalla! = F(n) Rem Inicializando SSPanel en Forma Pantalla!= TextCill(n) 1=0 TempPos = SHeightTwipPantl * .34 For 1 = O To (MaxCil - 1) TextCil 1 (1). Visible = O 'Falso TextCill (l).Height = SHeightTwipPantl * .05 TextCill(l).Left = SWidthTwipPantl * .01 TextCill(l).Top = TempPos TempPos = TempPos + SHeightTwipPantl * .05 TextCill(l).Width = SWidthTwipPantl * .1 TextCil 1 (l).Align = O 'Ninguno TextCil 1 (l).Alignment = 7 'Centro - Medio TextCill(l).AutoSize = O 'Ninguno TextCil 1 (l).BackColor = &HCOCOC0 TextCil 1 (l).Bevellnner = 2 'Levantado 201 TextCill(l).BevelOuter = 2 'Levantado TextCil 1 (l).BevelWidth = 4 TextCill(l).BorderWidth = 3 TextCill(l).Caption = "TextCill" TextCill(l).DataField = "" Rem TextCill(l).DataSource - Inicializado Manualmente Rem TextCill(l).Draglcon - Agregar si se requiere TextCill(l).DragMode = O 'Manual TextCill(l).Enabled = O 'Falso TextCill(l).FloodColor = &HFF TextCill(l).FloodShowPct = -1 'Verdadero TextCill(l).FloodType = O 'Ninguno TextCil 1 (l).Font3D = 4 'Inset w/heavy shadow TextCill(l).FontBold = -1 'Verdadero TextCill(l).Fontltalic = O 'Falso TextCill(l).FontName = "Times New Roman" TextCill(l).FontSize = 7.8 TextCill(l).FontStrikethru = O 'Falso TextCill(l).FontUnderline = O '~also TextCil 1 (l).ForeColor = &H80000008 TextCil 1 (l).HelpContextID = O Rem TextCill(l).lndex - Inicializado Manualmente TextCill(l).MousePointer = O 'Default TextCill(l).Outline = O 'Falso TextCill(l).RoundedComers = -1 'Verdadero TextCill(l).ShadowColor = 1 'Negro TextCill(l).Tablndex = (1 + 8) TextCill(l).Tag = "" Nextl Rem Termina Inicializacion SSPanel en Forma Pantalla!= TextCill(n) Rem Inicializando TextBox en Forma Pantalla! = MovCilsA(n) 1=0 TempPos = SWidthTwipPantl * .11 For 1 = O To (MaxTiempos - 1) MovCilsA(l).Height = SHeightTwipPantl * .05 MovCilsA(l).Left = TempPos TempPos = TempPos + SWidthTwipPantl * .03 MovCilsA(l).Top = SHeightTwipPantl * .34 MovCilsA(l).Width = SWidthTwipPantl * .03 Rem MovCilsA(l).Alignment - Inicializado Manualmente MovCilsA(l).BackColor = &HE0FFFF Rem MovCilsA(l).BorderStyle - Inicializado Manualmente MovCilsA(l).DataField = "" Rem MovCilsA(l).DataSource - Inicializado Manualmente Rem MovCilsA(l).Draglcon - Agregar si se requiere MovCilsA(l).DragMode = O 'Manual MovCilsA(l).Enabled = O 'Falso 202 MovCilsA(l).FontBold = -1 'Verdadero MovCilsA(l).Fontltalic = O 'Falso MovCilsA(l).FontName = "Times New Roman" MovCilsA(l).FontSize = 18 MovCilsA(l).FontStrikethru = O 'Falso MovCilsA(l).FontUnderline = O 'Falso MovCilsA(l).ForeColor = &HO MovCilsA(l).HelpContextID = O Rem MovCilsA(l).HideSelection - Inicializado Manualmente Rem MovCilsA(l).lndex - Agregar si se requiere MovCilsA(l).Linkltem = "" MovCilsA(l).LinkMode = O 'Ninguno MovCilsA(l).LinkTimeout = 50 MovCilsA(l).LinkTopic = "" MovCilsA(l).MaxLength = 1 MovCilsA(l).MousePointer = O 'Default Rem MovCilsA(l).MultiLine - Inicializado Manualmente MovCilsA(l).PasswordChar = "" Rem MovCilsA(l).ScrollBars - Inicializado Manualmente MovCilsA(l).Tablndex = (1 + 38) MovCilsA(l).TabStop = -1 'Verdadero MovCilsA(l).Tag = "" MovCilsA(l).Text = "" MovCilsA(I). Visible = O 'Falso Nextl Rem Termina Inicializacion TextBox en Forma Pantallal = MovCilsA(n) Rem Inicializando TextBox en Forma Pantallal = MovCilsB(n) 1=0 TempPos = SWidthTwipPantl * .11 For 1 = O To (MaxTiempos - 1) MovCilsB(l).Height = SHeightTwipPantl * .05 MovCilsB(l).Left = TempPos TempPos = TempPos + SWidthTwipPantl * .03 MovCilsB(l).Top = SHeightTwipPantl * .39 MovCilsB(l).Width = SWidthTwipPantl * .03 Rem MovCilsB(l).Alignment - Inicializado Manualmente MovCilsB(l).BackColor = &HEOFFFF Rem MovCilsB(l).BorderStyle - Inicializado Manualmente MovCilsB(l).DataField = "" Rem MovCilsB(I).DataSource - Inicializado Manualmente Rem MovCilsB(I).Draglcon - Agregar si se requiere MovCilsB(I).DragMode = O 'Manual MovCilsB(I).Enabled = O 'Falso MovCilsB(l).FontBold = -1 'Verdadero MovCilsB(I).Fontltalic = O 'Falso MovCilsB(I).FontName = "Times New Roman" MovCilsB(l).FontSize = 18 MovCilsB(I).FontStrikethru = O 'Falso 203MovCilsB(l).FontUnderline = O 'Falso MovCilsB(l).ForeColor = &HO MovCilsB(l).HelpContextID = O Rem MovCilsB(l).HideSelection - Inicializado Manualmente Rem MovCilsB(l).lndex - Agregar si se requiere MovCilsB(l).Linkltem = 1111 MovCilsB(l).LinkMode = O 'Ninguno MovCilsB(l).LinkTimeout = 50 MovCilsB(l).LinkTopic = "" MovCilsB(l).MaxLength = 1 MovCilsB(l).MousePointer = O 'Default Rem MovCilsB(l).MultiLine - Inicializado Manualmente MovCilsB(l).PasswordChar = "" Rem MovCilsB(l).ScrollBars - Inicializado Manualmente MovCilsB(l).Tablndex = (1 + 58) MovCilsB(l).TabStop = -1 'Verdadero MovCilsB(l).Tag = 1111 MovCilsB(l).Text = 1111 MovCilsB(l). Visible = O 'Falso Nextl Rem Termina Inicializacion TextBox en Forma Pantalla! = MovCilsB(n) Rem Inicializando TextBox en Forma Pantalla!= MovCilsC(n) 1=0 TempPos = SWidthTwipPantl * .11 For 1 = O To (MaxTiempos - 1) MovCilsC(l).Height = SHeightTwipPantl * .05 MovCilsC(l).Left = TempPos TempPos = TempPos + SWidthTwipPantl * .03 MovCilsC(l).Top = SHeightTwipPantl * .44 MovCilsC(l).Width = SWidthTwipPantl * .03 Rem MovCilsC(l).Alignment - Inicializado Manualmente MovCilsC(l).BackColor = &HEOFFFF Rem MovCilsC(l).BorderStyle - Inicializado Manualmente MovCilsC(l).DataField = 1111 Rem MovCilsC(l).DataSource - Inicializado Manualmente Rem MovCilsC(l).Draglcon - Agregar si se requiere MovCilsC(l).DragMode = O 'Manual MovCilsC(l).Enabled = O 'Falso MovCilsC(l).FontBold = -1 'Verdadero MovCilsC(l).Fontltalic = O 'Falso MovCilsC(l).FontName = "Times New Roman11 MovCilsC(l).FontSize = 18 MovCilsC(l).FontStrikethru = O 'Falso MovCilsC(l).FontUnderline = O 'Falso MovCilsC(l).ForeColor = &HO MovCilsC(l).HelpContextID = O Rem MovCilsC(l).HideSelection - Inicializado Manualmente Rem MovCilsC(l).lndex - Agregar si se requiere 204 MovCilsC(l).Linkltem = "" MovCilsC(n.LinkMode = O 'Ninguno MovCilsC(n.LinkTimeout = 50 MovCilsC(n.LinkTopic = "". MovCilsC(n.MaxLength = 1 MovCilsC(n.MousePointer = O 'Default Rem MovCilsC(n.MultiLine - Inicializado Manualmente MovCilsC(n.PasswordChar = "" Rem MovCilsC(n.scrollBars - Inicializado Manualmente MovCilsC(n.Tablndex = (1 + 78) MovCilsC(n.TabStop = -1 'Verdadero MovCilsC(l).Tag = "" MovCilsC(n.Text = "" MovCilsC(n.Visible = O 'Falso Nextl Rem Termina Inicializacion TextBox en Forma Pantalla! = MovCilsC(n) Rem Inicializando TextBox en Forma Pantalla! = MovCilsD(n) 1=0 TempPos = SWidthTwipPantl * .11 For 1 = O To (MaxTiempos - 1) MovCilsD(n.Height = SHeightTwipPantl * .05 MovCilsD(n.Left = TempPos TempPos = TempPos + SWidthTwipPantl * .03 MovCilsD(n.Top = SHeightTwipPantl * .49 MovCilsD(n.Width = SWidthTwipPantl * .03 Rem MovCilsD(n.Aiignment - Inicializado Manualmente MovCilsD(n.BackColor = &HEOFFFF Rem MovCilsD(n.BorderStyle - Inicializado Manualmente MovCilsD(n.DataField = "" Rem MovCilsD(n.DataSource - Inicializado Manualmente Rem MovCilsD(n.Draglcon - Agregar si se requiere MovCilsD(n.DragMode = O 'Manual MovCilsD(n.Enabled = O 'Falso MovCilsD(n.FontBold = -1 'Verdadero MovCilsD(n.Fontltalic = O 'Falso MovCilsD(n.FontName = "Times New Roman" MovCilsD(n.FontSize = 18 MovCilsD(n.FontStrikethru = O 'Falso MovCilsD(n.FontUnderline = O 'Falso MovCilsD(n.ForeColor = &HO MovCilsD(n.HelpContextID = O Rem MovCilsD(n.HideSelection - Inicializado Manualmente Rem MovCilsD(n.Index - Agregar si se requiere MovCilsD(n.Linkltem = "" MovCilsD(n.LinkMode = O 'Ninguno MovCilsD(n.LinkTimeout = 50 MovCilsD(n.LinkTopic = "" MovCilsD(n.MaxLength = 1 205 MovCilsD(l).MousePointer = O 'Default Rem MovCilsD(l).MultiLine - Inicializado Manualmente MovCilsD(l).PasswordChar = "" Rem MovCilsD(l).ScrollBars - Inicializado Manualmente MovCilsD(l).Tablndex = (1 + 98) MovCilsD(l).TabStop = -1 'Verdadero MovCilsD(l).Tag = "" MovCilsD(l).Text = "" MovCilsD(l).Visible = O 'Falso Next 1 Rem Termina lnicializacion TextBox en Forma Pantalla! = MovCilsD(n) Rem Inicializando TextBox en Forma Pantalla! = MovCilsE(n) 1=0 TempPos = SWidthTwipPantl * .11 For 1 = O To (MaxTiempos - 1) MovCilsE(l).Height = SHeightTwipPantl * .05 MovCilsE(l).Left = TempPos TempPos = TempPos + SWidthTwipPantl * .03 MovCilsE(l).Top = SHeightTwipPantl * .54 MovCilsE(l).Width = SWidthTwipPantl * .03 Rem MovCilsE(l).Alignment - Inicializado Manualmente MovCilsE(l).BackColor = &HEOFFFF Rem MovCilsE(l).BorderStyle - Inicializado Manualmente MovCilsE(l).DataField = "" Rem MovCilsE(l).DataSource - Inicializado Manualmente Rem MovCilsE(l).Draglcon - Agregar si se requiere MovCilsE(l).DragMode = O 'Manual MovCilsE(l).Enabled = O 'Falso MovCilsE(l).FontBold = -1 'Verdadero MovCilsE(l).Fontltalic = O 'Falso MovCilsE(l).FontName = "Times New Roman" MovCilsE(l).FontSize = 18 MovCilsE(l).FontStrikethru = O 'Falso MovCilsE(l).FontUnderline = O 'Falso MovCilsE(l).ForeColor = &HO MovCilsE(l).HelpContextID = O Rem MovCilsE(l).HideSelection - Inicializado Manualmente Rem MovCilsE(l).lndex - Agregar si se requiere MovCilsE(l).Linkltem = "" MovCilsE(l).LinkMode = O 'Ninguno MovCilsE(l).LinkTimeout = 50 MovCilsE(l).LinkTopic = "" MovCilsE(l).MaxLength = 1 MovCilsE(l).MousePointer = O 'Default Rem MovCilsE(l).MultiLine - Inicializado Manualmente MovCilsE(l).PasswordChar = "" Rem MovCilsE(l).ScrollBars - Inicializado Manualmente MovCilsE(l).Tablndex = (1 + 118) 206 MovCilsE(l).TabStop = -1 MovCilsE(l).Tag = "" MovCilsE(l).Text = '"' MovCilsE(l).Visible = O Nextl 'Verdadero 'Falso Rem Termina Inicializacion TextBox en Forma Pantalla! = MovCilsE(n) Rem Inicializando TextBox en Forma Pantalla!= MovCilsF(n) 1=0 TempPos = SWidthTwipPantl * .11 For I = O To (MaxTiempos - 1) MovCilsF(l).Height = SHeightTwipPantl * .05 MovCilsF(l).Left = TempPos TempPos = TempPos + SWidthTwipPantl * .03 MovCilsF(l).Top = SHeightTwipPantl * .59 MovCilsF(l).Width = SWidthTwipPantl * .03 Rem MovCilsF(l).Alignment - Inicializado Manualmente MovCilsF(l).BackColor = &HEOFFFF Rem MovCilsF(l).BorderStyle - Inicializado Manualmente MovCilsF(l).DataField = "" Rem MovCilsF(l).DataSource - Inicializado Manualmente Rem MovCilsF(l).Draglcon - Agregar si se requiere MovCilsF(l).DragMode = O 'Manual MovCilsF(l).Enabled = O 'Falso MovCilsF(l).FontBold = -1 'Verdadero MovCilsF(l).Fontltalic = O 'Falso MovCilsF(l).FontName = "Times New Roman" MovCilsF(l).FontSize = 18 MovCilsF(l).FontStrikethru = O 'Falso MovCilsF(l).FontUnderline = O 'Falso MovCilsF(l).ForeColor = &HO . MovCilsF(l).HelpContextID = O Rem MovCilsF(l).HideSelection - Inicializado Manualmente Rem MovCilsF(l).Index - Agregar si se requiere MovCilsF(l).Linkltem = "" MovCilsF(l).LinkMode = O 'Ninguno MovCilsF(l).LinkTimeout = 50 MovCilsF(l).LinkTopic = "" MovCilsF(l).MaxLength = 1 MovCilsF(l).MousePointer = O 'Default Rem MovCilsF(l).MultiLine - Inicializado Manualmente MovCilsF(l).PasswordChar = "" Rem MovCilsF(l).ScrollBars - Inicializado Manualmente MovCilsF(l).Tablndex = (1 + 138) MovCilsF(l).TabStop = -1 'Verdadero MovCilsF(l).Tag = "" MovCilsF(l).Text = "" MovCilsF(l).Visible = O 'Falso Next I 207 Rem Tennina Inicializacion TextBox en Fonna Pantallal = MovCilsF(n) Rem Inicializando TextBox en Fonna Pantallal = MovCilsG(n) 1=0 TempPos = SWidthTwipPantl * .11 For 1 = O To (MaxTiempos - 1) MovCilsG(l).Height = SHeightTwipPantl * .05 MovCilsG(l).Left = TempPos TempPos = TempPos + SWidthTwipPantl * .03 MovCilsG(l).Top = SHeightTwipPantl * .64 MovCilsG(l).Width = SWidthTwipPantl * .03 Rem MovCilsG(l).Alignment - Inicializado Manualmente MovCilsG(l).BackColor = &HEOFFFF Rem MovCilsG(l).BorderStyle - Inicializado Manualmente MovCilsG(l).DataField = "" Rem MovCilsG(l).DataSource - Inicializado Manualmente Rem MovCilsG(l).Draglcon - Agregar si se requiere MovCilsG(l).DragMode = O 'Manual MovCilsG(l).Enabled = O 'Falso MovCilsG(l).FontBold = -1 'Verdadero MovCilsG(l).Fontltalic = O 'Falso MovCilsG(l).FontName = "Times New Roman" MovCilsG(l).FontSize = 18 MovCilsG(l).FontStrikethru= O 'Falso MovCilsG(l).FontUnderline = O 'Falso MovCilsG(l).ForeColor = &HO MovCilsG(l).HelpContextID = O Rem MovCilsG(l).HideSelection - Inicializado Manualmente Rem MovCilsG(l).Index - Agregar si se requiere MovCilsG(l).Linkltem = "" MovCilsG(l).LinkMode = O 'Ninguno MovCilsG(l).LinkTimeout = 50 MovCilsG(l).LinkTopic = "" MovCilsG(l).MaxLength = 1 MovCilsG(l).MousePointer = O 'Default Rem MovCilsG(l).MultiLine - Inicializado Manualmente MovCilsG(l).PasswordChar = '"' Rem MovCilsG(l).ScrollBars - Inicializado Manualmente MovCilsG(l).Tablndex = (1 + 158) MovCilsG(l).TabStop = -1 'Verdadero MovCilsG(l).Tag = '"' MovCilsG(l).Text = '"' MovCilsG(I). Visible = O 'Falso Nextl Rem Tennina Inicializacion TextBox en Fonna Pantallal = MovCilsG(n) Rem Inicializando TextBox en Fonna Pantallal = MovCilsH(n) 1=0 TempPos = SWidthTwipPantl * .11 208 For I = O To (MaxTiempos - 1) MovCilsH(l).Height = SHeightTwipPantl * .05 MovCilsH(l).Left = TempPos TempPos = TempPos + SWidthTwipPantl * .03 MovCilsH(l).Top = SHeightTwipPantl * .69 MovCilsH(l).Width = SWidthTwipPantl * .03 Rem MovCilsH(l).Alignment - Inicializado Manualmente MovCilsH(l).BackColor = &HEOFFFF Rem MovCilsH(l).BorderStyle - Inicializado Manualmente MovCilsH(l).DataField = "" Rem MovCilsH(l).DataSource - Inicializado Manualmente Rem MovCilsH(l).Draglcon - Agregar si se requiere MovCilsH(l).DragMode = O 'Manual MovCilsH(l).Enabled = O 'Falso MovCilsH(l).FontBold = -1 'Verdadero MovCilsH(l).Fontltalic = O 'Falso MovCilsH(l).FontName = "Times New Roman" MovCilsH(l).FontSize = 18 MovCilsH(l).FontStrikethru = O 'Falso MovCilsH(l).FontUnderline = O 'Falso MovCilsH(l).ForeColor = &HO MovCilsH(l).HelpContextID = O Rem MovCilsH(l).HideSelection - Inicializado Manualmente Rem MovCilsH(l).Index - Agregar si se requiere MovCilsH(l).Linkltem = "" MovCilsH(l).LinkMode = O 'Ninguno MovCilsH(l).LinkTimeout = 50 MovCilsH(l).LinkTopic = "" MovCilsH(l).MaxLength = 1 MovCilsH(l).MousePointer = O 'Default Rem MovCilsH(l).MultiLine - Inicializado Manualmente MovCilsH(l).PasswordChar = "" Rem MovCilsH(l).ScrollBars - Inicializado Manualmente MovCilsH(l).Tablndex = (1 + 178) MovCilsH(l).TabStop = -1 'Verdadero MovCilsH(l).Tag = "" MovCilsH(l).Text = "" MovCilsH(I). Visible = O 'Falso Nextl Rem Termina Inicializacion TextBox en Forma Pantalla! = MovCilsH(n) Rem Inicializando TextBox en Forma Pantalla! = MovCilsl(n) 1=0 TempPos = SWidthTwipPantl * .11 Forl = O To (MaxTiempos - 1) MovCilsl(l).Height = SHeightTwipPantl * .05 MovCilsl(l).Left = TempPos TempPos = TempPos + SWidthTwipPantl * .03 MovCilsl(l).Top = SHeightTwipPantl * .74 209 MovCilsl(l).Width = SWidthTwipPantl * .03 Rem MovCilsl(l).Alignment - Inicializado Manualmente MovCilsl(l).BackColor = &HE0FFFF Rem MovCilsl(l).BorderStyle - Inicializado Manualmente MovCilsl(l).DataField = "" Rem MovCilsl(l).DataSource - Inicializado Manualmente Rem MovCilsl(l).Draglcon - Agregar si se requiere MovCilsl(l).DragMode = O 'Manual MovCilsl(l).Enabled = O 'Falso MovCilsl(l).FontBold = -1 'Verdadero MovCilsl(l).Fontltalic = O 'Falso MovCilsl(l).FontName = "Times New Roman" MovCilsl(l).FontSize = 18 MovCilsl(l).FontStrikethru = O 'Falso MovCilsl(l).FontUnderline = O 'Falso MovCilsl(l).ForeColor = &H0 MovCilsl(l).HelpContextID = O Rem MovCilsl(l).HideSelection - Inicializado Manualmente Rem MovCilsl(l).lndex - Agregar si se requiere MovCilsl(l).Linkltem = "" MovCilsl(l).LinkMode = O 'Ninguno MovCilsl(l).LinkTimeout = 50 MovCilsl(l).LinkTopic = "" MovCilsl(l).Maxl..ength = 1 MovCilsl(l).MousePointer = O 'Default Rem MovCilsl(l).MultiLine - Inicializado Manualmente MovCilsl(l).PasswordChar = "" Rem MovCilsl(l).ScrollBars - Inicializado Manualmente MovCilsl(l).Tablndex = (1 + 198) MovCilsl(l).TabStop = -1 'Verdadero MovCilsl(l).Tag = "" MovCilsl(l).Text = "" MovCilsl(I). Visible = O 'Falso Nextl Rem Termina Inicializacion TextBox en Forma Pantalla!= MovCilsl(n) Rem Inicializando SSCommand en Forma Pantalla! = OKMOVPl OKMOVPl.Height = SHeightTwipPantl * .1 OKMOVPl.l..eft = SWidthTwipPantl * .11 OKMOVPl.Top = SHeightTwipPantl * .85 OKMOVPl.Width = SWidthTwipPantl * .42 OKMOVPl.AutoSize = O 'Ninguno OKMOVPl .BevelWidth = 8 OKMOVPl.Caption = "OKMOVPl" Rem OKMOVPl.Draglcon -Agregar si se requiere OKMOVPl.DragMode = O 'Manual OKMOVPl.Enabled = O 'Falso OKMOVP1.Font3D = 2 'Levantado w/heavy shading OKMOVPl.FontBold = -1 'Verdadero 210 OKMOVPI.Fontltalic = O 'Falso OKMOVPl.FontName = "Times New Roman" OKMOVPl.FontSize = 9.6 OKMOVPl.FontStrikethru = O 'Falso OKMOVPl.FontUnderline = O 'Falso OKMOVPl.ForeColor = &H0 OKMOVPl.HelpContextID = O Rem OKMOVPI.Index -Agregar si se requiere OKMOVPl.MousePointer = O 'Default OKMOVPI.Outline = -1 'Verdadero Rem OKMOVPI.Picture - Agregar si se requiere OKMOVPl.RoundedComers = -1 'Verdadero OKMOVPI.Tablndex = 238 OKMOVPl.TabStop = -1 'Verdadero OKMOVPI.Tag = "" OKMOVPI.Visible = O 'Falso Rem Termina Inicializacion SSCommand en Forma Pantalla!= OKMOVPI Rem Inicializando SSCommand en Forma Pantalla!= CONTPI CONTPI.Height = SHeightTwipPantl * .1 CONTPI.Left = SWidthTwipPantl * .56 CONTPI.Top = SHeightTwipPantl * .85 CONTPI.Width = SHeightTwipPantl * .16 CONTPl.AutoSize = O 'Ninguno CONTPI .BevelWidth = 8 CONTPI.Caption = "CONTPI" Rem CONTPI.Draglcon -Agregar si se requiere CONTPl.DragMode = O 'Manual CONTPI.Enabled = O 'Falso CONTPI .Font3D = 2 'Levantado w/heavy shading CONTPl.FontBold = -1 'Verdadero CONTPI.Fontltalic = O 'Falso CONTPl.FontName = "Times New Roman" CONTPl.FontSize = 9.6 CONTPl.FontStrikethru = O 'Falso CONTPl.FontUnderline = O 'Falso CONTPl.ForeColor = &H0 CONTPl.HelpContextID = O Rem CONTP l .Index - Agregar si se requiere CONTPI .MousePointer = O 'Default CONTPI.Outline = -1 'Verdadero Rem CONTPI.Picture -Agregar si se requiere CONTPl.RoundedComers = -1 'Verdadero CONTPI.Tablndex = 239 CONTPl.TabStop = -1 'Verdadero CONTPI.Tag = "" CONTPI.Visible = O 'Falso Rem Termina Inicializacion SSCommand en Forma Pantalla!= CONTPl 211 Rem Inicializando SSCommand en Forma Pantallal = QUITPl QUITPl.Height = SHeightTwipPantl * .1 QUITPl.Left = SWidthTwipPantl * .76 QUITPl.Top = SHeightTwipPantl * .85 QUITPl.Width = SWidthTwipPantl * .16 QUITPl.AutoSize = O 'Ninguno QUITPl.BevelWidth = 8 QUITPl.Caption = "QUITPl" Rem QUITPl.Draglcon -Agregar si se requiere QUITPl.DragMode = O 'Manual QUITPl.Enabled = -1 'Verdadero QUITP1.Font3D = 2 'Levantado w/heavy shading QUITPl.FontBold = -1 'Verdadero QUITPl.Fontltalic = O 'Falso QUITPl.FontName = "Times New Roman" QUITPl.FontSize = 9.6 QUITPl.FontStrikethru = O 'Falso QUITPl.FontUnderline = O 'Falso QUITPl.ForeColor = &H0 QUITPl.HelpContextID = O Rem QUITPl.lndex - Agregar si se requiere QUI1Pl.MousePointer = O 'Default QUITPl.Outline = -1 'Verdadero Rem QUITPl.Picture - Agregar si se requiere QUITPl.RoundedComers = -1 'Verdadero QUITPl.Tablndex = 240 QUITPl.TabStop = -1 'Verdadero QUITPl.Tag = 1111 QUITPl.Visible = -1 'Verdadero Rem Termina lnicializacion SSCommand en Forma Pantalla!= QUITPl Rem Inicializando SSCommand en Forma Pantallal = INITPl INITPl.Height = SHeightTwipPantl * .09 INITPl.Left = SWidthTwipPantl * .48 INITPl.Top = SHeightTwipPantl * .005 INITPl.Width = SWidthTwipPantl * .15 INITPl .AutoSize = O 'Ninguno INITPl .BevelWidth = 8 INITPl.Caption = "INITPl" Rem INITP l.Draglcon - Agregar si se requiere INITP l .DragMode = O 'Manual INITPl.Enabled = -1 'Verdadero INITP1.Font3D = 2 'Levantado w/heavy shading INITPl.FontBold = -1 'Verdadero INITPl.Fontltalic = O 'Falso INITPl.FontName = "Times New Roman" INITPl.FontSize = 9.6 INITPl.FontStrikethru = O 'Falso INITPl.FontUnderline = O 'Falso 212 INITP l .ForeColor = &H0 INITP 1.HelpContextID = O Rem INITPl.Index - Agregar si se requiere INITP l .MousePointer = O 'Default INITPl.Outline = -1 'Verdadero Rem INITP 1.Picture - Agregar si se requiere INITPl.RoundedComers= -1 'Verdadero INITPl .Tablndex = 3 INITPl.TabStop = -1 'Verdadero INITPl.Tag = 1111 INITP l. Visible = -1 'Verdadero Rem Termina Inicializacion de SSCommand en Forma Pantallal = INITPl EndSub Procedimiento que reinicializa la forma pantallal en caso de que el usuario lo ~ti~. . Sub INITPl_Click () Unload Pantallal Pantalla} .Show O EndSub Procedimientos que se activan cuando se captura información en los cuadros del cilindro A. Sub MovCilsA_Change (lndex As Integer) If (CharPressed = "O") Or (CharPressed = 11 l ") Then Got0Or lFlag = 1 Else GotOOrlFlag = O Endlf End Sub Sub MovCilsA_GotFocus (lndex As Integer) GotMov=0 EndSub Sub MovCilsA_KeyPress (lndex As lnteger, KeyAscii As lnteger) CharPressed = Chr(KeyAscii) If ((CharPressed = "O") Or (CharPressed = 11 l 11)) Toen KeyCaptured = Val(CharPressed) CilTiempo(0, lndex) = KeyCaptured MovCilsA(lndex) = CharPressed Endlf EndSub 213 Sub MovCilsA_KeyUp (lndex As Integer, KeyCode As Integer, Shift As Integer) If (Got0OrlFlag = O) Then If (Asc(CharPressed) <> 8) Then MsgBox MsgCil, O+ 16, "Solamente Entrada Binaria" MovCilsA(lndex) = Chr(0) End If Endlf EndSub Procedimientos que se activan cuando se captura infonnación en los cuadros del cilindro B. Sub MovCilsB_Change (lndex As Integer) If (CharPressed = "O") Or (CharPressed = "l ") Then Got0OrlFlag = 1 Else Got0OrlFlag = O Endlf End Sub Sub MovCilsB_KeyPress (lndex As Integer, KeyAscii As Integer) CharPressed = Chr(KeyAscii) If ((CharPressed = "O") Or (CharPressed = "l ")) Then KeyCaptured = Val(CharPressed) CilTiempo(l, Index) = KeyCaptured MovCilsB(lndex) = CharPressed Endlf End Sub Sub MovCilsB_KeyUp (lndex As Integer, KeyCode As Integer, Shift As Integer) If (Got0OrlFlag = O) Then If (Asc(CharPressed) <> 8) Then MsgBox MsgCil, O+ 16, "Solamente Entrada Binaria" MovCilsB(lndex) = Chr(0) Endlf Endlf EndSub Procedimientos que se activan cuando se captura infonnación en los cuadros del cilindro c. Sub MovCilsC_Change (lndex As Integer) If (CharPressed = "O") Or (CharPressed = "l ") Then Got0OrlFlag = 1 Else 214 Got0Or !Flag = O End If EndSub Sub MovCilsC_KeyPress (lndex As Integer, KeyAscii As Integer) CharPressed = Chr(Key Ascii) If ((CharPressed = "O") Or (CharPressed = "l ")) Then KeyCaptured = Val(CharPressed) Ci1Tiempo(2, Index) = KeyCaptured MovCilsC(lndex) = CharPressed End If EndSub Sub MovCilsC_KeyUp (lndex As Integer, KeyCode As lnteger, Shift As Integer) If (Got0OrlFlag = O) Then If (Asc(CharPressed) <> 8) Then MsgBox MsgCil, O+ 16, "Solamente Entrada Binaria" MovCilsC(Index) = Chr(0) End If Endlf End Sub Procedimientos que se activan cuando se captura información en los cuadros del cilindro D. Sub MovCilsD_Change (lndex As Integer) If (CharPressed = "O") Or (CharPressed = "l ") Then Got0Or !Flag = 1 Else Got0OrlFlag = O End If EndSub Sub MovCilsD_KeyPress (lndex As Integer, KeyAscii As Integer) CharPressed = Chr(Key Ascii) If ((CharPressed = "O") Or (CharPressed = "l ")) Then KeyCaptured = Val(CharPressed) Ci1Tiempo(3, Index) = KeyCaptured MovCilsD(Index) = CharPressed Endlf EndSub Sub MovCilsD_KeyUp (lndex As Integer, KeyCode As Integer, Shift As Integer) If (Got0OrlFlag = O) Then If (Asc(CharPressed) <> 8) Then MsgBox MsgCil, O+ 16, "Solamente Entrada Binaria" MovCilsD(lndex) = Chr(0) 215 Endlf Endlf EndSub Procedimientos que se activan cuando se captura infonnación en los cuadros del cilindro E. Sub MovCilsE_Change (lndex As Integer) If (CharPressed = "O") Or (CharPressed = "1 ") Then Got0Or !Flag = 1 Else Got0OrlFlag = O Endlf End Sub Sub MovCilsE_KeyPress (lndex As Integer, KeyAscii As Integer) CharPressed = Chr(Key Ascii) If ((CharPressed = "O") Or (CharPressed = "1 ")) Then KeyCaptured = Val(CharPressed) Ci1Tiempo(4, Index) = KeyCaptured MovCilsE(lndex) = CharPressed Endlf End Sub Sub MovCilsE_KeyUp (lndex As Integer, KeyCode As Integer, Shift As Integer) If (Got0OrlFlag = O) Then lf (Asc(CharPressed) <> 8) Then MsgBox MsgCil, O+ 16, "Solamente Entrada Binaria" MovCilsE(lndex) = Chr(0) End If Endlf End Sub Procedimientos que se activan cuando se captura infonnación en los cuadros del cilindro F. Sub MovCilsF _Change (lndex As Integer) lf (CharPressed = "O") Or (CharPressed = "1 ") Then Got0OrlFlag = 1 Else Got0OrlFlag = O Endlf End Sub 216 Sub MovCilsF _KeyPress (lndex As Integer, KeyAscii As Integer) CharPressed = Chr(KeyAscii) If ((CharPressed = "O") Or (CharPressed = "l ")) Then KeyCaptured = Val(CharPressed) Ci1Tiempo(5, lndex) = KeyCaptured MovCilsF(lndex) = CharPressed Endlf EndSub Sub MovCilsF _KeyUp (lndex As Integer, KeyCode As Integer, Shift As Integer) If (GotOOrlFlag = O) Then If (Asc(CharPressed) <> 8) Then MsgBox MsgCil, O+ 16, "Solamente Entrada Binaria" MovCilsF(lndex) = Chr(0) Endlf Endlf EndSub Procedimientos que se activan cuando se captura información en los cuadros del cilindro G. Sub MovCilsG_Change (lndex As Integer) If (CharPressed = "O") Or (CharPressed = "l ") Then Got0OrlFlag = 1 Else Got0OrlFlag = O Endlf End Sub Sub MovCilsG_KeyPress (lndex As Integer, KeyAscii As Integer) CharPressed = Chr(Key Ascii) If ((CharPressed = "O") Or (CharPressed = "1 ")) Then KeyCaptured = Val(CharPressed) Ci1Tiempo(6, Index) = KeyCaptured MovCilsG(lndex) = CharPressed End If EndSub Sub MovCilsG_KeyUp (lndex As Integer, KeyCode As Integer, Shift As Integer) If (Got0OrlFlag = O) Then If (Asc(CharPressed) <> 8) Then MsgBox MsgCil, O+ 16, "Solamente Entrada Binaria" MovCilsG(Index) = Chr(0) Endlf Endlf End Sub Procedimientos que se activan cuando se captura información en los cuadros del cilindro H. 217 Sub MovCilsH_Change (lndex As Integer) lf (CharPressed = "O") Or (CharPressed = "1 ") Then Got0OrlFlag = 1 Else Got0Or lFlag = O End If EndSub Sub MovCilsH_KeyPress (lndex As Integer, KeyAscii As Integer) CharPressed = Chr(KeyAscii) lf ((CharPressed = "O") Or (CharPressed = "1 ")) Then KeyCaptured = Val(CharPressed) Ci1Tiempo(7, Index) = KeyCaptured MovCilsH(lndex) = CharPressed Endlf End Sub Sub MovCilsH_KeyUp (lndex As Integer, KeyCode As Integer, Shift As Integer) lf (Got0OrlFlag = O) Then lf (Asc(CharPressed) <> 8) Then MsgBox MsgCil, O+ 16, "Solamente Entrada Binaria" MovCilsH(lndex) = Chr(0) Endlf Endlf EndSub Procedimientos que se activan cuando se captura información en los cuadros del cilindro l. Sub MovCilsl_Change (lndex As Integer) lf (CharPressed = "O") Or (CharPressed = "1 ") Then Got0OrlFlag = 1 Else Got0OrlFlag = O Endlf EndSub Sub MovCilsl_KeyPress (lndex As Integer, KeyAscii As Integer) CharPressed = Chr(KeyAscii) lf ((CharPressed = "O") Or (CharPressed = "1 ")) Then KeyCaptured = Val(CharPressed) Ci1Tiempo(8, Index) = KeyCaptured MovCilsl(Index) = CharPressed End If EndSub 218 Sub MovCilsl_KeyUp (lndex As Integer, KeyCode As Integer, Shift As Integer) lf (Got0OrlFlag = O) Then lf (Asc(CharPressed) <> 8) Then MsgBox MsgCil, O+ 16, "Solamente Entrada Binaria" MovCilsl(lndex) = Chr(0) Endlf Endlf EndSub Procedimiento que verifica que la matriz que solicita la entrada de datos este completamente lleno con O o 1. Sub OKMOVPI_Click () Dim I, J As Integer Dim !Pos, JPos As Integer GotMov=0 1=0 Do Until GotMov = 1 Or I = NumCil 1=0 Do Until GotMov = 1 Or J = NumTiempos lf CilTiempo(I, J) = 2 Then GotMov = 1 J=J+l Loop l=l+l Loop lf GotMov = O Then CONTPI.Enabled = -1 Else GotMov = 1 MsgBox MsgCil2, O+ 16, "FALTA INFORMACION" MovCilsA(0).SetFocus Endlf End Sub Procedimiento que descarga la pantalla 1 y se sale si el usuario lo activa. Sub QUITPI_Click () Unload Pantalla! End EndSub Forma Pantalla2 - Forma que despliega el numero de g,rupos, los movimi~ntos d los cilindros (gráficamente) y el diagrama fase (graticamente). Per1D1te la . e . , de la pantallaAdicionalmente ejecuta la Forma Pantalla 3, cual 1mpres10n . condiciones de cascada simple. Si se cumplen las verifica que se c~mpl~n ~as 1 . ·t neumático montaje en cascada simple. condiciones, permite d1buJar e c1rcm o 219 Procedinúento que define los variables a usar en esta fonna. Option Explicit Rem Variables a nivel fonnas Dim SWidthTwipPant2 As Integer Dim SHeightTwipPant2 As Integer Dim SWidthPixelPant2 As Integer Dim SHeightPixelPant2 As Integer Procedinúento que descarga la Fonna Pantalla2 y carga la Fonna Pantalla5 (dibujo del circuito). Sub CONTP2_Click () Pantalla5.Show O Unload Pantalla2 End Sub Procedinúento que se ejecuta al inicio de carga de fonna pantalla2. Inicializa los elementos de la fonna. Sub Fonn_Load O Dim I, J As Integer Dim IPos, JPos As Integer Dim Sigo As String ScreenWidthTwip = Screen.Width ScreenHeightTwip = Screen.Height Screen WidthPixel = Screen. TwipsPerPixelX ScreenHeightPixel = Screen.TwipsPerPixelY 220 SWidthTwipPant2 = Screen WidthTwip SHeightTwipPant2 = ScreenHeightTwip SWidthPixelPant2 = Screen WidthPixel SHeightPixelPant2 = ScreenHeightPixel Rem Inicializacion de valores de Default de Pantalla2 InitializePantalla2 Rem Agregar elementos en SSPanel = NombrePantalla2 NombrePantalla2.Caption = "DIAGRAMA DE MOV™IENTOS" Rem Termina agregar elementos en SSPanel = NombrePantalla2 Rem Agregar elementos en SSPanel = GruposText GruposText.Caption ="#de Grupos" Rem Termina agregar elementos en SSPanel = GruposText Rem Agregar elementos en Picture Box = Grupos Grupos.Cls Grupos.Print Str(NumGrupos) + " Grupos" Rem Termina agregar elementos en Picture Box = Grupos Rem Agregar elementos en SSPanel = SecMovText SecMovText.Caption = "Secuencia de Movimientos" Rem Termina agregar elementos en SSPanel = SecMovText Rem Agregar elementos en Picture Box = AyudaP2 AyudaP2.FontSize = 11 AyudaP2.FontBold = -1 AyudaP2.CurrentX = 20 AyudaP2.CurrentY = 100 AyudaP2.Print II MANEJO DE PANTALLA" AyudaP2.DrawWidth = 3 AyudaP2.Line (O, 400)-(2988, 400) AyudaP2.FontSize = 11 AyudaP2.Fontltalic = -1 AyudaP2.CurrentX = 80 AyudaP2.CurrentY = 450 AyudaP2.Print 11 1. Verificar# de Grupos," AyudaP2.Print" Secuencia de Mov. y" AyudaP2.Print" Diagrama de Mov. 11 AyudaP2.CurrentX = 80 AyudaP2.Print "2. Si hay errores -->" AyudaP2.Print " Presionar SALIR." AyudaP2.CurrentX = 80 AyudaP2.Print "3. Si no hay errores -->" AyudaP2.Print II Presionar Aceptar-DIAG." AyudaP2.CurrentX = 80 AyudaP2.Print 114. Presionar Imprimir si desea" AyudaP2.Print " Imprimir." 221 AyudaP2.CurrentX = 80 AyudaP2.Print "5. Presionar Dibujar" AyudaP2.Print " para Dibujar Circuito." AyudaP2.Line (O, 3200)-(2988, 3200) AyudaP2.CurrentY = 3250 AyudaP2.CurrentX = 80 AyudaP2.FontSize = 8 AyudaP2.Fontltalic = O AyudaP2.Print" Presionar SALIR para salirse" AyudaP2.Print" a cualquier tiempo" Rem Termina agregar elementos a Picture Box = AyudaP2 Rem Agregar elementos a SSPanel = DiagFaseMovText DiagFaseMovText.Caption = "DIAGRAMA DE MOVIMIENTOS" Rem Termina agregar elementos en SSPanel = DiagFaseMovText Rem Agregar elementos en SSCommand = OKDIAG OKDIAG.Caption = "Aceptar-DIAG." Rem Termina agregar elementos en SSCommand = OKDIAG Rem Agregar elementos en SSCommand = CONTP2 CONTP2.Caption = "Dibujar" Rem Termina agregar elementos a SSCommand = CONTP2 Rem Agregar elementos en SSCommand = PRINTP2 PRINTP2.Caption = "Imprimir" Rem Termina agregar elementos en SSCommand = PRINTP2 Rem Agregar elementos en SSCommand = QUITP2 QUITP2.Caption = "SALIR" Rem Termina agregar elementos en SSCommand = QUITP2 Rem Agregar elementos en SSCommand = INITP2 INITP2.Caption = "Reinicializar" Rem Termina agregar elementos en SSCommand = INITP2 Rem Agregar elementos en Picture Box = SecMov Call DrawSecMov(Pantalla2) Rem Termina agregar elementos en Picture Box = SecMov Rem Agregar elementos en Picture Box = DiagFaseMov Call DrawDiagFaseMov(Pantalla2) Rem Termina agregar elementos en Picture Box = DiagFaseMov EndSub Procedimiento que inicializa todos los valores de todos los elementos de Pantalla 2. 222 Sub InitializePantalla2 O Rem Inicializando Forma = Pantalla2 Pantalla2.AutoRedraw = -1 'Verdadero Pantalla2.Height = SHeightTwipPant2 Pantalla2.Left = O Pantalla2.Top = O Pantalla2.Width = SWidthTwipPant2 Pantalla2.BackColor = &HFF8080 Rem Pantalla2.BorderStyle - Inicializado Manualmente Pantalla2.Caption = "Pantalla2" Rem Pantalla2.ClipControls - Inicializado Manualmente Rem Pantalla2.Contro1Box - Inicializado Manualmente Pantalla2.DrawMode = 13 'Copy Pen Pantalla2.DrawStyle = O 'Solido Pantalla2.DrawWidth = 1 Pantalla2.Enabled = -1 'Verdadero Pantalla2.Fil1Color = &HO Pantalla2.Fil1Style = 7 'Diagonal Cruzado Pantalla2.FontBold = -1 'Verdadero Pantalla2.Fontltalic = O 'Falso Pantalla2.FontName = "Times New Roman" Pantalla2.FontSize = 9.6 Pantalla2.FontStrikethru = O 'Falso Pantalla2.FontTransparent = -1 'Verdadero Pantalla2.FontUnderline = O 'Falso Pantalla2.ForeColor = &HCOOOOO Pantalla2.HelpContextID = O Rem Pantalla2.lcon - Agregar si se requiere Pantalla2.KeyPreview = O · 'Falso Rem Pantalla2.LinkMode - Inicializado Manualmente Pantalla2.LinkTopic = "Pantalla2" Rem Pantalla2.MaxButton - Inicializado Manualmente Rem Pantalla2.MDIChild - Inicializado Manualmente Rem Pantalla2.MinButton - Inicializado Manualmente Pantalla2.MousePointer = O 'Default Rem Pantalla2.Name - Inicializado Manualmente Rem Pantalla2.Picture - Agregar si se requiere Pantalla2.ScaleHeight = SHeightTwipPant2 Pantalla2.ScaleLeft = O Pantalla2.ScaleMode = 1 'Twip Pantalla2.ScaleTop = O Pantalla2.ScaleWidth = SWidthTwipPant2 Pantalla2.Tag = "" Pantalla2. Visible = -1 'Verdadero Pantalla2.WindowState = 2 'Maximizado Rem Termina Inicializacion de Forma = Pantalla2 223 Rem Inicializando SSPanel en Fonna Pantalla2 = NombrePantalla2 NombrePantalla2.Height = SHeightTwipPant2 * .08 NombrePantalla2.Left = SWidthTwipPant2 * .02 NombrePantalla2.Top = SHeightTwipPant2 * .01 NombrePantalla2.Width = SWidthTwipPant2 * .6 NombrePantalla2.Align = O 'Ninguno NombrePantalla2.Alignment = 7 'Centro - Medio NombrePantalla2.AutoSize = O 'Ninguno NombrePantalla2.BackColor = &HCOOOOO NombrePantalla2.Bevellnner = 1 'Inset NombrePantalla2.BevelOuter = 2 'Levantado NombrePantalla2.BevelWidth = 5 NombrePantalla2.BorderWidth = 4 NombrePantalla2.Caption = "NombrePantalla2" NombrePantalla2.DataField = "" Rem NombrePantalla2.DataSource - Inicializado Manualmente Rem NombrePantalla2.Draglcon - Agregar si se requiere NombrePantalla2.DragMode = O 'Manual NombrePantalla2.Enabled = -1 'Verdadero NombrePantalla2.FloodColor = &H0 NombrePantalla2.FloodShowPct = -1 'Verdadero NombrePantalla2.FloodType = O NombrePantalla2.Font3D = 4 NombrePantalla2.FontBold = -1 NombrePantalla2.Fontltalic = O 'Ninguno 'Inset w/heavy shading 'Verdadero 'Falso NombrePantalla2.FontName = "Times New Roman" NombrePantalla2.FontSize = 18 NombrePantalla2.FontStrikethru = O 'Falso NombrePantalla2.FontUnderline = O 'Falso NombrePantalla2.ForeColor = &HFFFF& NombrePantalla2.HelpContextID = O Rem NombrePantalla2.Index - Agregar si se requiere NombrePantalla2.MousePointer = O 'Default NombrePantalla2.Outline = O 'Falso NombrePantalla2.RoundedComers = -1 'Verdadero NombrePantalla2.ShadowColor = 1 'Negro NombrePantalla2.Tablndex = O NombrePantalla2.Tag = "" NombrePantalla2.Visible = -1 'Verdadero Rem Termina Inicializacion SSPanel en Fonna Pantalla2 = NombrePantalla2 Rem Inicializacion SSPanel en Fonna Pantalla2 = GruposText GruposText.Height = SHeightTwipPant2 * .07 GruposText.Left = SWidthTwipPant2 * .03 GruposText.Top = SHeightTwipPant2 * .11 GruposText.Width = SWidthTwipPant2 * .17 GruposText.Align = O 'Ninguno GruposText.Alignment = 7 'Centro - Medio 224 GruposText.AutoSize = O 'Ninguno GruposText.BackColor = &HCOCOC0 GruposText.Bevellnner = 2 'Levantado GruposText.BevelOuter= 2 'Levantado GruposText.BevelWidth = 6 GruposText.BorderWidth = 3 GruposText.Caption = "GruposText" GruposText.DataField = "" Rem GruposText.DataSource - Inicializado Manualmente Rem GruposText.Draglcon - Agregar si se requiere GruposText.DragMode = O 'Manual GruposText.Enabled = -1 'Verdadero GruposText.FloodColor = &HFF GruposText.FloodShowPct = -1 'Verdadero GruposText.FloodType = O 'Ninguno GruposText.Font3D = 4 'Inset w/heavy shadow GruposText.FontBold = -1 'Verdadero GruposText.Fontltalic = O 'Falso GruposText.FontName = "Times New Roman" GruposText.FontSize = 11 GruposText.FontStrikethru = O 'Falso GruposText.FontUnderline = O 'Falso GruposText.ForeColor = &H80000008 GruposText.HelpContextID = O Rem GruposText.Index - Agregar si se requiere GruposText.MousePointer = O 'Default GruposText.Outline = O 'Falso GruposText.RoundedComers = -1 'Verdadero GruposText.ShadowColor = 1 'Negro GruposText.Tablndex = 1 GruposText.Tag = "" GruposText.Visible = -1 'Verdadero Rem Termina Inicializacion de SSPanel en Forma Pantalla2 = GruposText Rem Inicializacion de Picture Box en Forma Pantalla2 = Grupos Grupos.Height = SHeightTwipPant2 * .07 Grupos.Left = SWidthTwipPant2 * .22 Grupos.Top= SHeightTwipPant2 * .11 Grupos.Width = SWidthTwipPant2 * .3 Grupos.Align = O 'Ninguno Grupos.AutoRedraw = -1 'Verdadero Grupos.AutoSize = O 'Falso Grupos.BackColor = &HS0FFFF Rem Grupos.BorderStyle - Inicializado Manualmente Rem Grupos.ClipControls - Inicializado Manualmente Grupos.DataField = "" Rem Grupos.DataSource - Inicializado Manualmente Rem Grupos.Draglcon - Agregar si se requiere Grupos.DragMode = O 'Manual 225 Grupos.DrawMode = 13 Grupos.DrawStyle = O Grupos.DrawWidth = 1 Grupos.Enabled = -1 Grupos.FillColor = &H0 'CopyPen 'Solido 'Verdadero Grupos.FillStyle = O 'Solido Grupos.FontBold = -1 'Verdadero Grupos.Fontltalic = O 'Falso Grupos.FontName = "Times New Roman" Grupos.FontSize = 24 Grupos.FontStrikethru = O . . 'Falso Grupos.FontTransparent = -1 'Verdadero Grupos.FontUnderline = O 'Falso Grupos.ForeColor = &H80000008 Grupos.HelpContextID = O Rem Grupos.Index - Agregar si se requiere Grupos.Linkltem = "" Rem Grupos.LinkMode - Inicializado Manualmente Grupos.LinkTimeout = 50 Grupos.LinkTopic = "" Grupos.MousePointer = O 'Default Rem Grupos.Picture - Agregar si se requiere Grupos.ScaleHeight = 588 Grupos.ScaleLeft = O Grupos.ScaleMode = 1 Grupos.ScaleTop = O Grupos.Scale Width = 3504 Grupos. Tablndex = 2 Grupos.TabStop = -1 Grupos.Tag = "" 'Twip 'Verdadero Grupos.Visible= -1 'Verdadero Rem Termina Inicializacion de Picture Box en Forma Pantalla2 = Grupos Rem Inicializando de Shape en Forma Pantalla2 = Shape1P2 Shape1P2.Height = SHeightTwipPant2 * .01 Shape1P2.Left = SWidthTwipPant2 * .02 Shape1P2.Top = SHeightTwipPant2 * .2 ShapelP2.Width = SWidthTwipPant2 * .68 Shape lP2.BackColor = &H0 ShapelP2.BackStyle = 1 'Opaco ShapelP2.BorderColor = &HFFFF& ShapelP2.BorderStyle = 1 'Solido ShapelP2.BorderWidth = 2 ShapelP2.DrawMode = 13 'CopyPen ShapelP2.Fi11Color = &H0 Shape 1 P2.Fil1Style = O 'Solido Rem Shape 1 P2.lndex - Agregar si se requiere ShapelP2.Shape = O 'Rectangulo ShapelP2.Tag = "" 226 Shape1P2.Visible = -1 'Verdadero Rem Termina inicializacion de Shape en Forma Pantalla2 = Shape1P2 Rem Inicializacion de SSPanel en Forma Pantalla2 = SecMovText SecMovText.Height = SHeightTwipPant2 * .07 SecMovText.Left = SWidthTwipPant2 * .71 SecMovText.Top = SHeightTwipPant2 * .01 SecMovText.Width = SWidthTwipPant2 * .26 SecMovText.Align = O 'Ninguno SecMovText.Alignment = 7 'Centro - Medio SecMovText.AutoSize = O 'Ninguno SecMovText.BackColor = &HC0C0C0 SecMovText.Bevellnner = 2 'Levantado SecMovText.BevelOuter = 2 'Levantado SecMovText.BevelWidth = 6 SecMovText.BorderWidth = 3 SecMovText.Caption = "SecMovText" SecMovText.DataField = "" Rem SecMovText.DataSource - Inicializado Manualmente Rem SecMovText.Draglcon - Agregar si se requiere SecMovText.DragMode = O 'Manual SecMovText.Enabled = -1 'Verdadero SecMovText.FloodColor = &HFF 'Verdadero 'Ninguno SecMovText.FloodShowPct = -1 SecMovText.FloodType = O SecMovText.Font3D = 4 SecMovText.FontBold = -1 SecMovText.Fontltalic = O 'Inset w/heavy shadow 'Verdadero 'Falso SecMovText.FontName = "Times New Roman" SecMovText.FontSize = 9.6 SecMovText.FontStrikethru = O 'Falso SecMovText.FontUnderline = O 'Falso SecMovText.ForeColor = &H80000008 SecMovText.HelpContextID = O Rem SecMovText.Index - Agregar si se requiere SecMovText.MousePointer = O 'Default SecMovText.Outline = O 'Falso SecMovText.RoundedComers = -1 'Verdadero SecMovText.ShadowColor = 1 'Negro SecMovText.Tablndex = 3 SecMovText.Tag = "" SecMovText.Visible = -1 'Verdadero Rem Termina inicializacion de SSPanel en Forma Pantalla2 = SecMovText Rem Inicializando Picture Box en Forma Pantalla2 = SecMov SecMov .Height = SHeightTwipPant2 * .25 SecMov.Left = SWidthTwipPant2 * .71 SecMov.Top = SHeightTwipPant2 * .08 SecMov.Width = SWidthTwipPant2 * .26 227 SecMov .Align = O 'Ninguno SecMov.AutoRedraw = -1 'Verdadero SecMov.AutoSize = O 'Falso SecMov.BackColor = &H80FFFF Rem SecMov.BorderStyle - Inicializado Manualmente Rem SecMov.ClipControls - Inicializado Manualmente SecMov .DataField = "" Rem SecMov .DataSource - Inicializado Manualmente Rem SecMov.Draglcon -Agregar si se requiere SecMov .DragMode = O 'Manual SecMov.DrawMode = 13 'Copy Pen SecMov.DrawStyle = O 'Solido SecMov.DrawWidth = 1 SecMov .Enabled = -1 SecMov.FillColor = &HO SecMov.FillStyle = O SecMov .FontBold = O SecMov.Fontltalic = O 'Verdadero 'Solido 'Falso 'Falso SecMov.FontName = "Small Fonts" SecMov.FontSize = 6 SecMov.FontStrikethru = O 'Falso SecMov .FontTransparent = -1 'Verdadero SecMov.FontUnderline = O 'Falso SecMov .ForeColor = &H80000008 SecMov.HelpContextlD = O Rem SecMov.Index -Agregar si se requiere SecMov .Linkltem = "" Rem SecMov .LinkMode - Inicializado Manualmente SecMov.LinkTimeout = 50 SecMov.LinkTopic = "" SecMov.MousePointer = O 'Default Rem SecMov.Picture -Agregar si se requiere SecMov .ScaleHeight = 2268 SecMov.ScaleLeft = O SecMov.ScaleMode = 1 'Twip SecMov.ScaleTop = O SecMov.ScaleWidth = 2988 SecMov.Tablndex = 4 'Verdadero SecMov.TabStop = -1 SecMov.Tag = "" SecMov.Visible = -1 'Verdadero Rem Termina Inicializacion de Picture Box en Forma Pantalla2 = SecMov Rem Inicializacion de Picture Box en Forma Pantalla2 = AyudaP2 AyudaP2.Height = SHeightTwipPant2 * .4 AyudaP2.Left = SWidthTwipPant2 * .73 AyudaP2.Top = SHeightTwipPant2 * .34 AyudaP2.Width = SWidthTwipPant2 * .25 AyudaP2.Align = O 'Ninguno 228 AyudaP2.AutoReclraw = -1 'Verdadero AyudaP2.AutoSize = O 'Falso AyudaP2.BackColor = &H80FFFF Rem AyudaP2.BorderStyle - Inicializado Manualmente Rem AyudaP2.ClipControls - Inicializado Manualmente AyudaP2.DataField = "" Rem AyudaP2.DataSource - Inicializado Manualmente Rem AyudaP2.Draglcon -Agregar si se requiere AyudaP2.DragMode = O 'Manual AyudaP2.DrawMode = 13 'Copy Pen AyudaP2.DrawStyle = O 'Solido AyudaP2.DrawWidth = 1 AyudaP2.Enabled = -1 'Verdadero AyudaP2.FillColor = &HO AyudaP2.FillStyle = O 'Solido AyudaP2.FontBold = -1 'Verdadero AyudaP2.Fontltalic = O 'Falso AyudaP2.FontName = "Times New Roman" AyudaP2.FontSize = 7.8 AyudaP2.FontStrikethru = O 'Falso AyudaP2.FontTransparent = -1 'Verdadero AyudaP2.FontUnderline = O 'Falso AyudaP2.ForeColor = &880000008 AyudaP2.HelpContextID = O Rem AyudaP2.Index - Agregar si se requiere AyudaP2.Linkltem = 1111 Rem AyudaP2.LinkMode - Inicializado Manualmente AyudaP2.LinkTimeout = 50 AyudaP2.LinkTopic = 1111 AyudaP2.MousePointer = O 'Default Rem AyudaP2.Picture -Agregar si se requiere AyudaP2.ScaleHeight = 3708 AyudaP2.ScaleLeft = O AyudaP2.ScaleMode = 1 'Twip AyudaP2.ScaleTop = O AyudaP2.ScaleWidth = 2988 AyudaP2.Tablndex = 5 AyudaP2.TabStop = -1 'Verdadero AyudaP2.Tag = 1111 AyudaP2.Visible = -1 'Verdadero Rem Terminainicializacion de Picture Box en Forma Pantalla2 = AyudaP2 Rem Inicializacion de SSPanel en Forma Pantalla2 = DiagFaseMovText DiagFaseMovText.Height = SHeightTwipPant2 * .07 DiagFaseMovText.Left = SWidthTwipPant2 * .03 DiagFaseMovText.Top = SHeightTwipPant2 * .22 DiagFaseMovText.Width = SWidthTwipPant2 * .66 DiagFaseMovText.Align = O 'Ninguno DiagFaseMovText.Alignment = 7 'Centro - Medio 229 DiagFaseMovText.AutoSize = O 'Ninguno DiagFaseMovText.BackColor = &HCOCOC0 DiagFaseMovText.Bevellnner = 2 'Levantado DiagFaseMovText.BevelOuter = 2 'Levantado DiagFaseMovText.BevelWidth = 6 DiagFaseMovText.BorderWidth = 3 DiagFaseMovText.Caption = "DiagFaseMovText" DiagFaseMovText.DataField = "" Rem DiagFaseMovText.DataSource - Inicializado Manualmente Rem DiagFaseMovText.Draglcon - Agregar si se requiere DiagFaseMovText.DragMode = O 'Manual DiagFaseMovText.Enabled = -1 'Verdadero DiagFaseMovText.FloodColor = &HFF DiagFaseMovText.FloodShowPct = -1 'Verdadero DiagFaseMovText.FloodType = O 'Ninguno DiagFaseMovText.Font3D = 4 'Inset w/heavy shadow DiagFaseMovText.FontBold = -1 'Verdadero DiagFaseMovText.Fontltalic = O 'Falso DiagFaseMovText.FontName = "Times New Roman" DiagFaseMovText.FontSize = 9.6 DiagFaseMovText.FontStrikethru = O 'Falso DiagFaseMovText.FontUnderline = O 'Falso DiagFaseMovText.ForeColor = &H80000008 DiagFaseMovText.HelpContextID = O Rem DiagFaseMovText.Index - Agregar si se requiere DiagFaseMovText.MousePointer = O 'Default DiagFaseMovText.Outline = O 'Falso DiagFaseMovText.RoundedComers = -1 'Verdadero DiagFaseMovText.ShadowColor = 1 'Negro DiagFaseMovText.Tablndex = 6 DiagFaseMovText.Tag = 1111 DiagFaseMovText.Visible = -1 'Verdadero Rem Termina inicializacion de SSPanel en Forma Pantalla2 = DiagFaseMovText Rem Inicializacion Picture Box en Forma Pantalla2 = DiagFaseMov DiagFaseMov .Height = SHeightTwipPant2 * . 7 DiagFaseMov.Left = SWidthTwipPant2 * .03 DiagFaseMov.Top = SHeightTwipPant2 * .29 DiagFaseMov.Width = SWidthTwipPant2 * .66 DiagFaseMov.Align = O 'Ninguno DiagFaseMov.AutoRedraw = -1 'Verdadero DiagFaseMov.AutoSize = O 'Falso DiagFaseMov.BackColor = &HS0FFFF Rem DiagFaseMov.BorderStyle - Inicializado Manualmente Rem DiagFaseMov.ClipControls - Inicializado Manualmente DiagFaseMov.DataField = " 11 Rem DiagFaseMov.DataSource - Inicializado Manualmente Rem DiagFaseMov.Draglcon - Agregar si se requiere DiagFaseMov.DragMode = O 'Manual 230 DiagFaseMov.DrawMode = 13 DiagFaseMov.DrawStyle = O DiagFaseMov.DrawWidth = 1 DiagFaseMov .Enabled = -1 DiagFaseMov.FillColor = &H0 'Copy Pen 'Solido 'Verdadero DiagFaseMov.FillStyle = O 'Solido DiagFaseMov.FontBold = -1 'Verdadero DiagFaseMov.Fontltalic = O 'Falso DiagFaseMov.FontName = "Times New Roman" DiagFaseMov.FontSize = 7.8 DiagFaseMov.FontStrikethru = O 'Falso DiagFaseMov.FontTransparent = -1 'Verdadero DiagFaseMov.FontUnderline = O 'Falso DiagFaseMov.ForeColor = &H80000008 DiagFaseMov.HelpContextID = O Rem DiagFaseMov.Index -Agregar si se requiere DiagFaseMov.Linkltem = "" Rem DiagFaseMov.LinkMode - Inicializado Manualmente DiagFaseMov.LinkTimeout = 50 DiagFaseMov.LinkTopic = "" DiagFaseMov.MousePointer = O 'Default Rem DiagFaseMov .Picture - Agregar si se requiere DiagFaseMov.ScaleHeight = 6228 DiagFaseMov.ScaleLeft = O DiagFaseMov.ScaleMode = 1 DiagFaseMov.ScaleTop = O DiagFaseMov.ScaleWidth = 8148 DiagFaseMov.Tablndex = 7 DiagFaseMov.TabStop = -1 DiagFaseMov.Tag = "" 'Twip 'Verdadero DiagFaseMov. Visible = -1 'Verdadero Rem Termina inicializacion de Picture Box en Forma Pantalla2 = DiagFaseMov Rem Inicializacion de SSCommand en Forma Pantalla2 = OKDIAG OKDIAG.Height = SHeightTwipPant2 * .1 OKDIAG.Left = SWidthTwipPant2 * .71 OKDIAG.Top = SHeightTwipPant2 * .78 OKDIAG.Width = SWidthTwipPant2 * .14 OKDIAG.AutoSize = O 'Ninguno OKDIAG.BevelWidth = 8 OKDIAG.Caption = "OKDIAG" · Rem OKDIAG.Draglcon -Agregar si se requiere OKDIAG.DragMode = O 'Manual OKDIAG.Enabled = -1 'Verdadero OKDIAG.Font3D = 2 'Levantado w/heavy shading OKDIAG.FontBold = -1 'Verdadero OKDIAG.Fontltalic = O 'Falso OKDIAG.FontName = "Times New Roman" OKDIAG.FontSize = 9.6 231 OKDIAG.FontStrikethru = O 'Falso OKDIAG.FontUnderline = O 'Falso OKDIAG.ForeColor = &H0 OKDIAG.HelpContextID = O Rem OKDIAG.Index -Agregar si se requiere OKDIAG.MousePointer = O 'Default OKDIAG.Outline = -1 'Verdadero Rem OKDIAG.Picture -Agregar si se requiere OKDIAG.RoundedComers = -1 'Verdadero OKDIAG.Tablndex = 8 OKDIAG.TabStop = -1 'Verdadero OKDIAG.Tag = 1111 OKDIAG.Visible = -1 'Verdadero Rem Termina inicializacion de SSCommand en Forma Pantalla2 = OKDIAG Rem Inicializacion de Picture Box en Forma Pantalla2 = OKDIAGOutput OKDiagOutput.Height = SHeightTwipPant2 * .1 OKDiagOutput.Left = SWidthTwipPant2 * .71 OKDiagOutput.Top = SHeightTwipPant2 * .89 OKDiagOutput.Width = SWidthTwipPant2 * .14 OKDiagOutput.Align = O 'Ninguno OKDiagOutput.AutoRedraw = -1 'Verdadero OKDiagOutput.AutoSize = O 'Falso OKDiagOutput.BackColor = &HS0FFFF Rem OKDIAGOutput.BorderStyle - Inicializado Manualmente Rem OKDIAGOutput.ClipControls - Inicializado Manualmente OKDiagOutput.DataField = 1111 Rem OKDIAGOutput.DataSource - Inicializado Manualmente Rem OKDIAGOutput.Draglcon - Agregar si se requiere OKDiagOutput.DragMode = O 'Manual OKDiagOutput.DrawMode = 13 'Copy Pen OKDiagOutput.DrawStyle = O 'Solido OKDiagOutput.DrawWidth = 1 OKDiagOutput.Enabled = -1 'Verdadero OKDiagOutput.FillColor = &H0 OKDiagOutput.FillStyle = O 'Solido OKDiagOutput.FontBold = -1 'Verdadero OKDiagOutput.Fontltalic = O 'Falso OKDiagOutput.FontName = "Times New Roman" OKDiagOutput.FontSize = 9.6 OKDiagOutput.FontStrikethru = O 'Falso O KDiagOutput.FontTransparent = -1 'Verdadero OKDiagOutput.FontUnderline = O 'Falso OKDiagOutput.ForeColor = &H80000008 OKDiagOutput.HelpContextID = O Rem OKDIAGOutput.Index - Agregar si se requiere OKDiagOutput.Linkltem = 1111 Rem OKDIAGOutput.LinkMode - Inicializado Manualmente OKDiagOutput.LinkTimeout = 50 232 OKDiagOutput.LinkTopic = "" OKDiagOutput.MousePointer = O 'Default Rem OKDIAGOutput.Picture - Agregar si se requiere OKDiagOutput.ScaleHeight = 708 OKDiagOutput.ScaleLeft = O OKDiagOutput.ScaleMode = 1 'Twip OKDiagOutput.ScaleTop = O OKDiagOutput.ScaleWidth = 1308 OKDiagOutput.Tablndex = 9 OKDiagOutput.TabStop = -1 'Verdadero OKDiagOutput.Tag = "" OKDiagOutput.Visible = -1 'Verdadero Rem Termina inicializacion de Picture Box en Forma Pantalla2 = OKDIAGOutput Rem Inicializacion de SSCommand en Forma Pantalla2 = CONTP2 CONTP2.Height = SHeightTwipPant2 * .06 CONTP2.Left = SWidthTwipPant2 * .87 CONTP2.Top = SHeightTwipPant2 * .77 CONTP2.Width = SWidthTwipPant2 * .11 CONTP2.AutoSize = O 'Ninguno CONTP2.Beve1Width = 8 CONTP2.Caption = "CONTP2" Rem CONTP2.Draglcon - Agregar si se requiere CONTP2.DragMode = O 'Manual CONTP2.Enabled = O 'Falso CONTP2.Font3D = 2 'Levantado w/heavy shading CONTP2.FontBold = -1 'Verdadero CONTP2.Fontltalic = O 'Falso CONTP2.FontName = "Times New Roman" CONTP2.FontSize = 9.6 CONTP2.FontStrikethru = O 'Falso CONTP2.FontUnderline = O 'Falso CONTP2.ForeColor = &H0 CONTP2.HelpContextID = O Rem CONTP2.lndex - Agregar si se requiere CONTP2.MousePointer = O 'Default CONTP2.Outline = -1 'Verdadero Rem CONTP2.Picture - Agregar si se requiere CONTP2.RoundedComers = -1 'Verdadero CONTP2. Tablndex = 1 O CONTP2.TabStop = -1 'Verdadero CONTP2.Tag = "" CONTP2. Visible = -1 'Verdadero Rem Termina inicializacion de SSCommand en Forma Pantalla2 = CONTP2 Rem Inicializacion de SSCommand en Forma Pantalla2 = PRINTP2 PRINTP2.Height = SHeightTwipPant2 * .06 PRINTP2.Left = SWidthTwipPant2 * .87 PRINTP2.Top = SHeightTwipPant2 * .85 233 PRINTP2.Width = SWidthTwipPant2 * .11 PRINTP2.AutoSize = O 'Ninguno PRINTP2.Beve1Width = 8 PRINTP2.Caption = "PRINTP2" Rem PRINTP2.Draglcon - Agregar si se requiere PRINTP2.DragMode = O 'Manual PRINTP2.Enabled = O 'Falso PRINTP2.Font3D= 2 'Levantado w/heavy shading PRINTP2.FontBold = -1 'Verdadero PRINTP2.Fontltalic = O 'Falso PRINTP2.FontName = "Times New Roman" PRINTP2.FontSize = 9.6 PRINTP2.FontStrikethru = O 'Falso PRINTP2.FontUnderline = O 'Falso PRINTP2.ForeColor = &H0 PRINTP2.HelpContextID = O Rem PRINTP2.lndex - Agregar si se requiere PRINTP2.MousePointer = O 'Default PRINTP2.Outline = -1 'Verdadero Rem PRINTP2.Picture - Agregar si se requiere PRINTP2.RoundedComers = -1 'Verdadero PRINTP2.Tablndex = 11 PRINTP2.TabStop = -1 'Verdadero PRINTP2.Tag = "" PRINTP2. Visible = -1 'Verdadero Rem Termina inicializacion de SSCommand en Forma Pantalla2 = PRINTP2 Rem Inicializacion de SSCommand en Forma Pantalla2 = QUITP2 QUITP2.Height = SHeightTwipPant2 * .06 QUITP2.Left = SWidthTwipPant2 * .87 QUITP2.Top = SHeightTwipPant2 * .93 QUITP2.Width = SWidthTwipPant2 * .11 QUITP2.AutoSize = O 'Ninguno QUITP2.Beve1Width = 8 QUITP2.Caption = "QUITP2" Rem QUITP2.Draglcon - Agregar si se requiere QUITP2.DragMode = O 'Manual QUITP2.Enabled = -1 'Verdadero QUITP2.Font3D = 2 'Levantado w/heavy shading QUITP2.FontBold = -1 'Verdadero QUITP2.Fontltalic = O 'Falso QUITP2.FontName = "Times New Roman" QUITP2.FontSize = 9.6 QUITP2.FontStrikethru = O 'Falso QUITP2.FontUnderline = O 'Falso QUITP2.ForeColor = &H0 QUITP2.HelpContextID = O Rem QUITP2.Index - Agregar si se requiere QUITP2.MousePointer = O 'Default 234 QUITP2.Outline = -1 'Verdadero Rem QUITP2.Picture - Agregar si se requiere QUITP2.RoundedComers = -1 'Verdadero QUITP2.Tablndex = 12 QUITP2.TabStop = -1 'Verdadero QUITP2.Tag = "" QUITP2.Visible = -1 'Verdadero Rem Termina inicializacion de SSCommand en Forma Pantalla2 = QUITP2 Rem Inicializando SSCommand en Forma Pantalla2 = INITP2 INITP2.Height = SHeightTwipPant2 * .07 INITP2.Left = SWidthTwipPant2 * .54 INITP2.Top = SHeightTwipPant2 * .11 INITP2.Width = SWidthTwipPant2 * .15 INITP2.AutoSize = O 'Ninguno INITP2.Beve1Width = 8 INITP2.Caption = "INITP2" Rem INITP2.Draglcon - Agregar si se requiere INITP2.DragMode = O 'Manual INITP2.Enabled = -1 'Verdadero INITP2.Font3D = 2 'Levantado w/heavy shading INITP2.FontBold = -1 'Verdadero INITP2.Fontltalic = O 'Falso INITP2.FontName = "Times New Roman" INITP2.FontSize = 9.6 INITP2.FontStrikethru = O . 'Falso INITP2.FontUnderline = O 'Falso INITP2.ForeColor = &H0 INITP2.HelpContextID = O Rem INITP2.Index - Agregar si se requiere INITP2.MousePointer = O 'Default INITP2.Outline = -1 'Verdadero Rem INITP2.Picture - Agregar si se requiere INITP2.RoundedComers = -1 'Verdadero INITP2.Tablndex = 3 INITP2.TabStop = -1 'Verdadero INITP2.Tag = "" INITP2. Visible = -1 'Verdadero Rem Termina Inicializacion de SSCommand en Forma Pantalla2 = INITP2 EndSub Procedimiento que descarga la Forma Pantalla2 y carga la Forma Pantalla! si el usuario lo activa. Sub INITP2_ Click () Unload Pantalla2 Pantallal.Show O 235 EndSub Procedimiento que dependiendo del cumplimiento de las condiciones de Forma Pantalla3 activa impresión y/o da acceso a la Forma Pantalla5 (Dibujo de Circuito). Sub OKDIAG_Click () Pantalla3 .Hide Pantalla3.Show 1 OKDIAG.Enabled = O OKDiagOutput.Cls If CascadaSimple = 1 Then PRINTP2.Enabled = -1 CONTP2.Enabled = -1 OKDiagOutput.Print "CIRCUITO -->" OKDiagOutput.Print "CASCADA" OKDiagOutput.Print "SIMPLE" Else PRINTP2.Enabled = -1 OKDiagOutput.Print "CIRCUITO-->" OKDiagOutput.Print "CASCADA" OKDiagOutput.Print "NO SIMPLE" End If End Sub Procedimiento que activa la Forma Pantalla4 cual imprime la Forma Pantalla2. Sub PRINTP2_Click () Const GETSETP APERORIENT = 30 Dim Orient As OrientStructure Dim X As Integer Pantalla4.Show O Printer.EndDoc Pantalla4.PrintForm Printer.EndDoc Printer.EndDoc Unload Pantalla4 EndSub Procedimiento que se sale del programa cuando el usuario lo activa. Sub QUITP2_Click () 236 Unload Pantalla2 End EndSub Forma Pantalla 3 - Forma que cuando activa por la Pantalla2, verifica si se cumplen las condiciones de cascada simple, usando la matriz cilfase. Regresa una bandera a la Pantalla2. Procedimiento que define los variables a usar en esta forma. Option Explicit Rem Variables de Nivel Forma Dim SWidthTwipPant3 As Integer Dim SHeightTwipPant3 As Integer Dim SWidthPixelPant3 As Integer Dim SHeightPixelPant3 As Integer Procedimiento que se ejecuta al inicio de carga de forma pantalla3. Inicializa los elementos de la forma. También, verifica las condiciones de cascada simple. Sub Form_Load O Dim Sim, Grupo, Rep As String Dim FlagSim, FlagGrupo, FlagRep As Integer Dim I, IPos, J, JPos As Integer Dim Check As Integer ScreenWidthTwip = Screen.Width ScreenHeightTwip = Screen.Height Screen WidthPixel = Screen. TwipsPerPixelX ScreenHeightPixel = Screen. TwipsPerPixel Y SWidthTwipPant3 = Screen WidthTwip SHeightTwipPant3 = ScreenHeightTwip SWidthPixelPant3 = Screen WidthPixel SHeightPixelPant3 = ScreenHeightPixel Rem lnicializacion de V al ores Default de Pantalla3 InitializePantalla3 Rem Agregar elementos a SSPanel = NombrePantalla3 NombrePantalla3.Caption = "CHEQUEO DE CONDICIONES" 237 Rem Tennina Agregar elementos a SSPanel = NombrePantalla3 Rem Agregar elementos a SSCommand = QUITP3 QUITP3.Caption = "O.K." Rem Tennina agregar elementos a SSCommand = QUITP3 Rem --------------------------------------------- Rem Checando Condiciones de Cascada Simple Rem ------------------------------- Rem - Checando # de grupos If (NumGrupos >= 2) And (NumGrupos <= 5) Then FlagGrupo = 1 Grupo= "SI" Else FlagGrupo = O Grupo= "NO" Endlf Rem - Checando Repetividad For I = O To NumCil - 1 Check=0 For J = 1 To NumFases Check = Check + CilFase(I, J) If Check > 2 Then Rep="NO" FlagRep=0 Exit For Elself Check < 2 Then Rep = "SI" FlagRep = 1 End If NextJ If Check > 2 Then Exit For Next I Rem - Checando Simultaneadad For I = 1 To NumFases Check=0 For J = O To NumCil - 1 Check= Check+ CilFase(J, 1) If Check > 1 Then Sim= "NO" FlagSim= O Exit For Elself Check < 1 Then Sim = "SI" FlagSim = 1 238 End lf NextJ If Check > 1 Then Exit For NextI Rem Verificando Cascada Simple lf (FlagGrupo + FlagRep + FlagSim) = 3 Then CascadaSimple = 1 Else CascadaSimple = O Endlf Rem Agregar elementos a OutputP3 OutputP3.Cls OutputP3.FontSize = 24 OutputP3.CurrentX = 100 OutputP3.CurrentY = 50 OutputP3.Print "CONDICIONES" OutputP3.CurrentX = 4300 OutputP3.CurrentY = 50 OutputP3.Print "Cumple" OutputP3.DrawWidth = 3 OutputP3.Line (4000, 50)-(4000, 500) OutputP3.FontSize = 18 OutputP3.Print "" OutputP3.Print "" OutputP3.CurrentX = 100 OutputP3.CurrentY = 1600 OutputP3.Print "Grupos 2 >= Num <= 5" OutputP3.CurrentX = 100 OutputP3.CurrentY = 2000 OutputP3.Print "No Simultaneadad" OutputP3.CurrentX = 100 OutputP3.CurrentY = 2400 OutputP3.Print "No Repetividad" OutputP3.CurrentX = 4300 OutputP3.CurrentY = 1600 OutputP3.Print Grupo OutputP3.CurrentX = 4300 OutputP3.CurrentY = 2000 OutputP3.Print Sim OutputP3.CurrentX = 4300 OutputP3.CurrentY = 2400 OutputP3.Print Rep OutputP3.DrawWidth = 3 OutputP3.Line (4000, 1400)-(4000, 3000) Rem Termina agregar elementos a OutputP3 EndSub 239 Procedimiento que inicializa los valores de todos los elementos de Forma Pantalla 3. Sub InitializePantalla3 O Rem Inicializando Forma = Pantalla3 Pantalla3.Height = SHeightTwipPant3 * .75 Pantalla3.Left = SWidthTwipPant3 * .1 Pantalla3.Top = SHeightTwipPant3 * .1 Pantalla3.Width = SWidthTwipPant3 * .57 Pantalla3.AutoRedraw = O 'Falso Pantalla3.BackColor = &H8000& Rem Pantalla3.BorderStyle - Inicializado Manualmente Pantalla3.Caption = 1111 Rem Pantalla3.ClipControls - Inicializado Manualmente Rem Pantalla3.Contro1Box - Inicializado Manualmente Pantalla3.DrawMode = 13 'Copy Pen Pantalla3.DrawStyle = O 'Solido Pantalla3.DrawWidth = 1 Pantalla3.Enabled = -1 Pantalla3.Fil1Color = &HO 'Verdadero Pantalla3.Fil1Style = 7 Pantalla3.FontBold= -1 Pantalla3.Fontltalic = O 'Diagonal Cruzado 'Verdadero 'Falso Pantalla3.FontName = "Times New Roman" Pantalla3.FontSize = 9.6 Pantalla3.FontStrikethru = O 'Falso Pantalla3.FontTransparent = -1 'Verdadero Pantalla3.FontUnderline = O 'Falso Pantalla3.ForeColor = &HFFFFFF Pantalla3.HelpContextID = O Rem Pantalla3.lcon - Agregar si se requiere Pantalla3.KeyPreview = O 'Falso Rem Pantalla3.LinkMode - Inicializado Manualmente Pantalla3.LinkTopic = 11Pantalla3" Rem Pantalla3.MaxButton - Inicializado Manualmente Rem Pantalla3.MDIChild - Inicializado Manualmente Rem Pantalla3.MinButton - Inicializado Manualmente Pantalla3.MousePointer = O 'Default Rem Pantalla3.Name- Inicializado Manualmente Rem Pantalla3.Picture - Agregar si se requiere Pantalla3.ScaleHeight = 6504 Pantalla3.ScaleLeft = O Pantalla3.ScaleMode = 1 'Twip Pantalla3.ScaleTop = O Pantalla3.ScaleWidth = 6972 Pantalla3.Tag = "" Pantalla3.Visible = -1 'Verdadero 240 Pantalla3.WindowState = O 'Nonnal Rem Tennina inicializacion de Fonna = Pantalla3 Rem Inicializando SSPanel en Fonna Pantalla2 = NombrePantalla3 NombrePantalla3.Height = .12 * SHeightTwipPant3 * .75 NombrePantalla3.Left = .03 * SWidthTwipPant3 * .57 NombrePantalla3.Top = .04 * SHeightTwipPant3 * .75 NombrePantalla3.Width = .85 * SWidthTwipPant3 * .57 NombrePantalla3.Align = O 'Ninguno NombrePantalla3.Alignment = 7 'Centro - Medio NombrePantalla3.AutoSize = O 'Ninguno NombrePantalla3.BackColor = &H8080& NombrePantalla3.Bevellnner = 1 NombrePantalla3.BevelOuter = 2 NombrePantalla3.BevelWidth = 5 NombrePantalla3.BorderWidth = 4 'Inset 'Levantado NombrePantalla3.Caption = "NombrePantalla3" NombrePantalla3.DataField = "" Rem NombrePantalla3.DataSource - Inicializado Manualmente Rem NombrePantalla3.Draglcon - Agregar si se requiere NombrePantalla3.DragMode = O 'Manual NombrePantalla3.Enabled = -1 'Verdadero NombrePantalla3.FloodColor = &H0 NombrePantalla3.FloodShowPct = -i 'Verdadero NombrePantalla3.FloodType = O NombrePantalla3.Font3D = 4 NombrePantalla3.FontBold = -1 NombrePantalla3.Fontltalic = O 'Ninguno 'Inset w/heavy shading 'Verdadero 'Falso NombrePantalla3.FontName = "Times New Roman" NombrePantalla3.FontSize = 18 NombrePantalla3.FontStrikethru = O 'Falso NombrePantalla3.FontUnderline = O 'Falso NombrePantalla3.ForeColor = &HFFFFFF NombrePantalla3.HelpContextID = O Rem NombrePantalla3.Index - Agregar si se requiere NombrePantalla3.MousePointer = O 'Default NombrePantalla3.Outline = O 'Falso NombrePantalla3.RoundedComers = -1 'Verdadero NombrePantalla3.ShadowColor = 1 'Negro NombrePantalla3.Tablndex = O NombrePantalla3.Tag = "" NombrePantalla3.Visible = -1 'Verdadero Rem Tennina inicializacion de SSPanel en Fonna Pantalla2 = NombrePantalla3 Rem Inicializando SSCommand en Fonna Pantalla2 = QUITP3 QUITP3.Height = .1 * SHeightTwipPant3 * .75 QUITP3.Left = . 77 * SWidthTwipPant3 * .57 QUITP3.Top = .85 * SHeightTwipPant3 * .75 QUITP3.Width = .2 * SWidthTwipPant3 * .57 241 QUITP3.AutoSize = O 'Ninguno QUITP3.Beve1Width = 8 QUITP3.Caption = "QUITP3" Rem QUITP3.Draglcon - Agregar si se requiere QUITP3.DragMode = O 'Manual QUITP3.Enabled = -1 'Verdadero QUITP3.Font3D = 2 'Levantado w/heavy shading QUITP3.FontBold = -1 'Verdadero QUITP3.Fontltalic = O 'Falso QUITP3.FontName = "Times New Roman" QUITP3.FontSize = 9.6 QUITP3.FontStrikethru = O 'Falso QUITP3.FontUnderline = O 'Falso QUITP3.ForeColor = &H0& QUITP3.HelpContextID = O Rem QUITP3.lndex - Agregar si se requiere QUITP3.MousePointer = O 'Default QUITP3.Outline = -1 'Verdadero Rem QUITP3.Picture -Agregar si se requiere QUITP3.RoundedComers = -1 'Verdadero QUITP3.Tablndex = 1 QUITP3.TabStop = -1 'Verdadero QUITP3.Tag = "" QUITP3.Visible = -1 'Verdadero Rem Termina inicializacion de SSCommand en Forma Pantalla2 = QUITP3 Rem lnicializacion de Picture Box en Forma Pantalla3 = OutputP3 OutputP3.Height = .59 * SHeightTwipPant3 * .75 OutputP3.Left = .03 * SWidthTwipPant3 * .57 OutputP3.Top = .21 * SHeightTwipPant3 * .75 OutputP3.Width = .94 * SWidthTwipPant3 * .57 OutputP3.Align = O 'Ninguno OutputP3.AutoRedraw = -1 'Verdadero OutputP3.AutoSize = O 'Falso OutputP3.BackColor = &HC0COOO Rem OutputP3.BorderStyle - Inicializado Manualmente Rem OutputP3.ClipControls - Inicializado Manualmente OutputP3.DataField = "" Rem OutputP3.DataSource - Inicializado Manualmente Rem OutputP3.Draglcon -Agregar si se requiere OutputP3.DragMode = O 'Manual OutputP3.DrawMode = 13 'Copy Pen OutputP3.DrawStyle = O 'Solido OutputP3.DrawWidth = 1 OutputP3.Enabled = -1 'Verdadero OutputP3.Fi11Color = &H0 OutputP3.FillStyle = O 'Solido OutputP3.FontBold = -1 'Verdadero OutputP3.Fontltalic = O 'Falso 242 OutputP3.FontName = "Times New Roman" OutputP3.FontSize = 18 OutputP3.FontStrikethru = O 'Falso OutputP3.FontTransparent = -1 'Verdadero OutputP3.FontUnderline = O 'Falso OutputP3.ForeColor = &H0& OutputP3.HelpContextID = O Rem OutputP3.Index - Agregar si se requiere OutputP3.Linkltem = "" Rem OutputP3.LinkMode - Inicializado Manualmente OutputP3.LinkTimeout = 50 OutputP3.LinkTopic = "" OutputP3.MousePointer = O 'Default Rem OutputP3.Picture - Agregar si se requiere OutputP3.ScaleHeight = 4068 OutputP3.ScaleLeft = O OutputP3.ScaleMode = 1 'Twip OutputP3.ScaleTop = O OutputP3.ScaleWidth = 6108 OutputP3.Tablndex = 2 OutputP3.TabStop = -1 'Verdadero OutputP3.Tag = "" OutputP3.Visible = -1 'Verdadero Rem Termina inicializacion de Picture Box en Forma Pantalla3 = OutputP3 EndSub Procedimiento que descarga la Forma Pantalla3 cuando el usuario lo activa. Sub QUITP3_Click () Unload Pantalla3 EndSub Forma Pantalla 4 - Forma que imprime la Forma Pantalla2 (# de grupos, movimientos de cilindros y diagrama fase). Muestra un ''print preview" de la . ., 1mpres10n. Procedimiento que define los variables a usar en esta forma. 243 Option Explicit Rem Variables de Nivel Forma Dim SWidthTwipPant4 As Integer Dim SHeightTwipPant4 As Integer Dim SWidthPixelPant4 As Integer Dim SHeightPixelPant4 As Integer Procedimiento que se ejecuta al inicio de carga de forma pantalla4. Inicializa los elementos de la forma. Sub Form_Load O Dim I, J As Integer Dim IPos, JPos As Integer Dim Sign As String Screen WidthTwip = Screen. Width ScreenHeightTwip = Screen.Height Screen WidthPixel = Screen. TwipsPerPixelX ScreenHeightPixel = Screen.TwipsPerPixelY SWidthTwipPant4 = Screen WidthTwip SHeightTwipPant4 = ScreenHeightTwip SWidthPixelPant4 = Screen WidthPixel SHeightPixelPant4 = ScreenHeightPixel Rem Inicializando Los V al ores Default de Pantalla4 InitializePantalla4 Rem Colocar Cursor en el elemento GRUPOS Grupos.SetFocus Rem Agregar elemento a Text Box = NombrePantalla4 NombrePantalla4.Text = "DIAGRAMA DE MOVIMIENTOS" Rem Termina agregar elementos a Text Box = NombrePantalla4 Rem Agregar elemento a Picture Box = Grupos Grupos.Cls Grupos.Print Str(NumGrupos) +"Grupos" Rem Termina agregar elemento a Picture Box = Grupos Rem Agregar elemento a Picture Box = SecMov Call DrawSecMov(Pantalla4) Rem Termina agregar elemento a Picture Box = SecMov Rem Agregar elemento a Picture Box = DiagFaseMov 244 Call DrawDiagFaseMov(Pantalla4) Rem Termina agregar elemento a Picture Box = DiagFaseMov End Sub Procedimiento que inicializa los valores de todos los elementos de la Forma Pantalla 4. Sub lnitializePantalla4 () Rem Inicializar Forma = Pantalla4 Pantalla4.Height = SHeightTwipPant4 Pantalla4.Left = O '.04 * SWidthTwipPant4 Pantalla4.Top = O '.01 * SHeightTwipPant4 Pantalla4.Width = SWidthTwipPant4 Pantalla4.AutoRedraw = -1 'Verdadero Pantalla4.BackColor = &HFFFFFF Rem Pantalla4.BorderStyle - Inicializado Manualmente Pantalla4.Caption = "Print Preview" Rem Pantalla4.ClipControls - Inicializado Manualmente Rem Pantalla4.Contro1Box - Inicializado Manualmente Pantalla4.DrawMode = 13 'Copy Pen Pantalla4.DrawStyle = O 'Solido Pantalla4.DrawWidth = 1Pantalla4.Enabled = -1 Pantalla4.Fil1Color = &HO Pantalla4.Fil1Style = 7 Pantalla4.FontBold = -1 Pantalla4.Fontltalic = O 'Verdadero 'Diagonal Cruzado 'Verdadero 'Falso Pantalla4.FontName = "Times New Roman" Pantalla4.FontSize = 9.6 Pantalla4.FontStrikethru = O 'Falso Pantalla4.FontTransparent = -1 'Verdadero Pantalla4.FontUnderline = O 'Falso Pantalla4.ForeColor = &HO& Pantalla4.HelpContextID = O Rem Pantalla4.lcon - Agregar si se requiere Pantalla4.KeyPreview = O 'Falso Rem Pantalla4.LinkMode - Inicializado Manualmente Pantalla4.LinkTopic = "Pantalla4" Rem Pantalla4.MaxButton - Inicializado Manualmente Rem Pantalla4.MDIChild - Inicializado Manualmente Rem Pantalla4.MinButton - Inicializado Manualmente Pantalla4.MousePointer = 11 'HourGlass Rem Pantalla4.Name - Inicializado Manualmente Rem Pantalla4.Picture - Agregar si se requiere Pantalla4.ScaleHeight = 8988 245 Pantalla4.ScaleLeft = O Pantalla4.ScaleMode = 1 'Twip Pantalla4.ScaleTop = O Pantalla4.ScaleWidth = 11712 Pantalla4.Tag = 1111 Pantalla4.Visible = -1 'Verdadero Pantalla4.WindowState = O 'Normal Rem Termina inicializacion Forma = Pantalla4 Rem Inicializando Text Box en Forma Pantalla4 = NombrePantalla4 NombrePantalla4.Height = .07 * SHeightTwipPant4 NombrePantalla4.Left = .01 * SWidthTwipPant4 NombrePantalla4.Top = .01 * SHeightTwipPant4 NombrePantalla4.Width = .6 * SWidthTwipPant4 Rem NombrePantalla4.Alignment - Inicializado Manualmente NombrePantalla4.BackColor = &HFFFFFF Rem NombrePantalla4.BorderStyle - Inicializado Manualmente NombrePantalla4.DataField = 1111 Rem NombrePantalla4.DataSource - Inicializado Manualmente Rem NombrePantalla4.Draglcon - Agregar si se requiere NombrePantalla4.DragMode = O 'Manual NombrePantalla4.Enabled = -1 'Verdadero NombrePantalla4.FontBold = -1 'Verdadero NombrePantalla4.Fontltalic = O 'Falso NombrePantalla4.FontName = "Times New Roman" NombrePantalla4.FontSize = 24 NombrePantalla4.FontStrikethru = O 'Falso NombrePantalla4.FontUnderline = O NombrePantalla4.ForeColor = &HO NombrePantalla4.HelpContextID = O 'Falso Rem NombrePantalla4.HideSelection - Inicializado Manualmente Rem NombrePantalla4.Index - Agregar si se requiere NombrePantalla4.Linkitem = "" NombrePantalla4.LinkMode = O NombrePantalla4.LinkTimeout = 50 NombrePantalla4.LinkTopic = "" NombrePantalla4.MaxLength = O 'Ninguno NombrePantalla4.MousePointer = O 'Default Rem NombrePantalla4.MultiLine - Inicializado Manualmente NombrePantalla4.PasswordChar = 1111 Rem NombrePantalla4.ScrollBars - Inicializado Manualmente NombrePantalla4.Tablndex = O NombrePantalla4.TabStop = -1 'Verdadero NombrePantalla4.Tag = 1111 NombrePantalla4.Text = 1111 NombrePantalla4.Visible = -1 'Verdadero Rem Termina Inicializando Text Box en Forma Pantalla4 = NombrePantalla4 Rem Inicializando Picture Box en Forma Pantalla4 = Grupos 246 Grupos.Height = .07 * SHeightTwipPant4 Grupos.Left = .22 * SWidthTwipPant4 Grupos.Top = .11 * SHeightTwipPant4 Grupos.Width = .3 * SWidthTwipPant4 Grupos.Align = O 'Ninguno Grupos.AutoRedraw = -1 'Verdadero Grupos.AutoSize = O 'Falso Grupos.BackColor = &HFFFFFF Rem Grupos.BorderStyle - Inicializado Manualmente Rem Grupos.ClipControls - Inicializado Manualmente Grupos.DataField = "" Rem Grupos.DataSource - Inicializado Manualmente Rem Grupos.Draglcon - Agregar si se requiere Grupos.DragMode = O 'Manual Grupos.DrawMode = 13 'Copy Pen Grupos.DrawStyle = O 'Solido Grupos.DrawWidth = 1 Grupos.Enabled = -1 'Verdadero Grupos.FillColor = &HO Grupos.FillStyle = O 'Solido Grupos.FontBold = -1 'Verdadero Grupos.Fontltalic = O 'Falso Grupos.FontName = "Times New Roman" Grupos.FontSize = 18 Grupos.FontStrikethru = O 'Falso Grupos.FontTransparent = -1 'Verdadero Grupos.FontUnderline = O 'Falso Grupos.ForeColor = &HO& Grupos.HelpContextID = O Rem Grupos.Index - Agregar si se requiere Grupos.Linkltem = "" Rem Grupos.LinkMode - Inicializado Manualmente Grupos.LinkTimeout = 50 Grupos.LinkTopic = "" Grupos.MousePointer = O 'Default Rem Grupos.Picture - Agregar si se requiere Grupos.ScaleHeight = 588 Grupos.ScaleLeft = O Grupos.ScaleMode = 1 'Twip Grupos.ScaleTop = O Grupos.ScaleWidth = 3504 Grupos.Tablndex = 1 Grupos.TabStop = -1 'Verdadero Grupos.Tag = "" Grupos. Visible = -1 'Verdadero Rem Termina Inicializando Picture Box en Forma Pantalla4 = Grupos Rem Inicializando Picture Box in Forma Pantalla4 = SecMov SecMov.Height = .25 * SHeightTwipPant4 247 SecMov.Left = .68 * SWidthTwipPant4 SecMov.Top = .08 * SHeightTwipPant4 SecMov.Width = .26 * SWidthTwipPant4 SecMov .Align = O 'Ninguno SecMov .AutoRedraw = -1 'Verdadero SecMov.AutoSize = O 'Falso SecMov.BackColor = &HFFFFFF Rem SecMov.BorderStyle - Inicializado Manualmente Rem SecMov.ClipControls - Inicializado Manualmente SecMov.DataField = "" Rem SecMov.DataSource - Inicializado Manualmente Rem SecMov.Draglcon -Agregar si se requiere SecMov.DragMode = O 'Manual SecMov.DrawMode = 13 'Copy Pen SecMov .DrawStyle = O 'Solido SecMov.DrawWidth = 1 SecMov .Enabled = -1 'Verdadero SecMov .FillColor = &HO SecMov.FillStyle = O 'Solido SecMov.FontBold = O 'Falso SecMov.Fontltalic = O 'Falso SecMov.FontName = "Small Fonts" SecMov.FontSize = 6 SecMov .FontStrikethru = O 'Falso SecMov .FontTransparent = -1 'Verdadero SecMov.FontUnderline = O 'Falso SecMov .ForeColor = &HO& SecMov .HelpContextID = O Rem SecMov.Index -Agregar si se requiere SecMov.Linkltem = "" Rem SecMov .LinkMode - Inicializado Manualmente SecMov .LinkTimeout = 50 SecMov.LinkTopic = "" SecMov.MousePointer = O 'Default Rem SecMov.Picture - Agregar si se requiere SecMov.ScaleHeight = 2268 SecMov.ScaleLeft = O SecMov .ScaleMode = 1 'Twip SecMov.ScaleTop = O SecMov.ScaleWidth = 2988 SecMov. Tablndex = 2 'Verdadero SecMov.TabStop = -1 SecMov.Tag = "" SecMov.Visible = -1 'Verdadero Rem Termina inicializando Picture Box en Forma Pantalla4 = SecMov Rem Inicializacion Picture Box en Forma Pantalla4 = DiagFaseMov DiagFaseMov.Height = .7 * SHeightTwipPant4 DiagFaseMov.Left = .01 * SWidthTwipPant4 248 Procedimiento que define los variables a usar en esta forma. Option Explicit Rem Variables Temporales usados de otras pantallas Dim CirNumGrupos As Integer Dim CirNumCil As Integer Dim CirNumfases As Integer Rem Constantes a Nivel Forma Const NumValveCillnPnts = 3 Const Num V alveCascadalnPnts = 1 Rem Variables a Nivel Forma Dim CurrentCil, StartPX, StartPY As Integer Dim PntXY, PntYY As Integer Dim NumValve As Integer Dim V alveCillnPnts() As Integer Dim V alveCascadalnPnts() As Integer Dim InPlX, InPl Y, InP2X, InP2Y, InP3X, InP3Y As Integer Dim OutPlX, OutPl Y, OutP2X, OutP2Y, OutP3X, OutP3Y As Integer Dim V alveType, SensorType As Integer Dim GndPntX, GndPntY As Integer Dim PressurePntX, PressurePntY As Integer Dim SWidthTwipPant5 As Integer Dim SHeightTwipPant5 As Integer Dim SWidthPixelPant5 As Integer Dim SHeightPixelPant5 As Integer Procedimiento que dibuja los presiones de aire. Sub Draw AirPressure (PressurePntX, PressurePnt Y) Const Displace 1 = 4 Const Displace2 = 2 250 DiagNeumatica.Line (PressurePntX, PressurePnt Y)-(PressurePntX, PressurePnt Y + Displace 1) DiagNeumatica.FillStyle = 1 DiagNeumatica.Circle (PressurePntX, PressurePntY + Displace! * 2), Displace! DiagNeumatica.FillStyle = O DiagNeumatica.Circle (PressurePntX, PressurePntY + Displace! * 2), Displace2 End Sub Procedimiento que dibuja las válvulas en cascada y los conecta a las lineas de grupo. Sub DrawCascadaValves (StartPX, StartPY, CirNumGrupos) Rem Posicion de Valvulas Const Displace 1 = 19 Const Displace2 = 80 Rem Lineas Cascada Doble Flechas Const Radius 1 = 2 Const Displace3 = 10 Const Pnt Y s = 235 + 50 Const Displaces = 20 Rem Lineas de Aire de Valvulas - Lado Derecho e Izquierdo/ Dimesiones de Entrada de Valvulas Const Displace6 = 33 Const Length2 = 44 Const Width2 = 22 Const Displace9 = 5 Const Displace11 = 567 + 50 Dim Displacel2 As Integer Const Length3 = 110 Rem Posicion de Elemento Y Const Displace 1 O = 20 Dim I As Integer 1=0 Do Rem - Definir Tipo de V alvula y Dibujar DiagNeumatica.ForeColor = &HFFOOOO l=l+l V alveType = 2 Displacel2 = (CirNumGrupos - 2) If I = CirNumGrupos - 1 Then StartPX = StartPX - Displace! V alveType = 1 Displace12 = (CirNumGrupos - 2) + Displace} 251 End If Call DrawElemValve(StartPX, StartPY, ValveType) Rem - Dibujar Lineas de Doble Flechas y Conectar a Lineas de Grupos OutPlX = lnPlX OutP2X = lnP2X DiagNeumatica.FillStyle = O DiagNeumatica.ForeColor = &H0& If I = 1 Then OutPlY = PntYs DiagNeumatica.Circle (OutPlX, OutPl Y), Radiusl OutP2Y = PntYs + Displaces Else OutP2Y = PntYs + Displaces End If DiagNeumatica.Line (lnPlX, lnPl Y)-(OutPlX, OutPl Y) DiagNeumatica.Line (lnP2X, InP2Y)-(OutP2X, lnP2Y - Displace3) DiagNeumatica.Line (OutP2X, lnP2Y - Displace3)-(OutP2X + Displace4 * I, lnP2Y - Displace3) DiagNeumatica.Line (OutP2X, lnP2Y - Displace3)-(OutP2X + Displace4 * I, OutP2Y) DiagNeumatica.Circle (OutP2X, OutP2Y), Radiusl OutPlX = lnP3X OutPIY = lnP3Y Rem - Dibujar Lineas de Aire Lado Izquierdo V alvula y Conectar a Lineas de Grupos DiagNeumatica.ForeColor = &HFFOOOO 252 DiagNeumatica.Line (StartPX, StartPY + Width2 / 2)-(StartPX - Displace9, StartPY + Width2 / 2) DiagNeumatica.ForeColor = &H0& OutP3X = StartPX - Displace9 - Displace6 DiagNeumatica.Line (StartPX - Displace9, StartPY + Width2 / 2)-(OutP3X, StartPY + Width2 / 2) If I = CirNumGrupos - 1 Then PntXY = OutP3X - Displace 1 O Pnt YY = StartPY + Width2 / 2 - Displace 1 O Call DrawY(PntXY, PntYY) OutP3X = PntXY OutP3Y = PntYs Rem Dibujar Entradas de Elemento Y DiagNeumatica.Line (OutP3X, PntYY)-(OutP3X, OutP3Y) DiagNeumatica.Line (PntXY, PntYY + Displacel0 * 2)-(PntXY, Displace! 1) V alveCascadalnPnts( 1, O) = PntXY ValveCascadalnPnts(l, 1) = Displacel 1 Else OutP3Y = PntYs + Displaces DiagNeumatica.Line (OutP3X, StartPY + Width2 / 2)-(OutP3X OutP3Y) E~H ' DiagNeumatica.Circle (0utP3X, OutP3Y), Radiusl Rem- Dibujar Lineas de Aire Lado Derecho Valvula y Conectar a Lineas de Grupos DiagNeumatica.ForeColor = &HFFOOOO DiagNeumatica.Line (StartPX + Length2, StartPY + Width2 / 2)-(StartPX + Length2 + Displace9, StartPY + Width2 / 2) DiagNeumatica.ForeColor = &H0& OutP3X = StartPX + Length2 + Displace9 + Displacel2 + Length3 * (1) DiagNeumatica.Line (StartPX + Length2 + Displace9, StartPY + Width2 / 2)-(OutP3X, StartPY + Width2 / 2) PntXY = OutP3X PntYY = StartPY + Width2 / 2:.. DisplacelO Call DrawY(PntXY, PntYY) OutP3X = PntXY OutP3Y = PntYs + Displaces DiagNeumatica.Line (OutP3X, PntYY)-(OutP3X, OutP3Y) Rem Dibujar Entradas de Elemento Y DiagNeumatica.Circle (OutP3X, OutP3Y), Radiusl DiagNeumatica.Line (PntXY, PntYY + DisplacelO * 2)-(PntXY, Displace! 1) ValveCascadalnPnts(I + 1, O)= PntXY ValveCascadalnPnts(I + 1, 1) = Displacell Rem Calculando Posicion de Siguiente V alvula en la Direccion Y StartPY = StartPY + Displace2 Loop Until I = CirNumGrupos - 1 End Sub Procedimiento que dibuja los cilindros y sus válvulas correspondientes. Sub DrawElemCil (CurrentCil, StartPX, StartPY) Rem Variables de Cilindros Const Length 1 = 35 ' Largo del Cilindro Const Width 1 = 14 ' Ancho del Cilindro Const Thickl = 3 'Grueso del Vastago Const Displace!= 8 'Desplazamiento X hasta la base del vastago para empezar dibujar vastago y letra del sensor Const Displace2 = 5 ' Desplazamiento Y hasta el medio de la base del vastago Const Displace3 = 3 'Desplazamiento X para dibujar la primera linea de 1/0 (Salidas) Const Displace4 = 30 'Desplazamiento X para dibujar la segunda linea de 1/0 (Salidas) Rem Variables de Letras de los Cilindros Dim CurrentCilLetter, Sensorl, Sensor2 As String Const Displace5 = 15 'Desplazamiento Y para dibujar letras Const Displace6 = Lengthl - 5 'Desplazamiento X para dibujar letras Rem Variables de Posicion de Valvula Correspondiente Const Displace? = 5 ' Desplazamiento X 253 Const Displaces = 50 ' Desplazamiento Y Rem Variables para dibujar entradas de valvulas Const Length2 = 44 · Const Width2 = 22 Const Displace9 = 5 Rem ------------------- Rem DIBUJANDO CILINDROS Rem ----------- Select Case CurrentCil Case O CurrentCilLetter = "A" Sensorl = "a0" Sensor2 = "al" NumValve=0 Case 1 CurrentCilLetter = "B" Sensor!= "b0" Sensor2 = "b l " NumValve= 1 Case2 CurrentCilLetter = "C" Sensor! = "c0" Sensor2 ="el" NumValve =2 Case 3 CurrentCilLetter = "D" Sensor!= "d0" Sensor2 = "dl" NumValve= 3 Case4 CurrentCilLetter = "E" Sensor! = "e0" Sensor2 ="el" NumValve=4 Case5 CurrentCilLetter = "F" Sensor! = "fO" Sensor2 = "fl " NumValve = 5 Case6 CurrentCilLetter = "G" Sensor! = "gO" Sensor2 = "gl" NumValve = 6 Case7 CurrentCilLetter = "H" 254 255 Sensorl = "h0" Sensor2 = "h 1" NumValve=7 Case 8 CurrentCilLetter = "I" Sensorl = "i0" Sensor2 = "il" NumValve = 8 End Select DiagNeumatica.ForeColor = &HFFOOOO Rem Dibujando las 4 lineas horizontales DiagNeumatica.Line (StartPX, StartPY)-(StartPX + Lengthl, StartPY) DiagNeumatica.Line (StartPX, StartPY + Widthl)-(StartPX + Lengthl, StartPY + Widthl) DiagNeumatica.Line (StartPX + Displace!, StartPY + Displace2)-(StartPX +Displace!+ Lengthl, StartPY + Displace2) DiagNeumatica.Line (StartPX + Displace!, StartPY + Displace2 + Thickl)-(StartPX + Displace!+ Lengthl, StartPY + Displace2 + Thickl) Rem Dibujando las 3 lineas verticales DiagNeumatica.Line (StartPX, StartPY)-(StartPX, StartPY + Widthl) DiagNeumatica.Line (StartPX + Displace! -Thickl, StartPY)-(StartPX + Displace! -Thickl, StartPY + Widthl) DiagNeumatica.Line (StartPX + Displace!, StartPY)-(StartPX + Displace!, StartPY + Widthl) Rem Dibujando la linea vertical cruzada del vastago DiagNeumatica.Line (StartPX + Lengthl, StartPY)-(StartPX + Lengthl, StartPY + Displace2) DiagNeumatica.Line (StartPX + Lengthl, StartPY + Displace2 + Thickl)-(StartPX + Lengthl, StartPY + Widthl) Rem Dibujando la primera linea vertical del vastago DiagNeumatica.Line (StartPX +Displace!+ Lengthl, StartPY + Displace2)-(StartPX + Displace!+ Lengthl, StartPY + Displace2 + Thickl) Rem Dibujando las 2 lineas verticales de 1/0 (Salidas) DiagNeumatica.Line (StartPX + Displace3, StartPY + Widthl)-(StartPX + Displace3, StartPY + Widthl + Thickl) OutPlX = (StartPX + Displace3) OutPl Y= (StartPY + Widthl + Thickl) DiagNeumatica.Line (StartPX + Displace4, StartPY + Widthl)-(StartPX + Displace4, StartPY + Widthl + Thickl) OutP2X = (StartPX + Displace4) OutP2Y = (StartPY + Widthl + Thickl) Rem Dibujando las letras del cilindro DiagNeumatica.ForeColor = &HFF& DiagNeumatica.FontName = "Times New Roman" DiagNeumatica.FontSize = 6 DiagNeumatica.CurrentX = StartPX + Lengthl / 2 DiagNeumatica.CurrentY = StartPY - Displaces DiagNeumatica.Print CurrentCilLetter DiagNeumatica.CurrentX = StartPX + Lengthl + Displace! DiagNeumatica.CurrentY = StartPY - Displaces DiagNeumatica.Print Sensorl DiagNeumatica.CurrentX = StartPX + Lengthl +Displace!+ Displace6 DiagNeumatica.CurrentY = StartPY - Displaces DiagNeumatica.Print Sensor2 Rem -------------------------- Rem Dibujando Valvula Correspondiente Rem -------------------------- DiagNeumatica.ForeColor = &HFFOOOO StartPX = StartPX + Displace? StartPY = StartPY + Displaces ValveType = 2 Call DrawElemValve(StartPX, StartPY, ValveType) Rem Dibujando las entradas de la valvula correspondiente 256 DiagNeumatica.Line (StartPX, StartPY + Width2 / 2)-(StartPX - Displace9, StartPY + Width2 / 2) DiagNeumatica.Line (StartPX + Length2, StartPY + Width2 / 2)-(StartPX + Length2 + Displace9, StartPY + Width2 / 2) Rem Conectando cilindro y valvula correspondiente DiagNeumatica.ForeColor = &HO& DiagNeumatica.Line (OutP2X, OutP2Y)-(OutP2X, OutP2Y + (lnP2Y - OutP2Y) / 3) DiagNeumatica.Line (OutP2X, OutP2Y + (lnP2Y - OutP2Y) / 3)-(0utP2X + (lnP2X- OutP2X), OutP2Y + (lnP2Y - OutP2Y) / 3) DiagNeumatica.Line (OutP2X + (lnP2X - OutP2X), OutP2Y + (lnP2Y - OutP2Y) / 3)- (lnP2X, InP2Y) DiagNeumatica.Line (OutPIX, OutPIY)-(OutPIX, OutPIY + (lnPIY -OutPIY)/2) DiagNeumatica.Line (OutPIX, OutPl Y+ (lnPl Y - OutPl Y)/ 2)-(0utPlX + (lnPlX - OutPlX), OutPlY + (lnPlY - OutPlY) / 2) DiagNeumatica.Line (OutPlX + (lnPIX - OutPIX), OutPl Y+ (lnPl Y - OutPl Y)/ 2)- (lnPIX, InPl Y) End Sub Procedimiento que dibuja un sensor cuando es llamado por otro procedimiento. Sub DrawElemSensors (StartPX, StartPY, SensorType) Rem Variables de Sensores Const Length3 = 25 * .5 Const Width3 = 28 * .5 Const LengthT = 2 Rem Variables de Rodillo Const Displace 1 = 3 * .5 Const Radios 1 = 6 * .5 Const Radius2 = 2 * .5 Rem Variables de Resorte Const Length4 = 1 O * .5 Rem Variables de Pared Const Displace2 = 15 * .5 Const Displace4 = 10 * .5 Rem Variables Temporales Dim I As lnteger Dim CCode As Single DiagNeumatica.ForeColor = &HFFOOOO Rem ------------------ Rem DIBUJANDO SENSORES Rem ------------------ Rem Dibujando Rectangulo DiagNeumatica.Line (StartPX, StartPY)-(StartPX + Length3, StartPY) DiagNeumatica.Line (StartPX + Length3, StartPY)-(StartPX + Length3, StartPY + Width3) DiagNeumatica.Line (StartPX + Length3, StartPY + Width3)-(StartPX, StartPY + Width3) DiagNeumatica.Line (StartPX, StartPY + Width3)-(StartPX, StartPY) DiagNeumatica.Line (StartPX + Length3 / 2, StartPY)-(StartPX + Length3 / 2, StartPY + Width3) Rem Dibujando Flecha Uno DiagNeumatica.Line (StartPX + (Length3 / 2) / 3, StartPY)-(StartPX + (Length3) / 3, StartPY + Width3) DiagNeumatica.Line (StartPX + (Length3 / 2) / 3, StartPY)-(StartPX + (Length3) / 3 - (Width3 * .3) / 2, StartPY + (Width3 * .3)) DiagNeumatica.Line (StartPX + (Length3 / 2) / 3 + (Width3 * .3) / 2, StartPY + (Width3 * .3))-(StartPX + (Length3 / 2) / 3, StartPY) Rem Dibujando T Dos DiagNeumatica.Line (StartPX + ((Length3 / 2) / 3 * 2), StartPY + Width3)-(StartPX + ((Length3 / 2) / 3 * 2), StartPY + Width3 / 4 * 3) 257 DiagNeumatica.Line (StartPX + ((Length3 / 2) / 3 * 2) - LengthT, StartPY + Width3 / 4 * 3)- (StartPX + ((Length3 / 2) / 3 * 2) + LengthT, StartPY + Width3 / 4 * 3) Rem Dibujando Flecha Cruzada Uno DiagNeumatica.Line (StartPX + Length3 / 2 + (Length3 / 2) / 3 / 2, StartPY)-(StartPX + 258 Length3 / 2 + ((Length3 / 2) / 3 * 2), StartPY + Width3) DiagNeumatica.Line (StartPX + Length3 / 2 + ((Length3), StartPY + Width3)- (StartPX + Length3 / 2 + ((Length3 / 2) / 3 * 2), StartPY + Width3) DiagNeumatica.Line (StartPX + Length3 / 2 + ((Length3), StartPY + Width3)- ((StartPX - 6) + Length3 / 2 + ((Length3 / 2) / 3 * 2), StartPY + Width3) Rem Dibujando T Cruzado Dos DiagNeumatica.Line (StartPX + Length3 / 2 + (Length3 / 2) / 3 / 2, StartPY + Width3)- (StartPX + Length3 / 2 + (Length3 / 2) / 3 / 2, StartPY + Width3 / 4 * 3) DiagNeumatica.Line (StartPX + Length3 / 2 + (Length3 / 2) / 3 / 2 - LengthT, StartPY + Width3 / 4 * 3)-(StartPX + Length3 / 2 + (Length3 / 2) / 3 / 2 + LengthT, StartPY + Width3 / 4 * 3) Rem Dibujando Resorte DiagNeumatica.Line (StartPX + Length3, StartPY + Width3 / 2)-(StartPX + Length3 + Length4 / 4, StartPY + Width3 / 4) DiagNeumatica.Line (StartPX + Length3 + Length4 / 4, StartPY + Width3 / 4)-(StartPX + Length3 + Length4 / 4 * 2, StartPY + Width3 - Width3 / 4) DiagNeumatica.Line (StartPX + Length3 + Length4 / 4 * 2, StartPY + Width3 - Width3 / 4)- (StartPX + Length3 + Length4 / 4 * 3, StartPY + Width3 / 4) DiagNeumatica.Line (StartPX + Length3 + Length4 / 4 * 3, StartPY + Width3 / 4)-(StartPX + Length3 + Length4 / 4 * 4, StartPY + Width3 - Width3 / 4) DiagNeumatica.Line (StartPX + Length3 + Length4 / 4 * 4, StartPY + Width3 - Width3 / 4 )- (StartPX + Length3 + Length4 / 4 * 5, StartPY + Width3 / 4) Rem Dibujando Rodillo lf SensorType = 1 Or SensorType = 2 Then DiagNeumatica.FillStyle = 1 DiagNeumatica.Line (StartPX, StartPY + Width3 / 2 - Displacel)-(StartPX - Length3 / 6, StartPY + Width3 / 2 - Displace 1) DiagNeumatica.Line (StartPX, StartPY + Width3 / 2 + Displace 1 )-(StartPX - Length3 / 6, StartPY + Width3 / 2 + Displace!) DiagNeumatica.Circle (StartPX - Length3 / 6 - Radiusl, StartPY + Width3 / 2), Radiusl DiagNeumatica.FillStyle = O DiagNeumatica.Circle (StartPX - Length3 / 6 - Radiusl, StartPY + Width3 / 2), Radius2 Endlf Rem Dibujando Tierra lf SensorType = 1 Toen GndPntX = StartPX + ((Length3 / 2) / 3) GndPntY = StartPY + Width3 Call DrawGround(GndPntX, GndPntY) DiagNeumatica.DrawWidth = 3 DiagNeumatica.Line (StartPX - Length3 / 6 - Radiusl * 2, StartPY)-(StartPX - Length3 / 6 - Radius 1 * 2, StartPY + Displace2) DiagNeumatica.DrawWidth = 1 Elself SensorType = 2 Or SensorType = 3 Then GndPntX = StartPX + Length3 / 2 + ((Length3 / 2) / 3 * 2) GndPntY = StartPY + Width3 259 Call DrawGround(GndPntX, GndPntY) End If Rem Dibujando Marcha If SensorType = 3 Then DiagNeumatica.Line (StartPX, StartPY + Width3 / 2 - Displacel)-(StartPX - Length3 / 6, StartPY + Width3 / 2 - Displace 1) DiagNeumatica.Line (StartPX, StartPY + Width3 / 2 + Displacel)-(StartPX - Length3 / 6, StartPY + Width3 / 2 + Displace!) DiagNeumatica.FillStyle = O CCode = RGB (255, O, O) DiagNeumatica.Circle (StartPX - Length3 / 6, StartPY + Width3 / 2), Radiusl Endlf EndSub Procedimiento que dibuja el elemento válvula cuando es llamado por otro procedimiento. Sub DrawElemValve (StartPX, StartPY, ValveType) Rem Variables de Valvula 2/4 Const Length2 = 44 Const Width2 = 22 Const Displace 1 = 5 Rem -------- Rem DIBUJANDO V AL VULA 2/4 Rem --------------------- Rem Dibujando Rectangulo DiagNeumatica.Line (StartPX, StartPY)-(StartPX + Length2, StartPY) DiagNeumatica.Line (StartPX + Length2, StartPY)-(StartPX + Length2, StartPY + Width2) DiagNeumatica.Line (StartPX + Length2, StartPY + Width2)-(StartPX, StartPY + Width2) DiagNeumatica.Line (StartPX, StartPY + Width2)-(StartPX, StartPY) DiagNeumatica.Line (StartPX + Length2 / 2, StartPY)-(StartPX + Length2 / 2, StartPY + Width2) Rem Dibujar Flecha Uno DiagNeumatica.Line (StartPX + (Length2 / 2) / 3, StartPY)-(StartPX + (Length2 / 2) / 3, StartPY + Width2) DiagNeumatica.Line (StartPX + (Length2 / 2) / 3, StartPY)-(StartPX + (Length2 / 2) / 3 - (Width2 * .3) / 2, StartPY + (Width2 * .3)) DiagNeumatica.Line (StartPX + (Length2 / 2) / 3 + (Width2 * .3) / 2, StartPY + (Width2 * .3))-(StartPX + (Length2 / 2) / 3, StartPY) Rem Dibujar Flecha Dos DiagNeumatica.Line (StartPX + ((Length2 / 2) / 3) * 2, StartPY)-(StartPX + ((Length2 * 2), StartPY + Width2) DiagNeumatica.Line (StartPX + ((Length2 / 2) / 3 * 2), StartPY + Width2)-(StartPX + ((Length2 / 2) / 3 * 2) - (Width2 * .3) / 2, StartPY + Width2 - (Width2 * .3)) DiagNeumatica.Line (StartPX + ((Length2) + (Width2 * .3) / 2, StartPY + Width2 - (Width2 * .3))-(StartPX + ((Length2), StartPY + Width2) Rem Dibujar Flecha Cruzada Uno DiagNeumatica.Line (StartPX + Length2 / 2 + (Length2 / 2) / 3 / 2, StartPY)-(StartPX + Length2 / 2 + ((Length2 / 2)), StartPY + Width2) DiagNeumatica.Line (StartPX + Length2 / 2 + ((Length2 / 2) / 3 * 2), StartPY + Width2)- (StartPX + Length2 / 2 + ((Length2 / 2)), StartPY + Width2 - 8) DiagNeumatica.Line (StartPX + Length2 / 2 + ((Length2 / 2) / 3 * 2), StartPY + Width2)- ((StartPX - 6) + Length2 / 2 + ((Length2 / 2)), StartPY + Width2 - 5) Rem Dibujar Flecha Cruzada Dos DiagNeumatica.Line (StartPX + Length2 / 2 + (Length2 / 2) / 3 / 2, StartPY + Width2)- (StartPX + Length2 / 2 + (Length2 / 2) ), StartPY) 260 DiagNeumatica.Line (StartPX + Length2 / 2 + (Length2 / 2) / 3 * 2, StartPY)-((StartPX - 6) + Length2 / 2 + (Length2 / 2) / 3 * 2, StartPY) DiagNeumatica.Line (StartPX + Length2 / 2 + (Length2 / 2) / 3 * 2, StartPY)-(StartPX + Length2 / 2 + (Length2 / 2) / 3 * 2, StartPY) Rem Calculando Entradas de Conexiones de Aire If ValveType = 1 Then InPlX = StartPX + Length2 / 2 + (Length2 / 2) / 3 / 2 InPlY =StartPY InP2X = StartPX + Length2 / 2 + (Length2 / 2) / 3 * 2 InP2Y = StartPY Elself V alveType = 2 Then InPlX = StartPX + (Length2 / 2) / 3 InPlY = StartPY InP2X = StartPX + ((Length2 / 2) / 3 * 2) InP2Y = StartPY InP3X = StartPX + (Length2 / 2) / 3 InP3Y = StartPY + Width2 Endlf Rem Dibujando Tierra y Presion de Aire If ValveType = 1 Then GndPntX = StartPX + Length2 / 2 + ((Length2 / 2) ) GndPntY = StartPY + Width2 Call DrawGround(GndPntX, GndPnt Y) PressurePntX = (StartPX + Length2 / 2 + (Length2 / 2) ) PressurePnt Y = StartPY + Width2 Call Draw AirPressure(PressurePntX, PressurePnt Y) Elself V alveType = 2 Then GndPntX = StartPX + (Length2) GndPntY = StartPY + Width2 Call DrawGround(GndPntX, GndPntY) Endlf EndSub Procedimiento que dibuja los escapes de aire. Sub DrawGround (GndPntX, GndPntY) Const Displace 1 = 4 Const Displace2 = 8 DiagNeumatica.Llne (GndPntX, GndPntY)-(GndPntX, GndPntY + Displace!) DiagNeumatica.Llne (GndPntX, GndPntY + Displacel)-(GndPntX - Displace!, GndPntY + Displace!) DiagNeumatica.Llne (GndPntX, GndPntY + Displacel)-(GndPntX + Displace!, GndPntY + Displace!) DiagNeumatica.Llne (GndPntX- Displace!, GndPntY + Displacel)-(GndPntX, GndPntY + Displace!+ Displace2) DiagNeumatica.Llne (GndPntX + Displace!, GndPntY + Displacel)-(GndPntX, GndPntY + Displace!+ Displace2) End Sub Procedimiento que dibuja las lineas de grupos. Sub DrawGroupLlnes (StartPX, StartPY, CirNumGrupos) Dim I As Integer Const Displace 1 = 15 DiagNeumatica.DrawWidth = 2 DiagNeumatica.FillStyle = O DiagNeumatica.FontSize = 8 DiagNeumatica.FontName = "Times New Roman" For I = 1 To CirNumGrupos DiagNeumatica.CurrentX = StartPX - 20 DiagNeumatica.CurrentY = StartPY - 8 DiagNeumatica.ForeColor = &HFF& DiagNeumatica.Print "s"; I DiagNeumatica.ForeColor = &HO& DiagNeumatica.Llne (StartPX, StartPY)-(StartPX + 964, StartPY) StartPY = StartPY + Displace! Nextl DiagNeumatica.DrawWidth = 1 End Sub 261 Procedimiento que llama a los procedimientos necesarios para dibujar el circuito neumático. Sub DrawNeumaticCircuit () Dim I As Integer CirNumGrupos = NumGrupos CirNumCil = NumCil CirNumfases = Numfases ReDim ValveCillnPnts(CirNumCil - 1, NumValveCillnPnts) As Integer ReDim V alveCascadalnPnts(CirNumGrupos, Num V alveCascadalnPnts) Rem Dibujar Cilindros y Valvulas Correspondientes StartPX = 50 StartPY = 20 For I = O To CirNumCil - 1 CurrentCil = I Call DrawElemCil(CurrentCil, StartPX, StartPY) StartPX = StartPX + 95 + 5 StartPY = 20 Nextl Rem Dibujar Lineas de Grupos StartPX = 30 StartPY = 235 + 50 Call DrawGroupLines(StartPX, StartPY, CirNumGrupos) Rem Dibujar Valvulas de Cascada StartPX = 240 StartPY = 315 + 50 Call DrawCascada V alves(StartPX, StartPY, CirNumGrupos) Rem Dibujar Sensores Call DrawSensors(CirNumCil) EndSub Procedimiento que dibuja todos los sensores. Sub DrawSensors (CirNumCil) Rem Variables Temporales Dim I, J, K, L, M As Integer Dim CurrentGrupo As lnteger Dim CascadaGrupo As Integer 262 Dim FaseAnterior, FaseAnteriorFlag As Integer Dim PV astago As Integer Dim SensorActivacion As Integer Dim SensorLadoContador As Integer Dim XPos, YPos As Integer Dim NombreSensor As String Rem Variables para dibujar lineas de aires entre valvulas y sensores Const DisplaceSensorCilDerecho = 116 Const DisplaceSensorCillzquierdo = 161 Const DisplaceSensorCascada = 617 Const DisplaceSensorMarcha = 665 Rem Variable Para Calcular Entradas y Salidas de Sensores Const Length3 = 60 * .5 Const Width3 = 28 * .5 Rem Variable Para Conexiones de Sensores a Lineas de Grupos Const DisplaceGrupoLineas = 285 Const DistGrupoLineas = 15 Const Radius 1 = 2 Rem Variables para dibujar letras Const DisplaceL Y = 15 ' Desplazamiento Y para dibujar letras Const DisplaceLX = 5 ' Desplazamiento X para dibujar letras For I = O To CirNumCil - 1 J=l SensorLadoContador = O Do Until J = CirNumfases + 1 If CilFase(I, J) = 1 Then Rem Determinando Grupo de matriz CambioGrupos CurrentGrupo = O ForM= 1 ToJ CurrentGrupo = CurrentGrupo + CambioGrupos(M+J+I) NextM Rem Determinando si el sensor activa un cambio de grupo Rem Calculando si sensor se conecta al lado izquierdo/derecho de valvula cilindro SensorLadoContador = SensorLadoContador + 1 Rem Determinando del matriz CilFase el sensor de activacion de dicha fase J K=O FaseAnterior = J - 2 If FaseAnterior = O Then FaseAnterior = CirNumfases FaseAnteriorFlag = O Do Until K = CirNumFases If FaseAnteriorFlag = O Toen Do Until FaseAnteriorFlag < O For M = O To CirNumCil - 1 FaseAnteriorFlag = FaseAnteriorFlag + CilFase(M, FaseAnterior) 263 NextM If FaseAnteriorFlag > O Then If FaseAnterior = O Then FaseAnterior = CirNumfases Endlf Loop Endlf If CilFase(K, FaseAnterior) = O Then SensorActivacion = J L=O Do L=L+l Loop Until CilFase(J, L) = 1 If L > FaseAnterior Then PVastago =0 Else L < FaseAnterior PVastago = 1 Endlf Rem Asignando letra al sensor de activacion de dicha fase Select Case SensorActivacion Case O NombreSensor = "a" Case 1 NombreSensor = "b" Case2 NombreSensor = "c" Case 3 NombreSensor = "d" Case4 NombreSensor = "e" Case 5 NombreSensor = "f' Case6 NombreSensor = "g" Case7 NombreSensor= "h" Case 8 NombreSensor = "i" End Select DiagNeumatica.FillStyle = O Rem Dibujando sensores Case O ' El Sensor se dibuja arriba de las lineas de Grupos Select Case SensorLadoContador Case 1 'El Sensor se dibuja lado izquierdo de valvula correspondiente StartPY = DisplaceSensorCillzquierdo DiagNeumatica.ForeColor = &HO& If PV astago = O Then SensorType = 1 264 265 StartPX = ValveCillnPnts(I, O) - (Length3 / 2) / 3 Elself PV astago = 1 Then SensorType = 2 StartPX = ValveCillnPnts(I, O) - (Length3 / 2 + (Length3 / 2) / 3 / 2) Endlf Call DrawElemSensors(StartPX, StartPY, SensorType) DiagNeumatica.ForeColor = &HO& DiagNeumatica.ForeColor = &HFF& DiagNeumatica.FontName = "Times New Roman" DiagNeumatica.FontSize = 6 DiagNeumatica.CurrentY = StartPY - DisplaceL Y DiagNeumatica.Print NombreSensor; PVastago Case 2 'El Sensor se dibuja lado derecho de valvula correspondiente StartPY = DisplaceSensorCilDerecho DiagNeumatica.ForeColor = &HO& If PV astago = O Toen SensorType = 1 StartPX = ValveCillnPnts(I, 2) - (Length3 / 2) / 3 Elself PV astago = 1 Then SensorType = 2 StartPX = ValveCillnPnts(I, 2) - (Length3 / 2 + (Length3 / 2) / 3 / 2) Endlf Call DrawElemSensors(StartPX, StartPY, SensorType) DiagNeumatica.ForeColor = &HO& DiagNeumatica.ForeColor = &HFF& DiagNeumatica.FontName = "Times New Roman" DiagNeumatica.FontSize = 6 DiagNeumatica.CurrentY = StartPY - DisplaceL Y DiagNeumatica.Print NombreSensor; PV astago End Select Case 1 ' El sensor se dibuja abajo de las lineas de Grupos If SensorLadoContador = 1 Then StartPX = ValveCillnPnts(I, O) StartPY = ValveCillnPnts(I, 1) Elself SensorLadoContador = 2 Then StartPX = ValveCillnPnts(I, 2) StartPY = ValveCillnPnts(I, 3) Endlf DiagNeumatica.ForeColor = &HO& StartPY = DisplaceSensorCascada If J = O Then 'Dibujando sensor e 1 y marcha en valvula cascadas Rem Dibujando sensor el If PV astago = O Then SensorType = 1 StartPX = ValveCascadalnPnts(CurrentGrupo, O) - (Length3 / 2) / 3 Elself PV astago = 1 Then SensorType = 2 StartPX = ValveCascadalnPnts(CurrentGrupo, O) - (Length3 / 2 + (Length3 / 2) / 3 / 2) Endlf Call DrawElemSensors(StartPX, StartPY, SensorType) DiagNeumatica.ForeColor = &HFF& DiagNeumatica.FontName = "Times New Roman" DiagNeumatica.FontSize = 6 DiagNeumatica.CurrentX = V alveCascadalnPnts(CurrentGrupo, O) + DisplaceLX DiagNeumatica.CurrentY = StartPY - DisplaceL Y DiagNeumatica.Print NombreSensor; PV astago DiagNeumatica.ForeColor = &HO& Rem Dibujando sensor Marcha SensorType = 3 StartPY = DisplaceSensorMarcha StartPX = ValveCascadalnPnts(CurrentGrupo, O) - (Length3 / 2 + (Length3 / 2) / 3 / 2) Call DrawElemSensors(StartPX,StartPY, SensorType) PressurePntX = V alveCascadalnPnts(CurrentGrupo, O) PressurePntY = StartPY + Width3 Call Draw AirPressure(PressurePntX, PressurePnt Y) DiagNeumatica.ForeColor = &HFF& DiagNeumatica.FontName = "Times New Roman" DiagNeumatica.FontSize = 6 DiagNeumatica.CurrentX = V alveCascadalnPnts(CurrentGrupo, O) + DisplaceLX DiagNeumatica.CurrentY = StartPY - DisplaceLY DiagNeumatica.Print "MARCHA" Elself J < 1 Then 'Dibujando sensores e2,e3,e4,e5 en valvula cascadas If PV astago = O Then SensorType = 1 StartPX = ValveCascadalnPnts(CurrentGrupo, O) - (Length3 / 2) / 3 Elself PV astago = 1 Then SensorType = 2 StartPX = ValveCascadalnPnts(CurrentGrupo, O) - (Length3 / 2 + (Length3 / 2) / 3 / 2) End If Call DrawElemSensors(StartPX, StartPY, SensorType) PressurePntX = ValveCascadalnPnts(CurrentGrupo, O) PressurePntY = StartPY + Width3 Call Draw AirPressure(PressurePntX, PressurePnt Y) DiagNeumatica.ForeColor = &HFF& DiagNeumatica.FontName = "Times New Roman" DiagNeumatica.FontSize = 6 DiagNeumatica.CurrentX = ValveCascadalnPnts(CurrentGrupo, O)+ DisplaceLX DiagNeumatica.CurrentY = StartPY - DisplaceL Y DiagNeumatica.Print NombreSensor; PV astago Endlf Endlf Loop 266 Endlf Loop Nextl EndSub 1 Procedimiento que dibuja el elemento Y. Sub DrawY (PntXY, PntYY) Const Length 1 = 40 Const Width 1 = 20 Const Displace 1 = 6 DiagNeumatica.ForeColor = &HFFOOOO Rem Dibujar Rectangulo DiagNeumatica.Line (PntXY, PntYY)-(PntXY + Widthl, PntYY) DiagNeumatica.Line (PntXY + Widthl, PntYY)-(PntXY + Widthl, PntYY + Lengthl) DiagNeumatica.Line (PntXY + Widthl, PntYY + Lengthl)-(PntXY, PntYY + Lengthl) DiagNeumatica.Line (PntXY, PntYY + Lengthl)-(PntXY, PntYY) Rem Dibujando las 4 lineas chicas 267 DiagNeumatica.Line (PntXY, PntYY + Lengthl / 4)-(PntXY + Displace!, PntYY + Lengthl / 4) DiagNeumatica.Line (PntXY + Widthl, PntYY + Lengthl / 4)-(PntXY + Widthl - Displace}, PntYY + Lengthl / 4) DiagNeumatica.Line (PntXY, PntYY + Lengthl - Lengthl / 4)-(PntXY + Displace}, PntYY + Length 1 - Length 1 / 4) DiagNeumatica.Line (PntXY + Widthl, PntYY + Lengthl - Lengthl / 4)-(PntXY + Widthl - Displace!, PntYY + Lengthl - Lengthl / 4) Rem Dibujando el I DiagNeumatica.Line (PntXY +Displace!/ 2, PntYY + (Lengthl / 4) / 2)-(PntXY + Widthl - Displace! / 2, PntYY + (Lengthl / 4) / 2) DiagNeumatica.Line (PntXY +Displace!/ 2, PntYY + Lengthl - (Lengthl / 4) / 2)-(PntXY + Widthl - Displace!/ 2, PntYY + Lengthl - (Lengthl / 4) / 2) DiagNeumatica.Line (PntXY + Widthl / 2, PntYY + (Lengthl / 4) / 2)-(PntXY + Widthl / 2, PntYY + Lengthl - (Lengthl / 4) / 2) Rem Calculando Puntos de Conexion a Lineas de Grupos PntXY = PntXY + Widthl / 2 DiagNeumatica.ForeColor = &H0& End Sub Procedimiento que se ejecuta al inicio de carga de forma pantalla5. Inicializa los elementos de la forma. Sub Fonn_Load O ScreenWidthTwip = Screen.Width ScreenHeightTwip = Screen.Height Screen WidthPixel = Screen. TwipsPerPixelX ScreenHeightPixel = Screen. TwipsPerPixel Y SWidthTwipPant5 = Screen WidthTwip SHeightTwipPant5 = ScreenHeightTwip SWidthPixelPant5 = Screen WidthPixel SHeightPixelPant5 = ScreenHeightPixel Rem Inicializar Pantalla 5 InitializePantalla5 Rem Tennina Inicializacion de Pantalla5 Rem Agregar elemento a SSPanel = DiagNeumaticaText DiagNeumaticaText.Caption = "CIRCUITO NEUMATICO MONTAJE CASCADA SIMPLE" Rem Tennina Agregar elemento a SSPanel = DiagNeumaticaText Rem Agregar elemento a SSCommand = PRINTP5 PRINTP5.Caption = "Imprimir" Rem Tenninar agregar elemento SSCommand = PRINTP5 Rem Agregar elemento a SSCommand = QUITP5 QUITP5.Caption = "SALIR" Rem Tennina agregar elemento a SSCommand = QUITP5 Rem Agregar elemento a SSCommand = INITP5 INITP5.Caption = "Reinicializar" Rem Tennina agregar elemento a SSCommand = INITP5 Rem Dibujar Circuito DrawNeumaticCircuit Rem Tennina Dibujar Circuito End Sub Procedimiento que inicializa los valores de todos los elementos de la Fonna Pantalla 5. Sub InitializePantalla5 O Rem Inicializando Fonna = Pantalla5 Pantalla5.Height = SHeightTwipPant5 268 Pantalla5 .Left = O Pantalla5.Top = O Pantalla5.Width = SWidthTwipPant5 Pantalla5.AutoRedraw = -1 'Verdadero Pantalla5.BackColor = &HFF8080 Rem Pantalla5.BorderStyle - Inicializado Manualmente Pantalla5.Caption = 11Pantalla5 11 Rem Pantalla5.ClipControls - Inicializado Manualmente Rem Pantalla5.Contro1Box - Inicializado Manualmente Pantalla5.DrawMode = 13 'Copy Pen Pantalla5.DrawStyle = O 'Solido Pantalla5.DrawWidth = 1 Pantalla5.Enabled = -1 'Verdadero Pantalla5.Fi11Color = &HO Pantalla5.Fil1Style = 7 'Diagonal Cruzado Pantalla5.FontBold = -1 'Verdadero Pantalla5.Fontltalic = O 'Falso Pantalla5.FontName = "Times New Roman" Pantalla5.FontSize = 9.6 Pantalla5.FontStrikethru = O 'Falso Pantalla5.FontTransparent = -1 'Verdadero Pantalla5.FontUnderline = O 'Falso Pantalla5.ForeColor = &HCOOOOO Pantalla5.HelpContextID = O Rem Pantalla5.lcon - Agregar si se requiere Pantalla5.KeyPreview = O 'Falso Rem Pantalla5.LinkMode - Inicializado Manualmente Pantalla5.LinkTopic = 11Pantalla5 11 Rem Pantalla5.MaxButton - Inicializado Manualmente Rem Pantalla5.MDIChild - Inicializado Manualmente Rem Pantalla5.MinButton - Inicializado Manualmente Pantalla5.MousePointer = O 'Default Rem Pantalla5.Name - Inicializado Manualmente Rem Pantalla5.Picture - Agregar si se requiere Pantalla5.ScaleHeight = SHeightTwipPant5 / SHeightPixelPant5 Pantalla5.ScaleLeft = O Pantalla5.ScaleMode = 3 'Pixel Pantalla5.ScaleTop = O Pantalla5.ScaleWidth = SWidthTwipPant5 / SWidthPixelPant5 Pantalla5.Tag = 1111 Pantalla5.Visible = -1 'Verdadero Pantalla5.WindowState = 2 'Maximizado Rem Termina Incializando Forma = Pantalla5 Rem Inicializando SSPanel en Forma Pantalla5 = DiagNeumaticaText DiagNeumaticaText.Height = .065 * Pantalla5.ScaleHeight DiagNeumaticaText.Left = .1 * Pantalla5.ScaleWidth DiagNeumaticaText.Top = O DiagNeumaticaText.Width = .65 * Pantalla5.ScaleWidth 269 DiagNeumaticaText.Align = O 'Ninguno DiagNeumaticaText.Alignment = 7 'Centro - Medio DiagNeumaticaText.AutoSize = O 'Ninguno DiagNeumaticaText.BackColor = &HCOC0C0 DiagNeumaticaText.Bevellnner = 2 'Levantado DiagNeumaticaText.BevelOuter = 2 'Levantado DiagNeumaticaText.BevelWidth = 6 DiagNeumaticaText.BorderWidth = 3 DiagNeumaticaText.Caption = "DiagNeumaticaText" DiagNeumaticaText.DataField = "" Rem DiagNeumaticaText.DataSource - Inicializado Manualmente Rem DiagNeumaticaText.Draglcon - Agregar si se requiere DiagNeumaticaText.DragMode = O 'Manual DiagNeumaticaText.Enabled = -1 'Verdadero DiagNeumaticaText.FloodColor = &HFF DiagNeumaticaText.FloodShowPct = -1 'Verdadero DiagNeumaticaText.FloodType = O 'Ninguno DiagNeumaticaText.Font3D = 4 'Inset w/heavy shadow DiagNeumaticaText.FontBold = -1 'Verdadero DiagNeumaticaText.Fontltalic = O 'Falso DiagNeumaticaText.FontName = "Times New Roman" DiagNeumaticaText.FontSize = 9.6 DiagNeumaticaText.FontStrikethru = O 'Falso DiagNeumaticaText.FontUnderline = O 'Falso DiagNeumaticaText.ForeColor = &H80000008 DiagNeumaticaText.HelpContextID = O Rem DiagNeumaticaText.Index -Agregar si se requiere DiagNeumaticaText.MousePointer = O 'Default DiagNeumaticaText.Outline = O 'Falso DiagNeumaticaText.RoundedComers = -1 'Verdadero DiagNeumaticaText.ShadowColor = 1 'Negro DiagNeumaticaText.Tablndex = O DiagNeumaticaText.Tag = "" DiagNeumaticaText.Visible = -1 'Verdadero Rem Termina Inicializacion de SSPanel en Forma Pantalla5 = DiagNeumaticaText Rem Inicializacion de Picture Box en Forma Pantalla5 = DiagNeumatica DiagNeumatica.Height = Pantalla5.ScaleHeight * .935 DiagNeumatica.Left = O DiagNeumatica.Top = Pantalla5.ScaleHeight * .065 DiagNeumatica.Width = Pantalla5.ScaleWidth DiagNeumatica.Align = O 'Ninguno DiagNeumatica.AutoRedraw = -1 'Verdadero DiagNeumatica.AutoSize = O 'Falso DiagNeumatica.BackColor = &HFFFFFF Rem DiagNeumatica.BorderStyle - Inicializado ManualmenteRem DiagNeumatica.ClipControls - Inicializado Manualmente DiagNeumatica.DataField = "" Rem DiagNeumatica.DataSource - Inicializado Manualmente 270 Rem DiagNeumatica.Draglcon - Agregar si se requiere DiagNeumatica.DragMode = O 'Manual DiagNeumatica.DrawMode = 13 'Copy Pen DiagNeumatica.DrawStyle = O 'Solido DiagNeumatica.DrawWidth = 1 DiagNeumatica.Enabled = -1 'Verdadero DiagNeumatica.FillColor = &HO DiagNeumatica.FillStyle = O 'Solido DiagNeumatica.FontBold = -1 'Verdadero DiagNeumatica.Fontltalic = O 'Falso DiagNeumatica.FontName = "Times New Roman" DiagNeumatica.FontSize = 12 DiagNeumatica.FontStrikethru = O 'Falso DiagNeumatica.FontTransparent = -1 'Verdadero DiagNeumatica.FontUnderline = O 'Falso DiagNeumatica.ForeColor = &H80000008 DiagNeumatica.HelpContextID = O Rem DiagNeumatica.Index - Agregar si se requiere DiagNeumatica.Linkltem = "" Rem DiagNeumatica.LinkMode - Inicializado Manualmente DiagNeumatica.LinkTimeout = 50 DiagNeumatica.LinkTopic = "" DiagNeumatica.MousePointer = O 'Default Rem DiagNeumatica.Picture - Agregar si se requiere DiagNeumatica.ScaleHeight = Pantalla5.ScaleHeight * .935 DiagNeumatica.ScaleLeft = O DiagNeumatica.ScaleMode = 3 'Pixel DiagNeumatica.ScaleTop = O DiagNeumatica.ScaleWidth = Pantalla5.ScaleWidth DiagNeumatica.Tablndex = 1 DiagNeumatica.TabStop = -1 'Verdadero DiagNeumatica.Tag = "" DiagNeumatica.Visible = -1 'Verdadero Rem Termina Inicializacion Picture Box en Forma Pantalla5 = DiagNeumatica Rem Inicializacion de SSCommand en Forma Pantalla5 = PRINTP5 PRINTP5.Height = .065 * Pantalla5.ScaleHeight PRINTP5.Left = O PRINTP5.Top = O PRINTP5.Width = Pantalla5.ScaleWidth * .1 PRINTP5.AutoSize = O 'Ninguno PRINTP5.Beve1Width = 8 PRINTP5.Caption = "PRINTP5" Rem PRINTP5.Draglcon -Agregar si se requiere PRINTP5.DragMode = O 'Manual PRINTP5.Enabled = -1 'Verdadero PRINTP5.Font3D = 2 'Levantado w/heavy shading PRINTP5.FontBold = -1 'Verdadero PRINTPS.Fontltalic = o 'Falso 271 PRINTP5.FontName = "Times New Roman" PRINTP5.FontSize = 9.6 PRINTP5.FontStrikethru = O 'Falso PRINTP5.FontUnderline = O 'Falso PRINTP5.ForeColor = &H0 PRINTP5.HelpContextID = O Rem PRINTP5.Index -Agregar si se requiere PRINTP5.MousePointer = O 'Default PRINTP5.Outline = -1 'Verdadero Rem PRINTP5.Picture -Agregar si se requiere PRINTP5.RoundedComers = -1 'Verdadero PRINTP5.Tablndex = 2 PRINTP5.TabStop = -1 'Verdadero PRINTP5.Tag = "" PRINTP5.Visible = -1 'Verdadero Rem Termina Inicializacion de SSCommand en Forma Pantalla5 = PRINTP5 Rem Inicializando SSCommand en Forma Pantalla5 = QUITP5 QUITP5.Height = .065 * Pantalla5.ScaleHeight QUITP5.Left = Pantalla5.ScaleWidth * .9 QUITP5.Top = O QUITP5.Width = Pantalla5.ScaleWidth * .1 QUITP5.AutoSize = O 'Ninguno QUITP5.Beve1Width = 8 QUITP5.Caption = "QUITP5" Rem QUITP5.Draglcon -Agregar si se requiere QUITP5.DragMode = O 'Manual QUITP5.Enabled = -1 'Verdadero QUITP5.Font3D = 2 'Levantado w/heavy shading QUITP5.FontBold = -1 'Verdadero QUITP5.Fontltalic = O 'Falso QUITP5.FontName = "Times New Roman" QUITP5.FontSize = 9.6 QUITP5.FontStrikethru = O 'Falso QUITP5.FontUnderline = O 'Falso QUITP5.ForeColor = &H0 QUITP5.HelpContextID = O Rem QUITP5.Index - Agregar si se requiere QUITP5.MousePointer = O 'Default QUITP5.Outline = -1 'Verdadero Rem QUITP5.Picture - Agregar si se requiere QUITP5.RoundedComers = -1 'Verdadero QUITP5.Tablndex = 3 QUITP5.TabStop = -1 'Verdadero QUITP5.Tag = "" QUITP5.Visible = -1 'Verdadero Rem Termina Inicializacion de SSCommand en Forma Pantalla5 = QUITP5 Rem Inicializando SSCommand en Forma Pantalla5 = INITP5 272 INITP5.Height = .065 * Pantalla5.ScaleHeight INITP5.Left = Pantalla5.ScaleWidth * .75 INITP5.Top = O INITP5.Width = Pantalla5.ScaleWidth * .15 INITP5.AutoSize = O 'Ninguno INITP5.Beve1Width = 8 INITP5.Caption = "INITP5" Rem INITP5.Draglcon -Agregar si se requiere INITP5.DragMode = O 'Manual INITP5.Enabled = -1 'Verdadero INITP5.Font3D = 2 'Levantado w/heavy shading INITP5.FontBold = -1 'Verdadero INITP5.Fontltalic = O 'Falso INITP5.FontName = "Times New Roman" INITP5.FontSize = 9.6 INITP5.FontStrikethru = O 'Falso INITP5.FontUnderline = O 'Falso INITP5.ForeColor = &H0 INITP5.HelpContextlD = O Rem INITP5.Index - Agregar si se requiere INITP5.MousePointer = O 'Default INITP5.Outline = -1 'Verdadero Rem INITP5.Picture - Agregar si se requiere INITP5.RoundedComers = -1 'Verdadero INITP5.Tablndex = 3 INITP5.TabStop = -1 'Verdadero INITP5.Tag = "" INITP5.Visible = -1 'Verdadero Rem Termina Inicializacion de SSCommand en Forma Pantalla5 = INITP5 End Sub Procedimiento que descarga la forma pantalla 5 y carga la forma pantalla 1 si el usuario lo activa. Sub INITP5 _ Click () Unload Pantalla5 Pantalla} .Show O End Sub Procedimiento que imprime el circuito neumático. Sub PRINTP5_Click () 273 Const GETSETP APERORIENT = 30 Dim Orient As OrientStructure Dim X As Integer Printer.End.Doc Pantalla5.PrintForm Printer.EndDoc Orient.Orientation = PORTRAIT EndSub Procedimiento que se sale del programa cuando activado por el usuario. Sub QUITPS_Click () Unload Pantalla5 End EndSub 274