[go: up one dir, main page]

0% encontró este documento útil (0 votos)
131 vistas273 páginas

Cem337254 PDF

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 273

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 Presidente


Dr. Cuauhtémoc Sergio Carbajal Fernández Secretario
Dr. Alejandro Rafael Vega Salinas Vocal
Dr. Basilio del Muro Cuéllar Vocal

Atizapán de Zaragoza, Edo. Méx., Marzo de 1998.


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.


4

CONTENIDO.

LISTA DE FIGURAS 8

LISTA DE TABLAS 10

ANTECEDENTES 11

OBJETIVO Y PLANTEAMIENTO DEL PROBLEMA 12

JUSTIFICACION 14

INTRODUCCION 16

CAPITULO l. NEUMATICA

1.1 Introducción 21
1.2 Aplicaciones en la neumática 22
1.2.1 Neumática en desarrollo de aplicaciones 22
aplicaciones automatizadas
1.2.2 Accionamiento neumático. 23
1.2.3 Manipuladores neumáticos. 24
1.3 Comparación de la neumática con energías de 30
otras índole
1.3.1 Técnicas de transmisión o energías 30
1.3.2 Características de la transmisión regulada 32
1.3.3 Mantenimientos de las energías 35
1.3.4 Factores adicionales a considerar para la 37
utilización de energía neumática.
1.3.5 Características de las energías 37
1.3.5.1 Características eléctricas 37
1.3.5.2 Características hidráulicas 39
1.3.5.3 Características neumáticas 41
1.4 Aplicaciones industriales de neumática 45
1.4.1 Agricultura y explotación forestal 46
1.4.2 Industria de protección de energía 47
1.4.3 Explotación minera 47
1.4.4 Industria química 47
1.4.5 Industria petrolífera 48
1.4.6 Industria de plástico 48
1.4.7 Aridos, vidrios 49
1.4.8 Industria metalúrgica 49
1.4.9 Industria de la madera 50
1.4.10 Industria de papel - industria gráfica 51
1.4.11 Industria textil 52
1.4.12 Industria alimenticias 52
5
1.4.13 Construcción 53
1.4.14 Transporte y trafico 53
1.4.15 Enseñanza y publicidad 54
1.4.16 Construcción de maquinas 54

CAPITULO 11. CIRCUITOS NEUMATICOS. SISTEMA CASCADA.

2.1 Introducción 57
2.2 Elementos de sistemas neumáticos 59
2.2.1 Cilindros 60
2.2.1.1 Cilindros de simple efecto 61
2.2.1.2 Cilindros de doble efecto 61
2.2.1.3 Características técnicas de cilindros 63
neumáticos
2.2.2 Válvulas o distribuidores 63
2.2.2.1 Elección de válvulas neumáticas 64
2.2.2.1.1 Vías y posiciones 64
2.2.2.1.2 Factores de caudal 65
2.2.2.2 Grupos de válvulas 66
2.2.2.2.1 Válvulas de vías o distribuidores 66
2.2.2.2.2 Válvulas de bloqueo 72
2.2.2.2.3 Válvulas de presión 73
2.2.2.2.4 Válvulas de caudal 73
2.2.2.2.5 Válvulas de cierres 74
2.2.2.3 Localización de válvulas 74
2.3 Símbolos gráficos normalizados 75
2.4 Realización de esquemas neumáticas 77
2.4.1 Croquis de situación 77
2.4.2 Designación de los elementos 78
2.4.2.1 Designación por cifras 78
2.4.2.2 Designación por letras 78
2.4.3 Secuencia 80
2.4.4 Diagrama de movimientos 81
2.4.4.1 Diagrama de espacio-fase 81
2.4.4.2 Diagrama de espacio-tiempo 82
2.4.4.3 Diagrama de mando 83
2.4.5 Trazado de esquemas en neumática 83
2.4.6 Plano de situación 84
2.4.7 Lista de los elementos 85
2.5 Mandos para equipos neumáticos. Métodos de generación 86
de sistemas de mandos neumáticos
2.5.1 Mandos programados 87
2.5.2 Mandos secuenciales 87
2.6 Sistema Cascada 89
2.6.1 Conexión paso a paso usando método cascada 89
2.6.2 Limites del montaje en cascada 97
2.6.3 Sistema cascada con movimientos repetitivos 97
de un cilindro
2.6.4 Sistema cascada con movimientos simultáneos 98
6

CAPITULO 111. CODIGO DEL PROGRAMA COMPUTACIONAL

3.1 Introducción 100


3.2 Diagrama de flujo del programa computacional 101
3.3 Código del programa 116

CAPITULO IV. USO DEL PROGRAMA COMPUTACIONAL

4.1 Introducción 118


4.2 Pasos generales para utilizar el programa 119
4.2.1 Ejecución del programa neucas 119
4.2.2 Uso del programa 121
4.3 Uso del programa-ejemplo 1 128
4.3.1 Presentación gráfica del programa utilizando 129
Ejemplo 1 y pasos generales.
4.4 Uso del programa-ejemplo 2 140
4.4.1 Presentación gráfica del programa utilizando 141
Ejemplo 2 y pasos generales.

CAPITULO V. PRUEBAS Y RESULTADOS

5.1 Introducción 152


5.2 Caso 1 - Cascada simple - Dispositivo para remachar 153
5.2.1 Croquis de situación 153
5.2.2 Planteamiento del problema 154
5.2.3 Resultados del programa computacional neucas 155
5.2.3.1 Entrada de datos 155
5.2.3.2 Verificación de datos 155
5.2.3.3 Circuito neumático 156
5.3 Caso 2 - Cascada simple - Marcado de piezas 157
5.3.1 Croquis de situación 157
5.3.2 Planteamiento del problema 158
5.3.3 Resultados del programa computacional neucas 159
5.3.3.1 Entrada de datos 159
5.3.3.2 Verificación de datos 159
5.3.3.3 Circuito neumático 160
5.4 Caso 3 - Cascada simple - Dispositivo para doblar 161
5.4.1 Croquis de situación 161
5.4.2 Planteamiento del problema 162
5.4.3 Resultados del programa computacional neucas 163
5.4.3.1 Entrada de datos 163
5.4.3.2 Verificación de datos 163
5.4.3.3 Circuito neumático 164
5.5 Caso 4 - Simultaneidad - Dispositivo para cizallar 165
5.5.1 Croquis de situación 165
5.5.2 Planteamiento del problema 166
5.5.3 Resultados del programa computacional neucas 167
5.5.3.1 Entrada de datos 167
7
5.5.3.2 Verificación de datos 167
5.6 Caso 5 - Repetividad - Dispositivo para embutir 168
5.6.1 Croquis de situación 168
5.6.2 Planteamiento del problema 169
5.6.3 Resultados del programa computacional neucas 170
5.6.3.1 Entrada de datos 170
5.6.3.2 Verificación de datos 170

