Logo Passei Direto

Herramientas de estudio

Material
¡Estudia con miles de materiales!

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