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