CAPITULO VI. CONCLUSIONES Y PERSPECTIVAS

6.1 Conclusiones 172


6.2 Perspectivas 174

BIBLIOGRAFIA 176

ANEXO A PROGRAMA NEUCAS 178


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ón vá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.
13

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.

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
;. PERIFERICOS
p
-
PERIFERICOS
Movirnimtos .
p

DE TRATAMIENTO
-
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 NEUMATICA 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 posiciones deseadas 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.


30

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.

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

N
H

Longitud de transmisión
lm 10m 100m

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

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

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

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 Oms [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 1Omm/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: 1O 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 EXPLOTACION 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].

Industrias forrajeras: 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 METALURGICA.

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 soldadura

Máquina de material de construcción

Máquina para vidrio y cerámica

Máquina de imprimir y papelera


55
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
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 VALVULAS 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 sino que 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
p
l l
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].


71

'
•.
!11!!

Figura 2.3 Sección de válvula de marcha - 3/2.

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.

-
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

Normalmente Cerrado. N ormlllm ente Abierto.

VALVULAS DE VIAS 4/2

CANALIZACIONES

é
Alimentación Permanente Escape Canalizado Canalización

Figura 2.7a Tabla de símbolos neumáticos normalizados.


76

CR.INDRO DE DOBLE EFECTO.

VALVULAS DE ACCIONAMIENTO MECANICO-RODILLO 3/2

~ 1 J
Qw 1 3

Normalmmte 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.
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.


78
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.

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 al
1

11

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

1 2 3 4 5=1
Sale

CILINDRO A
Entra Vl N 1

1 2 3 4 5=1
Sale
CJLINDROB
Entra 1 Vl N
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.

1 2 3 4 5=1
Sale
CILINDRO A
Entra vrsJ21SJ
1 2 3 4 5=1
Sale
CILINDROB
Entra 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-tiempo


83

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.

2 3 4 5 6

1 1 1 IQ
Abiero (
Válvula al
Cerrado 1
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 B

al bl
----,
1
1
1
1
1 I

r---• ~-------------~----~
1
1
1
'+-,:'-,..........~
7
1
1
1

l_____________ b ,_J
1 • 1

,________________ ~--------------------------
r1b
"{

Figura 2.14 Esquema de mando de un ciclo rectangular.

2.4.6 PLANO DE SITUACION.

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 [1O]. Las lineas representan salidas y se le

designa las siguientes nomenclaturas [9]:


91

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].

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.


93

b) Conexión cascada con tres grupos. Ver figura 2.19.

sl -
s2
----
----
-----
----
+ --
,i--
-----
----
----
----
---1
-.-.-.-.-
---,-
.---
---
s3 ----,-----,----+-+-------..-----+-----+---

el e2 e3

Figura 2.19 Conexión cascada tres grupos.

c) Conexión cascada con cuatro grupos. Ver figura 2.20.

sl - - - - - - - - - - , - - - - - - - - - - - , - - - - - - -
s2 ---------+-i------------1--....------
--------.---+-+-----~~-----t--+-----.----
s3
s4 ----,-----,---+--+-+-----~~. . . ----t--+-----+----

el e2 e3 e4

Figura 2.20 Conexión cascada cuatro grupos.


94

d) Conexión cascada con cinco grupos. Ver figura 2.21.

s3
---------+-T------------l-----,,........---
sl - - - - - - - - - , - - - - - - - - - - - - - . - - - - - -
s2
-------~-+-+-------,,------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.

1O) Conexiones de mandos o sensores.

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 1O, 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.


96

Figura 2.22 muestra un circuito neumático montado usando método cascada.

al bl

bO al

sl
s2

Marcha

Figura 2.22 Circuito neumático montaje cascada.


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 [1O].

2) Debido a la caída de la presión por el sistema cascada, la carrera del vástago es de

aproximadamente 1Ocm en un cilindro de simple efecto. Por lo tanto es recomendable

usar cilindros de doble efecto [1O].

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 SIMULTANEOS.

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 ·.


101

3.2 DIAGRAMA DE FLUJO DEL PROGRAMA COMPUTACIONAL.

INICIO

Escoger# Cilindros
y#Fases

Calculando # Cilindros, #
Fases y# Tiempos
Subrutina Relniciali:z3r
Panlalla 1

Crmción de matriz para


entrada de datos de
movimientos de cilindros Activar Icono
Relniciali:z3r

Entnda de dalos en
forma binaria de
movimieotos de
cilindros.
102

Creando matriz diagrama


de rases (CII.FASE) de
Carga Forma
Pantalla 2
entrada de datos

IniclBlización de
Calculando # de Grupos y Forma Pantalla 2
creando matriz
(CAMBIOGRUPOS) para
guardar información
#de Grupos
gráficamente

Calcular Secuencia de
Movimientos usando
matriz CILFASE
Descarga Forma
Pantalla 1

Secuencia de
Movimientos
gráficamente

Calcular dimesiones de line-as para


dibujar diagrama de movimientos
usando matriz de entrada de
movimientos de cilindros.

Diagrama de
Movimientos
gtáficamente
103

Carga Forma
Pantalla 3
Aceptar# de Grupos,
Secuencia de Movimientos
y Diagrama de Movimientos
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 Activar Icono


Dibujar Circuito Imprimir
Neumático

Descarga Forma
Pantalla 2
104

Carga Forma
Pantalla 5

Carga Forma
Inicialización de 1----------. Pantalla4
Forma Pantalla 5

Llamar procedimiento Inicialización de


para Dibujar Circuito Fonna Pantalla 4
Neumático

Llamar procedimiento para Impresión de # de grupos,


Dibujar Cilindros y secuencia de movimientos y
Válwlas Correspondientes diagrama de movimientos.

Calculando las dimensiones


de los cilindros, vástago,
válvulas y letras

Descarga Forma
Pantalla4
Dibujar Cilindros

Tipo de Válvula -
1

Llamar procedimiento
para dibujar Válvula
105

Calculando las posiciones Calculando las dimensiones


de entradas de las y posiciones de las válvulas,
válvulas correspondientes líneas de aire y Elemento Y

Determinando
Conectando conexiones tipo de válvula
de aire entre cilindros y
válvulas correspondientes

>-S_I_ _~ Tipo de Válvula -


Llamar Procedimiento 1
para dibujar lineas de
grupos

Calculando las Tipo de Válvula -


dimensiones de lineas 2
de grupos

Llamar Procedimiento
Dibujando Líneas para dibujar válvulas
de Grupos

Llamar Procedimiento
para Dibujar Válvulas
de Cascadas
106

Calculando Posiciones
Dibujando Líneas entre para dibujar Elemento Y
Válvwas y conectando
a Líneas de Grupos
Llamar Procedimiento
Para Dibujar Elemento
y

NO
Llamar Procedimiento
Para Dibujar Elemento
y

Dibujando Líneas entre


Elemento Y y conectando
a Líneas de Grupos

Calculando Posición de Calculando Posición de


entrada para sensor de entrada para sensor de
Elemento Y Elemento Y

Llamar Procedimiento
para Dibujar Todos
Los Sensores
Dibujando Líneas Lado
Izquierdo de Válvwas y
conectando a Líneas de
Grupos Calculando dimesiones y
posiciones de Sensores,
Conexiones a Líneas de
Grupos y Válvulas, Letras

Dibujando Lado
Derecho, lineas de
válvulas a Elemento Y
107

Asignando letra al
Buscando Matriz sensor de activación
Cll.FASE para 1, indica
movimiento de rase

NO

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
108


SI NO

Calculando Calculando
desplazamiento de desplazamiento de
sensor al lado izquierdo sensor al lado derecho

Dibujar Línea de Dibujar Línea de


Aire al Válvula Aire al Válvula
Cilindro Cilindro

SI NO

Tipo de Sensor= Tipo de Sensor -


1 2

Llamar Procedimiento
Dibujar Un Sensor

Dibujar Líneas de
Sensor a Grupos de
Líneas y Letra de Sensor
109

Conectar Uneas de
Sensor Válvula Cilindro
a Líneas de Grupos

SI NO
t

Tipo de Sensor .. Tipo de Sensor= Tipo de Sensor -


l Tipo de Sensor -
2 l 2

Llamar Procedimiento Llamar Procedimiento


Dibujar Un Sensor Dibujar Un Sensor

Dibujar Llamar Procedimiento


Letra de Sensor para Dibujar Presiones
de Aire

Tipo de Sensor•
3
110

Llamar Procedimiento
Dibujar Un Sensor Dibujar
Letra de Sensor

Llamar Procedimiento
para Dibujar Presiones
de Aire
111

Calculando posiciones Calculando Llamando


de conexiones de posiciones de Procedimiento para
aires escapes de aire dibujar Escapes de Aire

Calculando dimensiones
de válvulas

SI Calculando
posiciones de
conexiones de aire

Calculando
posiciones de
escapes de aire
SI

Llamando
Procedimiento para
dibujar Escapes de Aire

Calculando
posiciones de
presión de aire

Llamando Procedimiento
para dibujar Presiones de
Aire i~------~
112

Dibujando Dibujando
Escapes de Aire Presiones de Aire

NO NO

NO
113

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 SI
Válvulas de Cascadas,
Sección Líneas Lado
Derecho ?
114

Calculando Dimensiones
de Sensores, Rodillo,
Resorte, Pared

Dibujando
Rectángulo del
Sensor

Llamado desde
Procedimiento Dibujar
Todos Los Sensores,
Sección - Si hay un cambio
de grupo?

Dibujando Rodillo
del Sensor

Dibujando
Pared

Llamar Procedimiento
para Dibujar Escapes
de Aire
115

Subrutina SALIR
Pantalla 1

Activar Icono
Salir

FIN

Subrutina SALIR Subrutina. Reinicializar


Pantalla 2 Pantalla 2

Activar Icono
Salir

FIN

Subrutina SALIR Subrutina Reinicializar


Pantalla 5 Pantalla 5

Activar Icono Activar Icono


Salir Relniciali2ar

FIN
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 ACEPTAR-CIL/FASE.

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:

VI N
TO T1 T2 T3 T4

CILINDRO A 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 Oo 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.

1O) 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 en cualquier 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.


129

4.3.1 PRESENTACION GRAFICA DEL PROGRAMA UTILIZANDO

EJEMPLO 1 Y PASOS GENERALES.

1) Aparece la pantalla de presentación. Presionar Continuar.

PROGRUL\.DOR: !
Jaiprnk:islt &1jnmm i

2) Aparece la pantalla "Entrada de Datos".

J. &co,er # ik d/Jadnn:,
# ikfoses.
Z. Pre- Aupl,lr-C/VFa,.
J. u.., e11f.,.. bútarla el

•linqH
ce4:r,k --
dH,,,dro - ~,
---40
dfrúnú(/e..,,o:

T2 T3 H

,_, ,_,-~_., .••,_,.TI""'


N
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
130

3) Escoger# De Cilindros.

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. P n - .4cq,tar-ilf,w,
$.l'n_C_,_,

4) Escoger# de Fases.

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_,_,
131

5) Presionar Aceptar-Cil/Fase.

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,pofl,,al del
""'-fose.
4. Presi01U1r Ac,púlr-MOK
S. Pre"- Contúuu,r,

6) Aparece la matriz de cilindros X tiempos.

]. 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.
132

7) Llenar en forma binaria el tiempo de movimientos.

En caso de que se apriete otra tecla:

l . Eno,er # de cl/Ja4rm:,
# 4ejlues.
Z. Prt_ A,,_.c/VF,u.

,,,linq#4<•--
___ e,
J,U,-,oj'o,--e/

"'"""'e (/,..,,.,

T(,>-<I
Rq,-dtinyobtk/al
<k todafos, • 711... T(-J;
? el tinyo fl-1 ,kl
altJMofose.
~ ,,,,,_Auptar-M.._
,.,,,,,_e_,._,

Presionar OK y terminar el llenado:

1. En-,er# de tllia4ro#?
# 4,jluu.

J. ti,.,.,,, __
Z.l'rt-At~Fa.
u,-,.fo,__.,
,ktodatl/"'4n-d
sftlflelfle (/,..,,.,

T2 Tl T4

N
1 O
R~dtinyoWdal
,k todajlue • 711... T(-);
, ti"-fl-1
,dtlao.fiue.
,kl

,l. Pnsi"""'1' Acq,lar-!,,fOM


5. Pnm,aar Coalúu,ar.
133

8) Presionar Aceptar-Movimientos de Cilindros.

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.

9) Presionar Continuar.

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 T2 Tl T4

C
ilAIZI N
T(•J=G
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_,,__
134

1O) 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.
4. P,m-, ImprJn,J,sl t1aM
Jnq,,in,i,,
s. ~ DDn,Ja,
Clrt:ldlo.
135

11) Aparece la pantalla "Chequeo de Condiciones". Presionar O.K.

____ .,
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.

12) Presionar Imprimir.

A l. Vnflbr # u Gnq,#,

B
e J.
o..---
S-.Clt,tk.M.,,.y

2. SI,__,,,..__,
Pw,d-,S,4LIR.
s,,,.,...,,~l"l"Ol'N->
Prm-, Aeq,,,,-DL4G.
D ,{, PnaiMMrlmpri,,,irsi4-
Jmrimlr.
S.-DO.,,
Cin,,áo.
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
¡ .. ¡.. ~
js Grupos 1
~ e,~-
o,p-

AI
B
e
1 2 3

1\
,

L/ \
5 6 7 B 9 =l

..
~ ...

I\
D l/ \
138

17) Presionar Dibujar.

A
B -·-:,
1. V,,ffit:,w # u Gn,p,,,,

m.i-·-
z. S/1111;¡, ,,,,_ - >
e P,m.,,.,SALIR.
J.Slu1*!,,-->
l',m.,,.,A,.,..,..DIAG.
D 4.-htq,nm/r,i-
Imprimi,.
s.--,m,,,,¡.,
Cl,n,Jio.
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 I \
B I \
e I \
D I \
E I \
F I \
G I \
H 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~I
dna,ode11t~
4,-,.c11--e1
s/illinlu{f,,,.,io:

TI TI T2 T3 T4

CiAIZI N I
I(,)-() l o
Rqlsbor d tlnyo lak/DI
tk codajluc • TIJ••• T(n);
, ,J tu- jllllú 4,/
lllliMoj/u,.
./.,.,.._Auptar-MOK
J. Pnn__,c-.
142

3) Escoger# de Cilindros.

I . Escoru # 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.

4) Escoger# de Fases.

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 T2 Tl T4

l7l N I
caA 1
T(n):O
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
143

5) Presionar Aceptar-CH/Fase.

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.

6) Aparece la matriz de cilindros X tiempos.

J. Esco,,r # tú cU/Nlrosy
# dejl,ses.
Z. P r e - Aceplor-CiJ/Fos.
J. L/n,ar afom,a bbtarla el
túapo
tú cadotú
_ ..,,,,;,.¡n,1o,
_ _ ,,

sJ:tdente ,)-,to:

TI T1 T2 T3 T4
F-::=11-t-t--l-++-t--+-t--J--!l--l-t-t--l-++-t--t.--!!\\1CilA[.¿']
, ........ ¡ - N
144

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 7el~fl-/del
-
de c«lafose = ro. .. T(II);

""'-•Jlue.
-1. Pr,,;,,,,,,,Auplllr-M.,.
J . P r e " - C -.

Presionar OK y terminar el llenado.

J. Escoger# de di-., T
# dejl,se..
Z. PreSWMrAcq,617-C/VFa,.
J. u- ••fe-_,,
tle _ _ _ ,,
tu-,.tk-
sffllÚ/Jlú (!e-,lo:

TD TI T2 Tl T4
-====--+--+-t--t-
1r1-+-rl-+-lrl-+-lrl-+-lrl-+-
lrl-+-lrO~O- '~ ~Al7l
-+--+-+-t-+-+--+-+l-+-1+1-+-1+-1t-1--+-l+O-+-O+O-;_O_n rw:"iw'....,, ~ ""•""
N
11 1 1 110 000 0 tk-jlue = TO... T(II);

1 1 1 1 1 OOOOOO ~~del
-1.Pr,"-Auplllr-M.,.
J. Pr,,;,,,,,,, e_,,_,
145

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:

111111111100
TO
171
TI
N
T2 Tl I4

!!ii~llit1tttt~~~~~~~f~f.7~~~~~llcaAV1
i'= T(o)=O l l 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-.

9) Presionar Continuar.

INSTRUCCIONES PARA
MANEJO DE PANTALLA
]. Escozer # de dli,,dn, y
#defasts.
l . Pre"'-ar Aceptar-CIVFtu.
3. u,.,,,.,,.Jor-"""""' ,1
dnq,o
de cadode ·""""'""°'
cl//Nlrr, ---40 el
st,lllellh (/-,fo:

TO TI T2 Tl I4
~ 001 111111111111100
~ o o o 1111111111111 o o o T(n)=O , l
N I o
~ 0000111111111110000 Rqlstrtlr el lln,po Wdal
~ o o o o o 111111111 o o o o o de cadofase = 1YJ... T(•);
, ti lúllfPO.Jbtal del
~ o o o o o o 1111111 o o o o o o 11/túao fase.
4, Pre"'-ar Acep,ar-Mu,,,
~ 0000000111110000000 5. PredtMar COIUÍJUlar,
~ 0000000011100000000
~ OOO O OO OOO 1 OOOOO OOOO
146

10) Aparece la pantalla "Diagrama de Movimientos". Presionar Aceptar-Diag.

C+
O+
E+
F+
G•
H•
,.,.

l 2 3 4 5 6 7 8 9 ro ll ll U U e M IT IB~~

I \ l. Verflicor # de Gnq,os,
St!Clllnela de Mtw. y

I \ Diafroma de Mtw.
Z. SI hay errores - >
Pnsionar SALIR.
~ \ J. SI no hoy errores->
Pnsionar A~DL4G.

I \ 4. Prmonar Imprimir si tlesea


Imprimir.

I \ 5. Presionar Di1n,Jar
D CircuJJo.

ll \
I \
ll \
I\
147

11) Aparece la pantalla "Chequeo de Condiciones". Presionar O.K.

,..
.
,. ,.
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&

12) Presionar Dibujar.

c-
., .

, ,.
0-

. ... .

1 l 3 , 5 6 7 8 9 W U D D W U M U MANEJO DE PANTALLA

A/ r\ _,,__:,
1. Vnflb, # k Gntr-,

B l/ !\ oi..-"-"'-
1. s11,..,--->
e / r\
--&tl/R.
J.s,,.,,.:,,-->
Proi_A..,..,..DMG.
D l/ \ 4.Pw.á-Im¡,,/Mlr.á"-
I,,,,,..i,,,¡,.

E l/ !\ S. - - DDw,¡,,,
D Clff:ttllA

F / !\
G l/ r\
H ~ !\
I l/ [\
148

13) Aparece la pantalla "Circuito Neumático Montaje Cascada Simple".

.,12 -------+--+-----------------------------
. . . ---------+-------------------------1----i---

•• 11
149

14) Presionar Imprimir.

15) Aparecerá la pantalla de "Impresión". Presionar O.K.

• .. d ... " ..... ti

~ ~ ~
--(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


155

5.2.3 RESULTADOS DEL PROGRAMA COMPUTACIONAL NEUCAS.

5.2.3.1 Entrada de datos.

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.

5.2.3.2 Verificación de datos.

:~
J 2 3 4 5 6 =l
l. Vnflicor # i# G,.,_,

o.r---·
s-i.kM,,.,. :,

l. SI,_:,.,._ - >
PrmM.rSALIR.
J. s,,..,_y.,,..,,.,..->
PralM.r Ac:wpa,-DL1 G.
,f. P,al-, f,,,,,,.-Jd-
Inq,,i,,,Jr.
S.Pral-,Da..¡,,,
Cln:tdu.
156

5.2.3.3 Circuito neumático .

• .. •1

,1-_::::j:::::::::;;:::::í::¡:::::;:::::::::¡::::::::::::::::::::::::::::::::::::::::::=
•l

•• ~,
157

5.3 CASO 2 - CASCADA SIMPLE - MARCADO DE PIEZAS.

5.3.1 CROQUIS DE SITUACION.

CillooroB
Estampado

Cilindro A CilindroC
ón...._~~::...":._.~-::.,i;--u·~J-f~~~~·~,
Alirnenticiijn/ Fijaa__ E',cpulsiOn

Figura 5.3 - Croquis de situación Caso 2.


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.


159

5.3.3 RESULTADOS DEL PROGRAMA COMPUTACIONAL NEUCAS.

5.3.3.1 Entrada 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.

5.3.3.2 Verificación de datos.

J. SJ,,. ,__,, arora->


_A..,,..,.DUG.
"- "-'-lmp,lndrJd4-
Jmp,lndr.
s. - Di1»,JM
160

5.3.3.3 Circuito neumático.

..2---+-----+--....
1. . . .,___.¡......_.....,._-+--o-4----+----------------------------
-..--+-----+------------------------
s3-------....--+---+ .........-----+------+------------------

,. "
161

5.4 CASO 3- CASCADA SIMPLE - DISPOSITIVO PARA DOBLAR.

5.4.1 CROQUIS DE SITUACION.

Cilindro .ti
SujedOn

CilindtoC
Se,gllndo doblado

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.


163

5.4.3 RESULTADOS DEL PROGRAMA COMPUTACIONAL NEUCAS.

5.4.3.1 Entrada 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.

5.4.3.2 Verificación de datos.

----,
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
164

5.4.3.3 Circuito neumático .

..2----------t--..--t------t----------------------
1-------1----.-1----t------.----------------------
s3---I,.-....-----,--+-+-....,.----+-----+-----------------
t-----------+--------11

•• ,1
165

5.5 CASO 4 - SIMULTANEIDAD - DISPOSITIVO PARA

CIZALLAR.

5.5.1 CROQUIS DE SITUACION.

ctlíndroO
Sbj~i6n

CilindroA
Pinta

Cillndro B
Attan~a,

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.


167

5.5.3 RESULTADOS DEL PROGRAMA COMPUTACIONAL NEUCAS.

5.5.3.1 Entrada 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

l
N 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.

5.5.3.2 Verificación de datos.

J. Vnflia,r # i l G -
-•M..,_:,
0.,-ilM..,_
z. SJ ' - : , - - >
-SALIR.

4.-i,,,,,,_--
J. SJ,.. . .., .,,,..,,,s - >
-~DL-IG.

1,,,,,_,.
5.-Da.Jor
e
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


170

5.6.3 RESULTADOS DEL PROGRAMA COMPUTACIONAL NEUCAS.

5.6.3.1 Entrada 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

T(n)a() 1
N
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.

5.6.3.2 Verificación de datos.

-·--,
l . Vnflbr # k Gnq,.,

o,.,_.-.
Z.SJ1,ay,,,.....->
"-'-S.4UR.
J. SJ,.. ,_F.,,..,.->
4"-'-A""P'""'DIAG.
. _ /_ _ ,d_
I,rq,,lmlr.
s.-~
c...,,._
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.2PERSPECTIVAS.

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 elaboradas en 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.
179

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 ScreenWidthTwip As Integer
Global ScreenHeightTwip As Integer
Global ScreenWidthPixel 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
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
180

Const LengthY = 596


Const CilY = LengthY / 4
Dim StartX, StartY As Integer
Dim Pl, P2, P3, P4, CilPY As Integer

Pantalla.DiagFaseMov .Cls

StartY = 770
CilPY=CilY

For I = OTo 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 = OTo 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&
181

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 = OThen
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 = OTo (NumCil - 1)
JPos = 50
For J = 1 To NumFases
Pantalla.SecMov.CurrentX = JPos
Pantalla.SecMov.CurrentY = IPos
If CilTiempo(I, J - 1) = OThen
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
182

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.


183
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
ScreenWidthPixel = Screen.TwipsPerPixelX
ScreenHeightPixel = Screen.TwipsPerPixelY
SWidthTwipPant0 = ScreenWidthTwip
SHeightTwipPant0 = ScreenHeightTwip
SWidthPixelPant0 = ScreenWidthPixel
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
184

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 'Verdadero
Pantalla0.FillColor = &H0
Pantalla0.FillStyle = 7 'Diagonal Cruzado
Pantalla0.FontBold = -1 'Verdadero
Pantalla0.Fontltalic = O '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
185
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 Oo 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


186
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 = OTo 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 = OTo NumCil - 1
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
188

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
ScreenWidthPixel = 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
189
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
190
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 = OTo (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 = OTo (MaxTiempos - 1)
191
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 = OTo (NumCil - 1)
TextCil 1(l).Enabled = -1
TextCil 1(1). Visible = -1
For J = OTo (NumTiempos - 1)
Select Case I
Case O
MovCilsA(J).Enabled = -1
192
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 = OTo (NumTiempos - 1)
F(J).Enabled = -1
F(J). Visible = -1
NextJ
ReDim CilTiempo(NumCil - 1, NumTiempos - 1)
For I = OTo (NumCil - 1)
For J = OTo (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!.
193

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 'Verdadero
Pantalla! .FillColor = &HO
Pantalla! .FillStyle = 7 'Diagonal Cruzado
Pantalla! .FontBold = -1 'Verdadero
Pantalla! .Fontltalic = O '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
194

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 'Inset
NombrePantallal.BevelOuter = 2 'Levantado
NombrePantallal.BevelWidth = 5
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 'Ninguno
NombrePantallal.Font3D = 4 'Inset w/heavy shading
NombrePantallal .FontBold = -1 'Verdadero
NombrePantallal.Fontltalic = O '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 Forma Pantalla!= NombrePantallal

Rem Inicializando SSPanel en Forma Pantalla!= TextCil


TextCil.Align = O 'Ninguno
TextCil.Height = SHeightTwipPantl * .07
195
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 'Levantado
TextCil.BevelOuter = 2 'Levantado
TextCil.BevelWidth = 6
TextCil.BorderWidth = 3
TextCil.Caption = TextCil
11 11

TextCil.DataField = 1111

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 'Ninguno
TextCil.Font3D = 4 'Inset w/heavy shadow
TextCil.FontBold = -1 'Verdadero
TextCil.Fontltalic = O '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
196
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 'Ninguno
TextFases.Font3D = 4 'Inset w/heavy shadow
TextFases.FontBold = -1 'Verdadero
TextFases.Fontltalic = O '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
197
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
198
GetCilFasesData.Font3D = 4 'Inset w/heavy shading
GetCilFasesData.FontBold = -1 'Verdadero
GetCilFasesData.Fontltalic = O '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
199
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
200
Rem AyudaPl.Index - Agregar si se requiere
AyudaP 1.Linkltem = '"'
Rem AyudaPl.LinkMode - Inicializado Manualmente
AyudaPl.LinkTimeout = 50
1111
AyudaPl.LinkTopic =
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
1111
AyudaPl.Tag =
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 1P 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
1111
ShapelPl.Tag =
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
201
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
11 11
F(l).Caption = T
1111
F(l).DataField =
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)
1111
F(l).Tag =
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
202
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
203

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 = OTo (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
204
MovCilsB(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 = OTo (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 Roman 11

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
205
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 = OTo (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
206
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 = OTo (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)
207
MovCilsE(l).TabStop = -1 'Verdadero
MovCilsE(l).Tag = ""
MovCilsE(l).Text = '"'
MovCilsE(l).Visible = O 'Falso
Nextl
Rem Termina Inicializacion TextBox en Forma Pantalla! = MovCilsE(n)

Rem Inicializando TextBox en Forma Pantalla!= MovCilsF(n)


1=0
TempPos = SWidthTwipPantl * .11
For I = OTo (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
208
Rem Tennina Inicializacion TextBox en Fonna Pantallal = MovCilsF(n)

Rem Inicializando TextBox en Fonna Pantallal = MovCilsG(n)


1=0
TempPos = SWidthTwipPantl * .11
For 1 = OTo (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
209
For I = OTo (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 = OTo (MaxTiempos - 1)
MovCilsl(l).Height = SHeightTwipPantl * .05
MovCilsl(l).Left = TempPos
TempPos = TempPos + SWidthTwipPantl * .03
MovCilsl(l).Top = SHeightTwipPantl * .74
210
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
211
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
212
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
1111
QUITPl.Tag =
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
213

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
1111
INITPl.Tag =
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
214
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
215
Got0Or !Flag = O
End If
EndSub

Sub MovCilsC_KeyPress (lndex As Integer, KeyAscii As Integer)


CharPressed = Chr(KeyAscii)
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(KeyAscii)
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)
216
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(KeyAscii)
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
217
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(KeyAscii)
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.
218

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
219

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 Oo 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 = OThen
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 pantalla Adicionalmente 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
220

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
ScreenWidthPixel = Screen.TwipsPerPixelX
ScreenHeightPixel = Screen.TwipsPerPixelY
221
SWidthTwipPant2 = ScreenWidthTwip
SHeightTwipPant2 = ScreenHeightTwip
SWidthPixelPant2 = ScreenWidthPixel
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 MANEJO DE PANTALLA"
II

AyudaP2.DrawWidth = 3
AyudaP2.Line (O, 400)-(2988, 400)
AyudaP2.FontSize = 11
AyudaP2.Fontltalic = -1
AyudaP2.CurrentX = 80
AyudaP2.CurrentY = 450
AyudaP2.Print 1. Verificar# de Grupos,"
11

AyudaP2.Print" Secuencia de Mov. y"


11
AyudaP2.Print" Diagrama de Mov.
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 4. Presionar Imprimir si desea"
11

AyudaP2.Print " Imprimir."


222

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.
223

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
224

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 'Ninguno
NombrePantalla2.Font3D = 4 'Inset w/heavy shading
NombrePantalla2.FontBold = -1 'Verdadero
NombrePantalla2.Fontltalic = O '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
225
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
226
Grupos.DrawMode = 13 'CopyPen
Grupos.DrawStyle = O 'Solido
Grupos.DrawWidth = 1
Grupos.Enabled = -1 'Verdadero
Grupos.FillColor = &H0
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 'Twip
Grupos.ScaleTop = O
Grupos.ScaleWidth = 3504
Grupos. Tablndex = 2
Grupos.TabStop = -1 'Verdadero
Grupos.Tag = ""
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 1P2.Fil1Style = O 'Solido
Rem Shape 1P2.lndex - Agregar si se requiere
ShapelP2.Shape = O 'Rectangulo
ShapelP2.Tag = ""
227
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
SecMovText.FloodShowPct = -1 'Verdadero
SecMovText.FloodType = O 'Ninguno
SecMovText.Font3D = 4 'Inset w/heavy shadow
SecMovText.FontBold = -1 'Verdadero
SecMovText.Fontltalic = O '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
228
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 '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 = &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
SecMov.TabStop = -1 'Verdadero
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
229
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 Termina inicializacion 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
230
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
231

DiagFaseMov.DrawMode = 13 'Copy Pen


DiagFaseMov.DrawStyle = O 'Solido
DiagFaseMov.DrawWidth = 1
DiagFaseMov .Enabled = -1 'Verdadero
DiagFaseMov.FillColor = &H0
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 'Twip
DiagFaseMov.ScaleTop = O
DiagFaseMov.ScaleWidth = 8148
DiagFaseMov.Tablndex = 7
DiagFaseMov.TabStop = -1 'Verdadero
DiagFaseMov.Tag = ""
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
232
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
OKDiagOutput.FontTransparent = -1 'Verdadero
OKDiagOutput.FontUnderline = O 'Falso
OKDiagOutput.ForeColor = &H80000008
OKDiagOutput.HelpContextID = O
Rem OKDIAGOutput.Index - Agregar si se requiere
1111
OKDiagOutput.Linkltem =
Rem OKDIAGOutput.LinkMode - Inicializado Manualmente
OKDiagOutput.LinkTimeout = 50
233
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 = 1O
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
234
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
235
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
236

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 GETSETPAPERORIENT = 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 ()
237
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
ScreenWidthPixel = Screen.TwipsPerPixelX
ScreenHeightPixel = Screen.TwipsPerPixel Y

SWidthTwipPant3 = ScreenWidthTwip
SHeightTwipPant3 = ScreenHeightTwip
SWidthPixelPant3 = ScreenWidthPixel
SHeightPixelPant3 = ScreenHeightPixel

Rem lnicializacion de Val ores Default de Pantalla3


InitializePantalla3

Rem Agregar elementos a SSPanel = NombrePantalla3


NombrePantalla3.Caption = "CHEQUEO DE CONDICIONES"
238
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 = OTo 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 = OTo 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
239
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
240

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 'Verdadero
Pantalla3.Fil1Color = &HO
Pantalla3.Fil1Style = 7 'Diagonal Cruzado
Pantalla3.FontBold = -1 'Verdadero
Pantalla3.Fontltalic = O '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 = Pantalla3"
11

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
241
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 'Inset
NombrePantalla3.BevelOuter = 2 'Levantado
NombrePantalla3.BevelWidth = 5
NombrePantalla3.BorderWidth = 4
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 'Ninguno
NombrePantalla3.Font3D = 4 'Inset w/heavy shading
NombrePantalla3.FontBold = -1 'Verdadero
NombrePantalla3.Fontltalic = O '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
242
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
243

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.


244
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

ScreenWidthTwip = Screen. Width


ScreenHeightTwip = Screen.Height
ScreenWidthPixel = Screen.TwipsPerPixelX
ScreenHeightPixel = Screen.TwipsPerPixelY

SWidthTwipPant4 = ScreenWidthTwip
SHeightTwipPant4 = ScreenHeightTwip
SWidthPixelPant4 = ScreenWidthPixel
SHeightPixelPant4 = ScreenHeightPixel

Rem Inicializando Los Valores 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


245
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 = 1
Pantalla4.Enabled = -1 'Verdadero
Pantalla4.Fil1Color = &HO
Pantalla4.Fil1Style = 7 'Diagonal Cruzado
Pantalla4.FontBold = -1 'Verdadero
Pantalla4.Fontltalic = O '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
246
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 'Falso
NombrePantalla4.ForeColor = &HO
NombrePantalla4.HelpContextID = O
Rem NombrePantalla4.HideSelection - Inicializado Manualmente
Rem NombrePantalla4.Index - Agregar si se requiere
NombrePantalla4.Linkitem = ""
NombrePantalla4.LinkMode = O 'Ninguno
NombrePantalla4.LinkTimeout = 50
NombrePantalla4.LinkTopic = ""
NombrePantalla4.MaxLength = O
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


247
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
248
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
SecMov.TabStop = -1 'Verdadero
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
250

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 NumValveCascadalnPnts = 1

Rem Variables a Nivel Forma


Dim CurrentCil, StartPX, StartPY As Integer
Dim PntXY, PntYY As Integer
Dim NumValve As Integer
Dim ValveCillnPnts() As Integer
Dim ValveCascadalnPnts() As Integer

Dim InPlX, InPl Y, InP2X, InP2Y, InP3X, InP3Y As Integer


Dim OutPlX, OutPl Y, OutP2X, OutP2Y, OutP3X, OutP3Y As Integer

Dim ValveType, 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 DrawAirPressure (PressurePntX, PressurePntY)

Const Displace 1 = 4
Const Displace2 = 2

DiagNeumatica.Line (PressurePntX, PressurePntY)-(PressurePntX, PressurePntY + Displace 1)


DiagNeumatica.FillStyle = 1
251

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 PntYs = 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 Displace 11 = 567 + 50
Dim Displacel2 As Integer
Const Length3 = 110

Rem Posicion de Elemento Y


Const Displace 1O= 20

Dim I As Integer

1=0

Do
Rem - Definir Tipo de Valvula y Dibujar
DiagNeumatica.ForeColor = &HFFOOOO
l=l+l
ValveType = 2
Displacel2 = (CirNumGrupos - 2)
If I = CirNumGrupos - 1 Then
StartPX = StartPX - Displace!
V alveType = 1
Displace12 = (CirNumGrupos - 2) +Displace}
252

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 Valvula y Conectar a Lineas de Grupos
DiagNeumatica.ForeColor = &HFFOOOO
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 1O
PntYY = StartPY + Width2 / 2 - Displace 1O
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)
ValveCascadalnPnts( 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
253

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 Valvula 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
254
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"
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"
256

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


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
257
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 = 1O* .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)
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 VALVULA 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)
260
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)
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 ValveType = 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, GndPntY)
PressurePntX = (StartPX + Length2 / 2 + (Length2 / 2) )
PressurePntY = StartPY + Width2
Call DrawAirPressure(PressurePntX, PressurePntY)
Elself ValveType = 2 Then
GndPntX = StartPX + (Length2)
GndPntY = StartPY + Width2
Call DrawGround(GndPntX, GndPntY)
Endlf
261

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
262

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 ValveCascadalnPnts(CirNumGrupos, NumValveCascadalnPnts)

Rem Dibujar Cilindros y Valvulas Correspondientes


StartPX = 50
StartPY = 20
For I = OTo 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 DrawCascadaValves(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
263
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 DisplaceLY = 15 ' Desplazamiento Y para dibujar letras
Const DisplaceLX = 5 ' Desplazamiento X para dibujar letras

For I = OTo 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 = OThen FaseAnterior = CirNumfases
FaseAnteriorFlag = O
Do Until K = CirNumFases
If FaseAnteriorFlag = OToen
Do Until FaseAnteriorFlag < O
For M = OTo CirNumCil - 1
FaseAnteriorFlag = FaseAnteriorFlag + CilFase(M, FaseAnterior)
264
NextM
If FaseAnteriorFlag > OThen
If FaseAnterior = OThen FaseAnterior = CirNumfases
Endlf
Loop
Endlf
If CilFase(K, FaseAnterior) = OThen
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 = OThen
SensorType = 1
265
StartPX = ValveCillnPnts(I, O) - (Length3 / 2) / 3
Elself PVastago = 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 - DisplaceLY
DiagNeumatica.Print NombreSensor; PVastago
Case 2 'El Sensor se dibuja lado derecho de valvula correspondiente
StartPY = DisplaceSensorCilDerecho
DiagNeumatica.ForeColor = &HO&
If PVastago = OToen
SensorType = 1
StartPX = ValveCillnPnts(I, 2) - (Length3 / 2) / 3
Elself PVastago = 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 - DisplaceLY
DiagNeumatica.Print NombreSensor; PVastago
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 = OThen 'Dibujando sensor e 1 y marcha en valvula cascadas
Rem Dibujando sensor el
If PVastago = OThen
SensorType = 1
StartPX = ValveCascadalnPnts(CurrentGrupo, O) - (Length3 / 2) / 3
Elself PVastago = 1 Then
SensorType = 2
StartPX = ValveCascadalnPnts(CurrentGrupo, O) - (Length3 / 2 +
(Length3 / 2) / 3 / 2)
266
Endlf
Call DrawElemSensors(StartPX, StartPY, SensorType)
DiagNeumatica.ForeColor = &HFF&
DiagNeumatica.FontName = "Times New Roman"
DiagNeumatica.FontSize = 6
DiagNeumatica.CurrentX = ValveCascadalnPnts(CurrentGrupo, O) +
DisplaceLX
DiagNeumatica.CurrentY = StartPY - DisplaceLY
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 = ValveCascadalnPnts(CurrentGrupo, O)
PressurePntY = StartPY + Width3
Call DrawAirPressure(PressurePntX, PressurePntY)
DiagNeumatica.ForeColor = &HFF&
DiagNeumatica.FontName = "Times New Roman"
DiagNeumatica.FontSize = 6
DiagNeumatica.CurrentX = ValveCascadalnPnts(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 = OThen
SensorType = 1
StartPX = ValveCascadalnPnts(CurrentGrupo, O) - (Length3 / 2) / 3
Elself PVastago = 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 DrawAirPressure(PressurePntX, PressurePntY)
DiagNeumatica.ForeColor = &HFF&
DiagNeumatica.FontName = "Times New Roman"
DiagNeumatica.FontSize = 6
DiagNeumatica.CurrentX = ValveCascadalnPnts(CurrentGrupo, O)+
DisplaceLX
DiagNeumatica.CurrentY = StartPY - DisplaceLY
DiagNeumatica.Print NombreSensor; PV astago
Endlf
Endlf
Loop
267
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


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.
268

Sub Fonn_Load O

ScreenWidthTwip = Screen.Width
ScreenHeightTwip = Screen.Height
ScreenWidthPixel = Screen.TwipsPerPixelX
ScreenHeightPixel = Screen.TwipsPerPixel Y

SWidthTwipPant5 = ScreenWidthTwip
SHeightTwipPant5 = ScreenHeightTwip
SWidthPixelPant5 = ScreenWidthPixel
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
269

Pantalla5 .Left = O
Pantalla5.Top = O
Pantalla5.Width = SWidthTwipPant5
Pantalla5.AutoRedraw = -1 'Verdadero
Pantalla5.BackColor = &HFF8080
Rem Pantalla5.BorderStyle - Inicializado Manualmente
Pantalla5.Caption = Pantalla5
11 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 = Pantalla5
11 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
1111
Pantalla5.Tag =
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
270
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 Manualmente
Rem DiagNeumatica.ClipControls - Inicializado Manualmente
DiagNeumatica.DataField = ""
Rem DiagNeumatica.DataSource - Inicializado Manualmente
271
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
272
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


273
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 ()
274

Const GETSETPAPERORIENT = 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

También podría gustarte