Sie sind auf Seite 1von 296

TESIS

MAQUINA SEMIAUTOMATICA PARA DOSIFICADO Y EMPAQUE DE


LIQUIDOS EN BOLSA

PRESENTADO POR

JUAN CARLOS VIZCAINO APONTE

UNIVERSIDAD DE LA SALLE
ING. DISEO Y AUTOMATIZACION ELECTRONICA
BOGOTA, OCTUBRE 2007

MAQUINA SEMIAUTOMATICA PARA DOSIFICADO Y EMPAQUE DE


LIQUIDOS EN BOLSA

PRESENTADO POR

JUAN CARLOS VIZCAINO APONTE

UNIVERSIDAD DE LA SALLE
ING. DISEO Y AUTOMATIZACION ELECTRONICA
BOGOTA, OCTUBRE 2007

TABLA.DE.CONTENIDO
INTRODUCCION
1

PLANTEAMIENTO.DEL.PROBLEMA

1.1

ALCANCE.DEL.PROYECTO

1.2

FORMULACION.DEL.PROBLEMA

JUSTIFICACION.DEL.PROYECTO

OBJETIVOS

3.1

OBJETIVO.GENERAL

3.2

OBJETIVOS.ESPECIFICOS

PRESENTACION.PRELIMINAR.ESQUEMATICA.
DEL.SISTEMA

SISTEMAS.MECANICOS

SISTEMA.DE.ALIMENTACION.DE.MATERIAL

5.1

DESCRIPCION.DEL.PROCESO

5.2

TANQUE.DE.ALIMENTACION.PRINCIPAL

5.3

CALCULO.DE.LA.BOMBA.(MOTOBOMBA)

10

5.3.1

MATERIALES

10

5.3.2

PRESION

11

5.3.3

FLUJO

11

5.3.4

CAUDAL

12

5.3.5

POTENCIA.DEL.MOTOR

12

SISTEMA.DE.AIRE.A.PRESION

13

6.1

CALCULO.DEL.COMPRESOR

13

6.1.1

CONDUCCION.DE.AIRE

13

6.1.2

CAUDAL

13

6.1.3

PRESION

15

6.1.4

POTENCIA

16

ACTUADORES

17

7.1

ACTUADORES.ELECTRICOS

17

7.2

ACTUADORES.NEUMATICOS

17

7.3

VLVULA.3/2.PARA.LOS.ACTUADORES

17

VALVULAS.PARA.EL.PASO.DE.LQUIDO

19

8.1

ELECTROVALVULA.PARA.SALIDA.Y.ENTRADA.
DE.LQUIDO.AL.DOSIFICADO

19

8.2

CHEQUES

20

8.2.1

CHEQUE.VENTANA

20

8.2.2

CHEQUE.RESORTE

22

8.3

VALVULAS.DE.EMBOLO

23

8.3.1

VALVULAS.DE.EMBOLO.2.VIAS

23

8.3.1.1

ESQUEMA.DE.FUNCIONAMIENTO

23

8.3.2

VLVULA.DE.TRES.VIAS

24

8.3.3

MARIPOSA

25

8.3.4

ANALISIS.DINAMICO.VALVULA.DE.EMBOLO

26

8.4

CORTINA

27

8.4.1

ANALISIS.DINAMICO

28

8.5

TIPO.AGUJA

28

8.5.1

ANALISIS.DINAMICO

29

SISTEMA.DE.DOSIFICACION

30

9.1

JERINGA.INDUSTRIAL.(ESTRUCTURA.BASICA.
DE.DOSIFICADOR)

30

ENVASE.DE.DOSIFICACION

30

9.1.1

9.1.2

VSTAGO.DE.EMPUJE

31

9.1.3

DOSIFICACION.POR.SUCCION

32

9.2

MODELOS.DE.SALIDA.Y.ENTRADA.DE.LIQUIDO.
AL.DOSIFICADOR

32

9.2.1

CHEQUE./.CHEQUE

32

9.2.2

CHEQUE./.VALVULA

33

9.2.3

VALVULA.DE.TRES.VIAS

34

9.2.4

VALVULA./.VALVULA

34

9.2.5

VALVULA.MECANIZADA.3/2

35

10

UBICACIN.DOSIFICADOR

37

10.1

ESTRUCTURA.DE.SOPORTE.DEL.DOSIFICADOR

37

10.2

UBICACIN.HORIZONTAL

37

10.3

UBICACIN.VERTICAL

38

11

SISTEMA.DE.SELLADO

39

11.1

SELLADO.VERTICAL

39

11.2

SELLADO.HORIZONTAL

41

11.3

RESISTENCIAS.DE.SELLADO

42

SISTEMAS.DE.CONTROL

44

CIRCUITOS.CONTROL.Y.POTENCIA.PARA.CARGA.
DEL.TANQUE.SUPERIOR

44

12.1

CONTROL

45

12.2

POTENCIA

46

13

SENSOR.DE.NIVEL

47

13.1

FLOTADOR

47

13.2

SENSOR.OPTICO.INFRAROJO

47

13.2.1

ESQUEMA.REFERENTE

48

12

13.2.2

CIRCUITO.DE.CONTROL

49

13.3

FENOMENO.RESISTIVO

49

13.3.1

ESQUEMA.REFERENTE

49

13.3.2

CIRCUITO.DE.CONTROL.Y.ACONDICIONAMIENTO

50

13.4

MODELO.DE.SALIENTE

51

13.4.1

ESQUMA.REFERENTE

51

13.5

TIPO.REED.SWITCH

52

13.5.1

ESQUEMA.REFERENTE

52

13.5.2

CIRCUITO.DE.CONTROL

52

13.6

EFECTO.MAGNETICO

53

13.6.1

ESQUEMA.REFERENTE

54

13.6.2

ACONDICIONAMIENTO

54

13.6.3

CIRCUIO.DE.CONTROL

54

13.7

EFECTO.CAPACITIVO

55

13.7.1

ESQUEMA.REFERENTE

55

13.7.2

ACONDICIONAMIENTO

55

13.7.3

CIRCUITO.DE.CONTROL

56

13.8

SENSOR.DE.ULTRASONIDO

56

13.8.1

ESQUEMA.REFERENTE

56

13.8.2

ACONDICIONAMIENTO

57

13.8.3

CIRCUITO.DE.CONTROL

58

13.8.4

PROBLEMAS.CON.LOS.ULTRASONIDOS

58

13.9

SENSORES.COMERCIALES.DIGITALES

59

13.9.1

CONEXIONADO

60

13.9.2

IMPLEMENTACION.AL.CIRCUITO.DE.CONTROL

61

13.9.2.1 TIPO.PNP

61

13.9.2.2 TIPO.NPN

61

13.9.3

61

INDUCTIVOS.Y.CAPACITIVOS

13.9.3.1 ESQUEMA.INDUCTIVO

62

13.9.3.2 ESQUEMA.CAPACITIVO

63

13.9.4

63

AUTOREFLEX.Y.ULTRASONICO

13.9.4.1 SISTEMA.AUTOREFLEX

64

13.9.4.2 ESQUEMA.DE.INSTALACION

64

13.10

SENSOR.ANALOGO.DE.PESO.(CELDA.DE.CARGA)

65

13.10.1

ACONDICIONAMIENTO

66

13.10.1.1 AMPLIFICADOR.DE.INSTRUMENTACION

66

13.10.2

CIRCUITO.DE.CONTROL

67

14

CICLO.DE.MAQUINA

69

14.1

CONTROL.DEL.PROCESO.DE.ABASTECIMIENTO.
DE.PRODUCTO.HACIA.EL.DOSIFICADO

69

14.1.1

ESQUEMA.REFERENTE

70

14.2

SENSOR.DE.PAPEL

70

14.2.1

ACONDICIONAMIENTO

70

14.2.2

CIRCUITO.DE.CONTROL.E.INTERFASE.PARA.SENSOR.
DE.PAPEL.Y.DE.LIQUIDO.(PARO.DEL.PROCESO)

71

FUENTE.DE.ALIMENTACION.PARA.CIRCUITO.DE.
CONTROL

71

15

ACONDICIONAMIENTO.PARA.ACTUADORES

73

15.1

INVERSOR.DE.GIRO.MOTOR.DC

73

15.2

ELECTROVALVULA.PARA.CONTROL

73

15.2.1

ACCIONAMIENTO.DE.LA.ELECTROVLVULA.D.C.y.A.C

74

15.2.2

ACCIONAMIENTO.DE.LA.ELECTROVLVULA.POR.PC

75

14.2.3

15.3

ACCIONAMIENTO.PARA.VALVULAS.DE.EMBOLO

76

15.3.1

ACCIONAMIENTO.MECANICO

76

15.3.2

ACCIONAMIENTO.CON.ACTUADOR.NEUMTICO.
ROTATIVO

76

15.3.3

ACCIONAMIENTO.LINEAL.NEUMATICO

77

15.3.4

ACTUADOR.LINEAL.ELECTRICO.PION-CREMALLERA

78

15.3.5

ACTUADOR.ROTATIVO.ELECTRICO

78

15.3.5.1 CONTROL.POR.TIEMPO

78

15.3.5.2 CONTROL.POR.FIN.DE.CARRERA

79

15.3.5.3 MOTOR.PASO.A.PASO

80

15.4

ACCIONAMIENTOS.PARA.VALVULA.CORTINA

81

15.5

ACCIONAMIENTO.PARA.VALVULA.AGUJA

83

16

CONTROL.DE.DOSIFICACION

84

16.1

DOSIFICACION.POR.VALVULA.DE.EMBOLO.Y/O.
GUAYA.DE.TRANSMISION

85

16.2

DOSIFICACION.POR.TIEMPO

86

16.2.1

SISTEMA.DE.DOSIFICACION.POR.TIEMPOS.DISCRETOS

86

16.2.2

SISTEMA.DE.DOSIFICACION.POR.TIEMPO.Y.PESO

86

16.3

SISTEMA.DOSIFICADO.POR.SUCCION

88

16.4

CONTROL.DE.DOSIFICACION.POR.FINAL.DE.CARRERA

88

16.4.1

PISTON.DOBLE.EFECTO

90

16.4.2

PISTON.DE.DOBLE.EFECTO.Y.DOBLE.VSTAGO

91

16.4.3

CONTROL.Y.MANDO.DEL.PISTON

91

16.4.4

VELOCIDAD.SISTEMA.DOSIFICADOR.POR.SUCCION

92

16.4.5

CIRCUITO.DE.CONTROL.PARA.EL.DOSIFICADOR.
COMO.PRODUCTO.INDEPENDIENTE

92

16.5

DOSIFICADO.POR.SOPORTE.Y.TORNILLOS.SIN.FIN

93

16.5.1

CONTROL.Y.MANDO

93

16.6

SISTEMA.DE.CONTROL.INDEPENDIENTE.PARA.
EL.DOSIFICADOR.COMO.PRODUCTO.UNICO

94

16.6.1

SALIDA.DEL.DOSIFICADOR

95

16.6.2

SOLUCION.CON.PIC

96

16.6.2.1 DIAGRAMA.DE.FLUJO.PARA.EL.PROGRAMA.EN.EL.PIC

96

16.6.3

97

DISEO.DE.LA.ELECTRONICA.DE.INTERFASE.AL.PIC

16.6.3.1 DISEO.DE.LA.FUENTE

97

16.6.3.2 INVERSORES.DE.GIRO

97

16.6.3.3 ACTIVACION.DE.ELECTROVALVULAS

98

16.6.4

CIRCUITO.FINAL

98

16.6.5

MODELO.FISICO.DE.INTERFASE.CON.EL.USUARIO

99

17

SISTEMA.DE.CONTROL.PARA.EL.SELLADO

102

17.1

RESISTENCIA.DE.CALENTAMIENTO.RAPIDO

103

17.2

RESISTENCIA.DE.CALENTAMIENTO.LENTO

104

17.3

ACONDICIONAMIENTO.DE.TEMPERATURA

104

17.4

SENSOR.DE.BOLSA.PARA.SELLE.AUTOMATICO

105

17.5.

CONTROL.DE.TEMPERATURA.PARA.LAS.SELLADORAS

106

17.5.1

CIRCUITO.ELECTRONICO.DE.CONTROL

110

17.5.2

IMPLEMENTACION.RESULTANTE.PARA.EL.SISTEMA

112

17.5.3

INTERFASE.AL.USUARIO

113

17.5.4

LOGICA.DEL.PROGRAMA.DEL.PIC

113

18

CONTROL.E.INTEGRACION.DE.PROCESOS

114

18.1

DESCRIPCIN.DEL.PC.UTILIZADO

114

18.2

INTERFASE.PARA.SALIDAS.PC

115

18.2.1

ACONDICIONAMIENTO.PARA.NIVELES.DC

116

18.2.2

ACONDICIONAMIENTO.PARA.SEALES.A.C

116

18.2.3

CONTROL.ELECTROVALVULA.DE.LQUIDO

116

18.3

DIAGRAMA.DE.FLUJO.DE.LA.LOGICA.SEL.SISTEMA

117

18.4

PROGRAMAS

119

18.4.1

PROGRAMA.DE.VERIFICACION.DE.ACCIONAMIENTOS.
DEL.SISTEMA

119

18.4.2

PROGRAMA.PARA.CONFIGURACION.DE.LA.MAQUINA

120

18.4.3

PROGRAMA.PRINCIPAL

123

19

SISTEMA.DE.INFORMACION

130

20

PRESUPUESTOS

132

21

ANEXOS

134

21.1

PROBLEMAS.CON.EL.LQUIDO.A.EMPACAR

134

21.2

ERGONOMIA.DEL.AMBIENTE.DE.TRABAJO.ASOCIADO

135

21.3

RECOMENDACIONES PARA EL MANEJO DE BOMBAS

142

21.4

RECOMENDACIONES PARA EL MANEJO DE AIRE A


PRESION Y LA CORRECTA FORMA DE INSTALAR UNA
RED DE AIRE

142

ASPECTOS BASICO DE INSATLACION PARA LA RED


DE AIRE

144

21.5

TRANSMISIONES

145

21.6

RACORES

146

21.7

CODIGO DE PROGRAMA PIC CONTROL DE


DOSIFICADOR

147

CODIGO DE PROGRAMA PIC CONTROL DE


TEMPERATURA

159

CODIGO.FUENTE.DEL.SOFTWARE.CONTROL.DE.LA.
MAQUINA

166

21.4.1

21.8

21.9

21.9.1

21.9.2

21.9.3

21.10

21.10.1

PROGRAMA.PARA.PROBAR.LOS.DIFERENTES.
ACCIONISMOS.DEL.SISTEMA

166

PROGRAMA.PARA.MANEJO.DE.TIEMPOS.
CONFIGURACION.DE.LA.MAQUINA

167

PROGRAMA.PRINCIPAL.CON.ARREGLOS.PARA.UNA.
SIMULACION

172

MANUAL DE TRABAJO PARA SOFWARE DE


INVENTARIOS DE FACTURACION

176

PROGRAMA.ACTUALIZACIONES,.NUEVOS.PRODUCTOS,.
ELIMINACION.DE.PRODUCTOS
176

21.10.1.1

INGRESAR.NUEVOS.PRODUCTOS

177

21.10.1.2

ACTUALIZAR.PRODUCTO

180

21.10.1.3

ELIMINAR.PRODUCTO

181

21.10.1.4

OPCIONES.AVANZADAS

181

21.10.1.4.1 CAMBIO.DE.CLAVES

181

21.10.1.4.2 RECUPERACION.POR.FALLOS

182

21.10.1.4.3 GUARDAR.LA.INFORMACION

183

21.10.2

CAMBIO.DE.FECHA

184

21.10.3

FACTURACION/CONSULTAS

184

21.10.3.1

CONSULTAS

184

21.10.3.2

FACTURACION

186

21.10.4

INGRESAR.DATOS.A.INVENTARIOS

191

21.10.5

INVENTARIO

194

21.10.6

RECUPERACION.DE.INVENTARIOS

199

21.10.7

LISTADO.GENERAL

201

21.10.8

CODIGO.FUENTE.DEL.SOFTWARE

201

22

LABORATORIO.DE.DISEO

256

23

CONCLUSIONES

266

24

BIBLIOGRAFIA

269

TABLA DE FIGURAS

FIG 1

ESQUEMA GENERAL DE LA MAQUINA

FIG 2

SISTEMA DE ALIMENTACION MATERIAL

FIG 3

ESQUEMA GENERAL DEL SISTEMA

FIG 4

TANQUE DE ALIMENTACION PRINCIPAL Y


SECUNDARIO

10

FIG 5

MEDIDAS DEL CILINDRO NEUOMATICO

13

FIG 6.1

SIMBOLO VALVULA 3/2

17

FIG 6.2

VALVULA 3/2 PISTON SIMPLE EFECTO

18

FIG 6.3

VALVULA 3/2 PISTON DOBLE EFECTO

18

FIG 7

CHEQUE VENTANA

20

FIG 8

FUNCIONAMIENTO CHECHE VENTANA

21

FIG 10

CHEQUE RESORTE

22

FIG 9

ANALISIS FUERZAS CHEQUE VENTANA

22

FIG 11

FUNCIONAMIETO VALVULA EMBOLO

23

FIG 12

VALVULA TRES VIAS

24

FIG 13

FUNCIONAMIENTO VALVULA TRE VIAS

25

FIG 14

RESPUESTA POSICION PROPORCIONAL AL


TORQUE

27

FIG 15

VALVULA CORTINA

27

FIG 16

VALVULA TIPO AGUJA

28

FIG 17

ANALISIS DINAMICO VALVULA AGUJA

29

FIG 18

ENVASE DE DOSIFICACION

30

FIG 19

ESTRUCTURA QUE EMPUJA EL LIQUIDO


ADAPTADA AL CILINDRO

30

O RINGS EMPAQUES ACOPLADOS PARA


EVITAR ESCAPE

30

FIG 21

JERIGA DOSIFICADORA

31

FIG 22

DOSIFICACION POR SUCCION

32

FIG 23

MODELO CHEQUE CHEQUE

32

FIG 24

MODELO CHEQUE VALVULA

33

FIG 25

MODELO VALVULA DE TRES VIAS

34

FIG 26

MODELO VALVULA VALVULA

34

FIG 27

VALVULA MECANIZADA 3/2

35

FIG 28

UBICACIN DOCIFICADOR Y TANQUE DE


ALMACENAMIENTO

37

FIG 29

UBICACIN HORIZONTAL

37

FIG 30

UNION DOCIFICADOR Y TANQUE

38

FIG 31

UNBICACION VERTICAL

38

FIG 32

SELLADO VERTICAL

39

FIG 33

DIFERENTES VISTA EN SOLID EDGE

40

FIG 34

SELLADO HORIZONTAL

41

FIG 35

ADPATACION DE PISTON

42

FIG 36

ESQUEMA DE SENSORES EN SISTEMA DE


ALIMENTACION

44

CIRCUITO DE CONTROL SISTEMA DE


ALIMENTACION

45

CIRCUITO DE POTENCIA SISTEMA DE


ALIMENTACION

46

FIG 39

ESQUEMA REFERENTE SENSOR INFRAROJO

48

FIG 40

CIRCUITO DE CONTRO SENSOR INFRAROJO

48

FIG 20

FIG 37

FIG 38

FIG 41

ESQUEMA REFERENTE SENSOR RESISTIVO

49

FIG 42

CIRCUITO CONTROL SISTEMA RESISTIVO

50

FIG 43

PRINCIPIO DE PASSCAL

51

FIG 44

MODELO SALIENTE

51

FIG 44

TIPO REED SWITCH

52

FIG 45

CIRCUITO CONTROL TIPO REED SWITCH

52

FIG 46

EFECTO MAGNETICO

54

FIG 47

ACONDICIONAMIENTO MAGNETICO

54

FIG 48

CIRCUITO DE CONTROL EFECTO MAGNETICO

54

FIG 49

EFECTO CAPACITIVO

55

FIG 50

ACONDICIONAMIENTO EFECTO CAPACITIVO

55

FIG 51

CIRCUITO DE CONTROL EFECTO CAPACITIVO

56

FIG 52

SENSOR ULTRASONIDO

56

FIG 53

FORMA DE ONDA ULTRASONICA

57

FIG 54

ACONDICIONAMIENTO SENSOR ULTRASONIDO

58

FIG 55

FIGURA DE CONTROL SENSOR ULTRASONIDO

58

FIG 56

PROBLEMAS DE ULTRASONIDOS

59

FIG 57

SIMBOLO SEGN DIN 4007

60

FIG 58

CONEXIONADO PNP Y NPN

61

FIG 59

TIPO PNP

61

FIG 60

TIPO NPN

62

FIG 61

UBICACIN SENSOR INDUCTIVO

62

FIG 63

UBICACIN SENSOR CAPACITIVO

63

FIG 64

MODELO AUTOREFLEX

64

FIG 65

ESQUEMA DE INSTALACION AUTOREFLEX

64

FIG 66

CELDA DE CARGA

65

FIG 67

UBICACIN DE CELDA

65

FIG 68

AMPLIFICADOR.DE.INSTRUMENTACION

66

FIG 69

CIRCUITO DE CONTROL APLICANDO A.I

68

FIG 70

UBICACIN SENSORES PARA EL DOSIFICADO

70

FIG 71

ACONDICIONAMIENTO SENSOR DE PAPEL

70

FIG 72

CONTROL E INTERFASE SENSOR PAPEL Y


LIQUIDO

71

FIG 73

FUENTE ALIMENTACION

72

FIG 74

FUENTE ALIMENTACION ALTAS CORRIENTES

72

FIG 55

INVERSOR DE GIRO DE MOTOR

73

FIG 56

ACCIONAMIENTO ACONDICIONADO

75

FIG 57

ACCIONAMIENTO POR PC

75

FIG 58

ACTUADOR EUMATICO ROTATIVO ACOPLADO

76

FIG 59

ACCIONAMIENTO.LINEAL.NEUMATICO

77

FIG 60

ACCIONAMIENTO.LINEAL.CON GUAYA

77

FIG 61

CONTROL POR TIEMPO

79

FIG 62

CONTROL POR FINAL DE CARRERA

79

FIG 63

MOTOR.PASO.A.PASO

80

FIG 64

MOTOR.PASO.A.PASO ACONDICIONADO

80

FIG 65

ACCIONAMIENTOS.PARA.VALVULA.CORTINA

82

FIG 66

ACCIONAMIENTO.PARA.VALVULA.AGUJA

83

FIG 67

DOSIFICACION.POR.VALVULA.DE.EMBOLO.Y/O.
GUAYA.DE.TRANSMISION

85

FIG 68

DOSIFICACION.POR.TIEMPO

86

FIG 69

VARIAS DOSIS POR DOSIFICACION

86

FIG 70

SISTEMA.DOSIFICADO.POR.SUCCION

88

FIG 71

CONTROL.DE.DOSIFICACION.POR.FINAL.DE.
CARRERA

88

FIG 72

PISTON.DOBLE.EFECTO

90

FIG 73

PISTON.DE.DOBLE.EFECTO.Y.DOBLE.VSTAGO

91

FIG 74

CONTROL.Y.MANDO.DEL.PISTON

91

FIG 75

CIRCUITO.DE.CONTROL.PARA.EL.DOSIFICADOR.
COMO.PRODUCTO.INDEPENDIENTE

92

DOSIFICADO.POR.SOPORTE.Y.TORNILLOS.
SIN.FIN

93

FIG 77

CONTROL.Y.MANDO DOSIFICADOR

93

FIG 78

SALIDA DEL DOSIFICADOR

95

FIG 79

SOLUCION.CON.PIC DOSIFICADOR

96

FIG 80

DISEO.DE.LA.FUENTE

97

FIG 81

INVERSORES.DE.GIRO

97

FIG 83

ACTIVACION.DE.ELECTROVALVULAS

98

FIG 84

CIRCUITO FINAL CONTROL DE DOSIFICADOR

98

FIG 85

MODELO.FISICO.DE.INTERFASE.CON.EL.
USUARIO

99

FIG 86

SISTEMA.DE.CONTROL.PARA.EL.SELLADO

102

FIG 87

CONTROL RESISTENCIA DE CALENTAMIENTO


RAPIDO

103

FIG 88

UBICACIN MICROSWITCH

103

FIG 89

PUNTO DE CORTE EN BOLSA

105

FIG 90

ACONDICIONAMIENTO SENSOR BOLSA

105

FIG 91

CONTROL.DE.TEMPERATURA.PARA.LAS.
SELLADORAS

106

OSILACION ON/OFF ALREDEDOR DE


PUNTO DE EQUILIBRIO

107

FIG 76

FIG 92

FIG 93

CONTROL ON/OFF

108

FIG 94

ERROR EXECIVO

109

FIG 95

FUNCION PWM

110

FIG 96

CIRCUITO.ELECTRONICO.DE.CONTROL

110

FIG 97

CIRCUITO.ELECTRONICO.DE.CONTROL Y
CORTADO POR PC

111

FIG 98

VISUALIZACION DE CODIFICADOR

111

FIG 100

CIRCUITO ELECTRONICO DE CONTROL DE


TEMPERATURA

112

FIG 99

MODELO CON VISUALIZACION DINAMICA

112

FIG 101

INTERFASE AL USUARIO

113

FIG 102

ACONDICIONAMIENTO DB25 DEL PC

116

FIG 103

ACONDICIONAMIENTO PARA NIVELES DC

116

FIG 104

ACONDICIONAMIENTO PARA NIVELES AC

116

FIG 105

CONTROL DE ELECTRO VALVULA LIQUIDO

117

INTRODUCCION

La creciente tasa de desarrollo cientfico y tecnolgico alcanzada por las


sociedades del tercer milenio, ha permitido un notable aumento del nivel de
vida de los habitantes satisfaciendo las necesidades mas bsicas, pero a la vez
aumentando la brecha econmica y social entre estas y las sociedades mas
pobres del planeta, muchas de las cuales no han logrado aun salir del mismo
estado de atraso en el que se encontraban ya hace siglos.

El estudio, desarrollo y aplicacin de las tcnicas de mando y control a los mas


variados tipos de maquinas y procesos es factor fundamental para el
crecimiento tecnolgico como fuente de conocimiento, para la generacin de
riqueza al mejorar la calidad de bienes y servicios con incrementos de la
produccin y la reduccin de costos, as como, para la comodidad y bienestar
del ser humano al liberarlo de tareas peligrosas, montonas y repetitivas.

La creciente complejidad lleva a que surja una disciplina aun ms dinmica,


que integra diversos campos de la ingeniera como son la mecnica, la
electrnica, el control, la automatizacin, la robtica y los sistemas de
informacin lo que incluye software de programacin y aplicacin.

El presente proyecto aplica en forma practica los conocimientos adquiridos


presentando fundamentalmente un ejemplo de los aspectos conceptuales
tcnicos y de ingeniera que ofrece el campo de la dosificacin de productos y
que pueden ser fcilmente adaptados a las necesidades del pas con el fin de
mejorar la eficiencia y calidad de los procesos productivos, especialmente en la
pequea y mediana industria que cuenta con menores recursos tcnicos,
humanos y de capital.

Igualmente, la ejecucin del proyecto representa para m la ocasin de


materializar mis conocimientos con el nimo de contribuir directa o
indirectamente, con un aporte para el progreso acadmico, tecnolgico, social y
econmico de la comunidad.

Este trabajo presenta de manera discretizada cada uno de los pasos y


opciones que se tomaron en cuenta para el correcto diseo del proyecto.
Especificando con claridad en cada uno de los aspectos, sus posibilidades de
cambio y posterior funcionamiento de las diferentes partes en funcin de los
requerimientos de un cliente final. Adems se hacen los anexos pertinentes con
informacin investigativa de los temas, de modo que la persona que lea este
documento tendr mas herramientas con las cuales justificar los resultados y
conclusiones.

Cabe anotar que el proyecto pretende sustentar toda la investigacin e


implementacin de los temas propuestos como finalidad. Se tiene como
propsito dar a conocer los desarrollos que se han tenido en cuenta durante el
diseo de la maquina y los respectivos sistemas de control, as como el
software aplicado que se ha generado con la realizacin del mismo.

Tambin se plantean algunas soluciones a los distintos problemas que


surgieron durante este perodo de investigacin. As mismo estoy exponiendo
tericamente el proceso de desarrollo lo que incluye paso a paso todo el
perfeccionamiento de una mquina empacadora y selladora y todo el conjunto
que la compone dada

una determinada necesidad. Es decir que no

necesariamente todos los subsistemas deban implementarse y que muchos de


ellos son simplemente sugerencias documentadas y explicativas que proveen
un mayor grado de entendimiento del porque. Sistemas que en ocasiones
resultara ms conveniente en trminos de eficiencia del sistema total en toda
su complejidad.

1. PLANTEAMIENTO DEL PROBLEMA

Se tiene un material lquido en un tanque que esta ubicado en la parte superior


de una estructura de soporte. Este tanque puede ser llenado manualmente o
en su defecto se disea el sistema de bombeo para la carga del mismo. Luego
de que ya tenemos el lquido en la parte superior optamos por implementar la
dosificacin. Inicialmente se piensa que la gravedad es suficiente para que con
el simple hecho de abrir una vlvula el lquido fuese entregado a la seccin de
empaque y de manera eficiente la dosificacin sera controlada por el tiempo
de apertura de la vlvula dosificadora, tomando claro est, factores implcitos
como el nivel de liquido, la presin, velocidad de salida para el liquido logrando
dosis de gran exactitud. Este sistema resultara eficiente con lquidos de baja
viscosidad con el fin de lograr un dosificado rpido.

Es evidente que en el proceso de dosificacin, adems de los factores


implcitos ya nombrados, exigir el conocimiento de la viscosidad del material a
procesar que es altamente relevante; ya que en productos de alta viscosidad
como el arequipe o el bocadillo en su estado de no compactacin (en altas
temperaturas esta en estado liquido), la gravedad no es suficiente para realizar
un trabajo de manera eficiente y se hace necesario cambiar el sistema de
dosificado.

Se plantea as el problema el cual indiferentemente del tipo de lquido que se


tenga en el tanque y sus condiciones de estado, proporciona una dosificacin
de exactitud y sin alterar los factores de control en el dispositivo encargado.
Consiste en implementar una dosificacin por succin. En este tipo de
dosificacin se pretende hacer una jeringa industrial (acero inoxidable) de
modo que se succiona el producto lquido para luego ser expulsado de manera
dosificada y con una velocidad controlada.

Luego de esta etapa del dosificado, el material se direcciona por medio de una
tubera adaptada en la parte de salida de la dosificacin hacia la zona de
empaque. En esta dicha tubera previamente el usuario ha metido un tubo de

papel de empaque. Esta parte del proceso debe hacerse manualmente ya que
ese punto de investigacin no se ha plasmado en los objetivos de este
proyecto; aunque se procurara que un sistema existente para realizar el
empaque automticamente pueda ser fcilmente adaptable aislando este punto
de la maquina como elemento adicional. Adems esta tubera debe ser
fcilmente adaptable a tamaos distintos de empaque en cuanto a dimetro y
longitud. Dependiendo del tamao y la cantidad de estos se permitir el control
del numero de ciclos de empacado que puede realizarse sin detencin.
Podemos dividir en 2 partes lo ya expuesto: sistema de dosificado y proveer
papel al sistema (proceso manual). Por ultimo una parte 3 que se refiere al rea
de selle y corte. Esta parte de la maquina es un mecanismo similar al de una
guillotina tal que al bajar presiona el papel de empaque y con un elemento
adicionado que se calienta realizando el selle por efecto de temperatura e
inmediatamente despus el corte. Es importante tener en cuenta en este punto
que las diferentes densidades y propiedades del material del papel implican
diferentes temperaturas por lo que debe desarrollarse un sistema de control
para esta variable, que se pretende ms eficiente que los implementados en la
actualidad (de bajo costo y mayor eficiencia). Tambin se debe tener en cuenta
que el tipo de material exigir no solo temperaturas especficas sino que en
ocasiones el proceso requiere selle en caliente y posteriormente selle en fri,
este factor debe tenerse en cuenta en la etapa de control. El sistema de corte
es parte de la estructura de selle dado que la experiencia del experto
proporciona una sencilla, eficiente y econmica solucin que funciona
actualmente para este tipo de empaque.

Por ultimo el proyecto pretende el control de la maquina por medio de un


software lo mas sencillo y eficiente posible, que permita el control de la
maquina para efectos de hacer cambios en su comportamiento y los
parmetros que la empresa requiere para el correcto proceso. La computadora
utilizada debe ser de un perfil lo ms bajo posible de modo que la economa de
este elemento es un factor de mercadeo que genera una visin ms alta al
proyecto. El software debe guardar alguna informacin del proceso as como
ayudar en algunos procesos bsicos que pueden eventualmente utilizar el
usuario como procesos de venta, consulta y

manejo de inventarios y

produccin que se tiene en planta. Si exceder las necesidades de un cliente


promedio ni generar dificultades en el manejo del programa haciendo que el
sistema total sea moderno, actual y llamativo a un usuario final por la
flexibilidad y el tipo de tecnologa que puede implementar

El proyecto plantea que cada uno de los sistemas ya expuestos sea adaptable
a las necesidades de modo que sern en su defecto sistemas diferentes que
pueden integrarse al acomodo del cliente y los recursos econmicos asociados.

1.1 ALCANCE DEL PROYECTO

La finalidad de elaborar este proyecto es poder solucionar los problemas que


tienen las pequeas y medianas empresas de la industria alimenticia en cuanto
a dar un dosificado exacto en el empacado de lquidos en bolsa, ya que utilizan
sistemas no utomatizados que hacen que los dosificados sean inexactos y
dependan de la mano de obra utilizada. A su vez los tiempos de empaque
dependen exclusivamente del usuario y no da la oportunidad de planificar la
produccin con altos grados de certeza, ya que existen factores ergonomicos y
emocionales que impiden tal planificacin.

Por otro lado esta dedicado a empresas que no cuentan con el capital para
adquirir dosificadores de alta tecnologa que en el mercado se encuentran a
costos muy elevados
Por eso se trata de hacer un prototipo econmico pero que su funcionamiento
sea viable y nos de un grado aceptable de exactitud para la buena realizacin
de las labores de dosificacin de lquidos alimenticios.

Se tratara al mximo de solucionar cada uno de los problemas que se conocen


en el proceso de dosificacin de lquidos, sin embargo se deja claro que de no
ser posible llegar a la meta con la construccin fsica del proyecto en su
totalidad, lo hecho ser aporte suficiente para culminar el proyecto
inmediatamente los presupuestos sean suplementados.

1.2 FORMULACION DEL PROBLEMA

Como generar sistemas de dosificacin econmicos que permitan un desarrollo


de la industria del pas. A su vez generar bases de conocimiento que permitan
al empresario atacar puntos crticos de la produccin implementando algunas o
sino todas las soluciones planteadas en este documento.

2. JUSTIFICACION DEL PROYECTO

El propsito de realizar este proyecto es dar una solucin sencilla y econmica


a las pequeas y medianas empresas de la industria que laboran con lquidos
alimenticios. La industria H y C por su parte en compromiso verbal, pretende
comercializar el producto y/o los productos que la elaboracin de este proyecto
han generado.

El proyecto abarca lo temas suficientes, como para establecerlo como proyecto


de tesis aplicado en la industria del pas como solucin a aquellas empresas
que dosifican lquidos alimenticios creando un producto llamativo y tecnolgico
que se acomode mucho mejor al bolsillo y las necesidades; A la vez se sienta
un precedente, dada la elaboracin basada en una buena eficiencia y la
notable reduccin de costos que pretenden plasmarse, referentes a los que el
mercado genera actualmente en sistemas con las mismas caractersticas del
proyecto.

Se plasman conocimientos adquiridos que han sido puestos en practica en


cuanto a electro neumtica, electrnica general, electrnica de interfase y
acondicionamiento, mecanismos, la programacin de bajo y medio nivel para el
manejo de seales de control y una amplia investigacin sobre el tema de
dosificado que permiti establecer los puntos crticos de diseo a fin de lograr
los objetivos.

3. OBJETIVOS

3.1 OBJETIVO GENERAL

Disear y construir un sistema semiautomtico para el dosificado de


lquidos, a su vez el empaque en bolsa, selle y corte.

3.2 OBJETIVOS ESPECIFICOS

Disear el sistema de alimentacin de material

Disear el sistema de dosificacin de lquido.

Disear un sistema para el sellado y corte.

Disear un sistema de control para la temperatura del selle

Disear un sistema de software que permita manejar informacin para el


control de produccin e inventarios.

4. PRESENTACION PRELIMINAR ESQUEMATICA DEL SISTEMA

Fig 1.Esquema general de la maquina

Un tanque de alimentacin principal (1) y un tanque mayor (2) el cual carga el


tanque principal por medio de un sistema de bombeo (3).

Fig 2.Sistema de alimentacin de material


El tanque principal (1) alimenta por gravedad el sistema de dosificacin (4) el
cual por medio de un acople, a una jeringa industrial (5), un pistn neumtico
(6) se encarga de dosificacin proporcionando succin para luego generar

empuje. Al dosificar el liquido este se dirige por entre un tubo al punto de selle y
corte (7). El papel de empaque es de forma tubular y se encuentra alrededor
del tubo por el que viaja el lquido. De tal modo que el usuario debe cargar la
maquina con el papel de empaque. Este en la zona de sellado detecta la bolsa
y sincroniza para proporcionar el selle por temperatura y el seguido corte. El
control de sellado se hace por medio de un pistn neumtico (8) el cual
proporciona el cierre y apertura de las resistencias de sellado (9).

Fig 3.Esquema general del sistema

El sistema debe ser controlado por medio de un PC el cual debe proporcionar


ayuda en el proceso de cuadre de maquina, es decir que permite que la
maquina trabaje de forma distinta segn los requerimientos de cantidad de
dosificacin y tipo de material de empaque. Adicionalmente el PC posee un
pequeo sistema de informacin que le permite manejar su produccin y
ventas.

SISTEMA MECANICOS

5. SISTEMA DE ALIMENTACION DE MATERIAL

5.1 DESCRIPCION DEL PROCESO

Un tanque tan grande como se desee alimenta un tanque con dimensiones


ms pequeas. Este pequeo tanque (30, 40, 50 litros) alimenta por gravedad
el liquido (producto a empacar) al sistema de dosificacin. De tal modo que
nuestro gran tanque suministra por medio de una bomba (elctrica) el liquido al
tanque menor. Este sistema de los tanques y su correspondiente alimentacin
son un proceso que se plantea como opcional al cliente. Este decide si quiere o
no implementarlo. Si el comprador no desea utilizar bomba, puede hacer el
llenando talvez el tanque menor con escalera, el costo es menor y no interfiere
esto en la lgica del control del sistema principal dado que el circuito de control
de este subsistema se diseo con miras en que el control fuese al control
propio del sistema general de maquina.

5.2 TANQUE DE ALIMENTACION PRINCIPAL

El tanque de alimentacin principal hace referencia a todo el conjunto en el que


se deposita el lquido ya listo para el seguido empaque. Este sistema consiste
en una motobomba que debe cargar un tanque mas pequeo ubicado en la
parte superior de la maquina que proporciona la entrada del liquido al punto
dosificador por gravedad.

Fig 4. Tanque de alimentacin principal y secundario. Bomba de alimentacion


5.3 CALCULO DE LA BOMBA (MOTOBOMBA)

La bomba es la encargada de suministrar un impulso al lquido para ser


transportado automticamente hacia un nivel de potencial mas elevado. Es
decir subir nuestro lquido al tanque pequeo superior. En este proceso
investigativo para la correcta adquisicin de la bomba, es evidente que existe
gran variedad de modelos funcionales en cuanto al tema. Lo ms
recomendable ser obviamente acogerse a la oferta comercial existente.
En la seccin de anexos encontraremos una breve informacin acerca de los
tipos de bombas que existen y un referido a la eficiencia de estas.

La bomba o motobomba que utilizamos para este proyecto debe cumplir con
algunos requisitos especficos del sistema los cuales se nombran a
continuacin.

5.3.1

Las partes que entran en contacto con el lquido deben ser de

acero inoxidable ya que es el nico que cumple con las caractersticas


tcnicas de durabilidad, resistencia y sanidad. Ya que resulta un tanto
costoso su fabricacin por parte nuestra, el mandarla fabricar resulta ser
un tanto ms econmico y mas aun acceder a la oferta comercial.

5.3.2

La presin ofrecida por la bomba no ha de ser muy elevada, mas

sin embargo debe proporcionar la fuerza al fluido para empujarlo unos 2


metros arriba. Por lo tanto para el calculo de la potencia necesaria

debemos tener en cuenta la altura a la que se lleva el liquido y el


dimetro de la tubera con lo cual obtendremos la cantidad mxima de
liquido que en un momento dado puede estar alojado en la tubera. Con
ello podeos encontrar el peso (fuerza) que tendr el liquido y tambin la
presin que esta columna de liquido genera en contra presin a la
presin y fuerza que ejerce la bomba sobre el liquido.
P = F / A ; F = mg ; A = rea de tubera.
Un tubo de 1 = 2,5cm de dimetro y una altura de ms o menos 2
metros.
La fuerza es proporcional a la viscosidad del lquido. En laboratorio ms
o menos un litro de agua pesa 1kg.
Decimos A = pi * D / 4 = 4, 9 cm ; Volumen = 4,9 cm * 200 cm = 981
cm

El volumen es casi igual a 1 Lt es decir que su peso es mas o menos 1


Kg. para el caso de una densidad similar al agua.

F = m g = mas o menos 10 N

; A= 4,9 cm * 10 mm * 10 mm / cm =

490 mm

Por lo tanto Presin = 10 * 10 / 490 mm = 0.2 bar

As que 1 bar = 14.7 psi

la bomba es de 14,7 * 0.2 = 3 psi como

mnimo. Tomamos comercialmente 5 a 10 psi como la presin mxima


que debe soportar la bomba.

5.3.3

Referente al flujo de liquido podemos decir que necesitaremos

una bomba de flujo constante ya que se supone un proceso de


encendido y apagado. De igual modo el uso de una reguladora de
presin tampoco es necesario en vista que se utiliza un punto abierto a
la entrada del lquido (sin vlvula controladora de paso). Lo que
garantiza a la vez que no va ha existir la posibilidad de una ruptura en la
estructura y en el peor de los casos el liquido se va a derramar. Esto

implica que de la seal de los sensores depender el encendido y


apagado de la bomba.

5.3.4

En cuanto al caudal que depende directamente del dimetro de la

tubera y el flujo proporcionado en la bomba. Este caudal debe ser


suficiente para no detener en ningn momento el trabajo realizado con la
maquina as que queda este punto relevado al calculo en funcin del
tiempo. Q = V / t en el que teniendo el tiempo deseado para el llenado
del tanque superior y el volumen calculamos el factor Q caudal. En
nuestro sistema inicial trabajamos un tanque de 50 Lt

y requerimos

empacarlos en bolsas de 500 mLt as que son 100 bolsas. Con una
velocidad de llenado que depender del liquido a empacar y el sistema
de dosificado. Con 7 segundos por empaque obtenemos un total de
700s lo que significa que la bomba debe cargar el tanque de 50Lt en
menor tiempo para que el sistema trabaje sin necesidad de detenerse.
Optamos por la mitad del tiempo aproximada a 360s = 6 minutos. Para
decir as pues que Q = 50lt/6m lo que mas o menos aproxima a un
caudal de 9 litros por minuto.

5.3.5

La potencia del motor para la bomba.

P * Q /15 = 0.2 bar * 9Lt/m = KW. La potencia del motor es como


mnimo 120 W.
1/4H.P

Recuerde que un H.P = 745W. lo que aproxima a

6. SISTEMA DE AIRE A PRESION

6.1 CALCULO DEL COMPRESOR

El compresor es el encargado de suministrar el aire a presin necesario para


manejar nuestro circuito neumtico.
Existen gran variedad de modelos funcionales en cuanto al tema. Lo ms
recomendable ser obviamente acogerse a la oferta comercial existente.

El compresor que se utiliza para este proyecto debe cumplir con algunos
requisitos especficos del sistema los cuales se nombran a continuacin.

6.1.1

La transmisin de aire se hace por medio de manguera flexible y

se procura que las distancias entre el punto de distribucin de aire y el


elemento que la necesita sea lo mas corta posible.

6.1.2

Calculo del caudal. Para el clculo del consumo de aire se deben

sumar uno a uno el consumo de los elementos de trabajo que estarn


presentes. Dado que en este caso el sistema de control se hace
elctricamente los nicos elementos que consumen aire a presin sern
los cilindros utilizados que bsicamente sern 2. Las vlvulas de paso
(electrovalvulas) no son tomadas en cuenta ya que la prdida es mnima
y se tienen ms en cuenta en el referido a las cadas de presin.

Suponiendo que no posemos informacin de consumo estimada por el


fabricante podemos realizar el clculo de consumo neumtico (el caudal) de
la siguiente manera.

Fig 5 .Medidas del cilindro neumatico

Sea V = volumen. PI = 3.1416. L = longitud D = dimetro.


Q = V/t =L * D / 4 * PI * t donde t = tiempo. Es el tiempo deseado de
trabajo.

Sea =velocidadv A rea trasversal


* A = velocidad * D / 4 * PIQ = v donde la velocidad es la deseada de
trabajo.

Desde este punto de vista bastara con calcular los volmenes, reas,
velocidades de trabajo deseadas o en su defecto el tiempo de ciclo
requerido.
Por otro lado podemos tener 2 casos bsicamente. Uno en el que el
compresor se encuentra justo al lado de la maquina por lo que las
perdidas de caudal que se presenten en tuberas de distribucin no se
tiene en cuenta. Pero en el caso dos en el que la planta dispone
propiamente de una red de aire las distancias de tubera deben ser
tenidas en cuenta ya que por efectos de condensacin habr un flujo
que es desfogado del sistema y que en su defecto representara perdidas
las cuales deben ser aumentadas en los requerimientos de caudal que
se maneja. En siguiente seccin se explica un poco ms a fondo el caso
en que una red de aire proporciona el aire a presin en el punto deseado
y los factores que debemos tener en cuenta para la elaboracin de dicha
red.

Para un mismo caudal el rea del pistn es inversamente proporcional a


la velocidad lo que implica que en el deseo de un aumento de la
velocidad podramos proceder con disminuir el dimetro utilizado para el
pistn lo que generara un aumento en la velocidad de desplazamiento.

6.1.3

La presin de trabajo se maneja a nivel de estndares.

Generalmente se utilizan 6bar o 10bar. Para nuestro caso la presin


requerida no es muy alta y se puede trabajar sobre el estndar. Mas sin
embargo en la red de aire se incluye un regulador de presin el cual
puede graduarse manualmente a la presin que se desee de trabajo.
Dado que los niveles de trabajo son estandarizados los elementos de
paso como las vlvulas y los pistones deben incluir en la hoja tcnica los
niveles mximos de presin a los que pueden ser sometidos. El tipo de
lquido entre ms viscoso mas peso genera el mismo volumen por lo
tanto se requiere de una mayor fuerza. Dado que P= F / A es importante
tener en cuenta el rea de los pistones y la fuerza requerida de trabajo.
Asi que una cantidad de un litro de agua pesa algo asi como 1k, para
materiales mas densos supongamos 5kg asi que es una fuera de 50N.
Para un radio de 1 es decir un rea de (2.5) pi = 20cm = 0.002m As
que la presin para el pistn de dosificacin ser P = 50N / 0.002m =
25000 Pa = 25000/10000 bar = 0.4bar como presin mnima requerida.
Para el pistn de sellado la fuerza es algo mayor es decir unos 25kg. As
que la fuerza ser de unos 250N y tomando un rea de 1. P = 250N /
0.002m =125000Pa =125000 /100000 = 1.25bar como presin mnima
requerida. Para la presin que utiliza el sistema aparte del clculo para
requerimientos de presin en los distintos puntos de accionamiento
debemos tener en cuenta unas pequeas cadas de presin originadas
en el camino de distribucin as como en los elementos de conmutacin
para el paso del aire. Por lo tanto y teniendo en cuenta nuestro sistema
agregamos algo menos de 1bar como cadas mximas de presin y es
terico el uso de esta cantidad para cadas de presin en lneas
principales lo que incluye el FRL que se explica mas adelante. Para un
clculo exacto nos podemos remitir a las tablas que ofrecen los

fabricantes en donde encontramos detallado el factor cada de presin


que presentan los diferentes elementos.

6.1.4

Calculamos la potencia requerida del motor del compresor.

Para el piston del dosificador tenemos D = 8.5cm y L = 15.5cm es decir


un volumen de 880 cm y para el piston de sellado D =3.71cm y L =
12cm un volumen de 130cm. V1 + V2 = 1010cm. Tomamos un tiempo
rapido de 2s asi el caudal aproximado es 1Lt/2s y una presin de 6bar.
La potencia sera asi de P * Q /15 = 6 bar * 1 Lt/ 2s / 15 = 0.2KW = 200W
La potencia del motor es como mnimo 30 W. recuerde que un H.P
=745W lo que implica un motor de menos de 1/4 H.P.

7 ACTUADORES

7.1 ACTUADORES ELECTRICOS

Los actuadores elctricos son bsicamente los motores. Para el caso en


cuestin se ha tomado la decisin de utilizar motor D.C ya que estos en
relacin al motor de tipo A.C proporcionan un mayor torque con una mayor
robustez, es decir que se logra la misma potencia con un motor ms pequeo
fsicamente. Por otro lado el control de velocidad, sentido de giro y posicin
resultan ms sencillos.

7.2 ACTUADORES NEUMATICOS

Los actuadores neumaticos utilizados en el proyecto seran de doble y simple


efecto asi como de vastago unico y doble vastago. Para una clara comprensin
de el diseo de este tipo de actuadotes consulte el anexo seccion 16.

7.3 VLVULA 3/2 PARA LOS ACTUADORES

La aplicacin de vlvula 3/2 es bsicamente en los actuadores ya que al aplicar


fuerza con aire a presin el aire se inyecta dentro de los elementos de modo
que al conmutarlos o retornar al punto inicial es necesario permitir la salida de
aire de esta dichas cavidades. Al observar la vlvula 3/2 vemos como el aire en
una posicin puede fluir en una direccin y en la otra posicin puede fluir en la
direccin contraria de modo que unimos un punto con 2 posibilidades. En un
momento entrara aire al actuador y en otro momento el aire saldr desfogado al
ambiente.

Fig.6.1Simbolo vlvula 3/2

Fig 6.2.Valvula 3/2 piston simple efecto Fig 6.3.Valvula 3/2 piston doble efecto

Como parmetros tcnicos debemos conocer la potencia neumtica soportable


en la electrovlvula para lo que debemos conocer la presin y el caudal de
trabajo a la que va a someterse. Tenga en cuenta que la ficha tcnica nos da la
presin mxima que la vlvula soporta y en funcin a ello podemos hallar el
caudal mximo que tendremos por el elemento. El consumo de energa es
referido a la potencia neumtica, lo que nos da un equivalente en dinero del
recurso energtico que se consume. As que la eficiencia del elemento se
refiere precisamente a la cada de presin que el elemento proporciona al
circuito y la velocidad de flujo perdida por efectos de rozamiento en el
elemento.

8. VALVULAS PARA EL PASO DE LQUIDO.

Para la seleccin de las vlvulas se deben tener en cuenta 2 aspectos


importantes. Tipo de vlvulas existentes y la forma de conmutacin.

En cuanto al tipo de vlvulas

tenemos las electrovalvulas las cuales se

conmutan con seales elctricas, encontramos tambin las vlvulas de embolo


2 vas y 3 vas, las vlvulas de cortina, mariposa y aguja. Estos ltimos tipos de
vlvulas comercialmente presentan accionamientos de tipo manual, aunque
muchas de las empresas proveedoras de esto productos ofrecen sistemas para
la conmutacin adaptables al tipo de necesidad y condicin preestablecida por
el cliente. A fin de clarificar en este aspecto se hace referencia explicita de los
diferentes tipos de vlvula para el control de paso de liquido y as mismo los
distintos sistemas propuestos de conmutacin que son viables a implementar.

8.1. ELECTROVALVULA PARA SALIDA Y ENTRADA DE LQUIDO AL


DOSIFICADO.

El funcionamiento y accionamiento de la electrovlvula es presentado


posteriormente en el capitulo relacionado a los sistemas de control para
actuadores neumticos en los que por medio de la electrovlvula una seal
elctrica se traduce en una conmutacin de vlvula. Esta vlvula se consigue
en el mercado. Inicialmente se pens en trabajar directamente con electro
vlvulas elaboradas en acero inoxidable de modo que su implementacin
resultaba realmente sencilla. Producto del trabajo de campo realizado al cotizar
los materiales que se encuentran en el mercado de electro vlvulas en acero
inoxidable y los requerimientos de dimetro para el paso de liquido deseados,
se llego a la conclusin que los costos son muy elevados de modo que se
pretende implementar un sistema distinto que pueda suplir la necesidad que se
presenta. Mas sin embargo si se desea implementar las consideraciones
pertinentes serian las mismas que en otro tipo de electrovlvula es decir su
activacin ser por causa de una seal de voltaje que se debe aplicar a la
bobina del elemento y que permite la conmutacin.

Las cavidades para el paso de fluido que las electrovalvulas ofrecen son muy
pequeas y por lo general es complicado conseguir una vlvula elctrica que
presente el sistema de electrovlvula comn utilizado para el paso de aire a
presin en donde los efectos un electroimn posibilitan el taponamiento del
paso pero de un espacio muy reducido ya que de lo contrario la bobina de
electroimn requerir mucha mas fuerza lo que implica los costos se eleven
desfavoreciendo el sentido costo-beneficio. Es por esta misma razn, que
comercialmente cuando se requieren dimetros grandes para el paso de lquido
se remiten a un sistema de activacin acoplado a las vlvulas comerciales que
poseen un sistema manual de activacin. Siendo as, se debe comprar una
vlvula de accin manual en acero inoxidable he implementarle a ella un
sistema especial que permite el cierre y apertura de la misma, lo que resulta
mas econmico.

8.2 CHEQUES

8.2.1 CHEQUE VENTANA

El cheque tiene su equivalente elctrico que en el diodo. As que solo permite


flujo en una sola direccin as como un diodo solo permite el paso de corriente
en un solo sentido.

Fig 7.Cheque ventana


De la misma forma podemos hacer su anlisis partiendo de esta analoga. Las
referencias tcnicas de un cheque nos deben decir la presin que soporta al
dar paso. La presin mxima que soporta en sentido inverso de conduccin de
flujo y el dimetro de acople para adaptar algn punto especifico. De igual
forma ofrece cadas de presin y velocidad pero en general estas prdidas son
muy pequeas y en la mayora de ocasiones despreciable.

As que la ecuacin para el fluido que representa la presin mnima para


vencer la inercia del cheque ser Ff (fuera del fluido) > Tr (torque de la bisagra
rotora);
Ff = P * A as que P= presin A = area, la presin debe ser tal que vensa dicho
torque que es muy pequeo.

Fig 8.Funcionamiento cheque ventana

Note que en el punto de mximo taponamiento el torque producido por el flujo


tiene un mximo as que el punto critico es en los puntos intermedios de
recorrido para el elemento tapn. Es decir que en cierto caso el cheque podra
quedar en puntos intermedios es decir ni totalmente abierto ni totalmente
cerrado.

Dado que la fuerza sobre la superficie se distribuye unifrmenle encontramos el


punto de mayor torque en la parte mas alejada, dado matemticamente
generamos una sumatoria podemos encontrar el punto intermedio equivalente
dada la linealidad que representa la ecuacin T = d * F (d = distancia). As que
la distancia media puede multiplicarse por la fuerza total obteniendo el torque
producido.

Fig 9.Analisis fuerzas cheque ventana

8.2.2 CHEQUE RESORTE

Existe en el mercado otro tipo de cheque que es el modelo resortado. Este


modelo aunque muy eficiente posee el problema que por un lado es muy

complicado de conseguir en acero inoxidable y por otro lado las partes como
resorte y empaque entran en contacto con el liquido de modo que en el caso de
alimentos no resulta muy optimo. Mas sin embargo se expone el modelo a fin
de poder ser utilizado si el caso lo requiera.

Fig 10. Cheque resorte

En el sentido de no paso es claro que se produce un taponamiento, los resorte


se encuentran en su estado de reposo por lo que la fuerza kX = 0 ya que el
resorte se encuentra en su punto X=0. Los empaques mantienen la
hermeticidad impidiendo el paso de lquido. Para el ciclo en que si pasa el agua
debemos tener las consideraciones de mnima presin necesaria. Los resortes
poseen cada uno su constante de resorte k. as que la ecuacin P*A > 2kX
nos dice que la presin debe tener un umbral mnimo tal que vensa la
resistencia que oponen los resortes en el sentido de conduccin (2kX
suponemos que los resortes son totalmente iguales). Note que este modelo de
cheque nos provee de un flujo de lquido menor y el mantenimiento sanitario es
mucho mas complicado.
8.3 VALVULAS DE EMBOLO

8.3.1 VALVULAS DE EMBOLO 2 VIAS

Es una vlvula 2/2, dos vas, dos posiciones. La vlvula de embolo es de uso
comn en la vida cotidiana. Una esfera hueca se aloja en una cavidad esfrica
tambin hueca que posee un par de adaptaciones a lado y lado para ser puesta
como interruptor de paso y no paso de un fluido. Tambin las hay del tipo
cilindro con la misma funcionalidad uno dentro de otro.
La vlvula esfrica en su comportamiento puede verse como una cilndrica ya
que las ranuras son nicamente laterales y en la parte superior es totalmente
maciza.

8.3.1.1 ESQUEMA DE FUNCIONAMIENTO

Fig 11.Funcionamiento vlvula embolo

La vlvula comercial de estudio tiene una articulacin rotacional que por medio
de un acople tipo poligonal, permite que una fuerza externa aplicada en el
eslabn acoplado produzca un torque sobre el embolo que le permite girar para
producir la conmutacin. As que se comporta como una transmisin tipo
palanca. El giro que debe proporcionarse para la conmutacin es de 90,
girando nuevamente los mismos 90 en sentido inverso para la reconmutacin.
La vlvula presenta el inconveniente del desgaste de los empaques por lo que
los expertos recomiendan utilizar otro sistema ms eficiente. Con esta vlvula
tenemos pues el inconveniente del cambio de esta en periodos de 6 a 8 meses.
Otro inconveniente es el torque exigido por la vlvula para ser conmutada. La
fuerza que un actuador externo debe ejercer resulta ser muchas veces mas
elevada de lo que otro tipo de vlvula solicita.

Cabe resaltar que el torque mximo se realiza en los puntos de mxima


conmutacin, es decir totalmente abierta (para cerrarla) o totalmente cerrada
(para abrirla), es en donde se presentan los puntos de mximo esfuerzo para el
mecanismo.

8.3.2 VLVULA DE TRES VIAS

Es una vlvula 3/2 tres vas dos posiciones. La vlvula de tres vas es una
vlvula de embolo con el mismo mecanismo que la nombrada anteriormente,
solo que para este caso el la vlvula posee tres orificios por lo que la vlvula es
capaz de conectar una va con las otras dos pero no al mismo tiempo. El
usuario selecciona el orifico a conectar empleando el mismo mecanismo

aunque el embolo internamente posee una construccin diferente porque el


embolo posee tres orificios. Igualmente el giro de conmutacin es de 90

Fig 12.Vlvula tres vias (catalogo corbeta)

Es posible que al mover el embolo encontraremos una tercera posicin que es


cuando las vas quedan taponadas impidiendo el paso de fluido, esta es una
posicin intermedia que puede ser tambin utilizada si el caso lo requiera.

As que permitir direccionar un fluido en dos direcciones (1 entrada 2 salidas)


o permitir que dos fluidos puedan fluir hacia una direccin (2 entradas 1
salida) o el caso en que una va se utiliza de entrada y salida. Mientras que las
otras dos vas son una entrada y una salida. (1 entrada, 1 salida, 1
salida/entrada).

Fig 13.Funcionamiento vlvula 3 vias

8.3.3 MARIPOSA

Fig 14.Valvula mariposa(catalogo corbeta)

La vlvula de mariposa aunque no posee embolo como tal, presenta el mismo


sistema de accionamiento para la conmutacin que las vlvulas de embolo. As
que los circuitos de control son los mismos y son igualmente 90 de giro para
conmutar la vlvula de mariposa.Tenga en cuenta que en este caso el torque
de operacin es mucho mas bajo y es por esto que la vlvula es mas
recomendable. Aunque resulta algo complicado de conseguir en el mercado y
es mas costosa que la vlvula anterior. Los anlisis dinmicos presentan la
misma ecuacin aunque en este caso el factor de rozamiento que afectaba
notablemente el rozamiento no esta presente de manera tan significativa.

8.3.4 ANALISIS DINAMICO VALVULA DE EMBOLO

Decimos que el Torque es proporcional a la fuerza aplicada por la ecuacin


T=F*d*cos ((k * Inercia)

Tambin podemos afirmar que el torque aplicado debe ser mayor al torque
generado por la inercia del elemento en conjunto con la friccin que ofrecen los
materiales con que se realiza el empaque de la vlvula (elemento que no
permite escapes de fluido)

T(t) - Fr =k*I(t)  T(t)=[ k*I(t)+ Fr(t) ]


Donde k es bsicamente la constante de inercia que posee el movimiento y
donde Fr es la fuerza de rozamiento producida por la friccin que se opone al
torque ejercido y a la vez es funcin de la velocidad en el diagrama dinmico
que representa al sistema.

T(t) =kI(t)+bV(t). = k* dV(t)+b* V(t). b es la viscosidad quien en conjunto a la


velocidad producen la fuerza de oposicin.

La funcin de transferencia de la velocidad y el torque es del tipo


V(s)/T(s)=1/(kS+b) = (1/k)/S+b/k.

Por medio de la funcin de transferencia obtenida podemos analizar la parte


transitoria en la seal de salida que nuestro punto de inters ya que lo que
buscamos es encontrar la relacin entre la velocidad de apertura y el torque
ejercido por el elemento actuador de la vlvula. Suponiendo que el torque
aplicado es constante podemos tambin afirmar que la respuesta es del tipo:
V(t)=T * (1/k) * (1 -(kt/b))
La ecuacin nos muestra varias cosas:
La velocidad es directamente proporcional al torque aplicado.
Las constantes k y b son inversamente proporcionales a la velocidad de
modo que entre mas fuerte sean los empaques la velocidad ser mucho
menor e igualmente la inercia del elemento depender del material asi
que para el caso de este tipo de vlvulas los factores y especialmente el
de rozamiento es elevado y por lo tanto el elemento actuador consume
mas energa.

Fig 14.Respuesta posicin proporcional al torque

De tal modo que para una rpida estabilizacin en un punto dado debemos
proporcionar un alto torque logrando as que la grafica llegue a su punto de
equilibrio lo ms rpidamente posible. La aceleracin que debemos
proporcionar al sistema debe ser tambin controlada con el fin de optimizar el
consumo de energa.

8.4 CORTINA

Fig 15.Valvula cortina (manual corbeta)

8.4.1 ANALISIS DINAMICO

En este caso de la cortina tenemos una transmisin tipo tornillo sin fin de modo
que por medio de un movimiento circular producimos un movimiento lineal en el
elemento actuador. El paso de la rosca nos dar el desplazamiento lineal en
relacin con el nmero de vueltas. En la practica se pudo concluir que para
vlvula de este tipo en pulgada en sus acoples se produce el taponamiento
total de la vlvula con 5 o 6 vueltas. En vlvulas mas grandes, como las
utilizadas en tubera de alcantarillado este numero de vueltas aumenta mas o
menos proporcionalmente al tamao del acople. Mas sin embargo se puede
analizar que el torque ejercido por el operario para abrirla o cerrarla es
muchsimo mas bajo que el que aplicbamos en las vlvulas de embolo.
Adems este torque se presenta constante en todo el proceso de apertura y
cierre. La potencia requerida por los acondicionamientos mecnicos que se
puedan hacer se reduce a mas 10 veces en relacin con el otro tipo de
vlvulas.

Eventualmente la vlvula de cortina se presta para controlar el flujo de paso ya


que pude ser abierta parcialmente, es decir que no trabajamos la vlvula en los
puntos mximos sino que los puntos intermedios nos permitirn controlar el

caudal reduciendo el rea de paso a nuestro gusto. Es decir comportndose


como una vlvula proporcional.

8.5 TIPO AGUJA

Fig 16. Vlvula tipo aguja (manual corbeta)

8.5.1 ANALISIS DINAMICO

La vlvula tipo aguja como nos mostr la grafica anterior posee un estado
normalmente. Es decir que en estado de reposo esta cerrada completamente.
Su mecanismo muestra un resorte interno que se encuentra en compresin de
modo que ejerce la fuerza necesaria para vencer la inercia del selle y mantener
la vlvula cerrada la estructura de la vlvula se opone al desplazamiento de
este resorte generando una fuerza que constantemente existe y se opone al
desplazamiento en la direccin de apertura del selle. Al conmutar la vlvula
este desplazamiento X se hace mayor por lo tanto la fuerza ejercida por el
resorte aumenta. Esta fuerza del resorte aunque se opone a la fuerza ejercida
para abrir la vlvula y dar paso al fluido, resulta pequea realmente por lo que
la energa que debe ser suministrada en la conmutacin es baja.

Fig 17.Analisis dinamico vlvula aguja

Dado que realmente la fuerza de apertura es mnima, este sistema es muy


recomendable por la fcil implementacin del accionamiento con actuadores
neumticos. Aunque el hecho de trabajar un resorte en estas condiciones
puede resultar perjudicial dado que venzamos la zona elstica generando una
deformacin permanente en el.

9. SISTEMA DE DOSIFICACION

9.1 JERINGA INDUSTRIAL (ESTRUCTURA BASICA DE DOSIFICADOR)

9.1.1 ENVASE DE DOSIFICACION

El envase de dosificacin esta hecho en acero inoxidable. El mercado de acero


inoxidable tiene en el mercado tubera en este material. Esta tubera la
encontramos en los distintos estndares a lo que referimos una comodidad en
cuanto a la elaboracin ya que basta con adquirir el pedazo de tubo requerido y
ponerle tapa con adaptaciones.

Existe un gravsimo inconveniente y radica en que la tubera en su proceso de


almacenaje y transporte tiende a pandearse aunque muy poco. El sistema a
implementar requiere una alta redondez del permetro del tubo para evitar el
escape de lquido que se pudiese presentar si no se sucede esta condicin.
Por estos motivos resulta ms conveniente mecanizar esta estructura a fin de
que el grosor del pistn sea tal que impida el pandeo con facilidad.

Fig 18.Envase dosificacin

VOLUMEN = 8.5 * 8.5 * 3.1416 /4 *15.5 = 880cm

9.1.2 VSTAGO DE EMPUJE

El pistn encargado de proporcionar el empuje lleva consigo el elemento que


deber empujar el lquido y a su vez generar el vaco capas de succionarlo.

Fig 19.Estructura que empuja el lquido adaptada al cilindro.

El dimetro externo de la seccin de empuje debe ser milsimas mas pequeo


el dimetro interno del cilindro dosificador.

Fig 20.O RINGS. Empaques acoplados para evitar escape de lquido

De modo que finalmente estas 2 estructuras se unen formando la jeringa


dosificadora.

Fig 21.Jeringa dosificadora

9.1.3 DOSIFICACION POR SUCCION

Fig 22.Dosificacion por succion

El sistema de dosificacin consiste en un envase de dosificacin que tiene una


capacidad de un litro. El envase tiene dos orificios, por uno entra el lquido del
tanque y por el otro sale lquido dosificado. La entrega de la dosis se hace tipo
jeringa y por medio de un actuador (cilindro) neumtico que es controlado en el
sistema. Este cilindro a su vez lleva una adaptacin especial que permite
empujar el lquido y su vez impide que el lquido se salga del envase
dosificador. Para la salida y entrada de liquido se manejan electro vlvulas tipo
3/2 de retorno por fuelle. Para poder utilizar diferentes dosificaciones se
implementa un elemento deslizable sobre el vstago de pistn que hace
posible actuar un final de carrera para detener el circuito y succionar la
cantidad que se desea nicamente (elemento seleccionador de cantidad de
dosificacin).

9.2 MODELOS DE SALIDA Y ENTRADA DE LQUIDO AL DOSIFICADOR

9.2.1CHEQUE / CHEQUE

FIG 23. Modelo cheque/cheque

Tericamente el sistema debe funcionar, es evidente que el sistema depende


de varios factores mecnicos. En este caso es importante que el ciclado sea
adecuado ya que la apertura en el cheque de entrada puede suceder antes de
que el cheque de salida este completamente cerrado. En este caso el lquido
hace un paso directo impidiendo que se realice el ciclo adecuadamente, ya que
el flujo impide que el cheque se cierre y el sistema queda pasando lquido de
forma directa.

9.2.2 CHEQUE / VALVULA

Fig 24.Modelo cheque vlvula

El sistema cheque, vlvula resulta econmico y en este caso se controla el


punto de salida. El cheque cumple la funcin de permitir el llenado de la jeringa
dosificadora y evitar que en el momento del empuje el lquido se devuelva
hacia el tanque almacenador. Este sistema no presenta inconvenientes
relevantes de modo que funciona adecuadamente. Para el circuito de control es
necesario nicamente el control de una vlvula lo que reduce el numero de
accionamientos controlados necesarios para la manipulacin del dosificador.

9.2.3 VALVULA DE TRES VIAS

Fig 25.Modelo vlvula de tres vias

La vlvula de tres vas es una solucin ptima, ya que en este caso se controla
por medio de vlvula la entrada y salida del lquido de forma alternativa. La
vlvula de tres vas exige el mismo sistema de control que implica el sistema
cheque- vlvula de modo que solo se controlara una vlvula. La vlvula en
forma alternativa conecta el dosificador con la entrada para la succin y luego
la salida para el empuje. El inconveniente de esta vlvula radica en lo
complicado para conseguirla en el mercado y ms aun en acero inoxidable. Su
funcionamiento no presenta ms recomendaciones y es considerado el ms
ptimo de todos por su etapa de control, implementacin y fiabilidad. Claro esta
adicionalmente los problemas que presentan las vlvulas de embolo y que ya
fue mencionado en la seccin 8.3.

9.2.4 VALVULA / VALVULA

FIG 26. Modelo vlvula / vlvula

El sistema vlvula-vlvula es tan ptimo como el sistema de tres vas. En este


caso el sistema de control debe permitir el accionamiento de 2 vlvulas. Esto
implica que el montaje resulta mas complejo al igual que el sistema de control
por lo implica a su vez costos mas elevados. A nivel de optimizacin resulta
mucho mas llamativo ya que en este sistema podemos plantear cualquiera de
los sistemas recomendados para el control de paso de liquido por lo que los
diferentes modelos de vlvula. En el proceso de control debemos tener en
cuenta que el sistema puede presentar varios estados como por ejemplo las
dos vlvulas abiertas. Algunos estados no son deseados, problema que no se
presenta con la vlvula de tres vas. Aunque resulte un tanto mas complejo el
control el sistema en su funcionamiento adecuado presenta el comportamiento
que se desea por lo q

ue puede ser este el sistema mas recomendado para

implementar.

Para este modelo se recomienda la implementacin de vlvulas cortina dado


que se consiguen fcilmente en el mercado en material de acero inoxidable.
Los accionamientos recomendados son motores de 12, 24 voltios que no tiene
gran torque de modo que son econmicos. Las estructuras de soporte son de
igual forma de fcil implementacin.

9.2.5 VALVULA MECANIZADA 3/2

Fig 27.Valvula mecanizada 3/2

Este sistema nos proporciona un sistema tipo vlvula 4/2 cuatro vas 2
posiciones pero el caso es que es un conjunto de 2 vlvulas 2/2 que se
combinan

en

un

nico

sistema

por

medio

del

cual

se

conmutan

alternativamente con un nico pistn que bien podra tratarse de un pistn de


simple efecto o doble efecto lo que hara el control de igual forma que la vlvula
de 3 vas. Aunque presenta el inconveniente de tener que mecanizar la
estructura que realizara la conmutacin.

10. UBICACIN DOSIFICADOR

10.1 ESTRUCTURA DE SOPORTE DEL DOSIFICADOR

Fig

28.Ubicacin

dosificador

tanque

de

almacenamiento

La ubicacin del dosificador ser en la base del pequeo tanque de


alimentacin, ya que necesitamos adaptar el tanque al dosificador adems que
en el caso en cuestin se cae por gravedad y la bolsa se aplica alrededor del
tubo de salida y por esta razn queremos que la salida del dosificador sea lo
mas alta posible para una mayor cantidad de papel.

Adems claro esta que aprovechamos la estructura definida para el tanque en


el dosificador con un requerimiento un poco ms alto en cuanto a soporte de
peso se refiere, sin ser este punto muy relevante.

10.2 UBICACIN HORIZONTAL

Fig 29.Ubicacion horizontal

Fig 30 Union dosificador-tanque (manguera pvc o tubo inoxidable)

10.3 UBICACIN VERTICAL

Fig 31.Ubicacion vertical

Igualmente la adaptacin entre el tanque y el dosificador puede ser por medio


de manguera o tubo inoxidable.

11. SISTEMA DE SELLADO

11.1 SELLADO VERTICAL

Fig 32 Sellado vertical

Luego de que el lquido ha sido dosificado, cae por gravedad a travs del tubo
de salida del dosificador. Este tubo se encuentra revestido por la bolsa en la
cual se empacar el lquido. En el momento en que el lquido toca la bolsa, la
desplaza en forma vertical obligndola a pasar por las resistencias de
sellamiento. Un (sensor bolsita) est ubicado en un punto estratgico, de tal
modo que indica al sistema cuando la bolsita pasa por su zona de sensado.
Luego de esto el sistema espera un corto tiempo configurado por software de
tal modo que la activacin del sellado se produzca en el punto correcto.

El sellado de las bolsas se hace por medio de unas resistencias que se


encuentran unidas a dos laminillas de bronce, cuando estas dos laminillas de
bronce se calientan (efecto de la resistencia) y se unen sobre la bolsa se
produce el sellado. Para evitar que la bolsa se pegue al bronce, la laminilla
debe ir recubierta de tefln.

El desplazamiento de estas lminas (resistencias) para hacer unidas sobre la


bolsa, se realiza por medio de un cilindro neumtico. Este cilindro es un
cilindro de simple efecto dado que nicamente se necesita control para producir
la unin de las dos laminillas. El cilindro que se utiliza est normalmente
abierto dada la estructura diseada para el sello en el momento en que se

recibe la seal, el cilindro se cierra produciendo la unin de las dos laminas


sobre la bolsa.
Se adiciona en este sistema una bandejita ubicada justo a la cada de la bolsa
que nos ayuda a minimizar la velocidad de cada de la misma.

La estructura de soporte de todo este sistema no exige una carga muy fuerte;
por lo que no es relevante en cuanto a costos se refiere y ubica el punto de
sellado ms o menos a un metro del piso.

Fig 33.1.vistas en solid edge

Fig 33. vistas en solid edge

11.2 SELLADO HORIZONTAL

Para el sistema de sellado horizontal tenemos el siguiente modelo en vista


lateral.

Fig 34.Sellado horizontal

En este sistema un mecanismo es adaptado para bajar la selladora superior de


modo que presiona la inferior produciendo el selle. Por medio de un resorte
mantenemos las selladoras en forma abierta, para que por medio del
mecanismo al aplicar una fuerza en la parte inferior producimos el
desplazamiento de la estructura diseada para producir el sellado.

Al accionamiento del modelo podemos fcilmente adaptar un pistn neumtico


de simple efecto o doble efecto y controlarlo de igual forma que en caso de la
selladora vertical.

Fig 35.Adaptacion de piston

Para ilustrar mejor este modelo se desarrollo un modelo a escala el cual es


presentado en la seccin 22 laboratorio de diseo.

11.3 RESISTENCIAS DE SELLADO

La resistencia de sellado es un elemento muy comercial. Lo importante a tener


en cuenta es la temperatura que va a manejarse para el sellado. Estas
resistencias se consiguen en diferentes medidas de longitud, as como para el
manejo de diferentes temperaturas.

En el momento del sellado se presentan bsicamente dos procesos. El primero


consiste en un sellamiento de la bolsa en caliente. En este momento por medio
de temperatura hacemos que la bolsa pase de su estado slido a un punto de
fcil fusin lo que permite que lado y lado de la bolsa se unan y queden unidos
de igual forma como sucede con la soldadura para elementos metlicos. Un
segundo paso es el sellado en fro o sea que luego de calentar, dejamos
nuevamente que se produzca el enfriamiento manteniendo la forma del selle
producido es decir presionando para impedir que la bolsa se arrugue en el
proceso de solidificacin. Los tiempos de selle en fro y caliente dependen del
material y de la temperatura de trabajo as que el usuario debe graduar estos
dos tiempo por parte separada.

La resistencia de sellado puede ser colocada en una mordaza o en las dos.


Utilizamos 2 resistencias bsicamente con bolsas en material de alta densidad
que lo requieren para producir la fusin. Generalmente con una sola es
suficiente.

Existen 2 clases o tipos bsicos de resistencias: de calentamiento rpido y de


calentamiento lento refirindonos a la velocidad en que alcanza la temperatura
de sellado. La rpida podramos decir que es instantnea y la lenta si toma
mucho ms tiempo relativamente (de 5 a 10 minutos).

SISTEMAS DE CONTROL

12. CIRCUITOS CONTROL Y POTENCIA PARA CARGA DEL TANQUE


SUPERIOR.

Fig 36.Esquema de sensores en sistema de alimentacin

S1 = Sensor en la parte superior del tanque menor.


S2 = Sensor en la parte inferior del tanque menor.
S3 = Sensor en la parte inferior del tanque mayor.

1. El sistema de control debe cumplir las siguientes condiciones de


funcionamiento
2. Si S3 no censa lquido la bomba no debe funcionar.
3. La activacin de la bomba debe ser hecha en funcin al sensor S2 de
manera que cuando S2 no detecte lquido debe prender la motobomba.
Esta debe cargar el tanque hasta la altura indicada por el sensor S1 de
modo que cuando S1 censa el lquido debe detener la bomba impidiendo
que esta vuelva a trabajar hasta no cumplir la condicin en el S2 para la
nueva activacin de bomba.

12.1 CONTROL

Utilizamos reles activados directamente por los sensores S1, S2, S3


respectivamente. En el circuito de control se opta por nombrarlos de la misma
forma S1, S2, S3 que el sensor asociado.

Tenemos un pulsador para el mando manual, usamos un rel KX como rel de


activacin para la interfase a la bomba. En este punto el rel KB provee
contactos para el manejo de alta corriente ya que KB es nicamente utilizado
para el control.

Fig 37 circuito de control para sistema de alimentacin

12.2 POTENCIA

Siendo KB un rel para la interfase al circuito de potencia. Este podra bien


activar un contactor o un triac elementos que permitirn manejar la corriente y
voltaje asociado a la bomba. Dado que el sistema no requiere alta velocidad de
conmutacin la utilizacin de un elemento u otro depende exclusivamente de
los costos y su ubicacin dentro del sistema por cuestiones de esttica y
espacio.

En ambos casos se utiliza un pulsador de paro manual con enclavamiento


mecnico tal que la maquina puede ser detenida en cualquier parte del proceso
y a su vez la maquina puede quedar inactivada si el caso lo recomendara.

Fig 38 circuito de potencia sistema de alimentacion

13. SENSOR DE NIVEL

El sensor de nivel que necesita el sistema es de tipo digital (ON/OFF) ya que


no vamos a utilizar la discriminacin de la cantidad exacta de liquido en el
tanque. Lo que si es relevante es que el lquido por ser un producto de
consumo no debe entrar en contacto con materiales (que no cumplan normas
sanitarias) que puedan afectarlo. Para el sensor de nivel podemos utilizar
diferentes sistemas.

13.1 FLOTADOR

Como primera opcin se utiliza un sensor tipo flotador que nos da una seal en
el que un micro switch tipo rele acciona el rele destinado para la entrada
deseada al sistema de control que seria de 5V para un PC (p.ej). Este tipo de
sensor se consigue fcilmente y a un costo relativamente muy bajo y aunque
pudiese cumplir los requerimientos sanitarios deseados, el hecho de tocar el
lquido implica un desacuerdo en el cliente quien a todo costo quiere mantener
el lquido lo ms posiblemente aislado del contacto con agentes externos.

13.2 SENSOR OPTICO INFRAROJO

Un sensor tipo ptico o infrarrojo, en el que igualmente los bajos son


relativamente bajos. El problema esta en la adaptacin de este ya que el
tanque superior debe tener en la zona de censado un orificio que permite al
rayo de luz atravesar el tanque de lado a lado. En este caso la seal recibida
es de tipo ON/OFF como optocoplador ya que un emisor de rayo emite una
seal y un fotodiodo justamente al frente recibe o no la seal activando o no la
conduccin del fotodiodo de modo que este se coloca a un voltaje y as cuando
se produce la conduccin se mide un voltaje que es fcilmente el voltaje de
activacin para la entrada al PC.

13.2.1 ESQUEMA REFERENTE

Fig 39.Esquema referente sensor infrarojo

13.2.2 CIRCUITO DE CONTROL

Fig 40 Circuito de control sensor infrarojo


Para esta opcin se presenta el problema que debemos llevar a cabo un
proceso adicional al mecanizar la estructura con los orificios deseados. Por otra
parte la densidad del material y el color son relevantes en la calibracin del
sensor por lo que un nico sistema no podra hacerse universal a manera de

ser utilizado en forma indiscriminada para el distinto tipo de lquidos en


densidad y color.

13.3 FENOMENO RESISTIVO

Una tercera opcin es introducir un par de varillas delgadas de acero inoxidable


al tanque. Las varillas estn unidas a un cable conductor de tal modo que al
variar la cantidad de liquido tenemos una variacin en la resistencia medida,
as que por medio de un comparador podemos definir un SET POINT y disparar
nuestro ON/OFF en la altura de liquido mnima o mxima requerida segn sea
el caso. Recordemos que utilizamos tres sensores de nivel: dos en el tanque
pequeo (nivel mximo y nivel mnimo) y uno en el tanque grande (nivel
mnimo).

13.3.1 ESQUEMA REFERENTE

Fig 41.Esquema referente sensor resistivo

13.3.2 CIRCUITO DE CONTROL Y ACONDICIONAMIENTO

Fig 42 Circuito contro sistema resistivo

Este arreglo electrnico para el control debe ser hecho para cada uno de los
tres valores de censado diferente S1, S2 Y S3., el nivel deseado es
simplemente graduado por medio de mi valor de referencia (entrada negativa
en el comparador.

Los valores de alimentacin para el operacional dependen del voltaje con que
trabajan los reles de control S1, S2 Y S3 establecidos en el circuito de control
para la carga de lquido al tanque menor.

En estos primeros modelos alternativos para la solucin en el censado de nivel


lo requerimientos de no tener contacto alguno con el liquido no se han cumplido
a cabalidad y a su vez se implica un mecanizado adicional en los tanques de
almacenamiento.

13.4 MODELO DE SALIENTE

Para las siguientes soluciones se propone un saliente en el tanque utilizando la


ecuacin fundamental de la esttica de fluidos que afirma que la presin
depende nicamente de la profundidad. El principio de pascall afirma que
cualquier aumento de presin en la superficie de un fluido se transmite a
cualquier punto del fluido.

Fig 43 Prinsipio de Pascall

Aplicando este fenmeno fsico podemos asegurar que independiente del


dimetro de un tubo saliente interconectado con el tanque el nivel de altura
h1sera igual al nivel de altura h2. De esta manera podemos sensar el nivel de
tanque en el punto saliente. Donde en el caso que se implemente el sistema de
dosificacin sin la implementacin de la bomba automtica, se puede
simplemente observar por simple inspeccin el nivel de lquido alojado en el
tanque.

13.4.1 ESQUMA REFERENTE

Fig 44 Modelo saliente

13.5 TIPO REED SWITCH

Podemos manejar reed switch los cuales por medio de propiedad magnticas
de atraccin genera el contacto de 2 elementos conductores efectuando un
contacto que inmediatamente permite el paso de una seal de control. Por
medio de un par de reed switch se censan los niveles mximo y mnimo del
tanque que son las medidas que el sistema debe controlar.

13.5.1 ESQUEMA REFERENTE

Fig 45 Tipo reed swith

13.5.2 CIRCUITO DE CONTROL

Fig 45 Circuito control tipo reed switch


R1, R2 Y R3 son los reed switch correspondientes para el sitio de censado
respectivamente y nos indican que simplemente el cierre del contacto nos
permiten el paso de una seal de control que permita activar los reles
correspondientes...

13.6 EFECTO MAGNETICO

Otra solucin corresponde al tema de efectos magnticos es ubicando un


arrollamiento de alambre sobre el tubo saliente para el censado el cual ser
bobina secundaria de un transformador reductor. Con un bobinado primario se
induce un voltaje el cual vara segn el valor de la inductancia que cambia con
efectos de ncleo.

Para este caso utilizamos el efecto transformador. Aplicando un voltaje AC en


el bobinado primario, que bien puede ser los 120VAC que nos ofrece la red
elctrica, esperamos un voltaje mucho menor en el bobinado secundario. De
manera que aplico un puente de diodos y un condensador con el fin de obtener
una seal del tipo DC la cual ingresa al comparador. Esta seal debe
proporcionar un voltaje que vaya desde unos 2 o 3 voltios hasta un valor no
mayor a los 20 voltios. Si nos remitimos a la etapa de control el condensador
resulta opcional ya que en el momento de la comparacin aunque se
presentara oscilacin en la respuesta de salida en el amplificador, dada la
variacin de la seal que sale del bobinado, la corta activacin de las seales
es suficiente para proporcionar a los reles que activen las retenciones y los
ciclos de trabajo se desarrollen normalmente.

De igual manera el uso de un elemento flotador y un elemento metlico


implican una variacin mas abrupta en la induccin de voltaje presentada por lo
que el acondicionamiento resulta un tanto mas sencillo que si utilizamos la
variacin en el ncleo como solamente por el liquido que este o no este.

El uso de la rectificacin de seal por medio del puente de diodos es necesario


ya que es necesario referenciar nuestra seal de salida y de igual manera el
comparador y el set point en un mismo punto.

13.6.1 ESQUEMA REFERENTE

Fig 46 Esquema Efecto magnetico

13.6.2 ACONDICIONAMIENTO

Fig 47.acondicionamiento magnetico

13.6.3 CIRCUIO DE CONTROL

Fig 48 Circuito de control efecto magnetico

13.7 EFECTO CAPACITIVO

En este tipo de sensor vamos a tener en cuenta la variacin en la impedancia


del condensador, producto de una variacin en el dielctrico que se da cuando
el lquido se encuentra entre el par de placas paralelas. De igual forma que en
nuestro sensor de efectos magnticos la seal es acondicionada por medio de

una rectificacin que entra aun comparador que permite relacionar la seal
recibida con el set point estipulado.

13.7.1 ESQUEMA REFERENTE

Fig 49. Efecto capacitivo

13.7.2 ACONDICIONAMIENTO

Fig 50 Acondicionamiento efecto capacitivo


13.7.3 CIRCUITO DE CONTROL

Fig 51 Circuito de control efecto capacitivo

13.8 SENSOR DE ULTRASONIDO

Como una cuarta opcin tenemos el sistema por ultrasonido. Los sensores de
ultrasonido existentes en el mercado poseen gran cantidad de aplicaciones,
como costos elevados y por lo tanto no se tomaron en cuenta como posible
solucin. Aunque encontramos sensores de ultrasonido tanto digitales como
anlogos, para el caso se requera propiamente el digital, aunque un anlogo
podra tambin utilizarse.

13.8.1 ESQUEMA REFERENTE

Fig 52.Sensor ultrasonido

El principio fsico de funcionamiento nos explica que por medio de un oscilador


generamos una seal con una frecuencia de ultrasonido la cual es emitida con
la ayuda de un transductor de ultrasonido el cual es un elemento piezoelctrico
interno que por medio de la seal elctrica presenta oscilaciones en una
membrana interna. Estas vibraciones mecnicas, emiten una onda con una
determinada amplitud. Esta amplitud se atena conforme se desplaza en el
medio. Al chocar con una superficie el rayo es reflejado hacia si mismo
generando un eco que es direccionado hacia un Rx receptor de ultrasonido el
cual esta sintonizado previamente a las frecuencia del transmisor. La amplitud
de la seal que llega a recepcin es proporcional a la distancia que la seal
recorri (eco), al medio por el que se desplazo y a factores referentes al ngulo
de reflexin de la seal ultrasnica.

Fig 53 forma de onda ultrasonica

Para el caso en cuestin se expone el diseo del control por ultrasonido


elaborando por completo e sistema de oscilacin, y calibracin de las y
manipulacin de las seales llegadas al receptor. Es posible adquirir sensores
de ultrasonido sin acondicionamiento alguno, ni interfase de aplicaciones al
usuario a costos mucho ms bajos y realizar por medio de un sistema
electrnico el control.

13.8.2 ACONDICIONAMIENTO

El oscilador es diseado con 555 oscilando en modo biestable a una frecuencia


de 40KHz, con un ciclo til del 50%, asumimos C = 1uF, as que utilizamos
RA = RB = Ton / 0,69 / C ; Ton = 1 / 40KHz = 0,000025 = 25us ;
RA = RB = 25us / 0,69 / 1uf = 25/ 0,69 = 36
Operacional LM339

Fig 54. Acondicionamiento sensor ultrasonido

13.8.3 CIRTCUITO DE CONTROL

Fig 55. Circuito control sensor ultrasonido

13.8.4 PROBLEMAS CON LOS ULTRASONIDOS

El ultrasonido presenta el inconveniente de la angulacin del rayo incidente. De


tal modo que agitaciones prolongadas o abruptas pueden generar un
movimiento del lquido, que si es tal, pude inferir una variacin en la reflexin
del as ultrasnico que al ser desviado no genera informacin. En estos casos el
sistema podra recibir seales incorrectas, haciendo trabajar a la maquina en
momentos incorrectos.

Fig 56.Problemas de ultrasonidos

La ubicacin de los sensores resulta de alguna manera practica aunque las


estructuras de soporte para el sensor podra generar corrosin y por
consiguiente desprendimiento de material, a su vez contaminando el liquido
que se esta empacando. El hacer estas estructuras en acero inoxidable en su
totalidad resultara algo costoso, podramos utilizar PVC como elemento
alternativo procurando conservar la esttica.

Tenga en cuenta que en caso de tanques muy profundos el sensor su parte Tx


debe tener mas potencia para producir una seal ultrasnica con mayor
alcance. Tambin tenga en cuenta que este tipo de sensor maneja una
histresis producto de sus propias caractersticas fsicas de construccin y por
lo tanto el factor sentido de flujo de liquido en la carga va ha generar
diferencias de seal en el receptor. Tambin un espacio cercano en el que el
sensor no alcanza a recibir el eco producido por la seal, este espacio cercano
de trabajo tambin presenta el fenmeno de histresis dando diferentes
seales segn el caso se hacer o se aleje al liquido.

13.9 SENSORES COMERCIALES DIGITALES

Como su nombre lo dice estos sensores entregan una seal. Aunque


encontramos con diferentes propiedades fsicas de respuesta de los distintos
modelos que pueden ser capacitivos, inductivos, autoreflex y de ultrasonido los
cuales debemos calibrar a un set point deseado y utilizando el modelo
adecuado de conexionado podemos implementarlos rpida y fcilmente.
Igualmente para la ubicacin en el sistema estos poseen ayudas mecnicas
con las cuales puedo fijar el sensor implementando soporte sencillos que se
atornillan y se fijan a la maquina en la posicin deseada.

Una ltima solucin mas practica pero a la vez la mas costosa aunque nos
brindan confiabilidad y dan solucin al problema planteado. Es importante
hacer claridad que el sensor tipo posee caractersticas tcnicas de construccin

en la que se incluye una referencia de proteccin. Para el caso en cuestin


necesitamos que dicha proteccin sea IP67. Que significa un nivel alto de
proteccin. Puntualmente contra polvo y agua.

13.9.1 CONEXIONADO

Con esta simbologa y tipo de conexionado vamos a encontrar los sensores


inductivos, capacitivos, ultrasnicos.

Fig 57.Smbolo segn DIN 4007

Color de los hilos segn DIN 50044:


Marrn: Terminal (+); Azul: Terminal (-); Negro: Salida NA; Blanco: Salida NC

La conexin depende del tipo de la salida del sensor la que puede ser PNP o
NPN.

Fig 58.Conexionado PNP y NPN

Las distintas clases de sensores de posible utilizacin son descritas a


continuacin. Los sensores de fibra ptica resultan de muy costosa
implementacin por lo que no fueron tenidos en cuenta para anlisis en este
proyecto.

13.9.2 IMPLEMENTACION AL CIRCUITO DE CONTROL

Para el uso de este tipo comercial de sensor se establece su correcto


conexionado el cual debe ser como se muestra a continuacin en conjunto al
circuito de control pertinente a la energizacin de motobomba.

13.9.2.1 TIPO PNP

Fig 59.Tipo PNP

13.9.2.2 TIPO NPN

Fig 60.tipo NPN

13.9.3 INDUCTIVOS Y CAPACITIVOS

Para el caso de los sensores capacitivos o inductivos debemos tener en cuenta


si dichos sensores son del tipo PNP o NPN para su conexionado como se dijo
anteriormente. La ubicacin e implementacin del sistema de sensor con este
tipo, se lleva a cabo con el simple hecho de colocar los sensores de forma
cercana al punto en donde se observa el nivel de liquido que quiere ser
detectado. De igual forma una saliente al tanque es el punto donde tomar el
sensado. Para el sensor magntico se requiere un elemento con propiedades
metlicas de modo que sea detectable.

13.9.3.1 ESQUEMA INDUCTIVO

Fig 61 Ubiccion sensor inductivo

En el caso del sensor capacitivo no es necesario implementar ningn elemento


adicional y el solo lquido producir el efecto de dielctrico necesario para
afectar la respuesta del sensor. E inclusive no se hace necesario la
implementacin de la saliente en el tanque de almacenamiento.

13.9.3.2 ESQUEMA CAPACITIVO

Fig 62 Ubicacin sensor capacitivo

En cuanto al alcance de respuesta la practica permite ver que el sensor de tipo


inductivo es de mucha menor sensibilidad que el sensor tipo capacitivo.

13.9.4 AUTOREFLEX Y ULTRASONICO

Otro tipo de posible utilizacin es el sensor autoreflex o de ultrasonido


comercial en el que el emisor y el Receptor se hallan alojados dentro de un
mismo cuerpo. El objeto a detectar en este caso el lquido refleja directamente
un porcentaje de la luz emitida, activando el receptor muy similar a lo que
ocurre en el sensor ultrasnico solo que en este caso es una seal de distinta
frecuencia pero con el mismo principio. Los sistemas que ofrece el mercado
son compactos y adems de ello vienen en diferentes valores nominales de
trabajo siendo as el problema al adquirirlos la distancia que debe sensar. Este
dato lo da el fabricante y bastara con remitirse a las fichas tcnicas de los
modelos.

13.9.4.1 SISTEMA AUTOREFLEX

Fig 64 Modelo autoreflex

El acondicionamiento y ubicacin de este sensor procede de la misma manera


que en el sensor de ultrasonido y su diseo para el control. A su vez los
problemas presentados en el tema de la reflexin competen tambin a este tipo
de sensor.

13.9.4.2 ESQUEMA DE INSTALACION

Fig 65 esquema de instalacion autoreflex

Recuerde que la frecuencia con que desplaza una onda magntica es


inversamente proporcional a la atenuacin de la seal. Paralelo a ello los
diferentes tipos de material tendrn una absorbancia diferente as que de igual
forma los ecos sern una funcin del lquido que aloja el tanque. Este tipo de
sensores son algo ms costosos que los capacitivos y ms aun que los
inductivos pero mantiene las condiciones del problema y puede llegar a ser til
la referencia si el presupuesto de desarrollo lo permite. El conexionado es
exactamente como se planteo teniendo presente el sistema PNP o NPN.

13.10 SENSOR ANALOGO DE PESO (CELDA DE CARGA)

Fig 66.Celda de carga

Una comn solucin es hacer el sensado de nivel por medio del peso ya que
dado que el peso P = mG la masa es proporcional al volumen contenido en el
recipiente de modo que una medida de peso nos dar la cantidad de masa, por
lo tanto el volumen y por lo tanto el nivel del liquido.

Fig 67.Ubicacion de celda

Esta nos brinda las ventajas de no estar en contacto con el material de ninguna
manera adems de, la medicin de masa (peso) con alta precisin y ms aun
proporciona mediciones de tipo anlogo. Pero las desventajas son que
usualmente requiere estructura independiente; Solamente mide peso y no mide
nivel de modo que si el material cambia la densidad del liquido produce una
alteracin en el peso sensado y debe hacerse una recalibracin en la etapa de
acondicionamiento. Adems es propenso a afectarse por la intemperie, hielo,
nieve, vientos y temperatura.

13.10.1 ACONDICIONAMIENTO

Para el acondicionamiento de la celda debemos en primera instancia amplificar


la seal ya que son milsimas de voltaje las que se perciben, importante que
dicho amplificador sea de instrumentacin a fin de eliminar ruido ya que en
seales tan pequeas una mnima variacin de las condiciones del sistema
puede ocasionar mediciones errticas.

En esta ocasin, aunque se cumple a cabalidad la condicin del no contacto


con el liquido, la solucin resulta un tanto costosa y en realidad se desperdicia
la utilizacin del sensor a causa de que este es de gran utilidad para conocer la
cantidad exacta que posee el tanque en cualquier tiempo t. mas sin embargo si
el caso lo amerita se presenta un acondicionamiento bsico para la utilizacin
de este tipo de sensor.

13.10.1.1 AMPLIFICADOR DE INSTRUMENTACION

Fig 68. Amplificador de instrumentacin

La figura nos muestra el esquema electrnico del amplificador operacional y su


esquema simplificado. La idea del amplificar operacional es utilizar la propiedad
de entrada comn en la que el ruido es eliminado por efectos de cancelacin.
Si por el positivo ingresa una seal de ruido que a su vez entra por el negativo
esta automticamente es cancelada por efectos de sustraccin.

El voltaje de salida ser VO= - R2/R1 (V1-V2) donde podemos pensar en una
ganancia R2/R1 que en general no viene en el amplificador comercial siendo
as R1 = R2 y la ganancia es = 1.
VA = V1 Y VB =V2  V1 V2 = I*K*R
V1 V2 = I * (R +K*R+R) = I * R * (2+K)
As que sea R1 = R2 podemos afirmar que VO = -(V1-V2)
VO = - ( VI - V2)* R *(2+K) / K*R
Siendo VO = - (V1-V2)*(2/K + 1)

Concluimos que el valor de K nos proporciona la ganancia del amplificador


El factor resultante de ganancia ser (2/K +)1 as que entre mas pequeo sea
el valor de K mas grande es la ganancia.

Para el caso de el amplificador de instrumentacin de uso comn la relacin


entre las resistencias R y la resistencia variable llamada KR es mucho mas
pequea en casi 100 veces de modo que el factor de ganancia se convierte en
(200 /K + 1) es por esto que el amplificador de instrumentacin es de alta
utilidad para amplificar seales de voltaje muy pequeas y el factor K nos
permite graduar la ganancia.

13.10.2 CIRCUITO DE CONTROL

Dado que en nuestro caso necesitamos conocer 2 niveles bsicamente el


mximo y el mnimo, por medio de potencimetros es posible ubicar estas dos
posiciones de tal modo que nuestro sistema quedara implementado de la
siguiente manera

Fig 69. Circuito de control aplicando A.I

14. CICLO DE MAQUINA

14.1 CONTROL DEL PROCESO DE ABASTECIMIENTO DE PRODUCTO


HACIA EL DOSIFICADO

Teniendo en cuenta que el operario debe introducir los tubos de bolsa a la


mquina. Asumimos que el papel esta en el dispensador previamente listo
para ser utilizado. Consiste nuestra tarea a seguir el desarrollo del dosificado
del lquido. Retomemos rpidamente la situacin que se nos presenta.

Un pequeo tanque ubicado en la parte superior de la maquina permite el


suministro de liquido. Este lquido entra a un dosificador que permite una
cantidad definida previamente. Al tener el dispensador cargado se empuja el
lquido por un orificio en la parte inferior del dispensador. Esta salida debe ser
controlada impidiendo al lquido caer sin control. De modo que se manejan y
controlan el empuje y la salida del lquido simultneamente.

Un tubo inoxidable adaptado al orificio en la parte inferior del dosificador esta


previamente cargado con un tubo externo de plstico; as que el liquido al caer
llena el pedazo de tubo plstico final, obligando al plstico a deslizarse un poco
a travs del tubo inoxidable y obligndolo a pasar a travs del sistema de
sellado y corte que esta listo y esperando para sellar luego que el plstico
sobrepasa lo suficiente la selladora. El selle demora un tiempo presionando en
caliente para el selle y a su vez justo despus de un tiempo presionando en fri
para el corte. Luego de esto el ciclo se repite mientras se cumpla que exista
lquido en el tanque y plstico en el dosificador.

Un sensor debe verificar que exista liquido en el tanque superior de lo contrario


todo el sistema se detiene (aborta programa). De igual forma un sensor debe
verificar que exista bolsa de lo contrario el sistema se detiene (aborta
programa).
El sistema procura garantizar la misma dosificacin independientemente del
lquido que est en el tanque.

14.1.1 ESQUEMA REFERENTE

Fig 70. Ubicacin sensores de control para dosificado

14.2 SENSOR DE PAPEL

El sensor de bolsa puede ser hecho con una fotorresistencia de modo que por
medio de un comparador damos la seal necesaria para acondicionar al
circuito de control que enva la seal al PC.

14.2.1 ACONDICIONAMIENTO

Fig 71.Acondicionamiento sensor de papel

14.2.2 CIRCUITO DE CONTROL E INTERFASE PARA SENSOR DE PAPEL


Y DE LIQUIDO (PARO DEL PROCESO)

Fig 72. Control e interfase sensor de papel y liquido

Los sensores deben activar un contacto acondicionado para dar 5 V al PC que


se explica mas adelante en la seccion 18.

14.2.3 FUENTE DE ALIMENTACION PARA CIRCUITO DE CONTROL

La fuente de alimentacin nos provee de 5, 12 y 24 voltios con los que se podr


materializar los diferentes circuitos de control.

La corriente entregada debe ser superior a 5A de tal modo que nos provea la
corriente necesaria para actuar las interfases y a la vez dar corriente a los
circuitos de control.

Seria bueno implementar para una mayor alimentacin de corriente y


proteccin contra corto y sobrecarga.

La corriente manejada depende del transistor driver y obviamente el


transformador debe entregar y el puente de rectificacin soportar la corriente
total que se utiliza en los diferentes circuitos.

Fig 73.Fuente de alimentacion

Fig 74.Fuente de alimentacin para altas corrientes

15. ACONDICIONAMIENTOS PARA ACTUADORES

15.1 INVERSOR DE GIRO MOTOR DC

El uso de un servomotor no se hace necesario ya que las necesidades del


proyecto no exigen un posicionamiento muy exacto y la velocidad de trabajo
ser la mxima. Por lo que nicamente nos debemos concentrar en el sentido
de giro lo que simplemente logramos invirtiendo la polaridad de entrada en
cada terminal.

Fig 75 Inversor de giro motor dc

15.2 ELECTROVALVULA PARA CONTROL

La vlvula como tal permite el paso y no de flujo. En nuestro caso nos


referimos a aire a presin. Este tipo de vlvula debe ser conmutada con algn
tipo de accionamiento aunque existen de muchos tipos las que se controlan
elctricamente son mas conveniente ya que los circuito de control son mas
sencillos y econmicos, adems permite que un sistema de control digital
pueda maniobrarla. Una seal elctrica permite la conmutacin de la vlvula y
en este sentido de control encontramos tambin 2 clasificaciones. Las
monoestables que son vlvulas que al sentir la presencia de seal elctrica
conmutan a otra posicin, al quitar dicha seal la vlvula retorna a su estado de
reposo. La otra clasificacin es la biestable, vlvula que tiene 2 puntos
diferentes en donde recibir seales elctricas de tal modo que una seal la

conmuta en una direccin y la otra seal es necesaria para hacerla conmutar


nuevamente a su posicin inicial.

Estas electrovalvulas se caracterizan por el nmero de vas que manejan y el


nmero de posiciones posible que puede tener. A nuestro sistema podemos
adaptar bsicamente el tipo de eletrovlvula 3/2 que en el punto especifico de
este proyecto, se especificaran los circuitos de control pertinentes El hecho de
que sea biestable o monoestable no nos interesa aunque una electrovlvula
monoestable es mas econmica que la biestable y el en el circuito de control
nos es mas til la monoestable ya veremos porque. Por norma para las
vlvulas en la simbologa, el estado normal de la vlvula sin accionamiento se
da en la parte derecha.

15.2.1 ACCIONAMIENTO DE LA ELECTROVLVULA D.C y A.C

El accionamiento de la vlvula DC se hace por medio de un transistor como lo


muestra la figura. Para este caso debemos calcular la mxima resistencia
necesaria que colocamos en la base. Sabiendo que la bobina interna de la
electro vlvula consume por catalogo alrededor de 50mA. As que sea la
ecuacin del transistor. Ic = B Ib = 50mA donde B (hfe) que utilizamos en el
diseo de drivers es de 100. Decimos que Ib = 50mA / 100 = 0.5mA. Sabiendo
que disparamos con seal de 5v entonces la R <= (5v - 0.7) / 0.5mA = 8,8 K.

El disparo de una electrovlvula A.C se hace por medio del mismo circuito de
accionamiento del D.C aunque en este caso debemos adicionar un rele, el cual
no requiere mxima corriente por lo que podemos usar un rele pequeo para 1
o 2 Amperios.

Fig 76.Accionamiento acondicionado electrovalvula

15.2.2 ACCIONAMIENTO DE LA ELECTROVLVULA POR PC

Esta es accionada por medio del PC en modo automtico y en modo manual se


acciona exactamente con el mismo pulso utilizado por el cilindro que empuja el
lquido en el dosificador. De modo que estas dos operaciones (dosificar y abrir
la vlvula) sean simultneas. Por lo tanto los mandos manuales del dosificador
y electro vlvula deben estar enclavados mecnicamente o bien accionarse de
alguna manera al mismo tiempo.

La electrovlvula requiere que su parte interna sea en acero inoxidable ya que


tendr contacto directo con el lquido.

Fig 57 Accionamiento por PC

15.3 ACCIONAMIENTOS PARA VALVULAS DE EMBOLO

15.3.1 ACCIONAMIENTO MECANICO

El acople que se hace al embolo procura ser una barra lo mas larga posible de
modo que el usuario aplique el torque mas grande posible al girarla.

15.3.2 ACCIONAMIENTO CON ACTUADOR NEUMATICO ROTATIVO

La primera de ella consiste en implementar un actuador neumtico rotativo que


acta de igual modo que un actuador pero produciendo un desplazamiento
angular. De modo que de manera simple se adapta la vlvula de acero
inoxidable (de embolo) al mismo para as abrirla y cerrarla.

El actuador neumtico rotativo podra se fcilmente remplazado por un motor


elctrico en el cual controlemos el desplazamiento mximo en un sentido y
mximo en el otro para as no llevarlo a un sobreesfuerzo que podra daarlo o
desgastarlo fcilmente. Otra implantacin podra hacerse utilizando la vlvula
de embolo en acero inoxidable y adaptando a ella un pistn lineal como lo
muestra la figura.

Fig 58.Actuador neumatico rotativo acoplado (catalo corbeta)

El elemento es un actuador de doble efecto de modo que a partir de una seal


se encuentra totalmente en un lado o totalmente en el otro

15.3.3 ACCIONAMIENTO LINEAL NEUMATICO

El accionamiento de la vlvula se realiza por medio de un pistn neumtico. El


sistema resulta eficiente en cuanto a torque. Puede ser trabajado tanto de
simple como de doble efecto y es evidente que resulta ms econmico
utilizando un pistn de simple efecto.

Fig 59 Accionamiento lineal neumatico (www.actuadoreslineales.com)

El siguiente modelo plantea una transmisin un poco mas alejada del cuerpo
de la vlvula. Este sistema puede ser implementado si la ubicacin en forma
cercana resulta complicada. La transmisin se hace por medio de una guaya
similar al sistema empleado para los frenos de una bicicleta en el que se
transmite la fuerza de forma directa.

Fig 60 Accionamiento lineal con guaya

15.3.4 ACTUADOR LINEAL ELECTRICO (PION CREMALLERA)

El sistema permite que por medio de una transmisin de circular a lineal


produzcamos el mismo efecto de movimiento que los actuadores lineales
neumtico. En este caso utilizamos un motor elctrico y por medio de la
transmisin tipo cremallera conseguimos el movimiento. El mecanizado de este
elemento resulta algo complicado aunque existen varias microempresas y
talleres mecnicos que las fabrican con rapidez y su costo es relativamente un
poco ms costoso que el neumtico. Solo que en este caso la energa es
proporcionada directamente de la red elctrica. A nivel de potencia que se
consigue con este sistema, es evidente que la relacin costo beneficio no es
favorable para este tipo de mecanismo. El mecanismo esta expuesto en la
seccin de actuadores.

15.3.5 ACTUADOR ROTATIVO ELECTRICO

Los actuadores rotativos elctricos son bsicamente los motores los cuales
pueden ser de corriente continua o corriente alterna. A fin de lograr un torque
necesario para producir la conmutacin de la vlvula usamos preferiblemente el
motor D.C adems que el control de giro y velocidad es mucho mas fcil que si
trabajamos con los motores A.C. en cuanto a costos aunque el motor D.C es
relativamente mas costoso, la diferencia entre precios no es tan alta y al
implementar todo el sistema de control la inversin de giro para un motor A.C
resultara mucho mas cara.

15.3.5.1 CONTROL POR TIEMPO

El elemento 555 (temporizador) permite establecer un pulso temporizado por


medio del cual podemos definir un tiempo de giro suficiente para apertura o
cierre de la vlvula.

Fig 61. Control por tiempo

15.3.5.2 CONTROL POR FIN DE CARRERA

Fig 62 Control por final de carrera

El circuito posee los pulsadores Pd y Pi para mover el motor a derecha (abrir) o


izquierda (cerrar). Los sensores s1 y s2 respectivamente nos indican la
posicin final del recorrido, que ser un sensor tipo microswitch. Y utilizamos
dos reles k1 y k2 que utilizan la retencin para realizar el ciclo completo hasta
que el sensor de la apertura del circuito. Si los dos reles se activan a la vez el

moto queda a un potencial de 0 voltios entre sus dos terminales ya que recibe
la misma seal en ambos puntos es decir Va-Vb = 0 y no se mover.

15.3.5.3 MOTOR PASO A PASO

El motor paso a paso nos ofrece la ventaja del posicionamiento ya que puede
resultar mas fcil el control de la posicin de este con el simple hecho de contar
pasos. A fin de lograr el mximo torque posible utilizamos el modelo de paso
en donde se activan 2 bobinas a la vez.

Fig 63 Motor paso a paso

Las secuencias para mover a derecha e izquierda sern respectivamente las


presentadas en la figura. Para el motor paso a paso debemos conocer el
nmero de pasos que posee para con ello conocer con exactitud el nmero de
pasos necesarios para producir un giro controlado. El sistema de control es
definitivamente ms fcil, prctico y econmico de realizar con un pic ya que
por medio de este puedo controlar la velocidad (tiempo entre paso y paso) y el
nmero de pasos a realizar. La interfase seria la siguiente.

Fig 64 Motor paso a paso acondicionado

Sea W = numero de pasos del motor; tendremos que: 360/W = grados por
paso =Gp; para un giro de 90 dara 90/Gp = numero de pasos que debe dar;
por tanto
90 / 360 * W = W / 6;  0 < (W / 6) (Numero de pasos) < 1
Este sistema implica una transmisin de potencia ya que el motor paso a paso
posee menor torque y es aun ms costoso que los otros dos tipos de motores
nombrados, se ha optado por no tenerlo en cuenta.

15.4 ACCIONAMIENTOS VALVULA DE CORTINA

Dado que el cierre de la vlvula requiere un movimiento circular nos remitimos


propiamente al accionamiento por motor. Dicho motor es escogido del tipo
elctrico ya que un motor neumtico nos resulta muy costoso e ineficiente por
la mismas razones. Es por esto que se escoge el motor D.C fjese que dicho
motor debe dar mas de un giro aunque en este caso el torque es muchsimo
menor que en caso de embolo.

La practica nos ha permitido observar que 5 o 6 vueltas son suficientes con


bajo torque. As que un motor muy econmico nos resultara til para efectuar el
cierre y apertura de la vlvula. Al desear un punto mximo y mnimo de
apertura el control resulta mas sencillo, pero esta el inconveniente en los topes
mximo y mnimo el motor sufrir una sobrecarga producto del alto torque que
se produce al tener la vlvula completamente cerrada y tratar de cerrarla aun
mas y viceversa. Otra desventaja grande es el hecho de no poder sensar de

alguna manera esta posicin ya que la mariposa que desplaza al embolo no se


mueve realmente sino que es el mecanismo interno.
Por estas razones se ha determinado que la mejor solucin es utilizar un voltaje
bajo, al 50% de la referencia del motor de modo que en estos topes vamos a
evitar que el motor se queme por sobrecarga. De modo que con el calculo del
tiempo adecuado podemos abrir y cerrar e inmediatamente eliminar la
alimentacin del motor para evitar la sobrecarga pero siempre garantizando la
completa apertura y cierre (principalmente) de la vlvula. El sistema empleado
es la adaptacin del motor y un circuito controlador de tiempo por medio del
cual generamos la conmutacin.

Fig 65 Accionamiento vlvula de cortina

La implementacin con un motor paso a paso resulta tambin apropiada


generando el nmero de pasos suficiente para producir el giro. Pero es
considerable que resultara un poco ms costoso control.

El problema de cortina es que el tornillo con el uso se puede ir desgastando,


as que requiere de todos modos el mantenimiento de engrase de las partes
aunque estas no entren en contacto con el lquido.

15.5 ACCIONAMIENTO PARA VALVULA TIPO AGUJA

Utilizar una vlvula en la que el sistema de cierre y apertura es de tipo lineal.


Estas vlvulas son frecuentes en sistemas de sellado para gas y es muy
posible encontrarlas en acero inoxidable con el fin de poder utilizarlas. Para
este caso simplemente por medio de un pistn de corta carrera y poca fuerza
producimos el desplazamiento lineal abriendo y cerrando la vlvula.
Este sistema seria mejor pensando en la eficiencia del sistema y el desgaste de
las piezas que en el trabajan. La durabilidad de esta vlvula para trabajo
continuo es mayor, pero as mismo los costos son mas elevados que la vlvula
de embolo en un 100%.

Fig 66 Accionamiento para valvula tipo aguja

Aunque en el circuito de control el sistema no cambia debemos tener en cuenta


que la implantacin de este sistema lleva un poco mas de tiempo pero los
costos se reducen en un 80%.

16. CONTROL DE DOSIFICACION

Elaborar el sistema de dosificado incluye el tanque de almacenamiento con su


respectivo

control

el

mecanismo

dosificador

igualmente

con

el

correspondiente control.

Dado que en la industria, como se expone en el trabajo, existen empresas que


ofrecen como nico producto el sistema dosificador. La empresa con la cual se
desarrolla el proyecto pretende impulsar este producto. Posteriormente el
mismo se anexara a la maquina completa que incluye adems de este el
sistema de sellado y corte.

En el sistema de dosificacin se pretende proporcionar a la maquina la


posibilidad de seleccionar una cantidad deseada en dosificacin y que el
dosificador sea capaz de realizar cargas con esa cantidad de manera exacta y
a su vez que posea la precisin necesaria para cumplir con los requerimientos
del cliente.

La viscosidad del liquido es el aspecto mas relevante para el diseo de este


sistema por lo que se trajo a colacin 2 modelos base para el sistema de
dosificado.

1. dosificacin por tiempo y trabajo semiautomtico en lquidos de baja


viscosidad con cada por gravedad.

2. dosificacin por succin para lquidos con viscosidades un poco ms


elevadas.

16.1 DOSIFICACION POR VALVULA DE EMBOLO Y/O GUAYA DE


TRANSMISION

En la actualidad, en los sistemas de tipo manual, el operario abre una vlvula


generalmente de bola o embolo por medio de una operacin manual. A esta
operacin se puede agregar un mecanismo tal que el operario puede abrir la
vlvula por medio de un pedal como lo muestra la siguiente figura.

Fig 67. Dosificacion por valvula de embolo y/o guaya de transmision

As mismo se hace posible implementar para la vlvula alguno de los modelos


presentados para apertura y cierre de la vlvula de tal manera que el usuario
posea los controles pertinentes de apertura y cierre de la vlvula. Para realizar
un trabajo de dosificacin plenamente manual.

16.2 DOSIFICACION POR TIEMPO

Fig 68 Dosificacion por tiempo

Este sistema puede implementarse de dos maneras diferentes.

16.2.1 SISTEMA DE DOSIFICACION POR TIEMPOS DISCRETOS.

Varias dosis por dosificacin. En este modelo el usuario determina el ritmo


de trabajo ya que se presenta el sistema para una dosis

Fig 69 Sistema para una dosis

16.2.2 SISTEMA DE DOSIFICACION POR TIEMPO Y PESO.

Dosis exactas. Para la implementacin de este sistema se hace necesario la


implementacin de un sistema sensor de nivel en el tanque de almacenamiento
que provee de liquido al sistema de dosificado. A fin de lograr dosificaciones
exactas es importante entender que la velocidad con que el fluido sale de
tanque al caer por gravedad dependen de la masa de lquido que existe sobre
el punto mas bajo del lquido ya que la presin ejercida cambia en funcin al

nivel y es directamente proporcional de manera lineal. Por lo tanto la velocidad


de salida cambiara segn la cantidad de lquido alojada en el tanque para el
instante de anlisis. Por esta razn el simple hecho de manejar un tiempo de
apertura no va a garantizar el dosificado de alta exactitud, a medida que el
lquido desciende de nivel la velocidad disminuye y las dosis sern cada vez
ms pequeas.

Recordando que la presin depende exclusivamente de la altura podramos


pensar que en determinados casos dicha variacin de dosificacin puede llegar
a no ser tan relevante lo que implica que el sistema por tiempo podra funcionar
para la dosificacin exacta. En tal caso procedemos a implementar el sistema
anteriormente explicado.

Para el caso en que si resulta relevante la altura del tanque y las dosis
requieren alta exactitud debemos implementar un sensado anlogo del nivel.
Para ello implementamos un a celda de carga explicada en el numeral referido
a sensor de nivel. Claro que en este caso un elemento controlador (PIC)
deber sensar el lquido en todo momento y as mismo determinar el tiempo
que debe abrir la vlvula para proporcionar la dosificacin requerida. La
ecuacin que rige el comportamiento puede ser generalizada pero el factor de
relacin entre peso y el tiempo de dosificado debe ser ingresado por el usuario
y deber ser producto de la practica, por lo tanto el ensamble de este sistema
requerir que se hagan las pruebas pertinentes. Tenga en cuenta que este
factor de relacin es funcin de la viscosidad del fluido y a su vez del nivel de
lquido alojado en el tanque.

Tiempo = peso * (factor de relacin). El peso puede ser variado por software de
tal modo que se presente al usuario como la relacin Tiempo = volumen *
(factor de relacin).

16.3 SISTEMA DOSIFICADO POR SUCCION

Fig.70 Sistema dosificado por succion

El sistema de dosificacin consiste en un envase de dosificacin que tiene una


capacidad de un litro. El envase tiene dos orificios, por uno entra el lquido del
tanque y por el otro sale lquido dosificado. La entrega de la dosis se hace tipo
jeringa y por medio de un actuador (cilindro) neumtico que es controlado en el
sistema. Este cilindro a su vez lleva una adaptacin especial que permite
empujar el lquido y su vez impide que el lquido se salga del envase
dosificador. Para la salida y entrada de liquido se manejan electro vlvulas tipo
3/2 de retorno por fuelle. Para poder utilizar diferentes dosificaciones se
implementa un elemento deslizable sobre el vstago de pistn que hace
posible actuar un final de carrera para detener el circuito y succionar la
cantidad que se desea nicamente (elemento seleccionador de cantidad de
dosificacin).

16.4 CONTROL DE DOSIFICACION POR FINAL DE CARRERA


Cabe aclarar que el sistema funciona tanto vertical como horizontalmente.

Fig 71.Control de dosificacion por final de carrera

La dosificacin por final de carrera hace que simplemente el pistn no entre


ms de la dosificacin necesaria bloqueando el ingreso de aire en la direccin
de entrada. As que independiente de lo que pase en el control, el pistn
neumtico del cilindro no puede avanzar ms de esa posicin.

5 elementos bsicos son empleados para controlar la salida y entrada de


lquido al dosificador. 2 elementos son utilizados para la manipulacin del
actuador neumtico que es del tipo doble efecto. Estos dos elementos son
electro vlvulas de bronce ya que no es un requerimiento el acero inoxidable en
esta parte de la maquina y esto reduce inmensamente los costos. Como
segunda estancia tenemos el sensor del tipo micro switch (final de carrera) por
medio del cual se censa la cantidad de dosificacin ubicndolo en una posicin
fija y desplazando un elemento deslizable sobre el pistn del actuador, este
hace posible manipular su carrera o dicho de otra forma manipular el
desplazamiento de ese pistn. Por ultimo tenemos los dos elementos faltantes
que son electro vlvulas de 3/8 de pulgada, estas electro vlvulas son en acero
inoxidable ya que entran en contacto con el liquido. El proceso de dosificado y
empuje de liquido es el siguiente.

El control exige que la dosis esta completa para proceder a empujar por tanto
el switch del sensor deba abrir el circuito de empuje mientras la llena la dosis.
Luego del llenado de la dosis es posible empujar lquido. Este empuje exige a
su vez un tiempo suficiente para empujar todo el liquido por lo que un
temporizador graduable esta presente en esta parte de control para asegurar el
completo vaciado del dosificador.

Paso por paso, a la vez que la vlvula de entrada al dosificador se abre


inmediatamente el actuador entra, proporcionando al sistema una succin que
hace ms rpido el llenado de la dosis. En este proceso el circuito de empuje
esta abierto impidiendo que la vlvula de salida se abra o que el actuador salga
hasta que el sensor de llenado no indique la carga completa del dosificador
(dosis deseada). En este punto el dosificador queda listo y abre el circuito de
entrada de lquido al dosificador, por lo tanto cierra la vlvula de entrada y para
al actuador en la posicin correcta. En este momento el dosificador esta listo

para dar empuje a una dosis as que en el momento de aplicar la seal de


dosificado, inicia el temporizador as la vez que abre la vlvula de salida y
proporciona la salida del pistn (secuencial mente). Estos dos electos estn
activados mientras el temporizador este activo. Al terminar el temporizador con
su tiempo encendido la vlvula se cierra y el actuador se detiene.

Luego de esto el sistema esta listo esperando el pulso que le indique volver a
cargar dosis. En este punto el circuito de empuje esta abierto por lo tanto no
existe el riesgo de tratar de empujar produciendo un comportamiento errneo al
sistema.

16.4.1 PISTON DOBLE EFECTO

Fig 72.Piston doble efecto

Este nos proporciona una mayor fuerza en el empuje que en la succin


entonces la velocidad de empuje es mayor a la de succin.

16.4.2 PISTON DE DOBLE EFECTO Y DOBLE VSTAGO.

Fig 73 Piston doble efecto y vastago

El inconveniente de este sistema es que la fuerza de empuje se reduce segn


el dimetro del vstago utilizado para el sensado. Pero nos genera un aumento
de la velocidad lo que en ocasiones puede resultar ms conveniente.

16.4.3 CONTROL Y MANDO DEL PISTON

Fig 74.Control y mando del piston

16.4.4 VELOCIDAD SISTEMA DOSIFICADOR POR SUCCION

En el capitulo referido a los cilindros neumticos encontramos un apartado


sobre la velocidad del actuador. La velocidad depende del caudal del
compresor.
Q = V / t = m / t A de esta manera calculamos la velocidad de avance de
nuestro pistn.= v Sabiendo el dimetro de la camisa sabemos el rea y por
consiguiente la velocidad lineal de avance. Podemos calcular as el costo
elctrico que representa la velocidad del deseada relacionando la potencia
neumtica ejercida por el compresor P = Pr * Q con la potencia elctrica.

16.4.5

CIRCUITO

DE

CONTROL

PARA

EL

DOSIFICADOR

COMO

PRODUCTO INDEPENDIENTE

Fig 75.Circuito de control para el dosificador como producto independiente

El sensor S3 es del tipo micro swich y activa un relee en el circuito de control.


Las electrovlvulas de empuje, succin, entrada y salida de lquido son
activadas por medio de reles que activan la correspondiente electro vlvula.
El control del temporizador se hace por medio del 555 con potencimetro.

16.5 DOSIFICADO POR SOPORTE Y TORNILLOS SIN FIN

Al utilizar tornillos o un mecanismo similar, hacemos un desplazamiento al


cilindro de modo que las carreras del pistn son mximas de entrada y
mxima de salida y la dosificacin se ve limitada por la ubicacin del cilindro
que empuja. Entre mas cerca menos dosis.

Fig 76.Dosificado por soporte y tornillos sin fin

Aunque el dosificador puedes ser tanto usado verticalmente como de forma


horizontal que es la ms viable

16.5.1 CONTROL Y MANDO

Fig 77 Control y mando dosificador


Se pretende que la entrada del lquido que viene del tanque sea por un orificio
grande que haga lo ms rpido y eficiente el llenado del recipiente de modo
que la cantidad en el tanque superior no tenga implicaciones en el tiempo
deseado para la carga del dosificador. El liquido se carga rpidamente y como

el dosificador tiene el espacio suficiente para la dosis no tiene problemas con


que este abierto todo el tiempo.

En la parte baja del dosificador el lquido sale por un orificio ms pequeo. Este
tamao se debe al tamao general de las bolsas para empacar este tipo de
lquidos (refrescos). Por esta razn se utiliza el pistn de empuje para
apresurar la salida del producto.
La parte final del pistn de empuje tiene adaptado un cilindro del tamao del
dosificador para impedir que el lquido se salga por los bordes. A su vez esta
adaptacin tiene una altura suficiente para que por el orificio del costado no se
salga lquido por la parte superior. Esta estructura no es necesariamente
maciza pero el peso ayuda a dar un poco mas de presin al empuje pero no es
necesario.

Lo que si es necesario es que la parte baja del dosificador sea de forma algo
cnica, esto ayuda a aminorar la fuerza de reaccin que el liquido ejerce en
contra (reaccin) del empuje del pistn. Este sistema garantiza que el tiempo
de dosificado y empuje es igual para cada ciclo

16.6 SISTEMA DE CONTROL INDEPENDIENTE PARA EL DOSIFICADOR


COMO PRODUCTO UNICO

Se ha diseado un sistema de control solo para el dosificador con el fin de que


este producto pueda ser comercializado en forma independiente. El sistema se
adapta fcilmente al sistema completo en el que un PC tendr el control del
sistema. El modelo que se plantea a continuacin funciono plenamente en la
prctica (a nivel tcnico). El acondicionamiento a la maquina completa se har
en el pulso de ciclo automtico el cual se adapta fcilmente.
Este diseo permite usar los diferentes modelos de dosificado planteados,
cheque/cheque, cheque/vlvula, vlvula 3 vas, vlvula/vlvula, simplemente se
adapta el sistema fsicamente a los requerimientos. El sistema de control es
realizado con PIC, la maquina requiere el uso de electrovalvulas activadora del
pistn de empuje y succin.

16.6.1 SALIDA DEL DOSIFICADOR

Sea cual sea el modelo utilizado el sistema se adapta a cada uno de ellos y
basta con hacer una pequeo cambio en el conexiado de salidas en el sistema.
Es decir que sin hacer ningn cambio en el diseo el usuario tiene la opcin de
conectar a su acomodo segn sea el sistema que desee de salida y entrada de
lquido al dosificador.

Fig 78 Salida del dosificador

Estas vlvulas que debern ser accionadas por medio del de seales de control
en modo automtico y en modo manual se acciona exactamente con el mismo
pulso utilizado por el cilindro que empuja el lquido en el dosificador. De modo
que estas dos operaciones (dosificar y abrir la vlvula) sean simultneas. Por lo
tanto los mandos manuales del dosificador y electro-vlvulas de control deben
estar enclavados mecnicamente o bien accionarse de alguna manera en
forma simultanea. Para el caso en que se utilizan motores se da un tiempo
prudente tal que la apertura de la vlvula se realice primero y luego se realice
el empuje. Al no utilizar presiones muy elevadas es de entender que la ruptura
de una vlvula de estas difcilmente se va a presentar. Los diferentes sistemas
de acondicionamiento se presentaron en el capitulo correspondiente a vlvulas
para el paso de liquido.

16.6.2 SOLUCION CON PIC

Fig 79 Solucion pic dosificador

Igualmente las salidas E1, E2, E3 Y E4 activan un correspondiente relee, que a


su vez activa la correspondiente electro vlvula.
Este sistema permite manejar tiempos mas precisos y constantes (+/-)
TIEMPO.
Posee tambin el pulso de dosificar (P1) y el de empuje (P2). MANUAL

16.6.2.1 DIAGRAMA DE FLUJO PARA EL PROGRAMA EN EL PIC


(Se utiliza la memoria EEPROM para almacenar datos de temporizador)

16.6.3 DISEO DE LA ELECTRONICA DE INTERFASE AL PIC

16.6.3.1 DISEO DE LA FUENTE

Fig 80 Diseo de la fuente

16.6.3.2 INVERSORES DE GIRO

Fig 81.Inversor de giro

16.6.3.3 ACTIVACION DE ELECTROVALVULAS

Fig 82 Activacion de electrovalvulas

16.6.4 CIRCUITO FINAL

Fig 84.Circuito final control de dosificador

16.6.5 MODELO FISICO DE INTERFASE CON EL USUARIO

Fig 85 Modelo fisico de interfase con el usuario

La interfase con el usuario es un panel como se presenta en la figura. El


sistema permite cuadrar los tiempos de succin y empuje a fin de lograr la
mxima eficiencia. Recuerde que el dosificado puede hacerse con final de
carrera o por elementos fijos, en ambos casos el sistema es independiente, es
decir que en el circuito de interfase a las electrovalvulas del pistn se interpone
el sensor o en su defecto se manejan carreras completas. De modo que los
tiempos que se cuadran aqu nicamente nos proporcionan un tiempo
suficiente para que sucedan los acontecimientos. Estos tiempos son cuadrados
de manera prctica y directamente en planta por el usuario. El margen de
tiempo puede ser cambiado en software pero para la aplicacin da la
posibilidad de 0.0s a 5.0 segundos con una sensibilidad de 0.1s.

El sistema nos brinda la posibilidad de manejar un ciclo nico que consistir en


una succin y un empuje respectivamente. Tambin nos brinda el ciclo
automtico el cual es realizar ciclos nicos indiscriminadamente mientras el
pulsador de automtico este encendido. Para esta operacin automtica se
utiliza el tiempo de espera entre ciclos que es tambin graduable por medio de

pulsadores. Este tiempo esta dado en segundos y nos da la posibilidad de 0 a


9s de espera entre ciclos.

Una ayuda interesante del sistema es la memoria de procesos. El sistema es


capaz de guardar en memoria 9 secuencias diferentes las cuales son
programable y a la vez pueden ser cargadas. Siempre que se apaga la
maquina la secuencia 1 guarda el estado actual de maquina as que un apagn
de luz no permitir que la secuencia cuadrada se nos pierda. Por medio de los
pulsadores de secuencia puedo cargar una secuencia preestablecida,
simplemente visualizo la secuencia deseada y pulsa cargar e inmediatamente
la secuencia guardada en esa secuencia se carga en los valores de tiempo
succin, empuje y espera. Para guardar una secuencia basta con designar en
los visualizadores los tiempos deseados de empuje, succin y espera. Lugo
varia la secuencia buscando la secuencia en la que se desea guardar su nueva
combinacin y pulsar el pulsador guardar e inmediatamente la combinacin que
se visualiza queda almacenada en esa secuencia.

El sistema posee un par de pulsadores (empuje y succin) por medio de los


cuales se puede manipular el dosificador al acomodo. Puede hacer la succin o
bien el empuje indiscriminadamente. Tenga en cuenta que estos no aplican si
el sistema se encuentra en estado de ciclo automtico. Al igual que el pulsador
de ciclo nico estos poseen borneras adicionales por medio de las cuales
puedo manipular los pulso desde un sitio mas remoto y no propiamente en el
panel de manejo. As que la persona desde la zona de trabajo podr manipular
los pulsadores de ciclo nico, empuje, succin del dosificador.

La secuencia del ciclo puede trabajar de 2 formas: la primera de ellas es


realizar la succin y luego el empuje o realizar el empuje y luego la succin, en
tal caso el sistema detenido tendr una carga lista para empujar. La utilizacin
de un modelo u otro depender del usuario ya que la utilizacin de una u otra
puede ser relevante en cuanto a los tiempos de trabajo. El sistema se adapta
fcilmente a ambos modelos y simplemente en la bornera de salida invertimos
las conexiones de empuje y succin dejando as el sistema listo para trabajar
en la forma deseada.

Es importante tener en cuenta que las entradas estn todas aseguradas en 0v


de modo que se activan si reciben un 1. Para efectos del ejercicio prctico del
software note que algunas de las entradas estn negadas es decir que se
activan con 0v y se aseguran 5v. esto se debe a que algunos pulsadores
usados en la practica eran normalmente cerrados as que aunque el circuito es
el mismo y no cambia la conexin el dato debe leerse negado. Simplemente
cambiando la instruccin btfss por btfsc cambiamos esa lgica.

17. SISTEMAS DE CONTROL PARA EL SELLADO

Fig 86 Sistemas de control para el sellado

17.1 RESISTENCIA DE CALENTAMIENTO RAPIDO

Esta resistencia tiene la cualidad de manejar una resistencia baja. As que de


forma muy rpida llega a una alta temperatura. Esto implica una eficiencia alta
en cuanto a la velocidad de trabajo manejada adicionalmente con un alto
consumo de energa. Por este motivo el sistema se utiliza con temporizado de
modo que producimos calentamiento rpido para sellar y luego de forma
temporizada apagamos la resistencia para producir el sellado en fro.

Para el manejo de esta resistencia utilizamos el siguiente modelo de control.

Fig 87.Control resistencia calentamiento rapido

En el momento de realizar el sellado la resistencia se encuentra fra. Al bajar la


palanca se presiona un microswitch (S) que acciona el circuito inmediatamente
calentando la resistencia y sellando en caliente. Al mismo tiempo el
temporizador on-delay se activa con un tiempo predeterminado. Luego de este
pasado este tiempo los contactos del temporizador actan nuevamente
abriendo

el

circuito

la

resistencia

selladora

acta

se

detiene

momentneamente hasta que la selladora sea abierta nuevamente.

fig 88 ubicacin microswitch

El circuito de control es explicado de forma mas completa en la seccin 11.5.


Al hacer el control con PC podremos de forma sencilla controlar el encendido y
apagado de la resistencia.
Este tipo de sistema hace que el consumo de energa no sea tan alto en caso
de que la frecuencia de trabajo no sea muy alta. Para procesos de alta
velocidad utilizamos resistencias en calentamiento continuo o lento.

17.2 RESISTENCIA DE CALENTAMIENTO LENTO

La resistencia de calentamiento lento es llamada as dado que el proceso de


calentamiento es en forma lenta. As que este tipo de resistencia se utiliza con
un calentamiento continuo es decir a una misma temperatura durante todo el
proceso. As que inicialmente el usuario deja que las mordazas de selle lleguen
a la temperatura de trabajo para luego comenzar con el trabajo de modo que
las resistencias estarn calientes todo el tiempo. Los tiempos de calentamiento
inicial que son alrededor de 30 minutos. De modo que todo el trabajo se hace
con la resistencia en caliente. Esto produce un consumo mas elevado de
corriente y por lo tanto mas costos de operacin. Pero se utiliza bsicamente
cuando el proceso es de alta velocidad, es decir que la frecuencia de sellado es
mucho mas elevada y el sistema de calentamiento rpido resultara ineficiente
ya que el incremento de la frecuencia hara que prender y apagar resultase en
un alto consumo de elementos de control lo que incrementa costos y al vez
hace ineficiente al sistema.

17.3 ACONDICIONAMIENTO DE TEMPERATURA

Para dar forma al selle se utilizan unas mordazas a las que se acondicionan las
resistencias de sellado. Estas mordazas son hechas en bronce ya que este
material permite a la temperatura disolverse de forma mas uniforme sobre
dicho material. adems de esto en el momento de producir el selle el papel de
la bolsa de empaque puede adherirse al bronce as que para ello se utiliza
tefln como recubrimiento al bronce ya que este que es un material que soporta
las altas temperaturas y a la vez impide que la bolsa se pegue a las mordazas.

En la instalacin de las mordazas es necesario que el bronce se asle


igualmente de la estructura de soporte ya que debemos impedir que la
estructura de soporte se caliente evitando el riesgo para el usuario de
quemarse con esta estructura que por su material disipara el calor de forma
continua y resulta antiergonomico.

17.4 SENSOR DE BOLSA PARA SELLE AUTOMATICO

El sensor a utilizar es una fotocelda ya que esta permite detectar variaciones


del color. El tubo de bolsa previamente diseado con todo y estampado lleva
una raya, generalmente en azul. Esto garantiza que aunque una bolsa sea mas
grande que otra existe un punto de referencia que toma en cuenta el sistema
para actuar y sellar.

Fig 89.Punto de corte en bolsa

La fotocelda usada puede ser tipo digital que nos da un valor de 1/0 o bien
anloga. En ambos casos el acondicionamiento se hace por medio de un
comparador de modo que al PC llegue una seal de 5V o 0V.

Fig 90.Acondicionamiento sensor bolsa


17.5 CONTROL DE TEMPERATURA PARA LAS SELLADORAS

Existen varios sistemas para el control de la temperatura en las resistencias


selladoras. Tambin debemos tener en cuenta el modelo empleado. Si se
utiliza en el sistema temperatura constante o calentamiento rpido.

Para el caso de resistencias de calentamiento rpido, se efectan ciclos de


encendido y apagado. En el proceso del sellado se sella un tiempo en caliente
y un tiempo en fro por que el control en este caso se hace por medio de
temporizadores.

As que en el momento del sellado un sensor de algn tipo, que


preferiblemente ser final de carrera por su economa, dar inicio al
calentamiento de la resistencia un tiempo para luego apagarla y permitir un
espacio de sellado en fro. El circuito controlador seria bsicamente el
siguiente.

Fig 91.Control de temperatura para las selladoras

S nos indica el microswitch de activacin del sistema. T es un temporizador


on delay que al ser energizado acciona el contacto auxiliar asociado. Un rele
K es el encargado de manejar la corriente en la resistencia de sellado por
medio del contacto N.O normalmente abierto.

Ntese que mientras S no sea soltado el sistema queda en inactividad por lo


tanto la resistencia apagada. En el momento de soltar S el sistema queda
nuevamente listo para empezar de nuevo.

En la parte de la alimentacin general se ha dispuesto un pulsador de


enclavamiento mecnico para energizar o desenergizar el sistema por
completo.

Los sistemas de calentamiento rpido se utilizan en ciclos de trabajo no tan


rpidos de modo que se da una disminucin notable en el consumo de energa.
Tener un sistema de calentamiento constante implicara muchos mas gastos de
luz.

En este caso el operario debe hacer uso de su practica para determinar los
tiempos correspondientes para el calentamiento a miras de no daar el papel
de empaque y proporcionar a su vez el selle correcto.

En otro modelo podemos controlar por medio de la comparacin como lo hace


un pirometro. En este sistema de control, se sensa la variable a controlar
(temperatura) y por medio de una comparacin con un set point determinamos
si se enciende o no la resistencia de sellado presentando una grafica como la
siguiente en la que podemos analizar el comportamiento real de la temperatura
sobre el resistor. Notamos una leve variacin alrededor del valor deseado.
Igualmente apreciamos como el circuito de control genera el on / off de
encendido y apagado de la conmutacin de corriente hacia la resistencia.

Fig 92.Osilacion on/off alrededor punto equilibrio

los elementos empleados para realizar el control conforme al especificado


comportamiento de un control de este tipo utilizamos, una termoresistencia, un
potencimetro para el set point y un comparador que en su salida acopla una
interfase de corriente para manejar una carga de mayor amperaje. Esta
interfase por medio de un optocoplador optotriac y el triac correspondiente con
la corriente de operacin. Esta corriente generalmente no excede los 15Amp.
El circuito sigue como lo muestra la siguiente figura.

Fig 93.Control on/off

En el circuito presentado vemos un termistor que ser el encargado de actuar


como sensor de temperatura. El termistior utilizado es tipo J ya que este tipo de
termistor es el mas comercial y econmicamente mas accesible. En este tipo
de termistores encontramos que manejan temperaturas de 0 a ms de 1000
lo que para nuestro caso es ms que suficiente ya que manejamos
temperaturas en el rango de los 50 a los 300. El acondicionamiento es el
descrito en la figura anterior.

La variacin de la temperatura proporciona un cambio en la resistencia del


sensor lo que implica un cambio de voltaje en el punto + de entrada al
comparador. En la entrada - del comparador colocamos un set poitnt que
puede ser proporcionado por medio de un potencimetro el cual permitir la
seleccin de la temperatura deseada. Cabe resaltar que la termoresistencia
puede tener un comportamiento positivo o negativo, es decir que del tipo
positivo el incremento de temperatura proporciona un incremento en la
resistencia. En el caso del tipo negativo, mientras la temperatura aumenta la
resistencia baja.

Recuerde que esta relacin generalmente no es lineal lo que implica la


seleccin de la termoresistencia para el trabajo en determinadas zonas de
trabajo. De lo contrario exige un acondicionamiento adicional en el que se
procede a linealizar la zona de trabajo con los diferentes mtodos de
linealizacion que existen.
Este modelo presenta fallas referentes a la variacin de la temperatura en el
punto de sellado. Ya que en el momento en que la resistencia empieza a
cambiar su temperatura dado que es un sistema on/off, es decir se aplica toda
la corriente y no, sucede que en el momento en que el comparador sensa que
se ha superado la temperatura deseada, auque inmediatamente desactiva la
seal de contacto, el resistor se encontraba en proceso de calentamiento lo
que hace no cambie inmediatamente sino que una especie de histresis hace
que se presente un sobrepico de temperatura al valor deseado y de igual forma
en el momento del enfriamiento tambin se da esta histresis de sobrepico
indeseado. En la prctica se observa que en el proceso de calentamiento la

histresis es un poco ms pronunciada. Mas sin embargo se da una variacin


de alrededor de 50 C lo que representa un mal funcionamiento del sistema de
sellado y una cantidad considerable de empaque daado.

Fig 94.Error execivo

Para mantener una temperatura ms constante sobre la resistencia es


necesario entonces hacer una variacin en el nivel de voltaje que se aplica a la
resistencia. Esto puede hacerse por medio de un sistema PWM que
proporcione un voltaje promedio de modo que se mantiene una temperatura
ms constante y por consiguiente conseguimos una curva con mayor
estabilidad.

Fig 95 Funcion del pwm

Note que al utilizar una corriente alterna de 60Hz es indispensable que


tengamos el sincronismo con la red elctrica. El control es diseado con pic.
Por medio de 2 entradas maneja el + - con los que se controla el nivel de
voltaje promedio a la salida o bien el tiempo de activacin y desactivacin; Por
medio de una entrada anloga puedo detectar el cruce por cero de la red que
sincroniza mi pic con la misma. Los datos que se dan al sistema son en
porcentaje de modo que de un voltaje mximo escalizamos una salida en
porcentaje y as sabemos exactamente cuanto tenemos a la salida del sistema.

17.5.1 CIRCUITO ELECTRONICO DE CONTROL

Fig 96.Circuito electronico de control


Para generar una interfase al computador de modo que este sistema queda
enlazado al sistema principal de control de la maquina se tiene las siguiente
consideracin. El tiempo de ciclo y tiempo de sellado se manejan con
calentamiento un tiempo definido y enfriamiento otro tiempo dado. Para cumplir
con este requisito alimentamos y no la resistencia por medio de un contacto
controlable (TRIAC). Se impide y no el paso de corriente a la resistencia
independientemente de la temperatura que este manejando. En nuestro circuito
inicial adicionamos pues el TRIAC controlado por PC.

Fig 97 Circuito electronico de control y cortado por pc

Podemos incluir la visualizacin del porcentaje de potencia que suministramos


a la resistencia con visualizadores de 7 segmentos. Dada la velocidad del pic
(20MHz) el tiempo que emplea para visualizar es despreciable. Simplemente
adherimos al circuito principal la visualizacin utilizando el puerto B como
salida.

Fig 98.visualizacion con decodificador

Fig 99.Modelo con visualizacion dinamica

17.5.2 IMPLEMENTACION RESULTANTE PARA EL SISTEMA

Fig 100.Circuito electronico de control de temperatura

Es recomendable colocar un fusible en serie de 500 mA en serie a la entrada


de la fase del transformador. En la etapa de potencia puede tambin manejar
fusible a fin de evitar que se dae el triac o algn elemento de la etapa de
potencia como el rel o el optocoplador.

17.5.3 INTERFASE AL USUARIO

Fig 101.Interfase al usuario


La interfase al usuario brinda la posibilidad + - con la que se varia
porcentualmente la salida referente a la salida mxima. El pulsador indicado
como mximo permite que al utilizar resistencias de calentamiento lento
ejecutemos 2 etapas en el proceso, en donde en la primera etapa llevamos la
resistencia rpidamente a una temperatura calculada por el operario e
inmediatamente despus pone en off dando paso a que el sistema trabaje para
lo que esta propuesto.

17.5.4 LOGICA DEL PROGRAMA DEL PIC

18 CONTROL E INTEGRACION DE PROCESOS

El control central de la maquina es realizado por medio de una computadora.


18.1 DESCRIPCIN DEL PC UTILIZADO:

Procesador 386 o 486 (166MHz)


Pantalla monocromtica 14 pulgadas
8 o 16 MHz de memoria RAM
Entorno D.O.S (sistema operativo)
Teclado estndar

Se utiliza el puerto paralelo para la interfase con la maquina y los programas de


operacin hechos en lenguaje de programacin C (Turbo C). Esta interfase se
realiza con un DB25 utilizando 8 salidas y 5 entradas. La computadora posee
hasta 3 puertos paralelos lo que triplica el nmero de entradas y salidas.

El hecho que se utilice este tipo de computadoras ya descontinuadas da la


ventaja que resultan muy econmicas, al trabajar en entorno D.O.S se evitan
los costos por licencias ya que Microsoft exige licencia de producto en sistemas
operativos mas avanzados que Windows 98. La velocidad de operacin es un
punto tampoco relevante y la velocidad de la maquina es mas que suficiente
para el sistema en cuestin.

El programa desarrollado permite diferentes tipos de operacin, desde un


manejo puramente manual con elementos externos o si lo prefiere directamente
con el teclado y permite a su vez el modo automtico de dosificado y sellado.

El software de trabajo permite la seleccin de modo discreto del tiempo de


sellado y ciclo de sellado. Tambin permite la visualizacin de un contador que
indica el numero de ciclos de sellado realizados.

Otra gran ventaja de utilizar el software es el hecho de manejar una base de


datos que permite sacar algunos reportes especiales y

algunos manejos

contables que aunque muy sencillos, muy prcticos para el operador.

18.2 INTERFASE PARA SALIDAS PC

Vamos a utilizar el puerto paralelo por lo tanto debemos implementar un driver


de salida del puerto que se conectara a las interfases de salida
correspondientes. De igual manera las interfases de entrada al PC ya han sido
planteadas en el transcurso de este trabajo.

Fig 102.Acondicionamiento DB25 del PC

Dado que el PC arroja un nivel de voltaje de 0 y 5 V debemos acondicionar


estos voltajes de salida para accionar elementos que requieren un voltaje
mayor para su activacin,

por lo tanto es necesario hacer un circuito

electrnico que permita cambiar estos voltajes de 5 V a los niveles de voltajes


necesarios.

18.2.1ACONDICIONAMIENTO PARA NIVELES DC

Fig 103.Acondicionamiento para niveles dc

18.2.2 ACONDICIONAMIENTO PARA SEALES A.C

Fig 104.Acondicionamiento para niveles ac

18.2.3 CONTROL ELECTROVALVULA DE LQUIDO

Asumimos que para el control de lquido vamos a utilizar una seal de control,
independientemente del sistema implementado. En el software la aplicacin de
apertura puede ser para vlvula de 3 vas manejada con pistn de simple
efecto. Pero en el caso de dar solucin con otro sistema simplemente en el
software al momento de abrir o cerrar se plantean en forma de funciona si que
en ella se realizan los cambios necesarios y nuestro circuito de control por PC
puede ser fcilmente adaptable a cualquiera de los sistemas planteados.

Fig 105.Control vlvula de liquido

18.3 DIAGRAMA DE FLUJO DE LA LOGICA SEL SISTEMA

En el circuito anterior, en el momento que se esta sellando se dosifica (entrega


el liquido) entre el tiempo de selle y el tiempo de corte. Si el tiempo de selle
(caliente) fuese muy corto y la maquina no lograra dosificar la cantidad

necesaria debemos hacer el cambio en el algoritmo y dosificar despus de todo


el tiempo completo de ciclo como lo muestra el siguiente diagrama.

18.4 PROGRAMAS

18.4.1PROGRAMA

DE

VERIFICACION

DE

ACCIONAMIENTOS

DEL

SISTEMA

Permite al usuario la manipulacin de forma manual de los elementos


controlados por el PC. Puede ser utilizado tanto para verificar el correcto
funcionamiento de los actuadores, como para manejar la maquina en forma
manual si fuese el caso (de no utilizar los pulsadores externos que la maquina
tiene para dicha tarea).

El programa muestra como el dato ingresado es llevado al puerto paralelo


segn la tarea que se realiza al ingresar por teclado los nmeros 1,2,3,4 o 0
(otra informacin no produce efecto alguno). El software escribe el dato en la
salida del puerto paralelo. All se tiene el dato de activacin o no activacin de
la vlvula, dosificador, sellador y resistencia.

Tambin es posible verificar el correcto funcionamiento de las entradas al


sistema de control que son el sensor de lquido, sensor de papel, sensor bolsita
y el switch externo.

En la grafica vemos como al activarse una entrada nos muestra que esta en
ON y si esta apagada muestra el OFF.

18.4.2 PROGRAMA PARA CONFIGURACION DE LA MAQUINA

El programa permite configurar el funcionamiento de la maquina. Podemos


configurar el sellado donde se sella un tiempo en caliente y luego permanece el
sistema de sellado cerrado pero con la resistencia en fro. A esto lo llamamos
tiempo de selle (en caliente) y el tiempo de ciclo es la suma del tiempo en
caliente y el tiempo en fro.

El tiempo de espera que nos ayuda a cuadrar el punto exacto donde el sellador
debe cerrarse. Luego de que el sensor de bolsita detecta es posible que no
inmediatamente debamos cerrar el selle, es por esto que este tiempo sirve para
dar la exactitud del punto de selle. Si deseamos trabajar en caliente todo el
tiempo, simplemente hacemos que el tiempo de selle sea el mismo tiempo de
ciclo, de esta manera la resistencia permanecer caliente todo el tiempo.

El tiempo de espera es un tiempo que se emplea en caso de una falla externa.


El sistema espera un tiempo la deteccin de la bolsita si despus de un tiempo
definido la maquina no detecta nada pone el sistema en estado inicial y sale
abruptamente.

El tiempo de calentamiento inicial es un tiempo en el que la resistencia debe


calentarse y estar lista para trabajar correctamente.

La opcin de contador actual trabaja igual que las anteriores y permite al


usuario cambiar el contador en caso de algn pequeo descuadre en el conteo
que puede darse por causas externas.

Tenemos tambin la opcin 7 que nos permite visualizar configuraciones


previamente definidas. Estas previas configuraciones podemos seleccionarlas y
cargarlas al sistema o bien en caso dado podemos eliminar alguna de ellas.

MENU

SELECCIONAR

ELIMINAR

VISUALIZAR

La opcin 8 nos permite guardar la configuracin actual la cual nos muestra en


pantalla

La opcin 9 nos permite resetear el contador esta opcin es restringida de tal


modo que obligue al usuario a dar datos como la fecha de la cantidad pasada y
esta informacin pueda guardarse en una base de datos.

18.4.3 PROGRAMA PRINCIPAL

El programa principal es el que hace el control automtico de la maquina. Para


este caso al software se le anulan las partes del manejo de entradas al puerto
simplemente dejndolas como comentarios para que podamos ver como
trabajar el sistema. El programa lleva un acondicionamiento especial para la
simulacin.

En la simulacin damos un nmero inicial que simplemente es un nmero que


define un dato aleatorio que hace que el proceso pare por falta de papel,
lquido o simplemente una salida correcta del mismo por medio del switch
externo.

Vemos el contador, vlvula que puede estar abierta o cerrada, dosificador


(cilindro) que puede estar afuera (empujando) o adentro (succionando), el
sellador que es el cilindro que esta esperando (afuera) o adentro (sellando) y la
resistencia que puede estar caliente (ON) o fra (OFF).

ESTADO INICIAL

La maquina comienza a trabajar solo si el switch externo esta en modo


automtico y si se ha verificado correctamente que halla liquido y papel.

Luego de esto viene el calentamiento inicial. El sistema muestra de manera


decreciente el conteo.

Luego de este tiempo comienza el programa a trabajar.

Primero entrega una dosis

Luego espera a que el sensor de bolsita sea activado

Inmediatamente despus de que sensa que la bolsa va en camino da un


tiempo de espera que lo que hace es cuadrar el punto exacto del corte.

Luego de este tiempo sella en caliente y a la vez entra el cilindro del dosificador
produciendo una succin de lquido. Tambin se produce el cierre de la vlvula
en el dosificador.

Luego que ya se dio el tiempo de selle en caliente ahora se procede al ciclo de


selle en fro. A su vez el dosificador que ya a tenido tiempo de cargar la dosis
entrega lquido esto hace que se optimice el tiempo de proceso.

Luego de esto el sistema verifica que hay papel y liquido y as puede continuar
y realiza el proceso nuevamente

El sistema contina en su ciclo de trabajo. Pero existen dos maneras en que el


ciclo puede ser interrumpido.

Salida segura que es por medio de un switch externo en la que el operario al


pulsar el switch el hace un ciclo y termina dejando la maquina en estado de
reposo (estado inicial)

FINALIZACION

Y la otra manera en que el programa termina es por detectar que ya no hay


lquido o papel en este caso igualmente realiza un ltimo ciclo y termina.

En todos los casos la maquina queda en estado inicial.

19. SISTEMA DE INFORMACION

El proyecto como tal ofrece el servicio del sistema de informacin, lo que hace
ms llamativo el producto a nivel de comercializacin.
El usuario no cuenta en sus planes la implementacin de un servicio que
proporcione el manejo de base de datos de algn tipo de informacin que
puede ser beneficiosa para el desarrollo de una pequea o mediana empresa
que pretende implementar automatizacin en el proceso de empaque para los
diferentes productos.
En el software presentado para el control de la maquina integrada el sistema ya
nos permite guardar una pequea informacin sobre el proceso de empacado.
As como lo es la produccin que se realiza a diario y alguna programacin
especifica de maquina que pude ser recuperada segn se desee.

El sistema de informacin esta bsicamente aislado de esa parte del proceso.


El proceso de produccin debe indicar al usuario el trabajo que se realiza y los
ciclos de maquina que se han llevado a cabo. Por lo tanto lo que es el manejo

del inventario y la facturacin, aunque podran integrarse, la practica en el


manejo de inventarios y ventas permite justificar que no es un modelo eficiente
ya que errores cometidos por el usuario podran verse reflejados en un
descontrol total de la informacin que se almacena y manipula por ello se
plantea que este sistema esta aislado y solo se interrelaciona consigo mismo.

El aplicar esta dosis de software al proyecto no representa incremento alguno


en cuanto los costos de elaboracin de un sistema y solo se remite al proceso
inicial de desarrollo, siendo as que este es un producto agregado que no
representa incremento en los costos para un cliente pero si hace que el
producto dosificador sea mas llamativo e interesante para un pequeo o
mediano empresario.

Este software nos va a permitir manejar los procesos de inventario y


facturacin. De modo que el usuario tiene a su disposicin un sistema que le
permite realizar consultas de precios, cantidades en almacn, actualizacin de
precios e inventarios. El sistema le da la posibilidad al cliente de manejar ms
de 20000 productos diferentes lo que en la vida diaria resulta muy extremo.
Por otro lado el cliente maneja producto terminado y materia prima en la que
necesita conocer por una parte el costo de materia prima y los costos
resultantes de venta del producto. Dado que no es un producto nico el que
puede ser empacado se plantea un sistema que puede adaptarse fcilmente de
una u otra forma al beneficio que el sistema en su totalidad ofrece.

Para la implantacin del sistema de informacin se recomienda utilizar un


sistema operativo un poco mas robusto como Windows 95 que le perta al
usuario una interfase mas amigable al manejo del software aunque si lo desea
trabajar en D.O.S puede hacerlo sin ningn inconveniente solo que los
programas deben llamarse por el nombre correspondiente asignado para el
ejecutable.

20. PRESUPUESTOS

Los presupuestos correspondientes a la maquina dependern del sistema a


implementar. En el transcurso de este trabajo se han especificado en cada uno
de los referentes las ventajas econmicas versus la eficiencia que cada uno de
los modelos planteados presenta. Por esta razn solo algunas de las partes del
proyecto bsicas en su desarrollo se especifican en este tem. Y no es un
presupuesto como tal de un modelo especfico sino una referencia econmica a
la fecha de los costos con los que cuenta el mercado y la oferta generada. De
igual forma la mano de obra es un costo agregado que debe tenerse muy en
cuenta ya que el grado tcnico que esta alcanzando el pas hace que cada vez
esta mano de obra cueste aun menos cada da y los costos en materia prima
de igual forma cada vez se compiten mas y por esta razn se considera que
unos costos de referencia pueden ser minimizados en la medida en que se
desarrolle el pas.

BOMBA HP ACERO INOXIDABLE $200.000

TANQUE DE ALMACENAMIENTO 50LT ACERO INOXIDABLE $100.000

ESTRUCTURA DE SOPORTE

$ 40.000

ESTRUCTURA DE SELLE $50.000

MANO DE OBRA ESTRUCTURAS $70.000

RESISTENCIA SELLADO $10.000 X 2

MORDAZAS EN BRONCE PARA SELLE $35.000 X 2

VALVULAS ACERO INOXIDABLE


EMBOLO 2 VIAS $30.000 X 2

MOTOR D.C $20.000 X 2

CONTROL TEMPERATURA $70.000

RELES INDUSTRIALES $10.000 X 5

COMPUTADOR NECESARIO $100.000

DRIVER DE COMUNICACIN AL PC $30.000

PISTON NEUMATICO $100.000 X 2

MANGUERA FLEXIBLE X METRO $1.500 X 20

ELCTROVALVULA CONTROL 3/2 $50.000 X 3

COMPRESOR 1/4 HP $150.000

FRL $120.000

SENSORES NIVEL $20.000

MANGUERA PARA LIQUIDOS X METRO $10000

TOTAL $ 1.580.000

21. ANEXOS

21.1 PROBLEMAS CON EL LQUIDO A EMPACAR

Teniendo en cuenta que como los lquidos que sern utilizados estn
compuestos por azcar, anilina, colorante, saborizante y dems ingredientes,
se hace necesario que en el tanque grande exista una especie de gancho en
acero inoxidable que haga la funcin de batidor, con el fin de que las sustancia
est siempre homognea y sus componentes no se retengan en el fondo del
tanque,

debido a que algunos de estos componentes no solamente son

lquidos sino tambin slidos.

Este batidor esta compuesto por un motor al que se aade un gancho con
aspas de acero inoxidable que se encargarn de batir la sustancia
constantemente.
Bsicamente para el diseo de este batidor debemos tener en cuenta el torque
y velocidad que proporciona.

Podemos especificar que el torque no es muy alto pero la velocidad se


recomienda que si. Por lo tanto debe utilizarse un motor de corriente alterna ya
que estos son los indicados para proporcionar altas velocidades y bajos
torques. As mismo el motor A.C es ms econmico y resulta ms fcil de
conseguir en el comercio.

Otra consideracin importante es que en el momento de mantener


constantemente el lquido en movimiento de forma circular se produce el efecto
de una centrifuga que implicara que el liquido se mantuviese en la parte
alrededor del gancho batidor por lo tanto aunque se requiere una buena
velocidad, no debe excederse los limites necesarios para evitar que esto
suceda adems que es claro que podemos generar derramamiento del liquido
por la parte superior. Especficamente las aspas debern ser del dimetro del
tanque contenedor y as proporcionar una mezcla uniforme y no generar un
centro vaco de lquido. Adems la batidora deber alojar las aspas en forma
intercalada ya que de esta manera resultara mas econmica la estructura a

realizar. Con 2 aspas es ms que suficiente. Adems recuerde que en la parte


inferior del tanque las aspas no deben evitar que el lquido caiga. A groso modo
la estructura ser de la siguiente manera.

Fig 107.Modelo de aspas batidoras

21.2 ERGONOMIA DEL AMBIENTE DE TRABAJO ASOCIADO

DISEO DE PUESTOS DE TRABAJO. Es conveniente colocar soportes


colgantes para suspender las herramientas de uso frecuente en un mismo
lugar, ya que el operador debe aplicar menos fuerza para cargarlas, y requiere
de menos tiempo para tomarla y dejarla. Es conveniente que el puesto de
trabajo permita su ajuste, con el fin de que la altura de trabajo sea la misma o
ligeramente menor que la del codo de cada trabajador que opera en el rea. La
altura de trabajo es la de la superficie donde se realizan las operaciones; si
esta es demasiado alta, es comn identificar incomodidad, cansancio y
lesiones en cuello, hombros y brazos; si es demasiado baja, se puede
presentar lesiones y molestias en la espalda baja Es conveniente limitar el
nmero de pedales en las operaciones cotidianas del trabajo; sin embargo,
cuando sea necesario su utilizacin, es conveniente considerar en su diseo
que: Su nivel sea lo ms cercano posible al nivel del piso y sean del largo
suficiente para su fcil operacin, y que permita ser operados con cualquiera
de los dos pies. Minimice la distancia entre el trabajador y su objeto de trabajo
Asegrese de proporcionar un soporte adecuado para mano y antebrazo
cuando se realicen operaciones de precisin, ya que es importante la
estabilidad de la mano para realizar adecuadamente las operaciones que se
ven afectadas por ligeros movimientos de la mano. En algunas operaciones
tambin es conveniente proporcionar un soporte para la herramienta, lo que

reduce la necesidad de aplicacin de fuerza por parte del usuario y le permite


un mejor control. Proteja a los trabajadores de sustancias qumicas para que
puedan desarrollar su trabajo de forma segura y eficiente; la exposicin a
pinturas, solventes, limpiadores, cidos, pesticidas y gases daa su salud y
disminuye su desempeo y precisin en el trabajo. Al trabajar sentado,
asegrese de que sus brazos bajen en forma vertical o lo ms cercana a esta,
mientras que sus antebrazos queden en forma horizontal, formando un ngulo
recto entre el brazo y el antebrazo. Es importante que los codos queden a la
altura de la superficie de trabajo, o ligeramente arriba de esta, siempre con los
hombros relajados. En caso de no cumplir estas condiciones, se debe ajustar la
altura del asiento, procurando tambin que los pies queden bien apoyados en
el piso o en alguna superficie de soporte adecuado. Las rampas con poca
inclinacin, entre el 5 y 8%, y con superficie antiresbalante representan una
mejor opcin en los sitios de trabajo que pequeas escaleras; las escaleras,
aunque sean de pocos escalones, incrementan el riesgo de accidentes de los
usuarios y no permiten utilizar equipo auxiliar con ruedas en el manejo de
materiales. As mismo, las escaleras dificultan el acceso de personas en sillas
de ruedas, bastones o muletas. Asegrese de que la altura de los tableros de
control, indicadores y botones de emergencia estn a una altura y distancia
adecuada para ser operados por todos los trabajadores. Asegrese de que los
pasillos sean lo suficientemente anchos para permitir el paso en los dos
sentidos al mismo tiempo y que permanezcan libres de objetos que obstruyan o
limiten el paso.

MAQUINAS, HERRAMIENTAS Y EQUIPOS MANUALES La maquina no


deben forzar al usuario a adquirir una posicin inadecuada, como tener que
mantener el codo elevado y el hombro en posiciones no naturales. Las
herramientas y equipos manuales demasiado pesados provocan que el usuario
se fatigue rpidamente y resultan difciles de controlar; en estos casos lo ms
recomendable es utilizar la herramienta con las dos manos, una para soportar
el peso de la herramienta y la otra para controlarla. Las herramientas que son
diseadas para utilizarse con cualquiera de las dos manos permiten que el
usuario las utilice con la mano que ms se acomode, adems de que permiten
alternar el trabajo con ambas manos, lo que disminuye la fatiga y el riesgo de

lesiones al permitir el descanso alternado de manos y brazos. Por la seguridad


de los usuarios, las herramientas manuales donde se aplique fuerza para su
cierre deben contar con topes para proteger la mano de pellizcos; tambin
deben contar con un mango aislante de la electricidad y el calor, adems de
reducir las vibraciones que se puedan transmitir a la mano y brazo. Los
msculos que cierran la mano son ms fuertes que los que la abren, por lo que
es conveniente contar con resortes o dispositivos que ayuden a abrir las
herramientas y las mantengan abiertas.

ILUMINACION. La iluminacin suficiente mejora el confort y desempeo de los


trabajadores, adems de reducir la posibilidad de errores y el riesgo de
accidentes. El nivel de iluminacin depende de la actividad que se realice y el
tiempo para observar los objetos; debe habe un mayor nivel de iluminacin
cuando la actividad sea minuciosa o deba realizarse en forma muy rpida. Para
lugares donde se realizan tareas finas, delicadas o con piezas muy pequeas,
es conveniente utilizar dos tipos de iluminacin: Una para el alumbrado
general, y una especficamente para el rea de trabajo. Un aspecto importante
a cuidar es que la iluminacin para el rea de trabajo no deslumbre o moleste
al trabajador, por lo que debe contar con pantallas y permitir el ajuste de su
altura para adecuarse a las caractersticas de cada usuario. Es importante
verificar que el alumbrado en las reas de trabajo no incida directamente en los
ojos del usuario, o que est a sus espaldas de tal forma que l mismo se
provoque sombra sobre el rea de trabajo. Tambin es conveniente cuidar que
la luz natural de las ventanas no provoque reflejos ni incida sobre los ojos del
usuario No utilice superficies reflejantes en el rea de visin del trabajador, ya
que el reflejo provoca distraccin, incomodidad y fatiga visual. La iluminacin
que proporcionan las ventanas no debe provocar reflejos sobre las pantallas;
no es conveniente que el usuario trabaje de frente a la ventana ni de tal forma
que la luz provoque reflejos sobre el monitor. En caso de no peder tener la
disposicin del mobiliario adecuada con respecto a la ubicacin de la ventana,
esta debe contar con cortinas o persianas que permitan evitar reflejos y
molestias al usuario.

AMBIENTE TERMICO Se requiere de un clima adecuado para realizar un


trabajo de forma eficiente. La temperatura ambiente de confort en verano es
entre los 20 y 22 C, ya que temperaturas mayores pueden provocar cansancio
y somnolencia. La condicin de humedad relativa ambiental ms cmoda para
el ser humano es cercana al 50%; cuando es muy elevada, es difcil la
evaporacin del sudor y la resistencia del ser humano a altas temperaturas se
reduce. Para evitar esta situacin es conveniente mejorar la ventilacin del
lugar de trabajo. As mismo, cuando la humedad relativa es muy baja, hay una
excesiva evaporacin del sudor y se resecan las membranas mucosas, como
las de nariz y boca; en esta situacin es conveniente incrementar artificialmente
la humedad del lugar. El propsito principal de la ventilacin es proveer aire
fresco, remover los gases contaminantes y mantener una temperatura
adecuada en el sitio de trabajo. Para que la velocidad del aire sea confortable
en las reas de trabajo debe ser entre 0.2 y 0.5 metros por segundo, aunque
depende de la temperatura y humedad del ambiente. La temperatura ambiental
adecuada para el sitio de trabajo depende del tipo e intensidad de la tarea que
se desarrolle en l; para un tipo de trabajo como el de oficinas, donde la
demanda fsica es ligera, la temperatura ambiente debe estar entre los 19 y 21
C, pero para un trabajo industrial de gran demanda fsica se recomienda una
temperatura ambiente entre los 12 y 16 C.

AMBIENTE SONORO. Asle las fuentes de ruido para que no resulte molesto a
los trabajadores que realizan sus labores en el rea cercana y disminuya el
nivel del ruido ambiental. Revise que las cubiertas de los equipos estn bien
colocadas y ajustadas para evitar el ruido que provoca su vibracin. Los pisos
deben ser de materiales que resulten seguros para transitar y proporcionen el
soporte adecuado para la actividad que se realiza, pero su diseo y el material
no deben generar elevados niveles de ruido al transitar por ellos. Las conchas
para proteccin auditiva representan una mejor proteccin a los niveles
elevados de ruido que los tapones para odos, y permiten su combinacin
adems para los supervisores es fcil monitorear su uso y no se mueven
fcilmente de su lugar. Aunque el odo presenta una forma de proteccin
natural cuando se le somete a niveles elevados de ruido continuo, se debe
evitar los ruidos de impacto, ya que representan un gran riesgo al no permitir

que accione su mecanismo de proteccin. Coloque barreras para contener el


sonido y que no afecte a personas sin proteccin auditiva en otras reas de
trabajo o pasillos cercanos lo que resultara muy til en el caso del uso de
compresores.

CONTROLES E INDICADORES. Asegrese que los controles e indicadores


importantes estn al frente del operador para que no tenga que girar los
brazos, cabeza, cuello o espalda para verlos y alcanzarlos. Es conveniente
colocar dentro del rea primaria los controles de mayor importancia, y los
dems en dentro del rea secundaria. La lectura incorrecta de los indicadores
en los tableros de control puede resultar crtica y peligrosa para los usuarios, el
proceso y los productos. Asegrese que los controles e indicadores sean
fciles de distinguir y que la visibilidad de sus indicadores (punteros, caracteres
o nmeros) sea adecuada para las condiciones de trabajo. En algunas
ocasiones es conveniente seleccionar la posicin "normal" de los indicadores
de tal forma que queden alineados, lo que facilita la identificacin de
situaciones "fuera de lo normal". Asegrese que las seales, controles y
apagadores sean fciles de ver, de leer y de entender. Asegrese que los
controles de encendido sean difciles de accionar por accidente, y que los
controles de apagado sean fciles de localizar y accionar. En los indicadores se
debe evitar escalas mltiples o no-lineales. Los nmeros, marcas de escala y
unidades deben ser claramente distinguibles desde la distancia a la que el
operador normalmente realiza la lectura, adems debe ser fcilmente
distinguible el apuntador y la lectura que indica. Es conveniente reforzar con
otro color la informacin que recibe el usuario sobre situaciones crticas o
peligrosas. Los indicadores analgicos son ms fciles de interpretar por el
usuario cuando no se requiere una lectura precisa del valor indicado; la
posicin de la aguja y el color de la zona donde se encuentra permiten
identificar rpidamente la situacin sin tener que interpretar el significado de la
medicin; por el contrario, si se requiere una lectura precisa de la medicin
indicada, es ms conveniente utilizar uno digital. La mejor ubicacin para los
controles manuales e indicadores es a una altura entre la cadera y el hombro,
as como a una distancia mxima de la longitud del brazo del usuario, desde su
posicin normal de trabajo. Asegurese que los elementos de control sean del

tamao, forma y diseo adecuados para las condiciones en que van a ser
utilizados, considerando que el usuario pueda utilizarlos con el equipo de
seguridad y proteccin personal requerido para la tarea que desarrolla.
Asegrese de que los trabajadores conozcan el significado de las seales de
los tableros de control y que estn capacitados para actuar ante ellas. Tambin
es importante no saturar de informacin por medio de estas seales al
operador. Si el control nicamente responde a dos opciones, como apagado y
encendido, un botn de pulsacin, pedal o interruptor de dos posiciones es el
tipo de control indicado; si se requiere de control gradual o existen ms
opciones no es conveniente utilizar este tipo de controles.

MOVIMIENTO MANUAL DE CARGAS. Evite flexionar o rotar la espalda


cuando desarrolle actividades de manejo manual de cargas, ya que estos
movimientos incrementan la fatiga y el riesgo de lesin en cuello, hombros y
espalda. Asegrese que los paquetes y contenedores que van a manejarse y
transportarse manualmente cuenten con puntos adecuados de agarre, tanto en
dimensiones como en acabado. El movimiento manual de cargas resulta ms
fcil, rpido y seguro si los objetos cuentan con una forma adecuada de agarre
y sujecin. Representa menos riesgo de lesiones en la espalda baja el empujar
o jalar horizontalmente los objetos a mover, que cargarlos para levantarlos y
bajarlos en forma vertical. El movimiento horizontal de objetos es ms eficiente
y permite un mejor control del trabajo, ya que el trabajador no necesita aplicar
tanta fuerza como al cargar el objeto. As mismo, el empujar o jalar cargas es
ms seguro y efectivo si el movimiento se realiza enfrente del cuerpo y no en
forma lateral. Sin embargo, se debe reducir al mnimo posible el movimiento
manual de cargas pesadas. Indique de forma clara, explicita y redundante
cuando el peso de los elementos represente un riesgo de lesin al tratar de
cargarlos o moverlos en forma manual. Es conveniente revisar que los
contenedores para movimiento manual de cargas no presenten bordes afilados
o que puedan lastimar, cortar o lesionar a quien los utiliza. Este aspecto debe
ser cuidado durante el diseo de los contenedores, pero tambin deben
realizarse revisiones peridicas para evitar utilizar contenedores maltratados o
desgastados por el uso, y que puedan lesionar a sus usuarios. En el diseo de
contenedores hay que considerar que sus dimensiones no sean excesivas para

que lo transporte una persona. En caso de que el contenedor sea mayor a 75


centmetros de largo o 50 centmetros de ancho, se debe considerar en el
diseo que va a ser transportado por ms de una persona, contando con los
suficientes

medios

de

agarre

para

varios

operadores

distribuidos

adecuadamente alrededor del contenedor. Al cargar objetos en forma manual,


acrquese al objeto lo ms posible y apoye los pies separados para mantener
un buen equilibrio. Es preferible en el movimiento manual de cargas repartir
simtricamente el peso entre ambos brazos y mantener las cargas lo ms
cercano posible al cuerpo. Evite girar cargando objetos pesados cuando se
encuentre sentado. Asegrese que el diseo y tamao de las agarraderas
permiten un adecuado agarre por parte del usuario, incluso cuando utiliza
guantes.

EQUIPOS DE PROTECCION PERSONAL. Es importante que el equipo de


proteccin personal sea del tamao adecuado del usuario; en el caso de los
guantes de trabajo, el trabajador tiene que aplicar hasta 20% ms de fuerza si
no son de su tamao. El equipo de proteccin personal debe ser de fcil
mantenimiento y limpieza por parte del usuario; tambin se debe realizar
inspecciones peridicas y frecuentes de sus condiciones, para renovarlos en
caso de deterioro que represente algn riesgo para el trabajador. Asegurese
que el personal utilice el equipo de proteccin regularmente proporcionndole
una adecuada informacin y entrenamiento sobre su uso, la forma de ajustarlo,
inspeccionarlo, limpiarlo y mantenerlo. Adems, es conveniente que el personal
est informado de los riesgos que se pueden presentar en su trabajo y la forma
de protegerse de ellos. El calzado de seguridad debe utilizarse en las
actividades donde haya algn riesgo de accidente en los pies y de conformidad
con la legislacin local vigente. En forma general, la seleccin de este tipo de
calzado se basa en el riesgo que hay en el lugar de trabajo:

Se utiliza calzado con punta de seguridad para proteger a los pies de riesgos
provocados por la posible cada de objetos o golpes; La suela de seguridad
protege al usuario de lesiones por picos o puntas en el suelo; Si hay riesgo
elctrico y agua o humedad en el piso, se utilizan botas impermeables y
aislantes. Se consideran zapatos al calzado que cubre totalmente el pie, y

botas al tipo de calzado que cubre por lo menos el pie y el tobillo. En


actividades donde se generan chispas o virutas el operador debe utilizar
caretas que le cubran la cara por completo y no nicamente lentes que le
protejan la zona ocular. Asegrese que el equipo de proteccin personal sea
adecuado para las dimensiones del usuario y se ajuste a su antropometra, ya
que puede incrementar el riesgo el utilizar equipo que no sea del tamao
adecuado.

21.3 RECOMENDACIONES PARA EL MANEJO DE BOMBAS

Es importante tener en cuenta que la bomba posee un sentido de giro. Es decir


que el sentido de giro del motor asociado es relevante y debe ser tomado en
cuenta a la hora de la instalacin. De conectar el motor en forma incorrecta la
bomba girara en el sentido contrario y su efecto ser el de no proporcionar flujo
alguno.

Tambin como sugerencia tcnica tenga en cuenta que en ocasiones no basta


con simplemente instalar la bomba ya que cuando esta se encuentra en punto
estacionario por mucho tiempo resulta conveniente purgarla, como se conoce
comercialmente el trmino, para que esta arranque a trabajar correctamente.
En otras palabras diramos que se trata de obligar de manera manual a que
comience a proporcionar un flujo.

Una sugerencia adicional es agregar un cheque de paso en la tubera de salida


de la bomba con el fin de que en estado de reposo, la bomba no debe soportar
la presin que ejerce el lquido en reposo en la tubera.

21.4 RECOMENDACIONES PARA EL MANEJO DE AIRE A PRESION Y LA


CORRECTA FORMA DE INSTALAR UNA RED DE AIRE

El compresor se considera de tamao pequeo ya que su consumo ser menor


a los 40L/s y la entrada es mucho menor a 15KW.

Al ubicar el compresor debe tenerse en cuenta las altas temperaturas que se


producen cuando el aire es comprimido e igualmente es importante un eficiente
enfriamiento del compresor para proteger las partes. Su cuarto debe ser
ventilado y colocado cerca de una pared con rejillas que provean salida de
calor y entrada de aire. El filtro de entrada de aire al compresor debe aspirar en
lo posible aire limpio, consrvese alejado de: humo de vehculos, de otras
maquinas, reverberos y procurar no mantenerlo estacionado con el motor en
funcionamiento. Evite sitios dnde el aire puede tener una humedad alta como
sobre un estanque o un techo en donde el agua de las lluvias no decante con
facilidad. Evite sitios dnde se levante polvo, arena y basura esto ampliara la
vida til del compresor y a la vez evita que muchas impurezas se mezclen con
el aire de trabajo lo que implicare un desgaste mas rpido de los diferentes
elementos que componen el circuito neumtico.

Para la red de aire como elementos bsicos a parte del compresor vamos a
utilizar un FRL (filtro-regulador-lubricador) este filtro se sugiere en cada uno de
los bancos de trabajo. FRL esta formado por un filtro, un regulador y lubricador.
Ellos forman una unidad que prepararn las condiciones del aire comprimido
justamente antes de utilizarlo en los equipos neumticos o maquinaria
neumtica. Esto asegura que el suministro de aire sea limpio, la presin sea la
correcta y que partculas finas de aceite limpio sean transportadas en el aire
para lubricar vlvulas, cilindros y herramientas neumticas.

Como tal el filtro es encargado de evitar que partculas de agua pasen a los
elementos finales, as como partculas slidas contaminantes. Estas partculas
decantan a un pequeo envase adherido (generalmente) al filtro el cual debe
ser limpiado con la frecuencia necesaria para mantenerlo libre y vaci para el
correcto funcionamiento. Se adquieren en el mercado filtros automticos que se
auto limpian o purgan en la medida en que se van llenando. En este filtro se
retienen partculas hasta de 1m de dimetro.

Para aplicaciones en donde el aire debe ser excepcionalmente limpio y libre de


aceite se utilizan los filtros coalescentes. Para usar en procesos alimenticios y
farmacuticos bsicamente. Este tiene la capacidad de remover partculas por

debajo de 0.01m. El aire deber ser prefiltrado por debajo de 5m para


prevenir una corta vida del elemento filtrante. Recuerde que estos elementos
filtrantes son zeolitas (mallas qumicas) especiales la cuales despus de un
tiempo deben desecharse y ser cambiadas.

El regulador es el encargado de proporcionar una presin de trabajo en los


elementos reduciendo una presin p1 de lnea a una presin p2 requerida por
el elemento (pistones). Generalmente este elemento lleva consigo un
manmetro el cual permite observar la presin de salida que entrega el
regulador.

En el lubricador por efectos de presin negativa (tubo de benturi) se succionan


pequeas y pocas partculas de aceite las cuales van a mezclarse con el aire
de trabajo. Estas partculas son muy pequeas y bsicamente ayudan a
proteger la vida til de los elementos neumticos, alargar la vida til de los
sellos y empaques, y proporcionar lubricacin en las partes donde se genere
friccin. Esto evitara calentamiento de las partes y el desgaste ser reducido.
El lubricante utilizado se acaba con el tiempo de uso por lo que el operario
debe revisar constantemente el nivel para inyectar lubricante nuevamente
cuando sea necesario.

21.4.1 ASPECTOS BASICOS DE INSTALACION PARA LA RED DE AIRE

En tal caso que se desee implementar una red de aire como tal deben tenerse
en cuenta ciertos aspectos bsicos de instalacin. Estos son:

Se procura que en cada banco de trabajo exista una unidad FRL segn la
necesidad y el filtro coalescente si as se requiriera. La distribucin de aire se
hace por medio de tubera en la que se utiliza el pvc. Es importante tener en
cuenta las curvas que se utilizan las cuales deben evitarse al mximo ya que
en estos ngulos y ms aun en ngulos mayores podra presentarse
fenmenos de turbulencia del aire lo que implicara ms condensacin. En
estas esquinas se recomienda instalar

colas de purgas para recolectar y

remover agua producto de la condensacin del aire. Igualmente el nivel se

sube proporcionando a cada lnea de tubera una inclinacin de 5 en cada


para cada tramo que en trminos generales no debe sobrepasar los 35m sin
purga. Esta purga existe del tipo manual y automtica y su utilizacin depende
bsicamente de la economa del cliente o de factores alternos que puedan
exigir la utilizacin de una u otra. As mismo se coloca una vlvula incorporada
para despresurizar la unidad antes de un mantenimiento. Es bueno tambin
instalar un filtro de malla para retener las partculas slidas grandes.

En los puntos en que se va a tomar aire a presin sacado de la lnea principal


se utiliza una salida en cuello de ganso como se conoce popularmente de tal
modo que no se convierta en un punto de decantacin de agua sino que por el
contrario el aire ira lo mas libre de humedad posible.

Como dato adicional la siguiente grafica permite realizar el clculo de las


cadas de presin que se presenta en las tuberas teniendo en cuenta la
presin de trabajo, el caudal o flujo requerido, la longitud y dimetro de la
tubera. Con esta grafica podemos encontrar cualquiera de las variables
establecidas conociendo las dems.

21.5 TRANSMISIONES

Para producir movimientos de rotacin es evidente que

el motor es un

elemento til. Si queremos producir un movimiento lineal debemos adicionar


una transmisin de movimiento tipo cremallera como lo muestra la figura

Con el fin de lograr los torques deseados podemos pensar en utilizar


transmisiones circular a circular como engranajes, cadenas, correas dentadas o
poleas de cable en donde la teora fsica es la misma.

El permetro es proporcional al radio de la forma P = 2 (pi) r


Y la relacin entre velocidades, permetros y torques es:
P1 / P2 = W1 / W2 = T2 / T1
Para el caso de los engranajes dicha relacin se conserva pero el permetro en
este caso es equivalente al nmero de dientes de modo que para el engranaje
la variable permetro P ser N nuecero de dientes.
N1 / N2 = W1 / W2 = T2 / T1

Note que el mximo torque se realiza en la parte externa del anillo en donde es
ms grande la distancia al punto de giro. De esta manera podemos concluir
que al aplicar transmisiones lineales.

La velocidad lineal es equivalente a la velocidad tangencial del movimiento la


que en un ngulo recto con la transmisin quiere decir que W = V (velocidad
angular = velocidad lineal) y la fuera que siente es directamente proporcional al
torque aplicado siendo F = T/d en donde el torque es proporcionado por el
actuador siendo as que entre mas corta sea la distancia mucho mas fuerza
vamos a generar.

21.6 RACORES

Los racores son los puntos de acople para salida y entrada de aire en los
cuales encontramos una estandarizacin de las medidas de dimetro y rosca
que estos pueden tener. Podemos definirlos en pulgadas o en milmetros ya

que sus equivalentes son fcilmente adquiribles. Este dimetro de racor


depende del dimetro de la manguera flexible que vayamos a utilizar y por ello
debemos tener presente el caudal y presin.

21.7 CODIGO DE PROGRAMA PIC CONTROL DEL DOSIFICADOR


;trabaja mostrando hasta 5s;ya tien cuacrados

eecon1

equ

0x08

tiempos para los 0.1s;memoria EEprom

eecon2

equ

0x09

;lee los datos tiempo1,2,3;guarda el dato tiempo1

adcon1

equ

0x1f

todas las veces y ya lo lee al apagar y prender.

dato

equ

0x20

;listo graba los tres datos y lee los tres datos....tiempo

tiempo1

equ

0x21

succin , empuje

tiempo2

equ

0x22

;y espera entre ciclos;esta listo las funciones falta

tiempo3

equ

0x23

cambio de PIC

tiempo4

equ

0x24

;reformar entradas portb,menos3 y portb,menos4

uni1

equ

0x25

cambiar por otras 2 entradas

uni2

equ

0x26

dec1

equ

0x27

especificada$$$$$$$$$$$$$$

dec2

equ

0x28

trabaja con rele y recupera 2 salidas;muestra tiempo

uni3

equ

0x29

decrementando mientras pasa el tiempo espera entre

uni4

equ

0x2a

ciclos

con1

equ

0x2b

;porte,2 se usa para switcheo de la fuente de los

con2

equ

0x2c

motores y no caliente todo el tiempo

enlinea

equ

0x2d

; configurar el adcon1 para usar puerto e ;porte,0 y

enlinea1 equ

0x2e

porte,1 mmanejan pistn sale y entra individualmente

unidad

equ

0x2f

;listo ese ani..

decena

equ

0x30

actualizar

cambio

listp=16f877
PC

equ

en

la

parte

numero

equ

0x31

0x02

con3

equ

0x32

estado

equ

0x03

con4

equ

0x33

porta

equ

0x05

con5

equ

0x34

portb

equ

0x06

direccion equ

0x35

portc

equ

0x07

unid3

equ

0x36

portd

equ

0x08

trans1d

equ

porte

equ

0x09

trans1u

equ

intcon

equ

0x0b

trans2d

equ

EEDATA_EECON1 equ

0x0c

trans2u

equ

EEADR_EECON2 equ

0x0d

trans3

equ

trans4

equ

mas1

equ

eedata

equ

eeadr

equ

0x08
0x09

menos1

equ

bcf

portc,trans1d

mas2

equ

bcf

portc,trans2u

menos2

equ

bcf

portc,trans2d

mas3

equ

bcf

portc,trans3

menos3

equ

bcf

portc,trans4

mas4

equ

bsf

portc,trans1d

menos4

equ

movlw

3fh ;0 0011 1111 3f 0100 0000 40

nico

equ

movwf

portd

darciclo equ

salentra equ

md

equ

mi

equ

movwf

portd

equ

call

tiemposs

call
movlw

tiemposs
06h ;1 0000 0110 06 0111 1001

79

setiar

equ

movlw 5bh ;2 0101 1011 5b 0010 0100 24

gardar

equ

movwf

org

bcf

estado,6

bsf

estado,5 ;cambio banco1.

movlw

0x80

movwf

portd

;puerto

portd

call

tiemposs

movlw

4fh ;3 0100 1111 4f 0011 0000 30

movwf

portd

call

tiemposs

movlw

66h ;4 0110 0110 66 0001 1001

movwf

portd

19

de

salida

(visualizacion),

d7=entrada mas1
movlw

0xfe

movwf

portb

movlw

0xc0

movwf

portc

call

tiemposs

movlw

6dh ;5 0110 1101 6d 0001 0010

movwf

portd

12

call

tiemposs

movlw

7dh ;6 0111 1101 7d 0000 0010

0x07

movwf

portd

movwf

adcon1

call

tiemposs

movlw

0x03

movlw

07h ;7 0000 0111 07 0111 1000

movwf

porta

movlw

0x03

movwf

portd

movwf

porte

call

tiemposs

bcf

estado,6

movlw

7fh ;8 0111 1111 7f 0000 0000 00

bcf

estado,5 ;cambio banco0.

movwf

portd

;viusualizacion

dinamica; c7,c6 entradas


movlw

02

78

call

tiemposs

;pruebas1

movlw

6fh ;9 0110 1111 6f 0001 0000 10

bcf

intcon,7

movwf

portd

movlw

0x00

call

tiemposs

movwf

tiempo1

bcf

portc,trans1d

movlw

0x00

clrf

uni4

movwf

tiempo2

movlw

0x00

call

cargartiempos

movwf

tiempo3

call

llenardecuni

movlw

0x00

movwf

tiempo4

btfss

portc,unico

clrf

porta

call

elciclo

clrf

porte

btfss

portc,darciclo

bcf

portc,trans1u

call

elciclo

inicio

;inicialmente

siempre carga el registro 0(ultimo usado)

rutina

btfsc

portd,mas1 ;si el bit de entrada

esta "on" aumenta tiempo1.

bcf

porta,e

bsf

porte,2

incf

tiempo1,1

bsf

porta,mi

btfss

portb,menos1 ;si el bit de entrada

call

tiempocerrar

bcf

porta,mi

decf

tiempo1,1

bcf

porte,2

btfsc

portb,mas2 ;si el bit de entrada

bcf

porta,2

esta "on" decrementa tiempo1.

return

esta "on" aumenta tiempo2.


incf

tiempo2,1

btfsc

portb,menos2 ;si el bit de entrada

derecho

esta "on" decrementa tiempo2.

bcf

porta,2

bsf

porte,2

decf

tiempo2,1

bsf

porta,md

btfsc

portb,mas3 ;si el bit de entrada

call

tiempoabrir

bcf

porta,md

bcf

porte,2

bsf

porta,e

esta "on" aumenta tiempo3.


incf

tiempo3,1

btfsc

portb,menos3 ;si el bit de entrada

esta "on" decrementa tiempo4.

der

decf

tiempo3,1

call

visualizo

btfsc

portb,mas4 ;si el bit de entrada

btfsc

porte,1

goto

der

incf

tiempo4,1

bcf

porta,e

btfsc

portb,menos4 ;si el bit de entrada

bsf

porte,2

esta "on" aumenta tiempo3.

bsf

porta,mi

tiempo4,1

call

tiempocerrar

btfss

porta,setiar

bcf

porta,mi

call

cargartiempos

bcf

porte,2

btfss

porta,gardar

bcf

porta,2

call

cambiartiempos1

return

esta "on" decrementa tiempo4.


decf

btfsc

porte,0

call

tienda

btfsc

porte,1

call

tienda

;$$$$$$$$$$$$$$$$$$$$$

cargartiempos
;selleciona la secuencia a cargar el set

y listo funcionando.

call

tiemposs

call

tiemposs

call

tiemposs

call

llenardecuni

call

tiemposs

call

visualizo

clrf

direccion

goto

rutina

movf

uni4,0

movwf

con5

btfss

porte,0

incf

con5,1

goto

derecho

decfsz

con5,1

bsf

porta,2

goto

cualx

bsf

porte,2

goto

estex

call cambiartiempos

tienda

cualx

bsf

porta,md

call

tiempoabrir

incf

direccion,1

bcf

porta,md

incf

direccion,1

bcf

porte,2

incf

direccion,1

bsf

porta,e

decfsz

con5,1

goto

cualx

izq
estex

call

visualizo

btfsc

porte,0

movf

direccion,0

goto

izq

bsf

estado,6 ;

bsf

estado,5

bcf

estado,5 ;

movwf

EEADR_EECON2 ;

bsf

estado,5 ;

btfsc

bcf

EEDATA_EECON1,7

goto

bsf

EEDATA_EECON1,0 ;

bcf

estado,5

bcf

estado,6

atril0

lee1

EEDATA_EECON1,1
atril0

btfsc

EEDATA_EECON1,0

movf

direccion,0

goto

lee1

bsf

estado,6

bcf

estado,5 ;

movwf

EEADR_EECON2

movf

EEDATA_EECON1,0

bcf

estado,6

bcf

estado,5

movf

tiempo1,0

bcf

estado,6 ;bank0

bsf

estado,6

movwf

tiempo1

movwf

EEDATA_EECON1

incf

direccion,1

bsf

estado,5

movf

direccion,0

bcf

EEDATA_EECON1,7

bsf

estado,6 ;

bcf

estado,5 ;

bsf

EEDATA_EECON1,2

movwf

EEADR_EECON2 ;

bsf

estado,5 ;

bcf

intcon,7

bcf

EEDATA_EECON1,7

movlw

0x55

bsf

EEDATA_EECON1,0 ;

;MOVLW 0x55
;Write 55h to

lee2
btfsc

EEDATA_EECON1,0

movwf

goto

lee2

;MOVWF EECON2

bcf

estado,5 ;

;EECON2

movf

EEDATA_EECON1,0

movlw

bcf

estado,5

;MOVLW 0xAA

bcf

estado,6 ;bank0

;Write AAh to

movwf

tiempo2

movwf

incf

direccion,1

;MOVWF EECON2

movf

direccion,0

;EECON2

bsf

estado,6 ;

bsf

bcf

estado,5 ;

;BSF EECON1, WR

movwf

EEADR_EECON2 ;

;Start write operation

bsf

estado,5 ;

bsf

bcf

EEDATA_EECON1,7

GIE ;if using interrupts,

bsf

EEDATA_EECON1,0 ;

atril1

btfsc

EEDATA_EECON1,0

;BTFSC EECON1, WR ;Wait for

goto

lee3

goto

bcf

estado,5 ;

;write to finish

movf

EEDATA_EECON1,0

bcf

estado,5

;Only enable interrupts

bcf

estado,6 ;bank0

bcf

movwf

tiempo3

;BCF EECON1, WREN ;Disable writes

incf

direccion,1

bcf

estado,5

return

bcf

estado,6

cambiartiempos

incf

direccion,1

btfsc

lee3

clrf

direccion

;*************************
bsf

estado,6

EEADR_EECON2

0xAA

EEADR_EECON2

EEDATA_EECON1,1

intcon,7

;BSF INTCON,

EEDATA_EECON1,1

atril1

EEDATA_EECON1,2

;*****************
bsf

estado,6

;BSF STATUS, RP1

bsf

estado,5

;BSF

STATUS,

btfsc

RP0

EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

;Bank 3

goto

atril2
btfsc

atril3

;write to finish

EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for


goto

;Only enable interrupts

atril2

bcf

;write to finish
bcf

estado,5

EEDATA_EECON1,2

;BCF EECON1, WREN ;Disable writes

;BCF

bcf

estado,5

bcf

estado,6

;bank0

bcf

estado,6

movf

direccion,0

;MOVF ADDR,

incf

direccion,1

bsf

estado,6

STATUS, RP0 ;Bank 2

W ;Address to
bsf

estado,6

movwf

EEADR_EECON2

;BSF

STATUS, RP1

;bank2

bsf

estado,5

;BSF

STATUS, RP0 ;Bank 3

;MOVWF EEADR ;write to

atril4

bcf

estado,6

movf

tiempo2,0

bsf

estado,6

movwf

EEDATA_EECON1

;VALUE,

btfsc

EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

;Data to

goto

;write to finish
bcf

;MOVWF EEDATA ;write


bsf

estado,5

;BSF

EEDATA_EECON1,7

;BCF EECON1, EEPGD ;Point to Data

EEDATA_EECON1,2

;Only disable interrupts


intcon,7

;BCF INTCON, GIE ;if

estado,6

;bank0

movf

direccion,0

;MOVF ADDR,

bsf

estado,6

;bank2

movwf

EEADR_EECON2

bcf

estado,6

movf

tiempo3,0

0x55

bsf

estado,6

movwf

EEDATA_EECON1

;MOVLW 0x55

;MOVWF EEDATA ;write

;Write 55h to

bsf

movwf

bcf

estado,5

;BSF

EEDATA_EECON1,7

;BCF EECON1, EEPGD ;Point to Data

;EECON2
memory

0xAA

;MOVLW 0xAA

bsf

;Write AAh to

;BSF EECON1, WREN ;Enable writes

movwf

EEDATA_EECON1,2

EEADR_EECON2

;MOVWF EECON2

;Only disable interrupts

;EECON2

bcf

bsf

EEDATA_EECON1,1

0x55

;MOVLW 0x55

;Start write operation


intcon,7

intcon,7

;BSF INTCON,

;BCF INTCON,

GIE ;if already enabled,;otherwise discard


movlw

;BSF EECON1, WR

bsf

STATUS, RP0 ;Bank 3

EEADR_EECON2

;MOVWF EECON2

movlw

;VALUE,

;Data to

already enabled,;otherwise discard


movlw

bcf

;MOVWF EEADR ;write to

;BSF EECON1, WREN ;Enable writes

bcf

;BCF

W ;Address to

memory
bsf

estado,5

STATUS, RP0 ;Bank 2

STATUS, RP0 ;Bank 3


bcf

atril4

;Write 55h to

GIE ;if using interrupts,

movwf

atril3

;MOVWF EECON2
;EECON2

EEADR_EECON2

movlw

bcf

0xAA

estado,5

;BCF

STATUS, RP0 ;Bank 2

;MOVLW 0xAA
;Write AAh to

bcf

estado,6

;bank0

movwf

movf

direccion,0

;MOVF ADDR,

bsf

estado,6

;bank2

movwf

EEADR_EECON2

EEADR_EECON2

W ;Address to

;MOVWF EECON2
;EECON2

bsf

;MOVWF EEADR ;write to

EEDATA_EECON1,1

;BSF EECON1, WR

bcf

estado,6

;Start write operation

movf

tiempo1,0

bsf

intcon,7

;BSF INTCON,

;VALUE,

;Data to

GIE ;if using interrupts,

bsf

estado,6

atril5

movwf

EEDATA_EECON1

btfsc

;MOVWF EEDATA ;write

EEDATA_EECON1,1

bsf

;BTFSC EECON1, WR ;Wait for


goto

estado,5

;BSF

STATUS, RP0 ;Bank 3

atril5

bcf

;write to finish

EEDATA_EECON1,7

;BCF EECON1, EEPGD ;Point to Data


memory

;Only enable interrupts


bcf

bsf

EEDATA_EECON1,2

EEDATA_EECON1,2

;BSF EECON1, WREN ;Enable writes

;BCF EECON1, WREN ;Disable writes


bcf

estado,5

bcf

estado,6

;Only disable interrupts

incf

direccion,1

bcf

intcon,7

GIE ;if already enabled,;otherwise discard

return;

movlw

;************

0x55

;MOVLW 0x55

cambiartiempos1
clrf

direccion

;Write 55h to

movf

uni4,0

movwf

movwf

con5

;MOVWF EECON2

incf

con5,1

;EECON2

decfsz

con5,1

movlw

goto

cualy

;MOVLW 0xAA

goto

estey

;Write AAh to

EEADR_EECON2

0xAA

movwf

cualy

EEADR_EECON2

incf

direccion,1

;MOVWF EECON2

incf

direccion,1

;EECON2

incf

direccion,1

decfsz

con5,1

goto

cualy

bsf

EEDATA_EECON1,1

EECON1, WR
bsf

intcon,7

GIE ;if using interrupts,

;*************************

atril11

estado,6

;BSF

bsf

btfsc

;BSF INTCON,

EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

STATUS, RP1
estado,5

;BSF

STATUS, RP0 ;Bank 3

goto

atril11

;write to finish

atril10
btfsc

EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for


goto

atril10

;write to finish

;Only enable interrupts


bcf

EEDATA_EECON1,2

;BCF EECON1, WREN ;Disable writes


bcf

;BSF

;Start write operation

estey

bsf

;BCF INTCON,

estado,5

bcf

estado,6

goto

incf

direccion,1

bcf

;*****************
bsf

estado,6

;BSF

STATUS, RP1
bsf

estado,5

;BSF

atril14
estado,5

bcf

estado,6

movf

direccion,0

bsf

estado,6

movwf

EEADR_EECON2

STATUS, RP0 ;Bank 3

bcf

estado,6

atril12

movf

tiempo3,0

btfsc

EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for


goto

atril12

;write to finish
bcf

estado,5

bsf

estado,6

movwf

EEDATA_EECON1

bsf

estado,5

bcf

EEDATA_EECON1,7

bsf

EEDATA_EECON1,2

;BCF

STATUS, RP0 ;Bank 2


bcf

estado,6

;bank0

movf

direccion,0

;MOVF ADDR,

bcf

intcon,7

movlw

0x55

movwf

EEADR_EECON2

movlw

0xAA

;MOVWF EEADR ;write to

movwf

EEADR_EECON2

bcf

estado,6

bsf

EEDATA_EECON1,1

movf

tiempo2,0

bsf

intcon,7

bsf

estado,6

movwf

EEDATA_EECON1

W ;Address to
bsf

estado,6

movwf

EEADR_EECON2

;bank2

;VALUE,

;Data to
atril15

btfsc
goto

;MOVWF EEDATA ;write


bsf

estado,5

;BSF

STATUS, RP0 ;Bank 3


bcf

bcf

EEDATA_EECON1,2

bcf

estado,5

bcf

estado,6

incf

direccion,1

EEDATA_EECON1,7

;BCF EECON1, EEPGD ;Point to Data


memory
bsf

EEDATA_EECON1,1
atril15

EEDATA_EECON1,2

return;

;BSF EECON1, WREN ;Enable writes


elciclo

bcf

intcon,7

movlw

0x55

call

secuenciax

movwf

EEADR_EECON2

btfsc

portc,unico

movlw

0xAA

return

movwf

EEADR_EECON2

bsf

EEDATA_EECON1,1

bsf

intcon,7

movf

atril13
btfsc

EEDATA_EECON1,1

uni3,0

ciclon
movlw

0x20

movwf

con4

triciclo
call

tiempoespera

bcf

EEDATA_EECON1,2

decfsz

con4,1

bcf

estado,5

goto

triciclo

bcf

estado,6

decfsz uni3,1

incf

direccion,1

goto

ciclon

bsf

estado,6

call

tiempoespera

bsf

estado,5

call

tiempoespera

call

tiempoespera

call

tiempoespera

goto

atril13

atril14
btfsc

EEDATA_EECON1,1

call

tiempoespera

call

llenadau

call

tiempoespera

movf

decena,0

call

tiempoespera

movwf

dec2

call

tiempoespera

movf

unidad,0

call

tiempoespera

movwf

uni2

call

tiempoespera

movf

tiempo3,0

call

tiempoespera

movwf

enlinea

call

tiempoespera

call

llenadau

return
secuenciax

movf

unidad,0

movwf

uni3

;tiempo espera

funciona con uni3 no con tiempo3

bsf

porta,2

bsf

porte,2

movf

tiempo4,0

bsf

porta,md

movwf

enlinea

call

tiempoabrir

call

llenadau

bcf

porta,md

movf

unidad,0

bcf

porte,2

movwf

uni4

bsf

porta,e

call

primertiempo

bcf

porta,e

bsf

porte,2

clrf

decena

bsf

porta,mi

movf

enlinea,0

call

tiempocerrar

sublw

.49

bcf

porta,mi

btfsc

estado,0

bcf

porte,2

return

bcf

porta,2

incf

decena,1

bsf

porte,2

movf

enlinea,0

bsf

porta,md

sublw

.99

call

tiempoabrir

btfsc

estado,0

bcf

porta,md

return

bcf

porte,2

incf

decena,1

bsf

porta,e

movf

enlinea,0

call

segundotiempo

sublw

.149

bcf

porta,e

btfsc

estado,0

bsf

porte,2

return

bsf

porta,mi

incf

decena,1

call

tiempocerrar

movf

enlinea,0

bcf

porta,mi

sublw

.199

bcf

porte,2

btfsc

estado,0

funciona con uni4 no con tiempo4


return
llenadad

return

return;

incf

decena,1

movf

tiempo1,0

movf

enlinea,0

movwf

enlinea

sublw

.249

call

llenadad

btfsc

estado,0

call

llenadau

return

movf

decena,0

incf

movwf

dec1

return

movf

unidad,0

movwf

uni1

movf

enlinea,0

movf

tiempo2,0

movwf

enlinea1

movwf

enlinea

clrf

unidad

call

llenadad

movf

enlinea1,0

llenardecuni

decena,1

llenadau

;secuencia

sublw

.4

btfsc

btfsc

estado,0

return

estado,0

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.59

sublw

.9

btfsc

estado,0

btfsc

estado,0

return

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.64

sublw

.14

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.69

sublw

.19

btfsc

estado,0

btfsc

estado,0

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.74

sublw

.24

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.79

sublw

.29

btfsc

estado,0

btfsc

estado,0

return

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.84

sublw

.34

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.89

sublw

.39

btfsc

estado,0

btfsc

estado,0

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.94

sublw

.44

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.99

sublw

.49

btfsc

estado,0

btfsc

estado,0

return

return

return

clrf

unidad

clrf

unidad

movf

enlinea1,0

movf

enlinea1,0

sublw

.104

sublw

.54

btfsc

estado,0

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.159

sublw

.109

btfsc

estado,0

btfsc

estado,0

return

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.164

sublw

.114

btfsc

estado,0

btfsc

estado,0

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.169

sublw

.119

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.174

sublw

.124

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.179

sublw

.129

btfsc

estado,0

btfsc

estado,0

return

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.184

sublw

.134

btfsc

estado,0

btfsc

estado,0

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.189

sublw

.139

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.194

sublw

.144

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.199

sublw

.149

btfsc

estado,0

btfsc

estado,0

return

return

return

clrf

unidad

clrf

unidad

movf

enlinea1,0

movf

enlinea1,0

sublw

.204

sublw

.154

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

movf

enlinea1,0

bsf

portc,trans1d

sublw

.209

call

tiempomuestra

btfsc

estado,0

bcf

portc,trans1d

movf

uni1,0

return
incf

unidad,1

movwf

numero

movf

enlinea1,0

call

lamuestra

sublw

.214

movwf

portd

btfsc

estado,0

bsf

portc,trans1u

call

tiempomuestra

incf

unidad,1

bcf

portc,trans1u

movf

enlinea1,0

movf

dec2,0

sublw

.219

movwf

numero

btfsc

estado,0

call

lamuestra

return

movwf

portd

incf

unidad,1

bsf

portc,trans2d

movf

enlinea1,0

call

tiempomuestra

sublw

.224

bcf

portc,trans2d

btfsc

estado,0

movf

uni2,0

movwf

numero

return

return
incf

unidad,1

call

lamuestra

movf

enlinea1,0

movwf

portd

sublw

.229

bsf

portc,trans2u

btfsc

estado,0

call

tiempomuestra

bcf

portc,trans2u

return
incf

unidad,1

movf

uni3,0

movf

enlinea1,0

movwf

numero

sublw

.234

call

lamuestra

btfsc

estado,0

movwf

portd

bsf

portc,trans3

incf

unidad,1

call

tiempomuestra

movf

enlinea1,0

bcf

portc,trans3

sublw

.239

movf

uni4,0

btfsc

estado,0

movwf

numero

return

call

lamuestra

incf

unidad,1

movwf

portd

movf

enlinea1,0

bsf

portc,trans4

sublw

.244

call

tiempomuestra

btfsc

estado,0

bcf

portc,trans4

return

return

return

tiempomuestra1

incf

unidad,1

movf

enlinea1,0

clrf

con1

sublw

.249

movlw

0x02

btfsc

estado,0

movwf

con2

decfsz

con1,1

goto

tm1

decfsz

con2,1

goto

tm1

tm1

return
clrf

unidad

return
visualizo
movf

dec1,0

movwf

numero

call

lamuestra

movwf

portd

return;
tiemposs
clrf

con1

clrf

con2

decfsz

con3,1

movlw

0x2

goto

tmseg

movwf

con3

return;
tiempomuestra

tms
decfsz

con1,1

clrf

con1

goto

tms

movlw

0x10

movwf

con2

decfsz

con2,1

goto

tms

tme

decfsz

con3,1

decfsz

con1,1

goto

tms

goto

tme

decfsz

con2,1

goto

tme

return;
tiempoespera
call

visualizo

call

visualizo

call

visualizo

return;
lamuestra

return;
tiempoabrir
movlw

0x40

movwf

con3

call

visualizo

call

visualizo

incf

numero,1

decfsz

numero,1

goto

m1

retlw

3fh ;0 0011 1111 3f 0100 0000 40

m1
decfsz

tmab

goto
retlw

decfsz

con3,1

79

goto

tmab

m2

return;
tiempocerrar
movlw

0x40

movwf

con3

call

visualizo

call

visualizo

decfsz

con3,1

goto

tmce

m2
06h ;1 0000 0110 06 0111 1001

decfsz

numero,1

goto

m3

retlw 5bh ;2 0101 1011 5b 0010 0100 24


m3

tmce

decfsz

numero,1

goto

m4

retlw

4fh ;3 0100 1111 4f 0011 0000 30

decfsz

numero,1

m4

return;
primertiempo
movf

tiempo1,0

19

movwf

con3

m5

incf

con3,1

tmun
call

visualizo

call

visualizo

12

decfsz

con3,1

m6

goto

tmun

return;
segundotiempo
tiempo2,0

02

movwf

con3

m7

incf

con3,1

call

visualizo

call

visualizo

movf

numero,1

tmseg

78

goto

m5

retlw

66h ;4 0110 0110 66 0001 1001

decfsz

numero,1

goto

m6

retlw

6dh ;5 0110 1101 6d 0001 0010

decfsz

numero,1

goto

m7

retlw

7dh ;6 0111 1101 7d 0000 0010

decfsz

numero,1

goto

m8

retlw

07h ;7 0000 0111 07 0111 1000

m8
decfsz

numero,1

goto

m9

retlw

7fh ;8 0111 1111 7f 0000 0000 00

decfsz

numero,1

goto

m10

retlw

6fh ;9 0110 1111 6f 0001 0000 10

retlw

0x79

m10

m9

End

21.8 CODIGO DEL PROGRAMA PIC PARA CONTROL DE TEMPERATURA


programa para el PIC de temperatura
;CONTROL DE TEMPERATURA 7 segmentos

movlw
las otras salidas.

;visualiza dinamicamente por el puerto B las dos


salidas de 7 segmentos y el
;bit de control muestra datos grabados en la eprom del

0x1c ;00011100 tres entradas y

movwf

porta

clrf

portb

;puerto

de

salida (en caso de visualizacion)

tiempo de

Pc

equ

0x02

porta

equ

0x05

portb

equ

0x06

bcf

estado,5 ;cambio banco0.

bcf

porta,hot ;apaga resistencia.

rutinsini

estado

equ

0x03

movlw

0xff

intcon

equ

0x0B

movwf

portb

eedata

equ

bsf

portb,7

eeadr

equ

0x08
0x09

call

tiempogradual

eecon1

equ

0x08

bcf

portb,7

eecon2

equ

0x09

call

tiempogradual

dato

equ

0x10

bsf

portb,7

t1

equ

0x11

call

tiempogradual

t2

equ

0x12

bcf

portb,7

con1

equ

0x13

call

tiempogradual

t11

equ

0x14

bsf

portb,7

t22

equ

0x15

call

tiempogradual

contr

equ

0x16

bcf

portb,7

call

tiempogradual

call

cargart1t2

con2

equ

0x17

numero

equ

0x18

numeroh

equ

0x19

decena

equ

0x20

unidad

equ

0x21

enlinea

equ

0x22

enlinea1 equ

0x23

lineal2

equ

0x24

con3

equ

con4
mas

;rutina que carga al

programa el porcentaje del


;periodo en que la
resistencia esta apagada.
call

tiempoinicial

0x25

movlw

0x02

equ

0x26

movwf

con3

equ

movlw

0x50

movwf

con4

btfss

porta,mas ;si el bit de entrada esta

menos

equ

cruce

equ

hot

equ

org

bsf

estado,5

bcf

estado,6 ;cambio banco1.

secuenci

"on" aumenta tiempo.


decfsz

con4,1

goto

men

call

aumente

movlw

0x50

movwf

con4

btfss

porta,menos ;si el bit de entrada -

;rutina de aumento.

esta on decrementa tiempo.

goto

yas

call

decremente

;rutina

de

decremento.
0x50

movwf

con4

con3,1

goto

des

goto

uni

movwf

t22

call

tiempopwm

decfsz

t22,1

goto

segun

bcf

porta,hot

movf

t1,0

movwf

t11

incf

t11,1

prime

yas
decfsz

0xfa

primermita

con4,1

movlw

porta,hot

movlw

segun

men

decfsz

bcf

call

tiempopwm

decfsz

t11,1

goto

prime

bsf

porta,hot

des
call

visualiza1

;(opcional)visualizacion

goto

return
cargart1t2

del porcentaje de calor


cruce1

;que

la

resistencia entrega.

movlw

0x00

uni

movwf

eeadr

bsf

estado,5

bsf

eecon1,0

call

visualiza

;(opcional)visualizacion del

porcentaje de calor
incf

con3,1

bcf

estado,5

incf

con3,1

movf

eedata,0

goto

cruce1

movwf

t1

bsf

estado,5

bcf

eecon1,0

;que

la

resistencia entrega.
cruce1
btfss

porta,2

bcf

estado,5

goto

cruce1

movlw

0x01

bcf

porta,hot

movwf

eeadr

bsf

estado,5

cruce2
btfsc

porta,2

bsf

eecon1,0

goto

cruce2

bcf

estado,5

call

pwm

goto

secuenci

;vuelve al inicio para

continuar para repetir


;la secuencia.
;fin de secuencia de programa
;

RUTINAS

;rutina de cargar t1 y t2 (5 pasos por cada 1%) h'01f0)

pwm

btfsc

t2,0

goto

segundamita

goto

primermita

segundamita

movf

eedata,0

movwf

t2

bsf

estado,5

bcf

eecon1,0

bcf

estado,5

movf

t1,0

caso de visualizacion
movwf

t11

movf

t2,0

movwf

t22

return
decremente
bcf

porta,hot

;cargat1

;cargat2

;cargar

variables

en

call

cargart1t2 ;carga los valores

existentes
movf
xorlw
btfsc
goto

t1,0
0x00

;verifica si t1=0

estado,2
decre

eeadr

movf

t1,0

movwf

eedata

bsf

estado,5

bcf

intcon,7

bcf

eecon1,4; para grabacion poner

bsf

eecon1,2

en 0

decf

t1,1

call

guardart1t2

return
decre
movf

movwf

t2,0

xorlw

0x00

;verifica si t2=0

btfsc

estado,2

return

;si es 0 es porque t1=0

movlw

0x55

movwf

eecon2

movlw

0xaa

movwf

eecon2

bsf

eecon1,1

btfss

eecon1,4;vigila

gua1

y t2=0 no hace nada


decf

t2,1

grabacion correctamente

movlw

0xf9

goto

gua1

movwf t1

bcf

intcon,7

call

bcf

eecon1,1

bcf

estado,5

guardart1t2

final

return

return

guardast2

aumente
bcf

porta,hot

call

cargart1t2 ;carga los valores

existentes
movf

t1,0

xorlw

0xf9

btfsc

estado,2

;verifica si t1=250

movlw

0x01

movwf

eeadr

movf

t2,0

movwf

eedata

bsf

estado,5

bcf

intcon,7

;guarda t2

aumen

bcf

eecon1,4; para conversion

incf

t1,1

bsf

eecon1,2

call

guardart1t2

movlw

0x55

movwf

eecon2

movlw

0xaa

movwf

eecon2

bsf

eecon1,1

btfss

eecon1,4 ;verificar que si

goto

return
aumen
movf

t2,0

xorlw

0x01

;verifica si t2=1

btfsc

estado,2

return

gua2
;si es 1 es porque

goto

gua2

0x01

bcf

intcon,7

movwf

t2

bcf

eecon1,1

clrf

t1

bcf

estado,5

call

guardart1t2

return

t1=250 y t2=1 no hace nada


movlw

visualiza

return
guardart1t2

call

cambioenlinea1

call

guardast1

call

unidades

call

guardast2

call

lamuestra1

call

tiempodecambio

movwf

portb

call

tiempodecambio

bsf

portb,7

return

return
visualiza1

guardast1
movlw

0x00

;guarda t1

call

cambioenlinea

de

la

call

decenas

nop

call

lamuestra

nop

movwf

portb

nop

bcf

portb,7

nop
nop

return

nop

lamuestra
movf

decena,0

nop

addwf

Pc,1

return

retlw

10h ;9 0110 1111 6f 0001 0000 10

tiempodecambio

retlw

00h ;8 0111 1111 7f 0000 0000 00

movlw

0xff

retlw

78h ;7 0000 0111 07 0111 1000 78

movwf

con1

retlw

02h ;6 0111 1101 7d 0000 0010 02

movlw

0xff

retlw

12h ;5 0110 1101 6d 0001 0010 12

movwf

con2

retlw

19h ;4 0110 0110 66 0001 1001 19

;viva

retlw

30h ;3 0100 1111 4f 0011 0000 30

decfsz

con1,1

retlw

24h ;2 0101 1011 5b 0010 0100 24

goto

retlw

79h ;1 0000 0110 06 0111 1001 79

decfsz con2,1

retlw

40h ;0 0011 1111 3f 0100 0000 40

goto

viva

viva

return

return

tiempoinicial
movlw

0xff

asi en la tabla

movwf

con1

movf

unidad,0

movlw

0xff

addwf

Pc,1

movwf

con2

retlw

10h ;9 0110 1111 6f 0001 0000 10

retlw

00h ;8 0111 1111 7f 0000 0000 00

decfsz

con1,1

retlw

78h ;7 0000 0111 07 0111 1000 78

goto

retlw

02h ;6 0111 1101 7d 0000 0010 02

decfsz con2,1

retlw

12h ;5 0110 1101 6d 0001 0010 12

goto

retlw

19h ;4 0110 0110 66 0001 1001 19

return

retlw

30h ;3 0100 1111 4f 0011 0000 30

retlw

24h ;2 0101 1011 5b 0010 0100 24

btfss

enlinea,7

retlw

79h ;1 0000 0110 06 0111 1001 79

goto

troya

retlw

40h ;0 0011 1111 3f 0100 0000 40

decf

enlinea,1

decf

enlinea,1

lamuestra1

; invertimos el conteo dando )9=0,8=1 y

viva2

viva2

viva2

decenas

return

decf

enlinea,1

clrf

decena

movlw 0xff

movf

enlinea,0

movwf

sublw

.24

movlw 0x01;ff

btfsc

estado,0

movwf

return

tiempogradual ; con1 * con2 graduacion de porcentaje


troya

a los 60Hz

con1

con2

incf

decena,1

movf

enlinea,0

sublw

.49

decfsz con2,1

btfsc

estado,0

goto

return

tex1
decfsz
goto

con1,1
tex1

tex1

incf

decena,1

tiempopwm ; con1 * con2 graduacion de porcentaje a

movf

enlinea,0

los 60Hz

return

sublw

.74

nop

btfsc

estado,0

nop

return

cambioenlinea1

incf

decena,1

movf

enlinea,0

movf

t1,0

sublw

.99

movwf

enlinea1

btfsc

estado,0

return
unidades

return
incf

decena,1

clrf

unidad

movf

enlinea,0

movf

enlinea1,0

sublw

.124

sublw

.4

btfsc

estado,0

btfsc

estado,0

return

return
incf

decena,1

incf

unidad,1

movf

enlinea,0

movf

enlinea1,0

sublw

.149

sublw

.9

btfsc

estado,0

btfsc

estado,0

return

return
incf

decena,1

incf

unidad,1

movf

enlinea,0

movf

enlinea1,0

sublw

.174

sublw

.14

btfsc

estado,0

btfsc

estado,0

return

return
incf

decena,1

incf

unidad,1

movf

enlinea,0

movf

enlinea1,0

sublw

.199

sublw

.19

btfsc

estado,0

btfsc

estado,0

return

return
incf

decena,1

incf

unidad,1

movf

enlinea,0

movf

enlinea1,0

sublw

.224

sublw

.24

btfsc

estado,0

btfsc

estado,0

return

return
incf

decena,1

return
cambioenlinea

incf

unidad,1

movf

enlinea1,0

sublw

.29
estado,0

clrf

enlinea

btfsc

btfsc

t1,1

return

bsf

enlinea,0

incf

unidad,1

btfsc

t1,2

movf

enlinea1,0

bsf

enlinea,1

sublw

.34

btfsc

t1,3

btfsc

estado,0

bsf

enlinea,2

return

btfsc

t1,4

incf

unidad,1

bsf

enlinea,3

movf

enlinea1,0

btfsc

t1,5

sublw

.39

bsf

enlinea,4

btfsc

estado,0

btfsc

t1,6

return

bsf

enlinea,5

incf

unidad,1

btfsc

t1,7

movf

enlinea1,0

bsf

enlinea,6

sublw

.44

btfsc

t2,0

btfsc

estado,0

bsf

enlinea,7

return

return

incf

unidad,1

movf

enlinea1,0

sublw

.99

sublw

.49

btfsc

estado,0

btfsc

estado,0

return

return

clrf

unidad

clrf

unidad

movf

enlinea1,0

movf

enlinea1,0

sublw

.104

sublw

.54

btfsc

estado,0

btfsc

estado,0

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.109

sublw

.59

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.114

sublw

.64

btfsc

estado,0

btfsc

estado,0

return

return

return

incf

unidad,1
enlinea1,0

incf

unidad,1

movf

movf

enlinea1,0

sublw

.119

sublw

.69

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.124

sublw

.74

btfsc

estado,0

btfsc

estado,0

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.129

sublw

.79

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.134

sublw

.84

btfsc

estado,0

btfsc

estado,0

return

return

return

incf

unidad,1
enlinea1,0

incf

unidad,1

movf

movf

enlinea1,0

sublw

.139

sublw

.89

btfsc

estado,0

btfsc

estado,0

return

return

incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.144

sublw

.94

btfsc

estado,0

btfsc

estado,0

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.149

return

btfsc

estado,0

btfsc

estado,0

return

return
clrf

unidad

clrf

unidad

movf

enlinea1,0

movf

enlinea1,0

sublw

.154

sublw

.204

btfsc

estado,0

btfsc

estado,0

return

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.159

sublw

.209

btfsc

estado,0

btfsc

estado,0

return

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.164

sublw

.214

btfsc

estado,0

btfsc

estado,0

return

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.169

sublw

.219

btfsc

estado,0

btfsc

estado,0

return

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.174

sublw

.224

btfsc

estado,0

btfsc

estado,0

return

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.179

sublw

.229

btfsc

estado,0

btfsc

estado,0

return

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.184

sublw

.234

btfsc

estado,0

btfsc

estado,0

return

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.189

sublw

.239

btfsc

estado,0

btfsc

estado,0

return

return
incf

unidad,1

incf

unidad,1

movf

enlinea1,0

movf

enlinea1,0

sublw

.194

sublw

.244

btfsc

estado,0

btfsc

estado,0

return

return
incf

unidad,1

incf

movf

enlinea1,0

return

sublw

.199

End

unidad,1

21.9 CODIGO FUENTE DEL SOFTWARE CONTROL DE LA MAQUINA


21.9.1 PROGRAMA PARA PROBAR LOS DIFERENTES ACCIONISMOS DEL
SISTEMA.
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
#include<fstream.h>
#include<stdlib.h>
int salidatotal=0;
char selladorx='0'; // variables que el sistema
char calenturax='0'; // entero debe conocer
char dosificarx='0';
char valvulax='0';
int tiemposelle=0;
int tiempocorte=0;
int tiempoespera=0;
int tiemposeguridad=0;
int calentamiento=0;
int contador=0;
void sellador(char onoff); // funciones para encender
o apagar las salidas
void calentura(char onoff); //
void dosificar(char onoff);
void valvula(char onoff);
void estado0system();
void pantalladebienvenida();
void cargadeinformacion();
void mostrarinformacion();
void puertosalidas();
void menu1();
void menu2();
void menu3();
void menu4();
void main()
{
char sim1,sim2,sim3;
int datolec;
int puerto;
char opc='n';
puerto=peek(0x40,0x8);
do{
do{
cout.flush();
clrscr();
datolec=inportb(puerto+1);
sim1='0';
sim2='0';
sim3='0';
if(!datolec&0x20)
//verifica entrada3
sim3='1';
// en pc de juan es 0x40
if(datolec&0x10)
// verifica entrada2
sim2='1';
if(!datolec&0x8)
// verifica entrada1
sim1='1';
puertosalidas();
gotoxy(15,3);
cout<<" MAQUINA SAMURAY'S SOCIETY ";
gotoxy(14,4);
cout<<" ===========================";
gotoxy(10,6);
cout<<"ENTRADAS
SALIDAS ";
gotoxy(1,8);
cout<<"( Datos leidos en el puerto )";
gotoxy(1,10);
cout<<" Sensor de Papel y Liquido ";
if(sim1=='1')

cout<<"on";
else
cout<<"off";
gotoxy(1,12);
cout<<" Sensor Bolsita ";
if(sim2=='1')
cout<<"on";
else
cout<<"off";
gotoxy(1,14);
cout<<" Switch Externo ";
if(sim3=='1')
cout<<"on";
else
cout<<"off";
gotoxy(43,8);
cout<<" 1) Valvula ";
if(valvulax=='1')
cout<<"on";
else
cout<<"off";
gotoxy(43,10);
cout<<" 2) Dosificar ";
if(dosificarx=='1')
cout<<"on";
else
cout<<"off";
gotoxy(43,12);
cout<<" 3) Sellador ";
if(selladorx=='1')
cout<<"on";
else
cout<<"off";
gotoxy(43,14);
cout<<" 4) Restistencia ";
if(calenturax=='1')
cout<<"on";
else
cout<<"off";
gotoxy(18,20);
cout<<"
PULSE 0 SI DESEA SALIR"<<endl<<endl;
gotoxy(29,16);
cout<<"Estado del puerto ";
gotoxy(29,17);
cout<<"de salida --> "<<salidatotal<<" ";
gotoxy(50,16);
cout<<calenturax<<" "<<selladorx<<" "<<dosificarx<<"
"<<valvulax;
gotoxy(50,17);
cout<<"R S D V";
gotoxy(8,22);
cout<<"
Ingrese salida que desea cambiar";
cout.flush();
opc=getch();
}while(opc!='0' && opc!='1' && opc!='2' &&
opc!='3' && opc!='4');
gotoxy(35,21);
cout<<"
";
if(opc=='1')
menu1();
if(opc=='2')
menu2();
if(opc=='3')
menu3();
if(opc=='4')
menu4();

}while(opc!='0');
}//FIN
void menu1()
{
if(valvulax=='0')
valvulax='1';
else
valvulax='0';
return;
}
void menu2()
{
if(dosificarx=='0')
dosificarx='1';
else
dosificarx='0';
return;
}
void menu3()
{
if(selladorx=='0')
selladorx='1';
else
selladorx='0';
return;
}
void menu4()
{
if(calenturax=='0')
calenturax='1';
else
calenturax='0';
return;
}
void puertosalidas()
{
salidatotal=0;
int puerto;
int datolec;
if(valvulax=='1')
salidatotal=salidatotal+1;

if(dosificarx=='1')
salidatotal=salidatotal+2;
if(selladorx=='1')
salidatotal=salidatotal+4;
if(calenturax=='1')
salidatotal=salidatotal+8;
puerto=peek(0x40,0x8);
if(salidatotal==1)
outportb(puerto,0x01);
if(salidatotal==2)
outportb(puerto,0x02);
if(salidatotal==3)
outportb(puerto,0x03);
if(salidatotal==4)
outportb(puerto,0x04);
if(salidatotal==5)
outportb(puerto,0x05);
if(salidatotal==6)
outportb(puerto,0x06);
if(salidatotal==7)
outportb(puerto,0x07);
if(salidatotal==8)
outportb(puerto,0x08);
if(salidatotal==9)
outportb(puerto,0x09);
if(salidatotal==10)
outportb(puerto,0x0a);
if(salidatotal==11)
outportb(puerto,0x0b);
if(salidatotal==12)
outportb(puerto,0x0c);
if(salidatotal==13)
outportb(puerto,0x0d);
if(salidatotal==14)
outportb(puerto,0x0e);
if(salidatotal==15)
outportb(puerto,0x0f);
return;
}

21.9.2 PROGRAMA PARA MANEJO DE TIEMPOS CONFIGURACION DE LA


MAQUINA
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
#include<fstream.h>
#include<stdlib.h>
int tiemposelle;
int tiempociclo;
int tiempoespera;
int tiemposeguridad;
int calentamiento;
int contador;
void cargadeinformacion();
char menuinformacion();
void puertosalidas();
void guardainfo();
void menu1();
void menu2();
void menu3();
void menu4();
char seleccionaconfiguracion();
void menu5();
void menu6();
int cambio();
void cambio1();
void menu7();
void menu8();

void mostrarlista();
void ventana();
char verificar(char codigo[70]);
void seleccionconfi(int x);
void eliminarconfi(int x);
void main()
{
char card='h';
do{
cargadeinformacion();
card=menuinformacion();
}while(card!='0');
}
char menuinformacion()
{
char opc='n';
do{
cout.flush();
clrscr();
gotoxy(15,3);
cout<<" MAQUINA SAMURAY'S SOCIETY ";
gotoxy(14,4);
cout<<" ===========================";
gotoxy(1,6);
cout<<" 1) Tiempo de selle "<<tiemposelle<<"ms";
gotoxy(30,6);

cout<<"

2) Tiempo de ciclo "<<tiempociclo<<"ms";

gotoxy(1,8);
cout<<" 3) Tiempo de espera "<<tiempoespera<<"ms";
gotoxy(30,8);
cout<<"
4) Tiempo de seguridad
"<<tiemposeguridad<<"ms";
gotoxy(1,10);
cout<<" 5) Tiempo de calentamiento inicial
"<<calentamiento<<"s";
gotoxy(1,12);
cout<<" 6) Contador Actual "<<contador;
gotoxy(1,14);
cout<<" 7) Configuraciones exixtentes ";
gotoxy(1,16);
cout<<" 8) Guardar tiempos actuales ";

gotoxy(1,8);
cout<<" 3) Tiempo de espera "<<tiempoespera<<"ms";
gotoxy(30,8);
cout<<"
4)
Tiempo
de
seguridad
"<<tiemposeguridad<<"ms";
gotoxy(1,10);
cout<<" 5) Tiempo de calentamiento inicial
"<<calentamiento<<"s";
gotoxy(1,13);
cout<<" ACEPTA LA CONFIGURACION?(S/N) ";
cout.flush();
contr=getch();
if(contr=='s')
contr='S';
if(contr!='S')
return;
gotoxy(1,15);

gotoxy(35,22);
cout<<"
PULSE 0 SI DESEA SALIR";
gotoxy(4,22);
cout<<"SELECCIONE LA OPCION DESEADA";
gotoxy(1,1);
cout.flush();
opc=getch();
}while(opc!='0' && opc!='8' &&opc!='7' &&
opc!='1' && opc!='2' && opc!='3' && opc!='4' &&
opc!='5' && opc!='6');
gotoxy(35,22);
cout<<"

";

if(opc=='1')
menu1();
if(opc=='2')
menu2();
if(opc=='3')
menu3();
if(opc=='4')
menu4();
if(opc=='5')
menu5();
if(opc=='6')
menu6();
if(opc=='7')
menu7();
if(opc=='8')
menu8();
return opc;
}
char verificar(char codigo[70])
{
if(codigo[0]=='F')
if(codigo[1]=='I')
if(codigo[2]=='N')
return 'F';
return 'V';
}
void menu8()
{
char contr;
int conteo;
char nombre[50];
cout.flush();
clrscr();
gotoxy(15,3);
cout<<" MAQUINA SAMURAY'S SOCIETY ";
gotoxy(14,4);
cout<<" ===========================";
gotoxy(1,6);
cout<<" 1) Tiempo de selle "<<tiemposelle<<"ms";
gotoxy(30,6);
cout<<" 2) Tiempo de ciclo "<<tiempociclo<<"ms";

cout<<"DE UN NOMBRE CUALQUIERA MAXIMO 20


CARACTERES Y ACEPTAR"<<endl<<endl;
cout<<"SI SE ARREPINTIO PULSE SOLO ACEPTAR
"<<endl<<endl;
cout<<"
...";
cout.flush();
gets(nombre);
if(nombre[0]=='\0')
return;
if(nombre[0]=='0')
return;
for(int de=0;de<20;de++)
{
if(nombre[de]==' ')
nombre[de]='.';
if(nombre[de]=='\0')
{
for(int di=de;di<18;di++)
nombre[di]='.';
}
}
nombre[19]='\0';
conteo=cambio();
ofstream sale;
sale.open("secuens1.txt",ios::app);
sale<<endl;
sale<<conteo+1<<" ";
sale<<nombre<<" ";
sale<<tiemposelle<<" ";
sale<<tiempociclo<<" ";
sale<<tiempoespera<<" ";
sale<<tiemposeguridad<<" ";
sale<<calentamiento<<" "<<endl;
sale.close();
cambio1();
cout<<"
listo!!!";
cout.flush();
getch();
return;
}
char seleccionaconfiguracion()
{char opc;
do{
cout.flush();
clrscr();
gotoxy(15,3);
cout<<" MAQUINA SAMURAY'S SOCIETY ";
gotoxy(14,4);
cout<<" ===========================";
cout<<endl<<endl;
cout<<"
MENU
CONFIGURACIONES"<<endl<<endl;
cout<<"
1.SELECCIONAR
"<<endl<<endl;
cout<<"
2.ELIMINAR
"<<endl<<endl;

cout<<"
3.MOSTRAR LISTADO
"<<endl<<endl;
cout<<"
SELECCIONE LA OPCION
DESEADA "<<endl<<endl<<endl;
cout<<"
USE 0 PARA SALIR
"<<endl<<endl;
cout.flush();
opc=getch();
}while(opc!='0' && opc!='1' && opc!='2' &&
opc!='3');
return opc;
}
void menu7()
{
int cnf;
int casco;
int sal;
casco=seleccionaconfiguracion();
cout<<endl<<endl;
switch(casco)
{
case '1':
cout<<"INGRESE EL CODIGO SELECCIONADO Y
ACEPTAR...";
cin>>cnf;
if(cnf<1)
return;
seleccionconfi(cnf);
break;case '2':
cout<<"INGRESE EL CODIGO A ELIMINAR Y
ACEPTAR...";
cin>>cnf;
if(cnf<1)
return;
if(cnf<1)
return;
eliminarconfi(cnf);
break;case '3':
mostrarlista();
break;
}
return;
}
void seleccionconfi(int x)
{
ofstream salda;
char se[40];
int res;
res=cambio();
cambio1();
if(res<x)
return;
ifstream entrada;
entrada.open("secuens.txt");
for(res=0;res<x;res++)
{
entrada>>se;
entrada>>se;
entrada>>tiemposelle;
entrada>>tiempociclo;
entrada>>tiempoespera;
entrada>>tiemposeguridad;
entrada>>calentamiento;
}
entrada.close();
salda.open("lainfo.txt");
salda<<tiemposelle<<endl;
salda<<tiempociclo<<endl;
salda<<tiempoespera<<endl;
salda<<tiemposeguridad<<endl;
salda<<calentamiento<<endl;
salda<<contador<<endl;
salda.close();
return;
}
void cambio1()

{
char codig[50];
char su='N';
ofstream salida;
ifstream entrada;
salida.open("secuens1.txt",ios::app);
salida<<endl;
salida<<"FIN FIN FIN FIN";
salida.close();
salida.open("secuens.txt");
entrada.open("secuens1.txt");
entrada>>codig;
su=verificar(codig);
while(su!='F')
{
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" "<<endl;
entrada>>codig;
su=verificar(codig);
}
salida.close();
entrada.close();
return;
}
void eliminarconfi(int x)
{
char codig[50];
char su;
ofstream salida;
int con;
ifstream entrada;
con=cambio();
if(con<x)
return;
salida.open("secuens1.txt");
entrada.open("secuens.txt");
int fdr=0;
for(int we=0;we<con;we++)
{
if(we+1!=x)
{
fdr++;
entrada>>codig;
salida<<fdr<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";

entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" "<<endl;
}
else
{
cout.flush();
clrscr();
cout<<endl<<endl<<endl;
cout<<"CONFIGURACION
ELIMINA"<<endl<<endl;
entrada>>codig;
cout<<codig<<" ";
entrada>>codig;
cout<<codig<<" ";
entrada>>codig;
entrada>>codig;
entrada>>codig;
entrada>>codig;
entrada>>codig;
}
}
cambio1();
salida.close();
entrada.close();
}
int cambio()
{
char codig[50];
char su='N';
ofstream salida;
int con=0;
ifstream entrada;
salida.open("secuens.txt",ios::app);
salida<<endl;
salida<<"FIN FIN FIN FIN";
salida.close();
salida.open("secuens1.txt");
entrada.open("secuens.txt");
entrada>>codig;
su=verificar(codig);
while(su!='F')
{
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" "<<endl;
con++;
entrada>>codig;
su=verificar(codig);
}
salida.close();
entrada.close();
return con;
}
void mostrarlista()

QUE

{
char esd;
int tantos;
int yr;
int re;
int dol;
char frio[50];
ifstream entrada;
tantos=cambio();
cambio1();
if(tantos==0)
{
cout.flush();
clrscr();
cout<<endl<<endl<<endl<<"No
tiene
sucuencias
guardadas";
getch();
return;
}
entrada.open("secuens.txt");
for(re=0;re<tantos;re++)
{
ventana();
for(dol=0;dol<7;dol++)
{
entrada>>frio;
gotoxy(2,8+dol*2);
cout<<"= "<<frio;
entrada>>frio;
gotoxy(7,8+dol*2);
cout<<"= ";
for(int tt=0;tt<19;tt++)
{
if(frio[tt]=='.')
cout<<" ";
else
cout<<frio[tt];
}
entrada>>frio;
gotoxy(30,8+dol*2);
cout<<"= "<<frio;
entrada>>frio;
gotoxy(39,8+dol*2);
cout<<"= "<<frio;
entrada>>frio;
gotoxy(49,8+dol*2);
cout<<"= "<<frio;
entrada>>frio;
gotoxy(58,8+dol*2);
cout<<"= "<<frio;
entrada>>frio;
gotoxy(67,8+dol*2);
cout<<"= "<<frio;
gotoxy(2,9+dol*2);
cout<<"===================================
=====================================";
gotoxy(73,8+dol*2);
cout<<"=";
gotoxy(73,9+dol*2);
cout<<"=";
if(re+dol+1==tantos)
break;
}
re=re+6;
cout.flush();
cout<<endl<<"PULSE TECLA PARA CONTINUAR
PULSE 0 PARA SALIR";
gotoxy(1,1);
esd=getch();
if(esd=='0')
{
entrada.close();
return;
}
cout.flush();
clrscr();

}
entrada.close();
return;
}
void ventana()
{
int x;
int y;
cout.flush();
clrscr();
gotoxy(15,3);
cout<<" MAQUINA SAMURAY'S SOCIETY ";
gotoxy(1,5);
cout<<"
=========================================
===============================";
gotoxy(1,6);
cout<<" = Cd =
NOMBRE
= SELLE = CICLO
= ESPERA = SEGURI = T.C =";
gotoxy(1,7);
cout<<"
=========================================
===============================";
/*for(y=7;y<23;y=y+2)
{for(x=2;x<73;x++)
{
gotoxy(x,y);
cout<<"=";
}}
for(x=2;x<8;x=x+5)
{for(y=6;y<22;y++)
{gotoxy(x,y);
cout<<"=";
}}
for(x=31;x<69;x=x+9)
{for(y=6;y<22;y++)
{gotoxy(x,y);
cout<<"=";
}}
for(y=6;y<22;y++)
{
gotoxy(73,y);
cout<<"=";
}*/
}
void cargadeinformacion()
{
ifstream entrada;
entrada.open("lainfo.txt");
entrada>>tiemposelle;
entrada>>tiempociclo;
entrada>>tiempoespera;
entrada>>tiemposeguridad;
entrada>>calentamiento;
entrada.close();
entrada.open("ulticont.txt");
entrada>>contador;
entrada.close();
return;
}
void menu1()
{
int dato;
do{
gotoxy(4,22);
cout<<"INGRESE TIEMPO DE SELLE Y ACEPTAR
(milisegundos)...";
cin>>dato;
if(dato<1)
return;
}while(dato>30000);
tiemposelle=dato;

if(tiemposelle>tiempociclo)
tiempociclo=tiemposelle;
guardainfo();
}
void menu2()
{
int dato;
do{
gotoxy(4,22);
cout<<"INGRESE TIEMPO DE CICLO Y ACEPTAR
(milisegundos)...";
cin>>dato;
if(dato<1)
return;
if(dato<tiemposelle)
return;
}while(dato>30000);
tiempociclo=dato;
guardainfo();
}
void menu3()
{
int dato;
do{
gotoxy(4,22);
cout<<"INGRESE TIEMPO DE ESPERA Y ACEPTAR
(milisegundos)...";
cin>>dato;
if(dato<1)
return;
}while(dato>30000);
tiempoespera=dato;
guardainfo();
}
void menu4()
{
int dato;
do{
gotoxy(4,22);
cout<<"INGRESE TIEMPO DE SEGURIDAD Y
ACEPTAR (milisegundos)...";
cin>>dato;
if(dato<1)
return;
}while(dato>30000);
tiemposeguridad=dato;
guardainfo();
}
void menu5()
{
int dato;
do{
gotoxy(4,22);
cout<<"INGRESE CALENTAMIENTO INICIAL Y
ACEPTAR (segundos)...";
cin>>dato;
if(dato<1)
return;
}while(dato>30000);
calentamiento=dato;
guardainfo();
}
void menu6()
{
int dato;
do{
gotoxy(4,22);
cout<<"Ingrese la Nueva cantidad actual...";
cin>>dato;
if(dato<1)
return;
}while(dato>30000);
contador=dato;
guardainfo();
}

void guardainfo()
{
ofstream salida;
salida.open("lainfo.txt");
salida<<tiemposelle<<endl;
salida<<tiempociclo<<endl;
salida<<tiempoespera<<endl;
salida<<tiemposeguridad<<endl;
salida<<calentamiento<<endl;

salida.close();
salida.open("ulticont.txt");
salida<<contador;
salida.close();
return;
}

21.9.3 PROGRAMA PRINSIPAL CON ARREGLOS PARA UNA SIMULACION


#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
#include<fstream.h>
#include<stdlib.h>
int tiemposelle;
int tiempociclo;
int tiempoespera;
int tiemposeguridad;
int calentamiento;
int contador;
void cargadeinformacion();
char menuinformacion();
void puertosalidas();
void guardainfo();
void menu1();
void menu2();
void menu3();
void menu4();
char seleccionaconfiguracion();
void menu5();
void menu6();
int cambio();
void cambio1();
void menu7();
void menu8();
void mostrarlista();
void ventana();
char verificar(char codigo[70]);
void main()
{
char card='h';
do{
cargadeinformacion();
card=menuinformacion();
}while(card!='0');
}
char menuinformacion()
{
char opc='n';
do{
cout.flush();
clrscr();
gotoxy(15,3);
cout<<" MAQUINA SAMURAY'S SOCIETY ";
gotoxy(14,4);
cout<<" ===========================";
gotoxy(1,6);
cout<<" 1) Tiempo de selle "<<tiemposelle<<"ms";
gotoxy(30,6);
cout<<" 2) Tiempo de ciclo "<<tiempociclo<<"ms";
gotoxy(1,8);
cout<<" 3) Tiempo de espera "<<tiempoespera<<"ms";
gotoxy(30,8);

cout<<"
4)
Tiempo
de
seguridad
"<<tiemposeguridad<<"ms";
gotoxy(1,10);
cout<<" 5) Tiempo de calentamiento inicial
"<<calentamiento<<"s";
gotoxy(1,12);
cout<<" 6) Contador Actual "<<contador;
gotoxy(1,14);
cout<<" 7) Cargar tiempos seleccionando de una lista
";
gotoxy(1,16);
cout<<" 8) Guardar tiempos actuales ";
gotoxy(35,22);
cout<<"
PULSE 0 SI DESEA SALIR";
gotoxy(4,22);
cout<<"Ingrese la opcion deseada...";
cout.flush();
opc=getch();
}while(opc!='0' && opc!='8' &&opc!='7' &&
opc!='1' && opc!='2' && opc!='3' && opc!='4' &&
opc!='5' && opc!='6');
gotoxy(35,22);
cout<<"

";

if(opc=='1')
menu1();
if(opc=='2')
menu2();
if(opc=='3')
menu3();
if(opc=='4')
menu4();
if(opc=='5')
menu5();
if(opc=='6')
menu6();
if(opc=='7')
menu7();
if(opc=='8')
menu8();
return opc;
}
char verificar(char codigo[70])
{
if(codigo[0]=='F')
if(codigo[1]=='I')
if(codigo[2]=='N')
return 'F';
return 'V';
}
void menu8()
{
char contr;
int conteo;
char nombre[50];

cout.flush();
clrscr();
gotoxy(15,3);
cout<<" MAQUINA SAMURAY'S SOCIETY ";
gotoxy(14,4);
cout<<" ===========================";
gotoxy(1,6);
cout<<" 1) Tiempo de selle "<<tiemposelle<<"ms";
gotoxy(30,6);
cout<<" 2) Tiempo de ciclo "<<tiempociclo<<"ms";
gotoxy(1,8);
cout<<" 3) Tiempo de espera "<<tiempoespera<<"ms";
gotoxy(30,8);
cout<<"
4)
Tiempo
de
seguridad
"<<tiemposeguridad<<"ms";
gotoxy(1,10);
cout<<" 5) Tiempo de calentamiento inicial
"<<calentamiento<<"s";
gotoxy(1,13);
cout<<" ACEPTA LA CONFIGURACION?(S/N) ";
cout.flush();
contr=getch();
if(contr=='s')
contr='S';
if(contr!='S')
return;
gotoxy(1,16);
cout<<"Ingrese un corto nombre para la nueva
configuracion (maximo 20 caracteres)"<<endl;
cout<<"(Para salir pulse 0 y aceptar) "<<endl<<endl;
cout<<"
...";
cout.flush();
gets(nombre);
conteo=cambio();
ofstream sale;
sale.open("secuens1.txt",ios::app);
sale<<endl;
sale<<conteo+1<<" ";
sale<<nombre<<" ";
sale<<tiemposelle<<" ";
sale<<tiempociclo<<" ";
sale<<tiempoespera<<" ";
sale<<tiemposeguridad<<" ";
sale<<calentamiento<<" "<<endl;
sale.close();
cambio1();
cout<<"
listo!!!";
cout.flush();
getch();
return;
}
char seleccionaconfiguracion()
{
char opc;
do{
cout<<"
MENU CONFIGURACIONES";
cout<<"
";
cout<<"
1.SELECCIONAR
"<<endl<<endl;
cout<<"
2.ELIMINAR
"<<endl<<endl;
cout<<"
3.MOSTRAR LISTADO
"<<endl<<endl;
cout<<"
SELECCIONE LA OPCION
DESEADA ";
cout.flush();
opc=getch();
}while(opc!='0' && opc!='1' && opc!='2' &&
opc!='3');
return opc;
}
void menu7()
{

int casco;
int sal;
sal=cambio();
cambio1();
casco=seleccionaconfiguracion();
switch(casco)
{
case '1':
// seleccionarconfi();
break;case '2':
// eliminarconfi();
break;case '3':
mostrarlista();
break;
}
return;
}
void cambio1()
{
char codig[50];
char su='N';
ofstream salida;
ifstream entrada;
salida.open("secuens1.txt",ios::app);
salida<<endl;
salida<<"FIN FIN FIN FIN";
salida.close();
salida.open("secuens.txt");
entrada.open("secuens1.txt");
entrada>>codig;
su=verificar(codig);
while(su!='F')
{
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
su=verificar(codig);
}
salida.close();
entrada.close();
return;
}
int cambio()
{
char codig[50];
char su='N';
ofstream salida;
int con=0;
ifstream entrada;
salida.open("secuens.txt",ios::app);
salida<<endl;
salida<<"FIN FIN FIN FIN";
salida.close();
salida.open("secuens1.txt");
entrada.open("secuens.txt");
entrada>>codig;

su=verificar(codig);
while(su!='F')
{
salida<<codig<<" ";

entrada>>frio;
gotoxy(67,8+dol*2);
cout<<"= "<<frio;
gotoxy(2,9+dol*2);
cout<<"===================================
=====================================";
gotoxy(73,8+dol*2);
cout<<"=";
gotoxy(73,9+dol*2);
cout<<"=";
if(re==tantos)
break;
re++;
}
cout.flush();
cout<<endl<<"Pulse tecla para ver mas o 0 para salir";
esd=getch();
if(esd=='0')
{
entrada.close();
return;
}
cout.flush();
clrscr();
}
entrada.close();
return;

entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
entrada>>codig;
salida<<codig<<" ";
con++;
entrada>>codig;
su=verificar(codig);
}
salida.close();
entrada.close();
return con;
}
void mostrarlista()
{
char esd;
int tantos;
int yr;
int re;
int dol;
char frio[50];
ifstream entrada;
tantos=cambio();
cambio1();
if(tantos==0)
{
cout.flush();
clrscr();
cout<<endl<<endl<<endl<<"No
guardadas";
getch();
return;
}
entrada.open("secuens.txt");
for(re=0;re<tantos;re++)
{
ventana();
for(dol=0;dol<7;dol++)
{
entrada>>frio;
gotoxy(2,8+dol*2);
cout<<"= "<<frio;
entrada>>frio;
gotoxy(7,8+dol*2);
cout<<"= "<<frio;
entrada>>frio;
gotoxy(30,8+dol*2);
cout<<"= "<<frio;
entrada>>frio;
gotoxy(39,8+dol*2);
cout<<"= "<<frio;
entrada>>frio;
gotoxy(49,8+dol*2);
cout<<"= "<<frio;
entrada>>frio;
gotoxy(58,8+dol*2);
cout<<"= "<<frio;

}
void ventana()
{
int x;
int y;
cout.flush();
clrscr();
gotoxy(15,3);
cout<<" MAQUINA SAMURAY'S SOCIETY ";

tiene

sucuencias

gotoxy(1,5);
cout<<"
=========================================
===============================";
gotoxy(1,6);
cout<<" = Cd =
NOMBRE
= SELLE = CICLO
= ESPERA = SEGURI = T.C =";
gotoxy(1,7);
cout<<"
=========================================
===============================";
/*for(y=7;y<23;y=y+2)
{for(x=2;x<73;x++)
{
gotoxy(x,y);
cout<<"=";
}}
for(x=2;x<8;x=x+5)
{for(y=6;y<22;y++)
{gotoxy(x,y);
cout<<"=";
}}
for(x=31;x<69;x=x+9)
{for(y=6;y<22;y++)
{gotoxy(x,y);
cout<<"=";
}}
for(y=6;y<22;y++)
{
gotoxy(73,y);
cout<<"=";
}*/
}
void cargadeinformacion()
{
ifstream entrada;

entrada.open("lainfo.txt");
entrada>>tiemposelle;
entrada>>tiempociclo;
entrada>>tiempoespera;
entrada>>tiemposeguridad;
entrada>>calentamiento;
entrada.close();
entrada.open("ulticont.txt");
entrada>>contador;
entrada.close();
return;
}
void menu1()
{
int dato;
do{
gotoxy(4,22);
cout<<"Ingrese el Tiempo de selle (milisegundos)...";
cin>>dato;
if(dato<1)
return;
}while(dato>30000);
tiemposelle=dato;
if(tiemposelle>tiempociclo)
tiempociclo=tiemposelle;
guardainfo();
}
void menu2()
{
int dato;
do{
gotoxy(4,22);
cout<<"Ingrese el Tiempo de ciclo (milisegundos)...";
cin>>dato;
if(dato<1)
return;
if(dato<tiemposelle)
return;
}while(dato>30000);
tiempociclo=dato;
guardainfo();
}
void menu3()
{
int dato;
do{
gotoxy(4,22);
cout<<"Ingrese
el
(milisegundos)...";
cin>>dato;
if(dato<1)
return;
}while(dato>30000);
tiempoespera=dato;
guardainfo();
}
void menu4()

Tiempo

de

espera

{
int dato;
do{
gotoxy(4,22);
cout<<"Ingrese
el
Tiempo
de
seguridad
(milisegundos)...";
cin>>dato;
if(dato<1)
return;
}while(dato>30000);
tiemposeguridad=dato;
guardainfo();
}
void menu5()
{
int dato;
do{
gotoxy(4,22);
cout<<"Ingrese el Tiempo de calentamiento inicial
(segundos)...";
cin>>dato;
if(dato<1)
return;
}while(dato>30000);
calentamiento=dato;
guardainfo();
}
void menu6()
{
int dato;
do{
gotoxy(4,22);
cout<<"Ingrese la Nueva cantidad actual...";
cin>>dato;
if(dato<1)
return;
}while(dato>30000);
contador=dato;
guardainfo();
}
void guardainfo()
{
ofstream salida;
salida.open("lainfo.txt");
salida<<tiemposelle<<endl;
salida<<tiempociclo<<endl;
salida<<tiempoespera<<endl;
salida<<tiemposeguridad<<endl;
salida<<calentamiento<<endl;
salida.close();
salida.open("ulticont.txt");
salida<<contador;
salida.close();
return;
}

21.10 MANUAL DE TRABAJO PARA SOFTWARE DE INVENTARIOS Y


FACTURACION
NOTA: LOS PROGRAMAS TRABAJAN EN LETRAS MAYUSCULAS ESTO
ES CON EL FIN DE SIMPLIFICAR CUESTIONES IMPRACTICAS DE
PROGRAMACION.
21.10.1

PROGRAMA

ACTUALIZACIONES,

NUEVOS

PRODUCTOS,

ELIMINACION DE PRODUCTOS.

Este programa es indispensable ya que por medio de el se permite al usuario


ingresar productos nuevos, actualizar datos y eliminar productos. La interfase al
usuario ser la siguiente.

Al ejecutar este programa el usuario encuentra que la ventana solicita clave de


4 dgitos.
El programa da la posibilidad que 2 claves distintas puedan acceder a este
programa en especial. En las opciones avanzadas cada una de las claves
puede cambiarse pero solo con la clave correspondiente.

Men principal que le da 4 opciones y una opcin (0) que le sirve para salir del
programa con solo presionarlo.

21.10.1.1 INGRESAR NUEVOS PRODUCTOS

La primera opcin le brinda la posibilidad de actualizar datos. Esta opcin la


veremos mas adelante para que primero ingresemos nuestros productos y ah
si los podemos actualizar.
La opcin 2 nos da la posibilidad de ingresar los nuevos productos.

Lo primero que nos pide es el cdigo en lo que tenemos en cuenta 3 cosas


bsicamente recordando que el software trabaja con letras maysculas.
El cdigo es de 7 dgitos de letras y nmeros, es decir que no acepta otro tipo
de caracteres. El primer digito debe ser una letra. Los dems programas del
software total hacen filtros de bsqueda con el cdigo, es decir que para
realizar una consulta buscara por los tres primeros dgitos del cdigo ms no
del nombre. Se recomienda que el usuario trate de codificar con las tres
primeras letras del nombre y luego a su gusto coloque letras y nmeros.
Los datos que sean ingresados errneamente el software los detecta, le
informa y retorna para que pueda rectificar el error

Error por primer digito debe ser letra

Cdigo con nmero de dgitos menor que 7. Si ingresa un cdigo de ms de 7


dgitos el programa toma los 7 primeros.

Cuando se ingresa un cdigo ya existente el programa indica y no lo deja


continuar. Al ingresar un nuevo producto lo ordena automticamente en orden
de lista. As que lo ubica en la posicin que le corresponde al cdigo ingresado.

Al ingresar de forma correcta el cdigo ingresa el nombre de mximo 50


caracteres.

Luego de ingresar el nombre y pulsar enter nos pide el precio mayor es decir
que nos pedir un precio menor (2 precios). Debemos considerar las
posibilidades: Si el producto ingresado es para vender sea producido en la
empresa podr manejar precio detal y mayorista. Si el caso es de un producto
que es materia prima puede manejar solo un precio es decir marque el mismo
valor en ambos precios.

El software genera error y le deja continuar corrigindolo primero.

Al ingresar los precios adecuadamente se nos pide ubicacin. Esta ubicacin


es considerada global ya que veremos mas adelante que el sistema de
inventarios permitir tener un mismo producto en sitios diferentes y podr
encontrarlos con facilidad. Por lo que esta ubicacin es de modo ms global.
Puede no utilizarla y simplemente dar enter, el programa asigna una ubicacin
a1 por defecto. Esta ubicacin es un cdigo de 2 caracteres.

El programa le muestra el nuevo producto y le pregunta si lo acepta y le pide


confirmacin de modo que tiene 2 opciones para arrepentirse.

El programa le indica que el producto ya fue ingresado. Al pulsar una tecla


retornaremos al programa principal

21.10.1.2 ACTUALIZAR PRODUCTO

La actualizacin de producto es la opcin 1 en la pantalla principal

El sistema le pide el cdigo que debe ingresarlo completo.

Ahora nos da las tres opciones de cambiar nombre, precios y ubicacin.


Si desea cambiar el cdigo no lo puede hacer para tal caso debe eliminar el
producto y luego ingresarlo de nuevo con el mismo cdigo.

Luego de ingresados los datos de actualizacin puede salir con 0


21.10.1.3 ELIMINAR PRODUCTO

La ventana le muestra que esta la opcin de eliminar y le pide el cdigo el cual


debe ingresar completo

Luego ingresar el cdigo el programa le mostrara el producto seleccionado e


inmediatamente le pedir confirmar 2 veces dando opcin al arrepentimiento.

21.10.1.4 OPCIONES AVANZADAS

21.10.1.4.1 CAMBIO DE CLAVES

Le pide la clave actual

Luego le muestra su clave y pide la nueva clave deseada

Ingresa la clave

El programa pide confirmacin y muestra que la clave fue aceptada

21.10.1.4.2 RECUPERACION POR FALLOS


La opcin 3 nos da informacin de mantenimiento en caso de fallos por un
corto o que se vaya la luz durante un proceso. Esta opcin solo puede
aplicarse si el programa por si mismo reconoce el problema. Si pulsa la opcin
3 y el sistema no encuentra errores indica que el programa esta bien.

En el caso de fallos el programa indicara desde un principio que el archivo de


informacin de los productos esta errado.

El programa le impide que usted seleccione otra opcin diferente a la


recomendada.

En la opcin se pedir la clave de nuevo e inmediatamente se recupera el


sistema en el punto exacto en donde fallo. Es decir que si se realizaron
cambios corresponde que nicamente el ultimo cambio pudo perderse, de resto
todo es guardado inmediatamente se hace un arreglo.

Ya puede trabajar normalmente. Es importante tener en cuenta que hay 2


archivos de datos el que maneja los productos como tal y otro en el que se
manejan los inventarios. Este programa recupera del archivo principal. El
archivo de inventarios tiene otra forma de recuperacin que ser vista mas
adelante.

21.10.1.4.3 GUARDAR LA INFORMACION

La opcin 4 da la opcin de guardar la informacin en un disquete para hacer


esta operacin pedir la clave de nuevo

Pedir el disquete para luego proceder a guardar.

21.10.2 CAMBIO DE FECHA

Para efectos de informacin que se almacena el usuario puede modificar la


fecha del da a su acomodo. Esta fecha se vera reflejada en los programas de
facturacin/consultas e inventarios.

El programa le muestra la fecha actual y pide la confirmacin de que desea


cambiarla, a esto se da S luego le pedir la nueva fecha la cual debe darse de
la forma dd/mm/aa.

Da enter y listo.

21.10.3 FACTURACION/CONSULTAS

Programa de consulta y facturacin

21.10.3.1 CONSULTAS

Con los tres primeros dgitos del cdigo se realiza la bsqueda. En este
ejemplo se ha codificado los jugos con un cdigo en el que los primero tres
cdigos son las letras JUG. Luego pulsa enter para realizar la bsqueda.

El programa arroja una pantallas con los primeros 10 productos en orden de


lista que el cdigo en sus 3 primeras letras es el ingresado.
En esta pantalla usted puede ver la informacin de nombre y ubicacin general,
debajo del nombre encuentra los 2 precios sugeridos. En el caso de ser un
producto de materia prima aparecern los mismos valores en las dos casillas.
Adems de los precios mayor y menor se observa un nmero asignado 0-9
para seleccionarlo. Para observar la cantidad que existe actualmente en
inventario (ingresada al sistema) debe seleccionar el nmero correspondiente
al producto con el teclado numrico en las opciones del 0-9.

Al seleccionar el producto inmediatamente el software realiza la sumatoria de


todo lo que se encuentre en stock con ese cdigo. Pulse 0 para salir.
Si el producto buscado no esta en estos primero 10 cdigos presione enter
para ver los siguientes productos. (Muestra en grupo de 10 o menos)
El programa da otra opcin + que es para salir de la bsqueda
inmediatamente.

ENTER

21.10.3.2 FACTURACION

En este programa solo es posible realizar facturas de venta. Veremos mas


adelante que para realizar las facturas de compras se utilizara el programa de
ingresos a inventario.
Nuevamente realizamos la bsqueda del producto ingresando los 3 primeros
dgitos del cdigo, buscamos el articulo deseado en el listado de pantalla
seleccionndolo con las opciones 0 al 9, si el articulo no aparece en la lista da
enter para un siguiente listado y as sucesivamente hasta encontrarlo y poderlo
seleccionar.

Al seleccionar el producto el software nos muestra cdigo, nombre, precio


mayor y cantidad real en existencia, y nos pregunta la cantidad a vender a lo
que se ingresa la cantidad luego pregunta precio unitario. El programa se

encuentra restringido y no deja que ingresemos un precio un 20% ms barato


que el precio menor.

Luego de ingresados los datos damos enter y el nos muestra lo que


ingresamos y nos habla de un descuento. Este descuento es funcin del precio
mayor (precio en pantalla) en relacin al precio vendido.

De igual manera puede meter ms productos hasta un mximo de 25 por


factura.

La factura que se va realizando nos muestra un descuento, este descuento es


de la factura en totalizada es decir que encuentra la cuenta correspondiente a
si se factura con el precio mayor y calcula el descuento segn el valor real de
factura.

La realizacin de la factura permite borrar el ultimo producto con la opcin


BORRAR

Nos permite eliminar con la opcin ELIMINAR

Al dar eliminar el programa nos muestra un pantallaso de cdigos y nombres y


nos pide ingresar el cdigo a eliminar.

Inmediatamente eliminara todos los tems que encuentre con el cdigo


ingresado.

La opcin NUEVA le permitir borrar todos los productos para iniciar una nueva
factura

Al tener una factura realizada puede imprimir su factura para lo que debe
implementar un data switch si va a utilizar el puerto paralelo para otra tarea de
modo que pueda trabajar la impresora.
Posee tres opciones de impresin FACTURA, COTIZA Y REMISION
La opcin FACTURA se utiliza para realizar su factura con IVA. Cabe recordar
que el programa discrimina el IVA es decir el precio de cada producto debe
tener ya el IVA incluido.

La opcin cotizacin (COTIZA) da la opcin de imprimir con precios y total pero


no discrimina IVA.

La opcin remisin imprime los productos y sus cantidades sin precio.

Cualquiera sea la opcin seleccionada se da la opcin de ingresar datos


adicionales como nombre, NIT o direccin para lo cual se asignan 2 casillas de
impresin. Cabe resaltar que cualquiera fuese el caso el software pude ser
adaptado para imprimir en hoja especial, variando unas pequeas cosas en el
programa fuente. Mas sin embargo la impresin posee un formato referente a
una factura existente en la actualidad como muestra.

Luego de ingresar estos datos alista la impresora, pulsa enter y se realiza la


impresin.

Otra opcin es PEDIDO esta opcin se utiliza para solicitar al inventario que
descargue los productos facturados, lo que en el caso de cotizaciones y
remisiones no ser necesario.
Al ingresar esta opcin el programa guarda en un archivo los productos as que
usted puede realizar varias facturas realizando PEDIDO en cada una de ellas y
todos los productos son almacenados en archivo para despus ser
descargados.

El programa le avisa que ya los productos fueron ingresados a archivo.

21.10.4 INGRESAR DATOS A INVENTARIOS

El programa titula NUEVO/COMPRAS por razn a que podemos ingresar 2


tipos de productos. Inventario de materia prima e inventario de producto para la
venta. Puede manejar el software para ingresar ambos tipos de artculos.
Entonces debemos realizar una factura de la misma forma como lo hicimos en
el programa de facturacin. Tenemos las opciones de NUEVA, BORRAR Y
ELIMINAR de igual forma. Excepto que no permite impresin alguna.

Tiene una opcin adicional FECHA con la cual puede cambiar la fecha del
ingreso. Esta fecha es independiente a la fecha del programa total ya que en
registro almacenamos lo realizado con la fecha general pero el ingreso puede
tener otra fecha distinta. Esto con el fin de dar flexibilidad en operaciones de
contabilidad interna de la empresa.

El programa nos pide la fecha que damos de la forma dd/mm/aa e


inmediatamente cambia

Al realizar la factura de ingreso en cada artculo nos pide los datos de (caja)
ubicacin real para lo que tenemos un espacio que debe ser numrico y de no
ms de 4 cifras es decir que de esta manera podemos tener un mismo
producto en 2 sitios o cajas diferentes. Luego nos pide la cantidad. El software
permite ubicar un mismo tipo de producto en sitios y cantidades diferentes.

Nos da la opcin de poner detalles que pueden ser color, algo de recordar,
vencimiento. Estos datos adicionales son de tipo alfanumrico y tiene la
posibilidad de dar un detalle de hasta 20 caracteres.

Es as que un mismo producto puede tener fechas de vencimiento diferentes.


Por esta misma razn se separan los archivos de producto como los de
inventario real.

De esta forma hacemos un listado de lo que vamos a ingresar a inventarios.


Luego que ya esta listo la lista de ingreso realizamos el ingreso con la palabra
INGRESO

Al dar INGRESO y enter el programa muestra el listado y pide confirmacin


para lo cual escribimos FINALIZAR. Si nos arrepentimos o nos equivocamos
volvemos con 0 y enter.

El programa indica que ya hubo el ingreso para lo que nos da tiempo de


revisar. Para realizar un nuevo ingreso escribimos NUEVO e inmediatamente
quedamos en una nueva factura de entrada a inventario.

Si no da la palabra nuevo cada vez que ingrese al programa le dar la


indicacin de modo que puede estar tranquilo. No falla.

21.10.5 INVENTARIO
El programa de inventario le va a permitir realizar consultas y descargas del
archivo que guarda el inventario de produccin y materia prima.

De igual forma que en el programa de consultas el programa permite la


consulta rpida y general. Con las 3 primeras letras consulto los productos en
los que su cdigo comienza con estas 3 primeras.

Me muestra todos los productos que comienzan con las letras y que se
encuentran en inventarios. Es decir

que solo la mercanca que existe en

inventario es mostrada.

As mismo como en el programa de consultas y facturacin para realizar una


salida de producto selecciono la opcin deseada 0-9. Igualmente el programa
visualiza en grupos de a 10 tems, si no encuentro el buscado en el listado con
enter voy a los siguientes 10 y as sucesivamente. Recuerde que en esta
ocasin lo que voy es a descargar de stocks la mercanca.

Si busca un producto especficamente debe ingresar el cdigo de 7 dgitos y el


software le muestra solo el producto seleccionado y sus ubicaciones
correspondientes. Recuerde que el programa nos da la posibilidad de varias
ubicaciones para un mismo producto.

Inmediatamente ya podemos seleccionar un tem para descargar lo necesario.


Al seleccionar el producto el programa nos pide la cantidad a descargar y la
prioridad, esta opcin de prioridad radica en que lo descargado se imprime si
usted lo desea con el fin de manejar bodega, sea que nos puede el programa
imprimir la regencia del producto, la caja o ubicacin de la cual se saca y la
prioridad que tiene la salida del producto. Este programa es muy prctico para
manejar bodega.

Para datos errneos como sacar una cantidad mayor el software reconoce el
error. De igual manera al sacar todos los productos de un tem el programa
borra la referencia de base de datos con el fin de optimizar el espacio en
memoria.

Otro tipo de consulta que el software permite es por la caja o lugar de ubicacin
as que pulsamos cajas y buscamos el lugar deseado de bsqueda. As que
buscamos los productos y cantidades que se encuentren en un lugar
especfico. Podemos encontrar diferentes productos en una misma ubicacin.

La opcin PEDIR y PEDIDO sirven para la descarga de los productos que se


hallan en lista. Es decir en el programa de facturacin hicimos la referencia a
este tem. Usted puede con PEDIR realizar la descarga de los productos que
se encuentren actualmente en la factura realizada. La instruccin PEDIDO se
utiliza para la descarga de los productos que usted ha ido acumulando en
listado para la descarga.

El programa automticamente busca los productos y permite que usted


seleccione la ubicacin y condiciones de detalles con las que quiere descargar
los productos dando la opcin de seleccin con enter.

Para buscar siguiente producto con +.

El programa visualiza la mercanca que se va sacando as que para efectos de


practicidad usted puede borrar los productos en pantalla con la palabra
TERMINAR. Este referencia en un archivo los productos sacados con el fin de
que el usuario tenga un reporte de lo que se a descargado de los inventarios.
Para acceder a este archivo se genera un acceso directo al archivo de modo
que pueda ser consultado.

El programa permite el arrepentimiento asi que pide confirmacin de la


operacin.

Para dejar referencia le pide una clave. Estas claves se asignan en el archivo
mipais por referirse a mi paisano. Entonces el usuario da el dato de cuantos
pueden sacar y asigna claves de 4 dgitos. El usuario que saca productos
ingresa el cdigo pero la referencia en archivo es por medio del nombre
asignado.

La referencia especifica un numero este numero sirve para recuperar archivo.


As que en el momento de una falla podemos recuperar los datos a fin de que
no se pierda la informacin. Cada vez que se da un terminar el programa
guarda una proteccin en un archivo de reserva. Si desea ver el procedimiento
remtase al cdigo fuente en su parte de opcin terminar.

Por

ultimo tenemos la opcin de GUARDAR por medio de la cual podemos

guardar la informacin en un disquete simplemente se da la opcin y el


programa guarda en disquete.

El programa le pide ingresar el disquete para guardar en disquete. Puede usted


arrepentirse pulsando 0 para salir.

NOTA: el programa de inventarios permite imprimir uno a uno cada producto


que se va descargando. Para proceder solo debemos referirnos al archivo con
el nombre imprimir en el que se encuentra un BIT de control el cual puede ser 1
o 0 as que si esta en 0 no imprime y si lo pone en 1 imprime. Esta opcin es
clave en el caso que se maneje la bodega por aparte as que los pedidos para
descargar mercanca pueden reverenciarse en papel en donde se especifica la
ubicacin, los detalles y la prioridad que tiene el producto para ser fsicamente
sacado de stocks.

21.10.6 RECUPERACION DE INVENTARIOS

El programa es un ejecutable exclusivo para la tarea propuesta que consiste en


recuperar los datos que se encuentran en inventarios. Esto en caso que se
hayan perdido por errores ajenos al software como por ejemplo que la luz se
vaya en laguna parte de transferencia de informacin entre archivos. Para este
caso es posible recuperar la informacin.

Al ejecutar nuestro programa el software pide confirmacin ya que el lleva una


referencia interna de tal modo que utiliza archivos de backup que todo el
tiempo

estn

listos

para

dichas

recuperaciones

que

como

veamos

anteriormente puede hacerse tambin con los listados de productos ya


explicados en la seccin 12.1.
Para este caso nos pedir doble confirmacin y que ingresemos nombre,
detalles y hora para dejar una referencia

Al aceptar la operacin nos muestra un mensaje que nos recuerda que si se


realizaba una descarga en el momento del dao debemos realizarla de nuevo.

21.10.7 LISTADO GENERAL

El programa genera un listado general buscando en cada cdigo la existencia


actual real en inventario de modo que nos da la informacin de precios y

cantidades actuales en sistema. Nos muestra el cdigo, nombre, precio mayor


y menor y la sumatoria de cantidad en inventarios del cdigo correspondiente.

NOTA: Para el caso que se trabaje en Windows 95 es bueno a la hora de la


instalacin utilizar accesos directos a los programas con un nombre ms
representativo del programa a trabajar. As mismo lo archivos bien sean tipo
.TXT o .DAT que contienen informacin como el listado general, o el reporte de
salidas de inventarios tambin con su acceso directo de modo que el usuario
no pueda equivocarse a la hora de manipular y pueda cometer errores
borrando informacin del sistema o manipulando archivos que no corresponde.
Para el caso en que se trabaja en puro D.O.S los programas ejecutables tienen
un nombre especfico que mximo abarca 8 caracteres y de igual forma los
archivos donde se guarda la informacin los cuales podrn ser visto o utilizados
con el comando EDIT del D.O.S dando la instruccin c:\>edit nombre.txt.
21.10.8 CODIGO FUENTE DEL SOFTWARE SISTEMA DE INFORMACION
Manejo de inventarios
//imprimir,ndato,salidas,datos
#include<fstream.h>
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<dos.h>

#include<stdio.h>
void cajitas();
void cambilis1v();
void cambilis2v();
void cambilis1();
void cambilviz1();
void cambilviz2();
int pati;

char primid;
int visual[20];
void camb();
void cambio();
char nombre[6];
void cambilis();
char camino(char a);
char codigo1[10][60];
char detalles1[10][50];
int cantidad1[10];
int caja1[10];
void visualiza();
void sale(int cont);
void patis();
char verify(char name[15]);
char sd;
int sped,sd1;
char verificar(char codigo[70]);
char codigo[60];
char detalles[50];
char facata[15];
int cantidad;
int caja;
void siguiente(char desido);
void pedidout(char desido);
char desido;
void main()
{
primid='x';
desido='0';
char odis1[70];
int odis2;
char odi='N';
char odi3;
ifstream vizin;
int vizint;
int vip;
char su;
int cont=0;
int re=0;
su='N';
char q1q='y';
char papel='0';
char codi[10];
int pas=0;
char codisa[10];
char odis[60];
codi[0]='1';
fstream cou;
ifstream entrada;
ofstream salida;
ifstream entrada1;
ofstream salida1;
ifstream entrada7;
ofstream salida7;
ofstream salida2;
int canto,sa,tu;
char claus,pip;
vizin.open("imprimir.txt");
vizin>>primid;
vizin.close();
vizin.open("vizcaino.txt");
vizin>>vizint;
vizin.close();
if(vizint<2)
return;
if(vizint>9)
return;
if(vizint==5)
cambilis();
do{
sped=0;
pip='0';
papel='0';
canto=0;
sd1=10;

cont=0;
re=0;
char paso[70];
su='N';
codi[0]='1';
cout.flush();
clrscr();
entrada1.open("fecha.txt");
entrada1>>facata;
entrada1.close();
salida1.open("salida1.txt",ios::app);
salida1<<endl;
salida1<<"FIN FIN FIN FIN";
salida1.close();
entrada1.open("salida1.txt");
salida1.open("salida2.txt");
entrada1>>paso;
su=verificar(paso);
cout<<"Fecha:"<<facata<<"
INVENTARIOS
CANTIDAD CAJA "<<endl<<endl;
while(su!='F')
{
salida1<<paso<<" ";
cout<<paso<<"
";
entrada1>>vip;
salida1<<vip<<" ";
cout<<vip<<"
";
if(vip<10)
cout<<" ";
if(vip<100)
cout<<" ";
entrada1>>vip;
salida1<<vip<<" ";
cout<<vip<<" "<<endl<<"Detalles...";
visual[sped]=vip;
sped++;
entrada1>>paso;
salida1<<paso<<" "<<endl;
cout<<paso<<" "<<endl;
entrada1>>paso;
su=verificar(paso);
}
salida1<<paso;
salida1.close();
entrada1.close();
camb();
cout<<endl;
cout<<" INGRESE EL
PRODUCTO.(PEDIR/PEDIDO/CAJAS/TERMINAR/GU
ARDAR/0 SALIR)..";
if(desido=='0')
{
cout.flush();
gets(codisa);
}
if(desido!='0')
{
cout<<endl<<endl;
if(desido=='1')
salida7.open("pedidop.txt",ios::app);
if(desido=='2')
salida7.open("pedido1.txt",ios::app);
if(desido=='3')
salida7.open("a:pedido3.txt",ios::app);
salida7<<endl;
salida7<<"FIN ";
salida7<<"FIN ";
salida7.close();
if(desido=='1')
entrada7.open("pedidop.txt");
if(desido=='2')
entrada7.open("pedido1.txt");
if(desido=='3')
entrada7.open("a:pedido3.txt");
entrada7>>odis1;
entrada7>>odis2;

entrada7.close();
odi=verificar(odis1);
if(odi=='F')
{
cout<<"EL PEDIDO"<<desido<<" YA NO TIENE MAS
PRODUCTOS...(tecla para continuar)";
codisa[0]='M';
codisa[1]='M';
codisa[2]='M';
codisa[3]='M';
cout.flush();
getch();
pedidout(desido);
desido='0';
}
if(odi!='F')
{
codisa[0]=odis1[0];
codisa[1]=odis1[1];
codisa[2]=odis1[2];
codisa[3]=odis1[3];
codisa[4]=odis1[4];
codisa[5]=odis1[5];
codisa[6]=odis1[6];
codisa[7]='\0';
cout<<odis1<<" cantidad..."<<odis2<<endl<<endl;
cout<<"seleccione la opcion (aceptar enter / +
siguiente / 0 salir...";
cout.flush();
odi3=getch();
if(odi3=='+')
{
siguiente(desido);
codisa[0]='M';
codisa[1]='M';
codisa[2]='M';
codisa[3]='M';
}
if(odi3=='0')
{
pedidout(desido);
codisa[0]='M';
codisa[1]='M';
codisa[2]='M';
codisa[3]='M';
desido='0';
}
}
if(desido!='0')
pedidout(desido);
}
for(pas=0;pas<9;pas++)
codi[pas]=codisa[pas];
codi[9]='\0';
if(codi[0]=='0')
return;
//if(codi[0]=='\0')
//visualiza();
if(codi[0]=='C')
if(codi[1]=='A')
if(codi[2]=='J')
if(codi[3]=='A')
if(codi[4]=='S')
patis();
if(codi[0]=='T')
if(codi[1]=='E')
if(codi[2]=='R')
if(codi[3]=='M')
if(codi[4]=='I')
if(codi[5]=='N')
if(codi[6]=='A')
pip=camino('1');
if(codi[0]=='G')
if(codi[1]=='U')
if(codi[2]=='A')

if(codi[3]=='R')
if(codi[4]=='D')
if(codi[5]=='A')
if(codi[6]=='R')
cajitas();
if(pip!='0')
return;
if(codi[0]=='P')
if(codi[1]=='E')
if(codi[2]=='D')
if(codi[3]=='I')
if(codi[4]=='D')
if(codi[5]=='O')
{
desido='1';
}
if(codi[0]=='P')
if(codi[1]=='E')
if(codi[2]=='D')
if(codi[3]=='I')
if(codi[4]=='R')
{
desido='2';
}
salida.open("datos.txt",ios::app);
salida<<endl;
salida<<"FIN FIN
FIN
FIN ";
salida.close();
su='N';
entrada.open("datos.txt");
salida.open("datos1.txt");
cout.flush();
clrscr();
cout<<"
PRODUCTO
CANTIDAD CAJA "<<endl<<endl;
while(su!='F')
{
claus='0';
entrada>>codigo;
su=verificar(codigo);
if(su=='F')
goto fin;
entrada>>cantidad;
entrada>>caja;
entrada>>detalles;
if(papel!='1')
if(codigo[0]==codi[0])
if(codigo[1]==codi[1])
if(codigo[2]==codi[2])
if(codi[3]=='\0')
goto accion;
if(codigo[0]==codi[0])
if(codigo[1]==codi[1])
if(codigo[2]==codi[2])
if(codigo[3]==codi[3])
if(codigo[4]==codi[4])
if(codigo[5]==codi[5])
if(codigo[6]==codi[6])
{
accion:
for(tu=0;tu<60;tu++)
codigo1[cont][tu]=codigo[tu];
cout<<cont<<" "<<codigo<<" ";
cout<<cantidad<<"
";
if(cantidad<1000)
cout<<" ";
if(cantidad<100)
cout<<" ";
if(cantidad<10)
cout<<" ";
cout<<caja<<" "<<endl;
caja1[cont]=caja;
cantidad1[cont]=cantidad;
cout<<" Detalles..."<<detalles<<endl;

for(tu=0;tu<50;tu++)
detalles1[cont][tu]=detalles[tu];
cont++;
claus=1;
if(cont==10)
{
cout<<"Seleccione las opcion deseada.(mas
productos presione tecla)...";
cout.flush();
sd=getch();
cambio();
if(sd1<10)
{
cout.flush();
clrscr();
cout<<"
PRODUCTO
CANTIDAD CAJA "<<endl<<endl;
cout<<sd1<<" ";
for(sa=0;sa<58;sa++)
cout<<codigo1[sd1][sa];
cout<<cantidad1[sd1]<<"
";
if(cantidad1[sd1]<1000)
cout<<" ";
if(cantidad1[sd1]<100)
cout<<" ";
if(cantidad1[sd1]<10)
cout<<" ";
cout<<caja1[sd1]<<" "<<endl<<endl;
cout<<"Detalles...";
for(sa=0;sa<50;sa++)
{
cout<<detalles1[sd1][sa];
if(detalles1[sd1][sa]=='\0')
break;
}
cout<<endl<<endl;
cout<<"Ingrese la cantidad...";
cin>>canto;
if(canto<1)
canto=0;
if(canto>cantidad1[sd1])
{
cout<<"NO PUEDE SACAR MAS DE LO QUE HAY...";
canto=0;
getch();
}
cantidad1[sd1]=cantidad1[sd1]-canto;
papel='1';
if(canto>=1)
{
cout<<endl<<endl;
cout<<"Seleccione prioridad 1.ALTA"<<endl;
cout<<"
2.MEDIA"<<endl;
cout<<"
3.BAJA o cualquier tecla...";
cout.flush();
q1q=getch();
salida2.open("salida1.txt",ios::app);
for(sa=0;sa<60;sa++)
salida2<<codigo1[sd1][sa];
salida2<<" "<<canto<<" ";
salida2<<caja1[sd1]<<" ";
for(sa=0;sa<50;sa++)
salida2<<detalles1[sd1][sa];
salida2<<endl;
salida2.close();
salida1.open("salidas.txt",ios::app);
for(sa=0;sa<60;sa++)
salida1<<codigo1[sd1][sa];
salida1<<" "<<canto<<" ";
salida1<<caja1[sd1]<<" ";
for(sa=0;sa<50;sa++)
{
salida1<<detalles1[sd1][sa];
if(detalles1[sd1][sa]=='\0')
break;

}
salida1<<endl;
salida1.close();
if(primid=='1')
{
cou.open("LPT1",ios::out);
cou<<endl;
if(q1q=='1')
cou<<"!!!Alta ";
if(q1q=='2')
cou<<"media ";
for(sa=0;sa<40;sa++)
cou<<codigo1[sd1][sa];
cou<<" "<<canto<<" ";
cou<<caja1[sd1]<<" ";
if(detalles1[sd1][0]!='?')
for(sa=0;sa<50;sa++)
cou<<detalles1[sd1][sa];
cou<<endl;
cou.close();
}
codi[0]='M';
codi[1]='M';
codi[2]='M';
codi[3]='M';
}
}
for(re=0;re<cont;re++)
{
for(sa=0;sa<60;sa++)
{
salida<<codigo1[re][sa];
if(codigo1[re][sa]=='\0')
break;
}
salida<<" "<<cantidad1[re]<<" ";
salida<<caja1[re]<<" ";
for(sa=0;sa<50;sa++)
{
salida<<detalles1[re][sa];
if(detalles1[re][sa]=='\0')
break;
}
salida<<endl;
}
cont=0;
cout.flush();
clrscr();
cout<<"
PRODUCTO
CANTIDAD CAJA "<<endl<<endl;
}
}
if(claus=='0')
{
salida<<codigo<<" ";
salida<<cantidad<<" ";
salida<<caja<<" ";
salida<<detalles<<endl;
}
}
fin:
if(cont!=0)
{
cout<<"Seleccione las opcion deseada.(mas
productos presione tecla)...";
cout.flush();
sd=getch();
cambio();
if(sd1<cont)
{
cout.flush();
clrscr();
cout<<"
PRODUCTO
CANTIDAD CAJA "<<endl<<endl;

cout<<sd1<<" ";
for(sa=0;sa<58;sa++)
cout<<codigo1[sd1][sa];
cout<<cantidad1[sd1]<<"
";
if(cantidad1[sd1]<1000)
cout<<" ";
if(cantidad1[sd1]<100)
cout<<" ";
if(cantidad1[sd1]<10)
cout<<" ";
cout<<caja1[sd1]<<" "<<endl<<endl;
cout<<"Detalles...";
for(sa=0;sa<50;sa++)
{
if(detalles1[sd1][sa]=='\0')
break;
cout<<detalles1[sd1][sa];
}
cout<<endl<<endl;
cout<<"Ingrese la cantidad...";
cin>>canto;
if(canto<1)
canto=0;
if(canto>cantidad1[sd1])
{cout<<"NO PUEDE SACAR MAS DE LO QUE
HAY...";
canto=0;
getch();
}
cantidad1[sd1]=cantidad1[sd1]-canto;
if(canto>=1)
{
cout<<endl<<endl;
cout<<"Seleccione prioridad 1.ALTA"<<endl;
cout<<"
2.MEDIA"<<endl;
cout<<"
BAJA cualquier otra tecla...";
cout.flush();
q1q=getch();
salida2.open("salida1.txt",ios::app);
for(sa=0;sa<60;sa++)
salida2<<codigo1[sd1][sa];
salida2<<" "<<canto<<" ";
salida2<<caja1[sd1]<<" ";
for(sa=0;sa<50;sa++)
{
salida2<<detalles1[sd1][sa];
if(detalles1[sd1][sa])
break;
}
salida2<<endl;
salida2.close();
salida1.open("salidas.txt",ios::app);
for(sa=0;sa<60;sa++)
salida1<<codigo1[sd1][sa];
salida1<<" "<<canto<<" ";
salida1<<caja1[sd1]<<" ";
for(sa=0;sa<50;sa++)
{
salida1<<detalles1[sd1][sa];
if(detalles1[sd1][sa])
break;
}
salida1<<endl;
salida1.close();
if(primid=='1')
{
cou.open("LPT1",ios::out);
cou<<endl;
if(q1q=='1')
cou<<"!!!Alta ";
if(q1q=='2')
cou<<"media ";
for(sa=0;sa<40;sa++)
cou<<codigo1[sd1][sa];
cou<<" "<<canto<<" ";
cou<<caja1[sd1]<<" ";

if(detalles1[sd1][0]!='?')
for(sa=0;sa<50;sa++)
cou<<detalles1[sd1][sa];
cou<<endl;
cou.close();
}
}
}
for(re=0;re<cont;re++)
{
for(sa=0;sa<60;sa++)
{
salida<<codigo1[re][sa];
if(codigo1[re][sa]=='\0')
break;
}
salida<<" "<<cantidad1[re]<<" ";
salida<<caja1[re]<<" ";
for(sa=0;sa<50;sa++)
{
salida<<detalles1[re][sa];
if(detalles1[re][sa]=='\0')
break;
}
salida<<endl;
}
}
entrada.close();
salida.close();
cambilis();
}while(codi[0]!='0');
return;
}
void cambio()
{
if(sd=='0')
{
sd1=0;
return;
}
if(sd=='1')
{sd1=1;
return;
}
if(sd=='2')
{sd1=2;
return;
}
if(sd=='3')
{sd1=3;
return;
}
if(sd=='4')
{sd1=4;
return;
}
if(sd=='5')
{sd1=5;
return;
}
if(sd=='6')
{sd1=6;
return;
}
if(sd=='7')
{sd1=7;
return;
}
if(sd=='8')
{sd1=8;
return;
}

if(sd=='9')
{sd1=9;
return;
}
sd1=10;
return;
}
char verify(char name[15])
{
if(name[0]=='0')
return '0';
char bu1[15];
char bu2[15];
int cont;
ifstream entrada("mipais.txt");
entrada>>cont;
for(int res=0;res<cont;res++)
{
entrada>>bu1;
entrada>>bu2;
if(name[0]==bu2[0])
if(name[1]==bu2[1])
if(name[2]==bu2[2])
if(name[3]==bu2[3])
{
nombre[0]=bu1[0];
nombre[1]=bu1[1];
nombre[2]=bu1[2];
nombre[3]=bu1[3];
nombre[4]='\0';
entrada.close();
return '1';
}
}
entrada.close();
return 'M';
}
char verificar(char codigo[70])
{
if(codigo[0]=='F')
if(codigo[1]=='I')
if(codigo[2]=='N')
return 'F';
if(codigo[0]=='V')
if(codigo[1]=='O')
if(codigo[2]=='L')
if(codigo[3]=='V')
if(codigo[4]=='E')
if(codigo[5]=='R')
return 'V';
if(codigo[0]=='T')
if(codigo[1]=='E')
if(codigo[2]=='R')
if(codigo[3]=='M')
if(codigo[4]=='I')
if(codigo[5]=='N')
return 'E';
return 'N';
}
void menu0()
{
cout<<endl<<endl<<endl;
cout<<"
INGRESE LA CANTIDAD...";
return;
}
void menu()
{
cout<<endl<<endl<<endl;
cout<<"
INGRESE LA CANTIDAD...(0
si desea salir)$";
return;
}
void cajitas()

{
//lista x;
int cont;
char detalle[50];
char codig[70];
int cantida;
char mm;
int caj;
char su='N';
ofstream salida;
ifstream entrada;
cout.flush();
clrscr();
cout<<endl<<endl<<" INGRESE UN DISKET EN LA
UNIDAD A..."<<endl<<endl;
cout<<" PRESIONE TECLA PARA CONTINUAR.(DE
0 PARA SALIR)...";
cout.flush();
mm=getch();
if(mm=='0')
return;
salida.open("datos.txt",ios::app);
salida<<endl;
salida<<"FIN";
salida.close();
salida.open("datos1.txt");
entrada.open("datos.txt");
while(su!='F')
{
entrada>>codig;
su=verificar(codig);
if(su=='F')
break;
entrada>>cantida;
entrada>>caj;
entrada>>detalle;
if(cantida!=0)
{
salida<<codig<<" ";
salida<<cantida<<" ";
salida<<caj<<" ";
salida<<detalle<<endl;
}
}
salida.close();
entrada.close();
cambilis1v();
cambilis2v();

cout<<"terminamos bien....";
delay(4000);
return;
}
void cambilis2v()
{
char detalle[50];
char codig[70];
int cantida;
int caj;
char su='N';
ofstream salida;
ifstream entrada;
salida.open("datos1.txt",ios::app);
salida<<endl;
salida<<"FIN";
salida.close();
salida.open("a:datos.txt");
entrada.open("datos1.txt");
while(su!='F')
{
entrada>>codig;
su=verificar(codig);
if(su=='F')
return;

entrada>>cantida;
entrada>>caj;
entrada>>detalle;
if(cantida!=0)
{
salida<<codig<<" ";
salida<<cantida<<" ";
salida<<caj<<" ";
salida<<detalle<<endl;
}
}
salida.close();
entrada.close();

return;
}
void cambilis1v()
{
char detalle[50];
char codig[70];
int cantida;
int caj;
char su='N';
ofstream salida;
ifstream entrada;
salida.open("datos1.txt",ios::app);
salida<<endl;
salida<<"FIN";
salida.close();
salida.open("datos.txt");
entrada.open("datos1.txt");
while(su!='F')
{
entrada>>codig;
su=verificar(codig);
if(su=='F')
return;
entrada>>cantida;
entrada>>caj;
entrada>>detalle;
if(cantida!=0)
{
salida<<codig<<" ";
salida<<cantida<<" ";
salida<<caj<<" ";
salida<<detalle<<endl;
}
}
salida.close();
entrada.close();

return;
}
void cambilis()
{
char detalle[50];
char codig[70];
int cantida;
int caj;
char su='N';
ofstream salida;
ifstream entrada;
salida.open("datos1.txt",ios::app);
salida<<endl;
salida<<"FIN FIN FIN FIN ";
salida.close();
salida.open("vizcaino.txt");
salida<<5;
salida.close();
salida.open("datos.txt");
entrada.open("datos1.txt");
while(su!='F')
{

entrada>>codig;
su=verificar(codig);
if(su=='F')
{
salida.close();
entrada.close();
salida.open("vizcaino.txt");
salida<<7;
salida.close();
return;
}
entrada>>cantida;
entrada>>caj;
entrada>>detalle;
if(cantida!=0)
{
salida<<codig<<" ";
salida<<cantida<<" ";
salida<<caj<<" ";
salida<<detalle<<endl;
}
}
salida.close();
entrada.close();

return;
}
void camb()
{
char su='N';
char paso[70];
ifstream entrada1;
ofstream salida1;
entrada1.open("salida2.txt");
salida1.open("salida1.txt");
entrada1>>paso;
su=verificar(paso);
while(su!='F')
{
salida1<<paso<<" ";
entrada1>>paso;
salida1<<paso<<" ";
entrada1>>paso;
salida1<<paso<<" ";
entrada1>>paso;
salida1<<paso<<" "<<endl;
entrada1>>paso;
su=verificar(paso);
}
salida1.close();
entrada1.close();
return;
}
char camino(char a)
{
char nino[50];
int ger=0;
ifstream entrada1;
ofstream salida3;
char it='W';
char su='0';
char sua='0';
char sas[15];
char name[15];
char paso[70];
char ma[70];
switch(a)
{
case '1':
sas[0]='F';
sas[1]='A';
sas[2]='C';
sas[3]='\0';

cout<<"Ingrese el numero de la factura...";


cout.flush();
gets(nino);
break;
case '2':
sas[0]='M';
sas[1]='O';
sas[2]='S';
sas[3]='\0';
cout<<"Ingrese el nombre de la persona que
autoriza...";
cout.flush();
gets(nino);
break;
}
if(nino[0]=='\0')
return '0';
for(ger=0;ger<40;ger++)
{
if(nino[ger]==' ')
nino[ger]='.';
if(nino[ger]=='\0')
break;
}
while(sua!='E')
{
cout.flush();
clrscr();
entrada1.open("salida2.txt");
entrada1>>paso;
su=verificar(paso);
while(su!='F')
{
cout<<paso<<" ";
entrada1>>paso;
cout<<paso<<" ";
entrada1>>paso;
cout<<paso<<" "<<endl<<"Detalles...";
entrada1>>paso;
cout<<paso<<" "<<endl;
entrada1>>paso;
su=verificar(paso);
}
entrada1.close();
cout<<endl;
if(a=='1')
cout<<"Por motivo de FACTURA "<<nino<<endl;
if(a=='2')
cout<<"Por motivo de MOSTRADOR
"<<nino<<endl<<endl;
cout<<"Seleccione su
opcion...(VOLVER/TERMINAR)";
gets(ma);
sua=verificar(ma);
if(sua=='V')
return '0';
if(sua=='E')
{
it='W';
do{
gotoxy(1,25);
cout<<"Ingrese su clave.(para salir pulse 0).._";
gotoxy(1,25);
cout<<"Ingrese su clave.(para salir pulse 0)..";
cout.flush();
name[0]=getch();
if(name[0]=='0')
return '0';
gotoxy(1,25);
cout<<"Ingrese su clave.(para salir pulse 0)..X_";
gotoxy(1,25);
cout<<"Ingrese su clave.(para salir pulse 0)..X";
cout.flush();
name[1]=getch();
gotoxy(1,25);

cout<<"Ingrese su clave.(para salir pulse 0)..XX_";


gotoxy(1,25);
cout<<"Ingrese su clave.(para salir pulse 0)..XX";
cout.flush();
name[2]=getch();
gotoxy(1,25);
cout<<"Ingrese su clave.(para salir pulse 0)..XXX_";
gotoxy(1,25);
cout<<"Ingrese su clave.(para salir pulse 0)..XXX";
cout.flush();
name[3]=getch();
gotoxy(1,25);
cout<<"Ingrese su clave.(para salir pulse 0).._XXX";
it=verify(name);
}while(it!='0' && it!='1');
if(it=='0')
return '0';
if(it=='1')
{
salida3.open("salidas.txt",ios::app);
salida3<<endl;
salida3<<nombre<<" ";
salida3<<sas<<" ";
salida3<<nino<<" ";
salida3<<facata<<endl;
salida3.close();
salida3.open("salida1.txt");
salida3<<endl;
salida3.close();
cambilviz1();
cambilviz2();
return '1';
}
}
}
return '0';
}
void visualiza()
{
}

void patis()
{
char su;
su='S';
int sa;
cout.flush();
clrscr();
char domo1[70];
char domo2[50];
char domo3[50];
int cos;
ifstream tal;
cout<<"ingrese el numero de caja...";
cin>>pati;
cambilis1();
cambilis();
cout.flush();
clrscr();
tal.open("datos1.txt");
cout<<"
PRODUCTOS EN UNA CANASTILLA
CANTIDAD CAJA "<<endl<<endl;
tal>>domo1;
su=verificar(domo1);
while(su!='F')
{
tal>>domo2;
tal>>cos;
tal>>domo3;
if(cos==pati)
{
for(sa=0;sa<54;sa++)
cout<<domo1[sa];
cout<<"
";

cout<<domo2<<"
";
cout<<cos<<endl;
cout<<"Detalles...";
for(sa=0;sa<50;sa++)
{
cout<<domo3[sa];
if(domo3[sa]=='\0')
break;
}
cout<<endl;
}
tal>>domo1;
su=verificar(domo1);
}
tal.close();
cout.flush();
getch();
return;
}
void cambilviz1()
{
char detalle[50];
char codig[70];
int cantida;
char ndat;
int caj;
char su='N';
ofstream salida;
ifstream entrada;
salida.open("datos.txt",ios::app);
salida<<endl;
salida<<"FIN FIN FIN FIN";
salida.close();
entrada.open("ndato.txt");
entrada>>ndat;
entrada.close();
if(ndat=='2')
salida.open("datos2.txt");
if(ndat=='3')
salida.open("datos3.txt");
if(ndat=='4')
salida.open("datos4.txt");
if(ndat=='5')
salida.open("datos5.txt");
if(ndat=='6')
salida.open("datos6.txt");
entrada.open("datos.txt");
while(su!='F')
{
entrada>>codig;
su=verificar(codig);
if(su=='F')
return;
entrada>>cantida;
entrada>>caj;
entrada>>detalle;
if(cantida!=0)
{
salida<<codig<<" ";
salida<<cantida<<" ";
salida<<caj<<" ";
salida<<detalle<<endl;
}
}
salida.close();
entrada.close();
return;
}
void cambilviz2()
{
char ndat;
char detalle[50];
char codig[70];

int cantida;
int caj;
char su='N';
ofstream salida;
ifstream entrada;
entrada.open("ndato.txt");
entrada>>ndat;
entrada.close();
if(ndat=='2')
salida.open("datos2.txt",ios::app);
if(ndat=='3')
salida.open("datos3.txt",ios::app);
if(ndat=='4')
salida.open("datos4.txt",ios::app);
if(ndat=='5')
salida.open("datos5.txt",ios::app);
if(ndat=='6')
salida.open("datos6.txt",ios::app);
salida<<endl;
salida<<endl;
salida<<"FIN FIN FIN FIN";
salida.close();
salida.open("datos.txt");
if(ndat=='2')
entrada.open("datos2.txt");
if(ndat=='3')
entrada.open("datos3.txt");
if(ndat=='4')
entrada.open("datos4.txt");
if(ndat=='5')
entrada.open("datos5.txt");
if(ndat=='6')
entrada.open("datos6.txt");
while(su!='F')
{
entrada>>codig;
su=verificar(codig);
if(su=='F')
{
salida.close();
entrada.close();
salida.open("salidas.txt",ios::app);
salida<<endl;
salida<<" x<"<<ndat<<">x"<<endl<<endl;
salida.close();
salida.open("ndato.txt");
if(ndat=='2')
{
ndat='3';
salida<<ndat;
salida.close();
return;
}
if(ndat=='3')
{
ndat='4';
salida<<ndat;
salida.close();
return;
}
if(ndat=='4')
{
ndat='5';
salida<<ndat;
salida.close();
return;
}
if(ndat=='5')
{
ndat='6';
salida<<ndat;
salida.close();
return;
}
if(ndat=='6')

{
ndat='2';
salida<<ndat;
salida.close();
return;
}
salida.close();
return;
}
entrada>>cantida;
entrada>>caj;
entrada>>detalle;
if(cantida!=0)
{
salida<<codig<<" ";
salida<<cantida<<" ";
salida<<caj<<" ";
salida<<detalle<<endl;
}
}
salida.close();
entrada.close();
return;
}
void cambilis1()
{
char detalle[50];
char codig[70];
int cantida;
int caj;
char su='N';
ofstream salida;
ifstream entrada;
salida.open("datos.txt",ios::app);
salida<<endl;
salida<<"FIN FIN FIN FIN";
salida.close();
salida.open("datos1.txt");
entrada.open("datos.txt");
while(su!='F')
{
entrada>>codig;
su=verificar(codig);
if(su=='F')
return;
entrada>>cantida;
entrada>>caj;
entrada>>detalle;
if(cantida!=0)
{
salida<<codig<<" ";
salida<<cantida<<" ";
salida<<caj<<" ";
salida<<detalle<<endl;
}
}
salida.close();
entrada.close();
return;
}
void siguiente(char desido)
{
char das[70];
int das2;
char su='N';
ofstream salida;
ifstream entrada;
if(desido=='1')
salida.open("pedidop.txt",ios::app);
if(desido=='2')
salida.open("pedido1.txt",ios::app);
if(desido=='3')
salida.open("a:pedido3.txt",ios::app);
salida<<endl;

salida<<"FIN FIN";
salida.close();
if(desido=='1')
{
salida.open("pedido10.txt");
entrada.open("pedidop.txt");
}
if(desido=='2')
{
salida.open("pedido20.txt");
entrada.open("pedido1.txt");
}
if(desido=='3')
{
salida.open("pedido30.txt");
entrada.open("a:pedido3.txt");
}
entrada>>das;
su=verificar(das);
if(su=='F')
{
entrada.close();
salida.close();
return;
}
entrada>>das2;
entrada>>das;
su=verificar(das);
while(su!='F')
{
entrada>>das2;
su=verificar(das);
if(su=='F')
goto dsa;
salida<<das<<" ";
salida<<das2<<endl;
entrada>>das;
}
dsa:
salida<<" FIN FIN";
salida.close();
entrada.close();
if(desido=='1')
{
salida.open("pedidop.txt");
entrada.open("pedido10.txt");
}
if(desido=='2')
{
salida.open("pedido1.txt");
entrada.open("pedido20.txt");
}
if(desido=='3')
{
salida.open("a:pedido3.txt");
entrada.open("pedido30.txt");
}
entrada>>das;
su=verificar(das);
while(su!='F')
{
entrada>>das2;
su=verificar(das);
if(su=='F')
goto dsa1;
salida<<das<<" ";
salida<<das2<<endl;
entrada>>das;
}
dsa1:
salida.close();
entrada.close();

return;
}
void pedidout(char desido)
{
char das[70];
char das2[10];
char su='N';
ofstream salida;
ifstream entrada;
if(desido=='1')
salida.open("pedidop.txt",ios::app);
if(desido=='2')
salida.open("pedido1.txt",ios::app);
if(desido=='3')
salida.open("a:pedido3.txt",ios::app);
salida<<endl;
salida<<"FIN FIN";
salida.close();
if(desido=='1')
{
salida.open("pedido10.txt");
entrada.open("pedidop.txt");
}
if(desido=='2')
{
salida.open("pedido20.txt");
entrada.open("pedido1.txt");
}
if(desido=='3')
{
salida.open("pedido30.txt");
entrada.open("a:pedido3.txt");
}
entrada>>das;
su=verificar(das);
while(su!='F')
{
entrada>>das2;
su=verificar(das);
if(su=='F')
goto dsa;
salida<<das<<" ";
salida<<das2<<endl;
entrada>>das;
}
dsa:
salida<<" FIN FIN";
salida.close();
entrada.close();
if(desido=='1')
{
salida.open("pedidop.txt");
entrada.open("pedido10.txt");
}
if(desido=='2')
{
salida.open("pedido1.txt");
entrada.open("pedido20.txt");
}
if(desido=='3')
{
salida.open("a:pedido3.txt");
entrada.open("pedido30.txt");
}
entrada>>das;
su=verificar(das);
while(su!='F')
{
entrada>>das2;
su=verificar(das);
if(su=='F')
goto dsa1;
salida<<das<<" ";
salida<<das2<<endl;

entrada>>das;
}
dsa1:
salida.close();
entrada.close();

return;
}
programa que permite actualizar, crear productos,
eliminar productos y guardar informacion
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
#include<fstream.h>
struct producto{
char codigo[10];
char
nombre[50];
double preciocliente;
double preciovecino;
double cantidad;
char
ubicacion[3];
double precio;
char
iva;
char
fecha1[12];
char
credito;
char
fecha2[12];
char
provedor[5];
};
producto escogido;
double totalx1;
double totalx2;
double totalx3;
producto nuevo;
producto elimina;
producto actualiza;
char problems;
char menu();
void muestranu(char cual);
void actualizarpro();
void eliminarpro();
void menuavanzado();
void guardarlainfo();
void recuperasistem();
char alexmira();
void seguroalex();
void nuevoproducto();
char verificaralex(char guia[70]);
double revisapreschar();
double revisacantchar();
char revisacodigo(char un[20]);
char buscarunco(char un[20]);
char buscarpro(char un[20]);
void meternuevo();
void eliminarproducto();
void datonumer(char charted[70]);
void main()
{
ifstream clavein;
char clave[10];
char clave1[70];
char clave2[70];
char sipro;
char uni[20];
char dale='M';
char opc;
problems='n';
char opca;
cout.flush();
clrscr();
cout<<"INGRESE SU CLAVE...";
clave[0]=getch();

gotoxy(19,1);
cout<<"X";
clave[1]=getch();
gotoxy(20,1);
cout<<"X";
clave[2]=getch();
gotoxy(21,1);
cout<<"X";
clave[3]=getch();
gotoxy(22,1);
cout<<"X";
clavein.open("laclave.txt");
clavein>>clave1;
clavein>>clave2;
clavein.close();
if(clave1[9]==clave[0])
if(clave1[19]==clave[1])
if(clave1[29]==clave[2])
if(clave1[39]==clave[3])
goto buenaclave;
if(clave2[9]==clave[0])
if(clave2[19]==clave[1])
if(clave2[29]==clave[2])
if(clave2[39]==clave[3])
goto buenaclave;
return;
buenaclave:
dale=alexmira();
if(dale!='B')
problems='s';
if(dale=='B')
seguroalex();
do{
opc=menu();
switch(opc)
{
case '1':
sipro='o';
cout.flush();
clrscr();
cout<<endl<<endl<<"
ACTUALIZAR PRODUCTO"<<endl<<endl;
cout<<"INGRESE EL CODIGO QUE DESEA
ACTUALIZAR Y ENTER...";
cout.flush();
gets(uni);
sipro=buscarpro(uni);
if(sipro=='S')
actualizarpro();
dale=alexmira();
if(dale!='B')
problems='s';
if(dale=='B')
seguroalex();
break;
case '2':
nuevoproducto();
dale=alexmira();
if(dale!='B')
problems='s';
if(dale=='B')
seguroalex();
break;
case '3':
sipro='o';
cout.flush();
clrscr();
cout<<endl<<endl<<"
ELIMINAR
PRODUCTO"<<endl<<endl;
cout<<"INGRESE EL CODIGO QUE DESEA
ELIMINAR Y ENTER...";
cout.flush();
gets(uni);
sipro=buscarpro(uni);
if(sipro=='S')

eliminarpro();
dale=alexmira();
if(dale!='B')
problems='s';
if(dale=='B')
seguroalex();
break;

case '4':
menuavanzado();
break;
}
}while(opc!='0');
}
char menu()
{
char menu1='o';
do{
cout.flush();
clrscr();
cout<<endl<<endl;
if(problems=='s')
{
cout<<"TIENE PROBLEMAS CON EL ARCHIVO
PRINSIPAL!!!"<<endl;
cout<<"SOLUCIONE PRIMERO ANTES DE
CONTINUAR...VAYA A OPCION 4 AVANZADO";
cout<<endl<<endl;
}
cout<<"
PRINSIPAL"<<endl<<endl;
cout<<"
1.ACTUALIZAR PRODUCTO
"<<endl<<endl;
cout<<"
2.INGRESAR NUEVO
PRODUCTO "<<endl<<endl;
cout<<"
3.ELIMINAR PRODUCTO
"<<endl<<endl;
cout<<"
4.OPCIONES AVANZADAS
"<<endl<<endl;
cout<<"
0.SALIR"<<endl<<endl;
cout<<"
SELECCIONE LA OPCION
DESEADA";
cout.flush();
menu1=getch();
if(problems=='s')
{
if(menu1=='1')
menu1='W';
if(menu1=='2')
menu1='W';
if(menu1=='3')
menu1='W';
}
}while(menu1!='4' && menu1!='0' && menu1!='1' &&
menu1!='2' && menu1!='3');
return menu1;
}
void datonumer(char charted[70])
{
double datos[7];
double a0,a1,a2;
a2=36*36;
a1=36;
a0=1;
totalx1=0;
totalx2=0;
totalx3=0;
for(int p=0;p<7;p++)
{
if(charted[p]=='0')
datos[p]=0;
if(charted[p]=='1')
datos[p]=1;
if(charted[p]=='2')
datos[p]=2;
if(charted[p]=='3')

datos[p]=3;
if(charted[p]=='4')
datos[p]=4;
if(charted[p]=='5')
datos[p]=5;
if(charted[p]=='6')
datos[p]=6;
if(charted[p]=='7')
datos[p]=7;
if(charted[p]=='8')
datos[p]=8;
if(charted[p]=='9')
datos[p]=9;
if(charted[p]=='A')
datos[p]=10;
if(charted[p]=='B')
datos[p]=11;
if(charted[p]=='C')
datos[p]=12;
if(charted[p]=='D')
datos[p]=13;
if(charted[p]=='E')
datos[p]=14;
if(charted[p]=='F')
datos[p]=15;
if(charted[p]=='G')
datos[p]=16;
if(charted[p]=='H')
datos[p]=17;
if(charted[p]=='I')
datos[p]=18;
if(charted[p]=='J')
datos[p]=19;
if(charted[p]=='K')
datos[p]=20;
if(charted[p]=='L')
datos[p]=21;
if(charted[p]=='M')
datos[p]=22;
if(charted[p]=='N')
datos[p]=23;
if(charted[p]=='O')
datos[p]=24;
if(charted[p]=='P')
datos[p]=25;
if(charted[p]=='Q')
datos[p]=26;
if(charted[p]=='R')
datos[p]=27;
if(charted[p]=='S')
datos[p]=28;
if(charted[p]=='T')
datos[p]=29;
if(charted[p]=='U')
datos[p]=30;
if(charted[p]=='V')
datos[p]=31;
if(charted[p]=='W')
datos[p]=32;
if(charted[p]=='X')
datos[p]=33;
if(charted[p]=='Y')
datos[p]=34;
if(charted[p]=='Z')
datos[p]=35;
}
totalx1=datos[0]*a2+datos[1]*a1+datos[2]*a0;
totalx2=datos[3]*a2+datos[4]*a1+datos[5]*a0;
totalx3=datos[6]*a0;
return;
}
void nuevoproducto()
{
char siono='o';
char sino='o';

char uncodigo[20];
char uncodigo1[20];
int ppa;
char dido[70];
ofstream pasout;
char cantchar[20];
char preschar[20];
mues0:
cout.flush();
clrscr();
cout<<endl<<endl;
cout<<"
NUEVO
PRODUCTO"<<endl<<endl;
cout<<" (TRABAJE EN MAYUSCULAS PORFAVOR
/ PARA SALIR PULSE 0 Y ENTER)"<<endl<<endl;
cout<<"RECUERDE: EL PROGRAMA CONSULTA
POR MEDIO DE LAS 3 PRIMERAS LETRAS DEL
CODIGO"<<endl<<endl;
cout<<"INGRESE EL CODIGO (7 DIGITOS) Y PULSE
ENTER...";
cout.flush();
gets(uncodigo);
cout<<endl;
if(uncodigo[0]=='0')
return;
siono=revisacodigo(uncodigo);
if(siono=='N')
goto mues0;
for(int perro=0;perro<7;perro++)
nuevo.codigo[perro]=uncodigo[perro];
nuevo.codigo[7]='\0';
muestranu('0');
cout<<"INGRESE EL NOMBRE DEL PRODUCTO
MAXIMO 40 CARACTERES Y PULSE
ENTER"<<endl;
cout<<"NOMBRE...";
cout.flush();
gets(dido);
if(dido[0]=='0')
return;
for(ppa=0;ppa<45;ppa++)
{
if(dido[ppa]==' ')
nuevo.nombre[ppa]='.';
else
nuevo.nombre[ppa]=dido[ppa];
if(dido[ppa]=='\0')
for(ppa=ppa;ppa<45;ppa++)
nuevo.nombre[ppa]='.';
}
nuevo.nombre[45]='\0';
mues1:
cout<<endl<<"INGRESE EL PRECIO MAYOR Y
PULSE ENTER...$";
cout.flush();
gets(cantchar);
if(cantchar[0]=='0')
return;
pasout.open("cantchar.txt");
pasout<<cantchar;
pasout.close();
nuevo.preciocliente=revisacantchar();
if(nuevo.preciocliente==0)
{
muestranu('1');
goto mues1;
}
mues2:
cout<<endl<<"INGRESE EL PRECIO MENOR Y
PULSE ENTER...$";
cout.flush();
gets(preschar);
if(preschar[0]=='0')
return;

pasout.open("preschar.txt");
pasout<<preschar;
pasout.close();
nuevo.preciovecino=revisapreschar();
if(nuevo.preciovecino==0)
{
muestranu('2');
goto mues2;
}
cout<<endl<<"INGRESE LA UBICACION (2
CARACTERES)!OPCIONAL...";
gotoxy(1,20);
cout<<"SI NO USA UBICACION PULSE ENTER";
gotoxy(48,18);
cout.flush();
gets(uncodigo1);
if(uncodigo1[0]=='0')
return;
if(uncodigo1[0]=='\0' || uncodigo1[0]==' ')
{
nuevo.ubicacion[0]='a';
nuevo.ubicacion[1]='1';
nuevo.ubicacion[2]='\0';
}
if(uncodigo1[0]!='\0' && uncodigo1[0]!=' ')
{
nuevo.ubicacion[0]=uncodigo1[0];
if(uncodigo1[1]=='\0' || uncodigo1[1]==' ')
nuevo.ubicacion[1]='0';
else
nuevo.ubicacion[1]=uncodigo1[1];
nuevo.ubicacion[2]='\0';
}
cout.flush();
clrscr();
cout<<endl<<endl;
cout<<"
NUEVO
PRODUCTO"<<endl<<endl;
cout<<endl<<endl;
cout<<"EL NUEVO PRODUCTO QUEDARA DE LA
SIGUIENTE MANERA"<<endl<<endl;
cout<<nuevo.codigo<<" "<<nuevo.nombre<<"
Ub."<<nuevo.ubicacion<<endl<<endl;
cout<<"PRECIO MAYOR $"<<nuevo.preciocliente<<"
PRECIO MENOR
$"<<nuevo.preciovecino<<endl<<endl;
cout<<"ACEPTA EL NUEVO PRODUCTO? (S/N)...";
cout.flush();
sino=getch();
cout<<sino;
if(sino=='S' || sino=='s')
{
cout<<endl<<endl<<"SEGURO QUE LO ACEPTA???
(S/N)...";
cout.flush();
sino=getch();
cout<<sino;
}
if(sino=='S' || sino=='s')
{
meternuevo();
cout.flush();
clrscr();
cout<<endl<<endl<<"EL NUEVO PRODUCTO!!!
"<<endl<<endl;
cout<<nuevo.codigo<<" "<<nuevo.nombre<<"
Ub."<<nuevo.ubicacion<<endl<<endl;
cout<<"PRECIO MAYOR $"<<nuevo.preciocliente<<"
PRECIO MENOR
$"<<nuevo.preciovecino<<endl<<endl;
cout<<endl<<endl<<"SU PRODUCTO HA SIDO
INGRESADO!!!"<<endl<<endl;
cout<<"PULSE TECLA PARA SALIR";
cout.flush();
getch();

}
return;
}
char revisacodigo(char un[20])
{
char devuelve='N';
if(un[0]!='A' && un[0]!='B'&& un[0]!='C'&& un[0]!='D'&&
un[0]!='E'&& un[0]!='F'&& un[0]!='G'&& un[0]!='H'&&
un[0]!='I'&& un[0]!='J'&& un[0]!='K'&& un[0]!='L'&&
un[0]!='M'&& un[0]!='N'&& un[0]!='O'&& un[0]!='P'&&
un[0]!='Q'&& un[0]!='R'&& un[0]!='S'&& un[0]!='T'&&
un[0]!='U'&& un[0]!='V'&& un[0]!='W'&& un[0]!='X'&&
un[0]!='Y'&& un[0]!='Z')
{
cout<<"LO SIENTO AL MENOS EL PRIMER
CARACTER DEBE SER UNA LETRA"<<endl;
cout<<endl<<"CODIGO ERRONEO!!!";
cout.flush();
getch();
return 'N';
}
for(int v0=1;v0<7;v0++)
{
if(un[v0]!='A'&& un[v0]!='B'&& un[v0]!='C'&&
un[v0]!='D'&& un[v0]!='E'&& un[v0]!='F'&&
un[v0]!='G'&& un[v0]!='H'&& un[v0]!='I'&& un[v0]!='J'&&
un[v0]!='K'&& un[v0]!='L'&& un[v0]!='M'&&
un[v0]!='N'&& un[v0]!='O'&& un[v0]!='P'&&
un[v0]!='Q'&& un[v0]!='R'&& un[v0]!='S'&&
un[v0]!='T'&& un[v0]!='U'&& un[v0]!='V'&&
un[v0]!='W'&& un[v0]!='X'&& un[v0]!='Y'&&
un[v0]!='Z'&& un[v0]!='1'&& un[v0]!='2'&& un[v0]!='3'&&
un[v0]!='4'&& un[v0]!='5'&& un[v0]!='6'&& un[v0]!='7'&&
un[v0]!='8'&& un[v0]!='9'&& un[v0]!='0')
{
cout<<"LO SIENTO CODIGO ERRONEO!!!";
cout.flush();
getch();
return 'N';
}
}
devuelve=buscarunco(un);
if(devuelve!='S')
return 'N';
return 'S';
}
//*************************************************************
*********
//*************************************************************
*********
//*************************************************************
*********
//*************************************************************
*********
//*************************************************************
*********
void meternuevo()
{
char contex;
double datonum1x;
double datonum1y;
double datonum1z;
double datonum2x;
double datonum2y;
double datonum2z;
char elques[10];
char su;
char sus[70];
ifstream entra;
ofstream sale;
char menuac;
contex='0';
datonumer(nuevo.codigo);
datonum1x=totalx1;
datonum1y=totalx2;
datonum1z=totalx3;

entra.open("alex.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
datonumer(sus);
datonum2x=totalx1;
datonum2y=totalx2;
datonum2z=totalx3;
cout.flush();
clrscr();
if(datonum2x>datonum1x)
goto acrax;
if(datonum2x>=datonum1x &&
datonum2y>datonum1y)
goto acrax;
if(datonum2x>=datonum1x &&
datonum2y>=datonum1y && datonum2z>datonum1z)
goto acrax;
if(datonum2x<=datonum1x)
{
contex='1';
elques[0]=sus[0];
elques[1]=sus[1];
elques[2]=sus[2];
elques[3]=sus[3];
elques[4]=sus[4];
elques[5]=sus[5];
elques[6]=sus[6];
elques[7]='\0';
}
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
su=verificaralex(sus);
}
acrax:
entra.close();
entra.open("alex.txt");
sale.open("alexpaso.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
if(contex=='0')
{
contex='2';
sale<<nuevo.codigo<<" ";
sale<<nuevo.nombre<<" ";
sale<<nuevo.preciocliente<<" ";
sale<<nuevo.preciovecino<<" ";
sale<<nuevo.cantidad<<" ";
sale<<nuevo.ubicacion<<endl;
}
if(contex=='1')
if(sus[0]==elques[0])
if(sus[1]==elques[1])
if(sus[2]==elques[2])
if(sus[3]==elques[3])
if(sus[4]==elques[4])
if(sus[5]==elques[5])
if(sus[6]==elques[6])
{
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;

sale<<sus<<" ";
entra>>sus;
sale<<sus<<endl;
sale<<nuevo.codigo<<" ";
sale<<nuevo.nombre<<" ";
sale<<nuevo.preciocliente<<" ";
sale<<nuevo.preciovecino<<" ";
sale<<nuevo.cantidad<<" ";
sale<<nuevo.ubicacion<<endl;
goto porsias;
}
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<endl;
porsias:
entra>>sus;
su=verificaralex(sus);
}
sale<<"+++++";
entra.close();
sale.close();
entra.open("alexpaso.txt");
sale.open("alex.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<endl;
entra>>sus;
su=verificaralex(sus);
}
sale<<"+++++";
entra.close();
sale.close();
seguroalex();
return;
}
char buscarunco(char un[20])
{
char su='k';
char sus[70];
ifstream entra("alex.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
if(sus[0]==un[0])
if(sus[1]==un[1])
if(sus[2]==un[2])
if(sus[3]==un[3])
if(sus[4]==un[4])
if(sus[5]==un[5])
if(sus[6]==un[6])
{
cout<<"EL CODIGO YA EXISTE!!!";
entra.close();
cout.flush();
getch();

return'N';
}
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
su=verificaralex(sus);
}
entra.close();
return 'S';
}
void eliminarpro()
{
char su;
char sus[70];
ifstream entra;
ofstream sale;
char menuac;
cout.flush();
clrscr();
cout<<endl<<endl;
cout<<"
ELIMINAR"<<endl<<endl;
cout<<escogido.codigo<<" "<<escogido.nombre<<"
Ub."<<escogido.ubicacion<<endl<<endl;
cout<<"PRECIO MAYOR
$"<<escogido.preciocliente<<" PRECIO MENOR
$"<<escogido.preciovecino<<endl<<endl;
cout<<"ESTA SEGURO QUE DESEA ELIMINAR
PRODUCTO??? (S/N)...";
cout.flush();
menuac=getch();
cout<<menuac;
if(menuac!='S')
return;
cout<<endl<<endl<<"COMPLETAMENTE SEGURO
QUE DESEA ELIMINARLO??? (S/N)...";
cout.flush();
menuac=getch();
if(menuac!='S')
return;
cout<<menuac;
entra.open("alex.txt");
sale.open("alexpaso.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
if(sus[0]==escogido.codigo[0])
if(sus[1]==escogido.codigo[1])
if(sus[2]==escogido.codigo[2])
if(sus[3]==escogido.codigo[3])
if(sus[4]==escogido.codigo[4])
if(sus[5]==escogido.codigo[5])
if(sus[6]==escogido.codigo[6])
{
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
su=verificaralex(sus);
if(su=='F')
goto acabartex;
}
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";

entra>>sus;
sale<<sus<<endl;
entra>>sus;
su=verificaralex(sus);
}
acabartex:
sale<<"+++++";
entra.close();
sale.close();
entra.open("alexpaso.txt");
sale.open("alex.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<endl;
entra>>sus;
su=verificaralex(sus);
}
sale<<"+++++";
entra.close();
sale.close();
seguroalex();
cout<<endl<<endl<<"PRODUCTO ELIMINADO!!!!
"<<endl<<endl;
cout<<"PULSE TECLA PARA SALIR";
cout.flush();
getch();
return;
}
void actualizarpro()
{
char su;
char cantchar[20];
char uncodigo1[20];
char preschar[20];
ofstream pasout;
char sus[70];
int ppa;
char dido[70];
ifstream entra;
ofstream sale;
char menuac;
filigrana:
do{
cout.flush();
clrscr();
cout<<endl<<endl;
cout<<"
ACTUALIZAR"<<endl<<endl;
cout<<escogido.codigo<<" "<<escogido.nombre<<"
Ub."<<escogido.ubicacion<<endl<<endl;
cout<<"PRECIO MAYOR
$"<<escogido.preciocliente<<" PRECIO MENOR
$"<<escogido.preciovecino<<endl<<endl;
cout<<"
1.ACTUALIZAR NOMBRE
"<<endl;
cout<<"
2.ACTUALIZAR PRECIOS
"<<endl;
cout<<"
3.ACTUALIZAR UBICACION
"<<endl;
cout<<"
0.SALIR"<<endl<<endl;
cout<<"
SELECCIONE LA OPCION
DESEADA";
cout.flush();
menuac=getch();

switch(menuac)
{
case '1':
cout<<endl<<endl;
cout<<"INGRESE EL NOMBRE DEL PRODUCTO
MAXIMO 40 CARACTERES Y PULSE
ENTER"<<endl;
cout<<"NOMBRE...";
cout.flush();
gets(dido);
if(dido[0]=='0')
break;
for(ppa=0;ppa<45;ppa++)
{
if(dido[ppa]==' ')
escogido.nombre[ppa]='.';
else
escogido.nombre[ppa]=dido[ppa];
if(dido[ppa]=='\0')
for(ppa=ppa;ppa<45;ppa++)
escogido.nombre[ppa]='.';
}
escogido.nombre[45]='\0';
break;
case '2':
cout<<endl<<endl<<"INGRESE EL PRECIO MAYOR
Y PULSE ENTER...$";
cout.flush();
gets(cantchar);
pasout.open("cantchar.txt");
pasout<<cantchar;
pasout.close();
escogido.preciocliente=revisacantchar();
if(escogido.preciocliente==0)
break;
cout<<endl<<"INGRESE EL PRECIO MENOR Y
PULSE ENTER...$";
cout.flush();
gets(preschar);
pasout.open("preschar.txt");
pasout<<preschar;
pasout.close();
escogido.preciovecino=revisapreschar();
if(escogido.preciovecino==0)
break;
break;
case '3':
cout<<endl<<endl<<"INGRESE LA UBICACION (2
CARACTERES)!OPCIONAL...";
cout.flush();
gets(uncodigo1);
if(uncodigo1[0]=='0')
break;
if(uncodigo1[0]=='\0' || uncodigo1[0]==' ')
{
escogido.ubicacion[0]='a';
escogido.ubicacion[1]='1';
escogido.ubicacion[2]='\0';
}
if(uncodigo1[0]!='\0' && uncodigo1[0]!=' ')
{
escogido.ubicacion[0]=uncodigo1[0];
if(uncodigo1[1]=='\0' || uncodigo1[1]==' ')
escogido.ubicacion[1]='0';
else
escogido.ubicacion[1]=uncodigo1[1];
escogido.ubicacion[2]='\0';
}
break;
}
}while(menuac!='0' && menuac!='1' && menuac!='2'
&& menuac!='3');
if(menuac=='1' || menuac=='2' || menuac=='3')
goto filigrana;

entra.open("alex.txt");
sale.open("alexpaso.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
if(sus[0]==escogido.codigo[0])
if(sus[1]==escogido.codigo[1])
if(sus[2]==escogido.codigo[2])
if(sus[3]==escogido.codigo[3])
if(sus[4]==escogido.codigo[4])
if(sus[5]==escogido.codigo[5])
if(sus[6]==escogido.codigo[6])
{
sale<<escogido.codigo<<" ";
sale<<escogido.nombre<<" ";
sale<<escogido.preciocliente<<" ";
sale<<escogido.preciovecino<<" ";
sale<<escogido.cantidad<<" ";
sale<<escogido.ubicacion<<" "<<endl;
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
entra>>sus;
su=verificaralex(sus);
if(su=='F')
goto acabarte;
}
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<endl;
entra>>sus;
su=verificaralex(sus);
}
acabarte:
sale<<"+++++";
entra.close();
sale.close();
entra.open("alexpaso.txt");
sale.open("alex.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<endl;
entra>>sus;
su=verificaralex(sus);
}
sale<<"+++++";
entra.close();
sale.close();
return;
}
void muestranu(char cual)
{
cout.flush();

clrscr();
cout<<endl<<endl;
cout<<"
NUEVO
PRODUCTO"<<endl<<endl;
cout<<" (TRABAJE EN MAYUSCULAS PORFAVOR
/ PARA SALIR PULSE 0 Y ENTER)"<<endl<<endl;
cout<<"RECUERDE: EL PROGRAMA CONSULTA
POR MEDIO DE LAS 3 PRIMERAS LETRAS DEL
CODIGO"<<endl<<endl;
cout<<"INGRESE EL CODIGO (7 DIGITOS) Y PULSE
ENTER..."<<nuevo.codigo;
cout<<endl<<endl;
if(cual=='1' || cual=='2')
{
cout<<"INGRESE EL NOMBRE DEL PRODUCTO
MAXIMO 40 CARACTERES Y PULSE
ENTER"<<endl;
cout<<"NOMBRE...";
for(int pas=0;pas<45;pas++)
{
if(nuevo.nombre[pas]=='.')
cout<<' ';
else
cout<<nuevo.nombre[pas];
}
cout<<endl;
}
if(cual=='2')
cout<<endl<<"INGRESE EL PRECIO MAYOR Y
PULSE ENTER...$"<<nuevo.preciocliente<<endl;
return;
}
char buscarpro(char un[20])
{
int r;
char su='k';
char sus[70];
char sus1[70];
double sus2;
double sus3;
double sus4;
char sus5[10];
ifstream entra;
entra.open("alex.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
entra>>sus1;
entra>>sus2;
entra>>sus3;
entra>>sus4;
entra>>sus5;
if(sus[0]==un[0])
if(sus[1]==un[1])
if(sus[2]==un[2])
if(sus[3]==un[3])
if(sus[4]==un[4])
if(sus[5]==un[5])
if(sus[6]==un[6])
{
for(r=0;r<8;r++)
escogido.codigo[r]=sus[r];
for(r=0;r<50;r++)
escogido.nombre[r]=sus1[r];
escogido.preciocliente=sus2;
escogido.preciovecino=sus3;
escogido.cantidad=sus4;
for(r=0;r<3;r++)
escogido.ubicacion[r]=sus5[r];
entra.close();
return'S';
}
entra>>sus;
su=verificaralex(sus);
}

entra.close();
return 'N';
}
double revisacantchar()
{
int pra;
char elchar[20];
double estesi;
ifstream pasoin;
pasoin.open("cantchar.txt");
pasoin>>elchar;
pasoin.close();
if(elchar[0]=='0')
return 0;
if(elchar[0]=='\0')
{
cout<<endl;
cout<<"NO ES UN NUMERO?!?";
cout.flush();
getch();
return 0;
}
if(elchar[0]!='1' && elchar[0]!='2' && elchar[0]!='3' &&
elchar[0]!='4' && elchar[0]!='5' && elchar[0]!='6' &&
elchar[0]!='7' && elchar[0]!='8' && elchar[0]!='9')
{
cout<<endl;
cout<<"NO ES UN NUMERO?!?";
cout.flush();
getch();
return 0;
}
for(pra=0;pra<20;pra++)
{
if(elchar[pra]!='0' && elchar[pra]!='1' && elchar[pra]!='2'
&& elchar[pra]!='3' && elchar[pra]!='4' &&
elchar[pra]!='5' && elchar[pra]!='6' && elchar[pra]!='7'
&& elchar[pra]!='8' && elchar[pra]!='9')
{
if(elchar[pra]=='\0')
{
pasoin.open("cantchar.txt");
pasoin>>estesi;
pasoin.close();
return estesi;
}
else
{
cout<<endl;
cout<<"NO ES UN NUMERO?!?";
cout.flush();
getch();
return 0;
}
}
}
return 0;
}
double revisapreschar()
{
int pra;
char elchar[20];
double estesi;
ifstream pasoin;
pasoin.open("preschar.txt");
pasoin>>elchar;
pasoin.close();
if(elchar[0]=='0')
return 0;
if(elchar[0]=='\0')
{
cout<<endl;
cout<<"NO ES UN NUMERO?!?";

cout.flush();
getch();
return 0;
}
if(elchar[0]!='1' && elchar[0]!='2' && elchar[0]!='3' &&
elchar[0]!='4' && elchar[0]!='5' && elchar[0]!='6' &&
elchar[0]!='7' && elchar[0]!='8' && elchar[0]!='9')
{
cout<<endl;
cout<<"NO ES UN NUMERO?!?";
cout.flush();
getch();
return 0;
}
for(pra=0;pra<20;pra++)
{
if(elchar[pra]!='0' && elchar[pra]!='1' && elchar[pra]!='2'
&& elchar[pra]!='3' && elchar[pra]!='4' &&
elchar[pra]!='5' && elchar[pra]!='6' && elchar[pra]!='7'
&& elchar[pra]!='8' && elchar[pra]!='9')
{
if(elchar[pra]=='\0')
{
pasoin.open("preschar.txt");
pasoin>>estesi;
pasoin.close();
return estesi;
}
else
{
cout<<endl;
cout<<"NO ES UN NUMERO?!?";
cout.flush();
getch();
return 0;
}
}
}
return 0;
}
void menuavanzado()
{
char acepto;
ifstream clavein;
ofstream claveout;
char clave[10];
char clave1[70];
char clave2[70];
int cual;
int cualtos;
char menur='o';
ifstream elseguro("elseguro.txt");
elseguro>>cual;
elseguro>>cualtos;
elseguro.close();
clavein.open("laclave.txt");
clavein>>clave1;
clavein>>clave2;
clavein.close();
do{
cout.flush();
clrscr();
cout<<endl<<endl;
if(problems=='s')
{
cout<<"TIENE PROBLEMAS CON EL ARCHIVO
PRINSIPAL!!!"<<endl;
cout<<"SOLUCIONE PRIMERO ANTES DE
CONTINUAR...VAYA A OPCION 3 RECUPERAR";
cout<<endl<<endl;
}
cout<<"
AVANZADO"<<endl<<endl;
cout<<"
1.CAMBIAR CLAVE1
"<<endl<<endl;

cout<<"
2.CAMBIAR CLAVE2
"<<endl<<endl;
cout<<"
3.RECUPERAR SISTEMA
seguro en "<<cual<<endl;
cout<<"
productos
"<<cualtos<<endl<<endl;
cout<<"
4.GUARDAR LA INFORMACION
"<<endl<<endl;
cout<<"
0.SALIR"<<endl<<endl;
cout<<"
SELECCIONE LA OPCION
DESEADA";
cout.flush();
menur=getch();
}while(menur!='4' && menur!='0' && menur!='1' &&
menur!='2' && menur!='3');
switch(menur)
{
case '3':
recuperasistem();
break;
case '1':
cout.flush();
clrscr();
cout<<"INGRESE SU CLAVE...";
clave[0]=getch();
gotoxy(19,1);
cout<<"X";
clave[1]=getch();
gotoxy(20,1);
cout<<"X";
clave[2]=getch();
gotoxy(21,1);
cout<<"X";
clave[3]=getch();
gotoxy(22,1);
cout<<"X";
if(clave1[9]==clave[0])
if(clave1[19]==clave[1])
if(clave1[29]==clave[2])
if(clave1[39]==clave[3])
goto buenaclave1;
break;
buenaclave1:
cout<<endl<<endl;
cout<<"SU CLAVE ACTUAL
ES..."<<clave[0]<<clave[1]<<clave[2]<<clave[3]<<endl
<<endl;
cout<<"INGRESE SU NUEVA CLAVE(4 DIGITOS) Y
PRESIONE ENTER...";
cout.flush();
gets(clave);
cout<<endl<<endl;
cout<<"SU NUEVA CLAVE
ES..."<<clave[0]<<clave[1]<<clave[2]<<clave[3]<<endl
<<endl;
cout<<"ACEPTA LA NUEVA CLAVE?...(S/N)";
acepto=getch();
if(acepto=='s')
goto siacepto1;
if(acepto=='S')
goto siacepto1;
cout<<endl<<endl;
cout<<"NO??? SU CLAVE SIGUE SIENDO
"<<clave1[9]<<clave1[19]<<clave1[29]<<clave1[39]<<
endl<<endl;
cout<<"PULSE TECLA PARA SALIR";
cout.flush();
getch();
break;
siacepto1:
clave1[9]=clave[0];
clave1[19]=clave[1];
clave1[29]=clave[2];
clave1[39]=clave[3];
claveout.open("laclave.txt");
claveout<<clave1<<endl;

claveout<<clave2<<endl;
claveout.close();
cout<<endl<<endl;
cout<<"CLAVE ACEPTADA!!! SU NUEVA CLAVE ES
"<<clave1[9]<<clave1[19]<<clave1[29]<<clave1[39]<<
endl<<endl;
cout<<"PULSE TECLA PARA SALIR";
cout.flush();
getch();
break;
case '2':
cout.flush();
clrscr();
cout<<"INGRESE SU CLAVE...";
clave[0]=getch();
gotoxy(19,1);
cout<<"X";
clave[1]=getch();
gotoxy(20,1);
cout<<"X";
clave[2]=getch();
gotoxy(21,1);
cout<<"X";
clave[3]=getch();
gotoxy(22,1);
cout<<"X";
if(clave2[9]==clave[0])
if(clave2[19]==clave[1])
if(clave2[29]==clave[2])
if(clave2[39]==clave[3])
goto buenaclave2;
break;
buenaclave2:
cout<<endl<<endl;
cout<<"SU CLAVE ACTUAL
ES..."<<clave[0]<<clave[1]<<clave[2]<<clave[3]<<endl
<<endl;
cout<<"INGRESE SU NUEVA CLAVE(4 DIGITOS) Y
PRESIONE ENTER...";
cout.flush();
gets(clave);
cout<<endl<<endl;
cout<<"SU NUEVA CLAVE
ES..."<<clave[0]<<clave[1]<<clave[2]<<clave[3]<<endl
<<endl;
cout<<"ACEPTA LA NUEVA CLAVE?...(S/N)";
acepto=getch();
if(acepto=='s')
goto siacepto2;
if(acepto=='S')
goto siacepto2;
cout<<endl<<endl;
cout<<"NO??? SU CLAVE SIGUE SIENDO
"<<clave2[9]<<clave2[19]<<clave2[29]<<clave2[39]<<
endl<<endl;
cout<<"PULSE TECLA PARA SALIR";
cout.flush();
getch();
break;
siacepto2:
clave2[9]=clave[0];
clave2[19]=clave[1];
clave2[29]=clave[2];
clave2[39]=clave[3];
claveout.open("laclave.txt");
claveout<<clave1<<endl;
claveout<<clave2<<endl;
claveout.close();
cout<<endl<<endl;
cout<<"CLAVE ACEPTADA!!! SU NUEVA CLAVE ES
"<<clave2[9]<<clave2[19]<<clave2[29]<<clave2[39]<<
endl<<endl;
cout<<"PULSE TECLA PARA SALIR";
cout.flush();

getch();
break;
case '4':
guardarlainfo();
break;
}
return;
}
void recuperasistem()
{
int asegurado1;
char asegurado2;
char dale;
ifstream clavein;
char clave[10];
char clave1[70];
char clave2[70];
int conteo=0;
int trabaj=0;
char su;
char sus[70];
ifstream entra;
ofstream sale;
cout.flush();
clrscr();
if(problems!='s')
{
cout<<"LO SIENTO PERO EL SISTEMA ESTA
BIEN...";
cout.flush();
getch();
return;
}
cout<<"INGRESE SU CLAVE...";
clave[0]=getch();
gotoxy(19,1);
cout<<"X";
clave[1]=getch();
gotoxy(20,1);
cout<<"X";
clave[2]=getch();
gotoxy(21,1);
cout<<"X";
clave[3]=getch();
gotoxy(22,1);
cout<<"X";
clavein.open("laclave.txt");
clavein>>clave1;
clavein>>clave2;
clavein.close();
if(clave1[9]==clave[0])
if(clave1[19]==clave[1])
if(clave1[29]==clave[2])
if(clave1[39]==clave[3])
goto buenaclaver;
if(clave2[9]==clave[0])
if(clave2[19]==clave[1])
if(clave2[29]==clave[2])
if(clave2[39]==clave[3])
goto buenaclaver;
return;
buenaclaver:
entra.open("elseguro.txt");
entra>>asegurado1;
entra>>asegurado2;
entra.close();
sale.open("alex.txt");
if(asegurado1==1)
entra.open("alex1.txt");
if(asegurado1==2)
entra.open("alex2.txt");
if(asegurado1==3)
entra.open("alex3.txt");
if(asegurado1==4)

entra.open("alex4.txt");
if(asegurado1==5)
entra.open("alex5.txt");
if(asegurado1==6)
entra.open("alex6.txt");
if(asegurado1==7)
entra.open("alex7.txt");
if(asegurado1==8)
entra.open("alex8.txt");
if(asegurado1==9)
entra.open("alex9.txt");
if(asegurado1==10)
entra.open("alex10.txt");
if(asegurado1==11)
entra.open("alex11.txt");
if(asegurado1==12)
entra.open("alex12.txt");
if(asegurado1==13)
entra.open("alex13.txt");
if(asegurado1==14)
entra.open("alex14.txt");
if(asegurado1==15)
entra.open("alex15.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" "<<endl;
entra>>sus;
conteo++;
trabaj++;
if(trabaj==100)
{
cout<<" RECUPERANDO...";
trabaj=0;
}
su=verificaralex(sus);
if(conteo==20000)
{
cout.flush();
clrscr();
cout<<endl<<endl<<"!!!PROBLEMAS LLAMAR
TECNICO PULSE TECLA";
cout.flush();
getch();
cout<<"!!!PROBLEMAS LLAMAR TECNICO PULSE
TECLA";
cout.flush();
getch();
return;
}
}
sale<<"+++++";
sale.close();
entra.close();
problems='M';
dale=alexmira();
if(dale!='B')
problems='s';
if(dale=='B')
seguroalex();
if(problems!='s')
{
cout.flush();

clrscr();
cout<<endl<<endl;
cout<<"SE HA RECUPERADO!!! EL ULTIMO
ARCHIVO GUARDADO..."<<endl<<endl;
cout<<"REVISE LAS ULTIMAS
OPERACIONES."<<endl<<endl;
cout<<"PULSE TECLA PARA CONTINUAR";
cout.flush();
getch();
}
return;
}
void guardarlainfo()
{
char asegurado1;
char asegurado2;
ifstream clavein;
char clave[10];
char clave1[70];
char clave2[70];
int conteo=0;
int trabaj=0;
char su;
char sus[70];
ifstream entra;
ofstream sale;
cout.flush();
clrscr();
cout<<"INGRESE SU CLAVE...";
clave[0]=getch();
gotoxy(19,1);
cout<<"X";
clave[1]=getch();
gotoxy(20,1);
cout<<"X";
clave[2]=getch();
gotoxy(21,1);
cout<<"X";
clave[3]=getch();
gotoxy(22,1);
cout<<"X";
clavein.open("laclave.txt");
clavein>>clave1;
clavein>>clave2;
clavein.close();
if(clave1[9]==clave[0])
if(clave1[19]==clave[1])
if(clave1[29]==clave[2])
if(clave1[39]==clave[3])
goto buenaclaveg;
if(clave2[9]==clave[0])
if(clave2[19]==clave[1])
if(clave2[29]==clave[2])
if(clave2[39]==clave[3])
goto buenaclaveg;
return;
buenaclaveg:
cout.flush();
clrscr();
cout<<"INGRESE DISQUET PARA
GUARDAR LA INFORMACION DE LOS
PRODUCTOS"<<endl<<endl;
cout<<"PULSE TECLA PARA
CONTINUAR";
cout.flush();
getch();
sale.open("a:asegurado.txt");
entra.open("elseguro.txt");
entra>>asegurado1;
entra>>asegurado2;
sale<<asegurado1<<endl;
sale<<asegurado2<<endl;
sale.close();
entra.close();
sale.open("a:producto.txt");
entra.open("alex.txt");

entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" "<<endl;
entra>>sus;
conteo++;
trabaj++;
if(trabaj==100)
{
cout<<" TRABAJANDO...";
trabaj=0;
}
su=verificaralex(sus);
if(conteo==20000)
{
cout<<"!!!PROBLEMAS LLAMAR TECNICO PULSE
TECLA";
cout.flush();
getch();
cout<<"!!!PROBLEMAS LLAMAR TECNICO PULSE
TECLA";
cout.flush();
getch();
return;
}
}
sale<<"+++++";
sale.close();
entra.close();
}
void seguroalex()
{
char su;
int contador=0;
int elseguro;
int cuantos;
char sus[70];
ofstream salex1;
ofstream salex;
ifstream entralex;
entralex.open("elseguro.txt");
entralex>>elseguro;
entralex>>cuantos;
entralex.close();
elseguro++;
if(elseguro==15)
elseguro=1;
salex1.open("alexmira.txt");
if(elseguro==1)
salex.open("alex1.txt");
if(elseguro==2)
salex.open("alex2.txt");
if(elseguro==3)
salex.open("alex3.txt");
if(elseguro==4)
salex.open("alex4.txt");
if(elseguro==5)
salex.open("alex5.txt");
if(elseguro==6)
salex.open("alex6.txt");
if(elseguro==7)
salex.open("alex7.txt");
if(elseguro==8)
salex.open("alex8.txt");
if(elseguro==9)

salex.open("alex9.txt");
if(elseguro==10)
salex.open("alex10.txt");
if(elseguro==11)
salex.open("alex11.txt");
if(elseguro==12)
salex.open("alex12.txt");
if(elseguro==13)
salex.open("alex13.txt");
if(elseguro==14)
salex.open("alex14.txt");
if(elseguro==15)
salex.open("alex15.txt");
entralex.open("alex.txt");
entralex>>sus;
su=verificaralex(sus);
while(su!='F')
{
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<endl;
salex1<<sus<<endl;
entralex>>sus;
contador++;
su=verificaralex(sus);
}
salex<<endl<<"+++++";
salex1<<endl<<"+++++";
salex.close();
salex1.close();
entralex.close();
salex.open("elseguro.txt");
salex<<elseguro<<endl;
salex<<contador;
salex.close();
return;
}
char alexmira()
{
char su;
int elseguro;
int yuv;
int cuantos;
char sus[70];
ofstream salex;
ifstream entralex;
entralex.open("elseguro.txt");
entralex>>elseguro;
entralex>>cuantos;
entralex.close();
entralex.open("alex.txt");
for(yuv=0;yuv<cuantos;yuv++)
{
entralex>>sus;
su=verificaralex(sus);
if(su=='F')
goto nadapaila;
entralex>>sus;
su=verificaralex(sus);
if(su=='F')
goto nadapaila;
entralex>>sus;

su=verificaralex(sus);
if(su=='F')
goto nadapaila;
entralex>>sus;
su=verificaralex(sus);
if(su=='F')
goto nadapaila;
entralex>>sus;
su=verificaralex(sus);
if(su=='F')
goto nadapaila;
entralex>>sus;
su=verificaralex(sus);
if(su=='F')
goto nadapaila;
}
entralex>>sus;
su=verificaralex(sus);
if(su!='F')
{
nadapaila:
cout<<endl<<endl;
cout<<"PILAS!! archivo daado. Recupere en
AVANZADO"<<endl;
cout<<"mientras el problema no se solucione el
programa le avisara"<<endl;
cout<<"presione tecla para continuar"<<endl;
cout.flush();
getch();
return 'M';
}
return 'B';
}
char verificaralex(char guia[70])
{
if(guia[0]=='+')
if(guia[1]=='+')
if(guia[2]=='+')
if(guia[3]=='+')
if(guia[4]=='+')
return 'F';
return 'N';
}

Programa que permite ingresar datos a los inventarios


#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
#include<fstream.h>
struct nodo{
char codigo[10];
char
nombre[50];
double preciocliente;
double preciovecino;
int
cantidad;
char
ubicacion[4];
double precio;
char
iva;
char
fecha1[12];
char
credito;
char
fecha2[12];
char
provedor[5];
nodo
*siguiente;
};

class lista{
private:
nodo *cabeza;
public:
lista();

void
mostrar(nodo *&p);
void destruir(int
cont);///////////////////////////////////
void
ubicar(nodo*&q,nodo*&p,char
n[50],int cont);
int
iniciaralex(char archalex[10]);

void
char
void

consultar(int cont,char sus[50]);


comono(int cont,char ri);
consultar1(int cont,int drull);

};
void marcia();
void losingresos();
void ingresar();
void cambilis(double reas);
int primo1;
int primo2;
int primo3;
char facata[12];
char detalles[40];
double tomax;
void fecha();
void fecha1();
void cambiarfecha();
void imfecha();
void ingreso();
char codi[10][10];
char nomb[10][50];
char ingres;
char menu();
void guardado();
char clavep(char z[12]);
char clave2(char z[12]);
char verificaralex(char guia[70]);
char tads;
void main()
{
lhdmmlc:
char archalex[70];
char sw;
ifstream entralex;
ifstream ferew;
ifstream fere;
ifstream solo;
ofstream salir;
ofstream fare;
ofstream farew;
/*
salir.open("numer1.txt");
salir<<0<<" ";
salir<<0<<" ";
salir.close();
salir.open("INVEN.txt");
salir<<"VENTA.FERRETERIA";
salir<<endl;
salir.close();
*/
int siza;
int cont;
int ww;
int numer;
int yes;
double dess;
double tias;
double tia;
double tios;
double tioas;
int dw;
int dwr;
char sus[50];
char elegido[50];

char maria[150];
char murcigay[40];
char a,t;
lista x;
fecha();
ingreso();
do{

{
case'A':

cont=0;
cout.flush();
clrscr();
solo.open("numer1.txt");
solo>>numer;
solo>>dess;
solo.close();
solo.open("inven1.txt");
dess=0;
tioas=0;
solo>>maria;
cout<<maria<<" fecha:";
cout<<facata<<"
CAJA CANTIDAD "<<endl;
for(yes=0;yes<numer;yes++)
{
solo>>maria;
cout<<maria;
solo>>tias;
solo>>tios;
cout<<" ";
cout<<tios;
if(tios<10)
cout<<" ";
if(tios<100)
cout<<" ";
cout<<"
";
cout<<tias<<endl;
tioas=tioas+tios;
solo>>detalles;
dess=0;
}
solo.close();
cout<<endl;
if(ingres!='0')
{
cout<<"ESTOS DATOS YA
FUERON INGRESADOS AL SISTEMA"<<endl;
cout<<"INGRESE PALABRA
NUEVO PARA INICIAR LISTA...";
cout.flush();
gets(murcigay);
if(murcigay[0]=='N')
if(murcigay[1]=='U')
if(murcigay[2]=='E')
if(murcigay[3]=='V')
if(murcigay[4]=='O')
{
marcia();
goto lhdmmlc;
}
sus[0]='0';
}
if(ingres=='0')
{
cout<<"OPCIONES...(NUEVA,BORRAR,ELI
MINAR,FECHA,INGRESO)"<<endl;
cout<<"Ingrese el nombre del
producto.(de 0 para salir)...";
cout.flush();
gets(sus);
}
cout.flush();
clrscr();
tads='0';
switch(sus[0])

entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='A')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'B':
if(sus[1]=='O')
if(sus[2]=='R')
if(sus[3]=='R')
if(sus[4]=='A')
if(sus[5]=='R')
{
fare.open("numer1.txt");
fare<<numer-1<<" ";
fare<<0;
fare.close();
fere.open("inven1.txt");
fare.open("inven11.txt");
fere>>sus;
fare<<sus<<endl;
for(dwr=0;dwr<numer-1;dwr++)
{
for(dw=0;dw<4;dw++)
{
fere>>sus;
fare<<sus<<" ";
}
fare<<endl;
}
fare.close();
fere.close();
fere.open("inven11.txt");
fare.open("inven1.txt");
fere>>sus;
fare<<sus<<endl;
for(dwr=0;dwr<numer-1;dwr++)
{
for(dw=0;dw<4;dw++)
{
fere>>sus;
fare<<sus<<" ";
}
fare<<endl;
}
fare.close();
fere.close();
break;
}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='B')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);

x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

solo>>maria;
cout<<maria;
solo>>tias;
cout<<"..Cant.";
cout<<tias;
solo>>tios;
cout<<"..Precio..$";
cout<<tios<<endl;
tioas=tioas+tios;
solo>>tia;
dess=dess+tia;
}

entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='C')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

cout<<endl;
cout<<"digite el codigo que desea

case'C':

eliminar...";
cout.flush();
gets(elegido);
siza=0;
fere.open("inven1.txt");
fare.open("inven11.txt");
fere>>sus;
fare<<sus<<endl;
for(dwr=0;dwr<numer;dwr++)
{
for(dw=0;dw<4;dw++)
{
fere>>sus;
if(dw==0)
{
if(sus[0]==elegido[0])
if(sus[1]==elegido[1])
if(sus[2]==elegido[2])
if(sus[3]==elegido[3])
if(sus[4]==elegido[4])
if(sus[5]==elegido[5])
if(sus[6]==elegido[6])
{
fere>>sus;
fere>>sus;
fere>>sus;
dw=5;
siza++;
}
}
if(dw!=5)
{
fare<<sus<<" ";
fare<<endl;
}

case'D':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='D')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'E':
if(sus[1]=='L')
if(sus[2]=='I')
if(sus[3]=='M')
if(sus[4]=='I')
if(sus[5]=='N')
{
solo.open("numer1.txt");
solo>>numer;
solo>>dess;
solo.close();
solo.open("inven1.txt");
dess=0;
tioas=0;
solo>>maria;
cout<<maria<<endl;
for(yes=0;yes<numer;yes++)
{

}
}
if(siza!=0)
{
farew.open("numer1.txt");
farew<<numer-siza<<" ";
farew<<0;
farew.close();
siza=0;
}
fare.close();
fere.close();
fere.open("numer1.txt");
fere>>numer;
fere>>dess;
fere.close();
fere.open("inven11.txt");
fare.open("inven1.txt");
fere>>sus;
fare<<sus<<endl;
for(dwr=0;dwr<numer;dwr++)
{
for(dw=0;dw<4;dw++)
{

fere>>sus;
fare<<sus<<" ";
}
fare<<endl;
}
fare.close();
fere.close();
break;

{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='E')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'F':

case'H':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='H')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'I':

if(sus[1]=='E')
if(sus[2]=='C')
if(sus[3]=='H')
if(sus[4]=='A')
{
cambiarfecha();
break;
}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='F')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

if(sus[1]=='N')
if(sus[2]=='G')
if(sus[3]=='R')
if(sus[4]=='E')
if(sus[5]=='S')
if(sus[6]=='O')
{
losingresos();
break;
}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='I')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'G' :
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='G')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')

case'J':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='J')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}

if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'N':
if(sus[1]=='U')
if(sus[2]=='E')
if(sus[3]=='V')
if(sus[4]=='A')
{
fare.open("numer1.txt");
fare<<0<<" ";
fare<<0;
fare.close();
fare.open("inven1.txt");
fare<<"INVENTARIOS ";
fare.close();
break;
}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='N')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'K':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='K')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'L':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='L')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'O':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='O')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'M':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='M')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'P':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='P')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();

goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='T')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'Q':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='Q')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'U':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='U')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'R':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='R')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'V':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='V')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'S':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='S')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'T':

case'W':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='W')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);

}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'X':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='X')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'Y':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='Y')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'Z':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='Z')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();

break;
}
adioschao:
sw='+';
}while(sus[0]!='0');
return;
}
void marcia()
{
char x;
ofstream papa;
ifstream entrada;
entrada.open("inv1.txt");
entrada>>x;
entrada.close();
if(x=='0')
{
cout.flush();
clrscr();
cout<<" LA LISTA DE ENTRADA AUN SE
ENCUENTRA ESPERANDO INGRESO!!!!"<<endl;
cout<<"PRESIONE TECLA PARA SALIR...";
cout.flush();
getch();
return;
}
papa.open("inv1.txt");
papa<<0<<endl<<endl;
papa.close();
papa.open("inven1.txt");
papa<<"NUEVAS.COMPRAS"<<endl<<endl;
papa.close();
papa.open("numer1.txt");
papa<<"0 0"<<endl<<endl;
papa.close();
}
void ingreso()
{
ifstream salia("inv1.txt");
salia>>ingres;
salia.close();
}
void cambiarfecha()
{
cout.flush();
clrscr();
char ranura[20];
cout<<"INGRESE LA FECHA ACTUAL...";
cout.flush();
gets(ranura);
ranura[2]='/';
ranura[5]='/';
ranura[8]='\0';
for(int re=0;re<9;re++)
{
if(ranura[re]==' ')
ranura[re]='0';
facata[re]=ranura[re];
}
return;
}
void fecha()
{
ifstream entrada("fecha1.txt");
entrada>>facata;
entrada.close();
return;
}
void cambilis(double reas)
{
primo1=0;
primo2=0;

primo3=0;
while(reas>1000000)
{
reas=reas-1000000;
primo1++;
}
while(reas>1000)
{
reas=reas-1000;
primo2++;
}
while(reas>1)
{
reas=reas-1;
primo3++;
}
primo3++;
if(primo3==1000)
{
primo3=0;
primo2++;
if(primo2==1000)
{
primo2=0;
primo1++;
}
}
return;
}
void losingresos()
{
ifstream ferew;
ifstream fere;
ifstream solo;
ofstream salir;
ofstream fare;
ofstream farew;
int siza;
int cont;
int ww;
int numer;
int yes;
double dess;
double tias;
double tia;
double tios;
double tioas;
int dw;
int dwr;
char sus[50];
char elegido[50];
char maria[150];
char a,t;
//lista x;
fecha();
ingreso();
do{
//

cont=0;
cout.flush();
clrscr();
solo.open("numer1.txt");
solo>>numer;
solo>>dess;
solo.close();
solo.open("inven1.txt");
dess=0;
tioas=0;
solo>>maria;
cout<<"INGRESO DE
"<<maria<<" fecha:";
cout<<facata<<"
CAJA
CANTIDAD "<<endl;
for(yes=0;yes<numer;yes++)
{
solo>>maria;

cout<<maria;
solo>>tias;
solo>>tios;
cout<<" ";
cout<<tios;
if(tios<10)
cout<<" ";
if(tios<100)
cout<<" ";
cout<<"
";
cout<<tias<<endl;
tioas=tioas+tios;
solo>>detalles;
dess=0;
}
solo.close();
cout<<endl;
if(ingres!='0')
{
sus[0]='0';
}
if(ingres=='0')
{
cout<<"REVISE SU LISTA.
OPCIONES...(FINALIZAR, de 0 para salir)...";
cout.flush();
gets(sus);
}
cout.flush();
clrscr();

switch(sus[0])
{
case'F':
if(sus[1]=='I')
if(sus[2]=='N')
if(sus[3]=='A')
if(sus[4]=='L')
if(sus[5]=='I')
if(sus[6]=='Z')
if(sus[7]=='A')
if(sus[8]=='R')
{
ingresar();
ingres='9';
break;
}
break;
}
}while(sus[0]!='0');
return;
}
void ingresar()
{
int nuez;
ifstream trem("numer1.txt");
trem>>nuez;
trem.close();
char codigo[70];
int cant;
int caja;
char deta[50];
ifstream entrada("inven1.txt");
ofstream salida("datos.txt",ios::app);
entrada>>codigo;
for(int ter=0;ter<nuez;ter++)
{
entrada>>codigo;
entrada>>cant;
entrada>>caja;
entrada>>deta;
salida<<codigo<<" ";
salida<<cant<<" ";

salida<<caja<<" ";
salida<<deta<<endl;

while(p->codigo[2]==cliente->codigo[2])
{

cout<<" "<<p->codigo<<"."<<p>nombre<<"..Cant."<<p->cantidad<<".."<<p>ubicacion<<endl;
cout<<" $"<<p->preciovecino;
if(p->preciovecino<100000)
cout<<" ";
if(p->preciovecino<10000)
cout<<" ";
if(p->preciovecino<1000)
cout<<" ";
if(p->preciovecino<100)
cout<<" ";
if(p->preciovecino<10)
cout<<" ";
cout<<" $"<<p->preciocliente;
cout<<" -->"<<papo<<endl;
for(int reas=0;reas<8;reas++)
codi[papo][reas]=p->codigo[reas];
papo++;
if(papo==10)
{
papo=0;
cout<<"salir(PRESIONE
+)/continuar(enter)/seleccione...";
cout.flush();
ri=getch();
ri=comono(cont,ri);
cout.flush();
clrscr();
if(ri=='+')
return;

entrada.close();
salida.close();
ofstream salia("inv1.txt");
salia<<1;
salia.close();
}
void lista::ubicar(nodo*&q,nodo*&p,char n[50],int
cont)/////////////////////////////
{
q=NULL;
p=cabeza;
for(int f=0;f<cont;f++)
{
if(n[0]>p->codigo[0])
{
q=p;
p=p->siguiente;
}
else
break;
}
if(n[0]==p->codigo[0])
{
for(int ry=f;ry<cont;ry++)
{
if(n[0]==p->codigo[0]&&n[1]>p->codigo[1])
{
q=p;
p=p->siguiente;
}
else
break;
}
if(n[1]==p->codigo[1])
{
for(int fab=ry;fab<cont;fab++)
{
if(n[1]==p->codigo[1]&&n[2]>p->codigo[2])
{
q=p;
p=p->siguiente;
}
else
break;
}
}
}
}
void guardado()
{
return;
}
void lista::consultar(int cont,char
sus[50])///////////////////////////////////////
{
char res;
nodo *p,*q,*cliente;
cliente=new nodo;
int papo=0;
for(int dd=0;dd<cont;dd++)
cliente->codigo[dd]=sus[dd];
ubicar(q,p,cliente->codigo,cont);
if(p->codigo[0]==cliente->codigo[0])
{
if(p->codigo[1]==cliente->codigo[1])
{
char ri;

}
p=p->siguiente;
}
}
}
if(papo!=0)
{
cout<<"salir(PRESIONE
+)/continuar(enter)/seleccione...";
cout.flush();
res=getch();
res=comono(cont,res);
cout.flush();
clrscr();
}
return;
}
char lista::comono(int cont,char
ri)///////////////////////////////////////
{
switch(ri)
{
case '0':
consultar1(cont,0);
return '+';
break;
case '1':
consultar1(cont,1);
return '+';
break;
case '2':
consultar1(cont,2);
return '+';
break;
case '3':
consultar1(cont,3);
return '+';
break;
case '4':

consultar1(cont,4);
return '+';
break;
case '5':
consultar1(cont,5);
return '+';
break;
case '6':
consultar1(cont,6);
return '+';
break;
case '7':
consultar1(cont,7);
return '+';
break;
case '8':
consultar1(cont,8);
return '+';
break;
case '9':
consultar1(cont,9);
return '+';
break;
case '+':
return '+';
break;
}
return 'N';
}
void lista::consultar1(int cont,int
drull)///////////////////////////////////////
{
int arroz;
cout.flush();
ofstream sale;
clrscr();
nodo *p,*q,*cliente;
cliente=new nodo;
for(int dd=0;dd<8;dd++)
cliente->nombre[dd]=codi[drull][dd];
ubicar(q,p,cliente->nombre,cont);
if(p->codigo[1]==cliente->nombre[1])
{
if(p->codigo[1]==cliente->nombre[1])
{
char ri;
while(p->codigo[2]==cliente->nombre[2])
{
if(p->codigo[3]==cliente->nombre[3])
if(p->codigo[4]==cliente->nombre[4])
if(p->codigo[5]==cliente->nombre[5])
if(p->codigo[6]==cliente->nombre[6])
if(p->codigo[7]==cliente->nombre[7])
{
ifstream entr;
double cant;
double toti;
double numero;
double descuento;
double descu;
tads='1';
cout<<" "<<p->codigo<<".."<<p>nombre<<"...precio..$"<<p->preciocliente<<endl;
cout<<endl;
cout<<"INGRESE EL NUMERO DE CAJA...";
cin>>toti;
if(toti<1)
return;
cout<<"INGRESE LA CANTIDAD...";
cin>>cant;
cout<<"INGRESE LA DETALLES...";
cout.flush();
gets(detalles);
if(detalles[0]=='\0')
{
detalles[0]='?';

detalles[1]='?';
detalles[2]='?';
detalles[3]='\0';
}
for(arroz=0;arroz<50;arroz++)
{
if(detalles[arroz]==' ')
detalles[arroz]='.';
if(detalles[arroz]=='\0')
break;
cout<<" ";
}
if(cant==0)
return;
cout<<endl;
descu=(1-(toti/(cant*p->preciocliente)))*100;
entr.open("numer1.txt");
entr>>numero;
entr>>descuento;
entr.close();
sale.open("numer1.txt");
sale<<numero+1<<" ";
sale<<((descuento*numero)+descu)/(numero+1);
sale.close();
sale.open("inven1.txt",ios::app);
sale<<p->codigo<<"..";
sale<<p->nombre<<" "<<cant<<" "<<toti<<"
"<<detalles<<endl;
sale.close();
}
p=p->siguiente;
}
}
}
}

lista::lista()////////////////////////////////////////////////////////////////
{
cabeza=NULL;
}
void lista::destruir(int
cont)////////////////////////////////////////////////
{
nodo *p;
p=cabeza;
for(int w=0;w<cont;w++)
{
cabeza=cabeza->siguiente;
delete p;
p=cabeza;
}
}

char verificaralex(char guia[70])


{
if(guia[0]=='+')
if(guia[1]=='+')
if(guia[2]=='+')
if(guia[3]=='+')
if(guia[4]=='+')
return 'F';
return 'N';
}

int lista::iniciaralex(char
archalex[10])//////////////////////////////////////
{
nodo *p,*q,*nuevo;

int cont;
ifstream entrada(archalex);

if(!entrada)
{
cout<<"llamar a juan";
cout.flush();
getch();
}
entrada>>cont;
cabeza=new nodo;
entrada>>cabeza>codigo;
entrada>>cabeza>nombre;

private:
nodo *cabeza;
public:
lista();
void
mostrar(nodo *&p);
void destruir(int
cont);///////////////////////////////////
void
ubicar(nodo*&q,nodo*&p,char
n[50],int cont);
void
terminard(int cont);
void
terminar(int cont);

entrada>>cabeza>preciocliente;
entrada>>cabeza>preciovecino;
entrada>>cabeza>cantidad;
entrada>>cabeza>ubicacion;p=cabeza;

nuevo=new nodo;
for(int jav=1;jav<cont;jav++)
{
entrada>>nuevo>codigo;
entrada>>nuevo>nombre;
entrada>>nuevo>preciocliente;
entrada>>nuevo>preciovecino;
entrada>>nuevo>cantidad;
entrada>>nuevo>ubicacion;p->siguiente=nuevo;
nuevo=new nodo;
p=p->siguiente;
p->siguiente=NULL;
}

entrada.close();
return cont;
}

Generar listado general de precios y cantidades


actualizadas
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
#include<fstream.h>
struct nodo{
char codigo[10];
char
nombre[50];
double preciocliente;
double preciovecino;
int
cantidad;
char
ubicacion[3];
double precio;
char
iva;
char
fecha1[12];
char
credito;
char
fecha2[12];
char
provedor[5];
nodo
*siguiente;
};
class lista{

void
void

consultar(int cont,char sus[50]);


consultar1(int cont,char sus[50]);

};
char verificar(char guia[70]);
char verificame(char guia[70]);
char verific(char sus[10]);
char clavep(char z[12]);
char clave2(char z[12]);
double buscapro(char codo[70]);
void main()
{
ifstream entrada;
ofstream salida;
salida.open("datos.txt",ios::app);
salida<<endl<<"FIN FIN
FIN
FIN
FIN
FIN";
salida.close();
ofstream papa("toditos.txt");
papa<<"
LISTADO GENERAL"<<endl;
papa<<"
'''''''''''''''''"<<endl;
papa<<"#CODIGO
#NOMBRE
$VENTA $COMPRA #CANT"<<endl;
papa<<"'''''''
'''''''''''
''''''' '''''''
'''''''"<<endl;
papa.close();
double tantosw;
int cont;
int ww;
char su;
char sus[50];
char a,t;
cout.flush();
clrscr();
cout<<"PORFAVOR ESPERE MIENTRAS TERMINA
LA TRANSFERENCIA..."<<endl;
cout<<endl;
cout<<endl;
entrada.open("alex.txt");
papa.open("toditos.txt",ios::app);
entrada>>sus;
su=verificame(sus);
while(su!='F')
{
tantosw=buscapro(sus);
papa<<sus<<" ";
entrada>>sus;
papa<<sus<<" ";
entrada>>sus;
papa<<sus<<" ";
if(sus[1]=='\0')
{
cout<<"
";
goto uno;
}
if(sus[2]=='\0')
{
cout<<" ";
goto uno;
}
if(sus[3]=='\0')
{
cout<<" ";

goto uno;
}
if(sus[4]=='\0')
{
cout<<" ";
goto uno;
}
if(sus[5]=='\0')
{
cout<<" ";
goto uno;
}
if(sus[6]=='\0')
{
cout<<" ";
goto uno;
}
uno:
entrada>>sus;
papa<<sus<<" ";
if(sus[1]=='\0')
{
cout<<"
";
goto uno1;
}
if(sus[2]=='\0')
{
cout<<" ";
goto uno1;
}
if(sus[3]=='\0')
{
cout<<" ";
goto uno1;
}
if(sus[4]=='\0')
{
cout<<" ";
goto uno1;
}
if(sus[5]=='\0')
{
cout<<" ";
goto uno1;
}
if(sus[6]=='\0')
{
cout<<" ";
goto uno1;
}
uno1:
papa<<tantosw<<endl;
entrada>>sus;
entrada>>sus;
entrada>>sus;
su=verificame(sus);
}
papa.close();
entrada.close();
}
lista::lista()////////////////////////////////////////////////////////////////
{
cabeza=NULL;
}
void lista::destruir(int
cont)////////////////////////////////////////////////
{
nodo *p;
p=cabeza;
for(int w=0;w<cont;w++)
{
cabeza=cabeza->siguiente;

delete p;
p=cabeza;
}
}

char verific(char sus[10])


{
if(sus[1]=='Z')
if(sus[2]=='Z')
if(sus[3]=='Z')
return 'Z';
return 'N';
}
double buscapro(char codo[70])
{
char jiz1[70];
char sux;
double mixq=0;
double mixq1=0;
ifstream enr;
enr.open("datos.txt");
enr>>jiz1;
sux=verificar(jiz1);
while(sux!='F')
{
enr>>mixq1;
if(codo[0]==jiz1[0])
if(codo[1]==jiz1[1])
if(codo[2]==jiz1[2])
if(codo[3]==jiz1[3])
if(codo[4]==jiz1[4])
if(codo[5]==jiz1[5])
if(codo[6]==jiz1[6])
mixq=mixq+mixq1;
enr>>jiz1;
enr>>jiz1;
enr>>jiz1;
sux=verificar(jiz1);
}
enr.close();
return mixq;
}
char verificar(char guia[70])
{
if(guia[0]=='F')
if(guia[1]=='I')
if(guia[2]=='N')
return 'F';
return 'N';
}
char verificame(char guia[70])
{
if(guia[0]=='+')
if(guia[1]=='+')
if(guia[2]=='+')
if(guia[3]=='+')
if(guia[4]=='+')
return 'F';
return 'N';
}
recuperacion del archivo de inventarios en caso de
fallos del sistema
#include<fstream.h>
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
void cambilis1();
void cambilviz1();
void cambilviz2();
int pati;

char primid;
int visual[20];
void camb();
void cambio();
char nombre[6];
void cambilis(char as);
char camino(char a);
char codigo1[10][60];
char detalles1[10][50];
int cantidad1[10];
int caja1[10];
void visualiza();
void sale(int cont);
void patis();
char verify(char name[15]);
char sd;
int sped,sd1;
char verificar(char codigo[50]);
char codigo[60];
char detalles[50];
char facata[15];
int cantidad;
int caja;
void siguiente(char desido);
void pedidout(char desido);
char desido;
void main()
{
ofstream salida1;
ifstream entrada;
char a;
char as;
char dansa[70];
cout.flush();
clrscr();
cout<<"DESEA RECUPERAR SEGURO!!!(S/N)";
cout.flush();
a=getch();
if(a=='n')
return;
if(a=='N')
return;
cout<<endl;
cout<<endl;
cout<<" ESTA SEGURO SEGURO!!!(S/N)";
cout.flush();
a=getch();
if(a=='n')
return;
if(a=='N')
return;
cout<<endl;
cout<<endl;
cout<<"Ingrese su nombre y hora del
arreglo..."<<endl<<endl;
cout.flush();
gets(dansa);
salida1.open("salidas.txt",ios::app);
salida1<<endl;
salida1<<"REPARACION DE "<<dansa<<endl<<endl;
salida1.close();
entrada.open("ndato.txt");
entrada>>as;
entrada.close();
if(as!='2' && as!='3' && as!='4' && as!='5' && as!='6')
{
salida1.open("salidas.txt",ios::app);
salida1<<endl;
salida1<<"NO!! FUE POSIBLE REPARAR(LLAMAR A
SOPORTE TECNICO)...presione tecla para salir";
cout<<endl;
cout<<endl;
cout<<"NO!! FUE POSIBLE REPARAR(LLAMAR A
SOPORTE TECNICO)...presione tecla para salir";
cout.flush();
getch();

return;
}
cambilis(as);
salida1.open("salida1.txt");
salida1<<endl;
salida1<<"SE.HA.REALIZADO.RECUPERACION.SI.E
S.NECESARIO.ACTUALICE 0 0
.................................................................."<<endl;
salida1.close();
cout.flush();
clrscr();
cout<<endl;
cout<<endl;
cout<<"NO OLVIDE REVISAR EL HISTORICO DE
COMPRAS PARA REANUDAR EL
PROCESO"<<endl;
cout<<" EN EL QUE SE ENCONTRABA ANTES DE
LA FALLA. INGRESE DE NUEVO LAS"<<endl;
cout<<"DESCARGAS QUE ESTAN JUSTO
DESPUES DE LA ULTIMA COMPRA
REGISTRADA."<<endl;
cout<<"POR MOTIVO DE REPARACION! pulse tecla
para salir...";
cout.flush();
getch();
return;
}
char verificar(char codigo[70])
{
if(codigo[0]=='F')
if(codigo[1]=='I')
if(codigo[2]=='N')
return 'F';
if(codigo[0]=='V')
if(codigo[1]=='O')
if(codigo[2]=='L')
if(codigo[3]=='V')
if(codigo[4]=='E')
if(codigo[5]=='R')
return 'V';
if(codigo[0]=='T')
if(codigo[1]=='E')
if(codigo[2]=='R')
if(codigo[3]=='M')
if(codigo[4]=='I')
if(codigo[5]=='N')
return 'E';
return 'N';
}
void cambilis(char as)
{
char codig[70];
char detalle[70];
char cantida[20];
char caj[20];
char su='N';
ofstream salida;
ofstream sali;
ifstream entrada;
salida.open("datos.txt");
sali.open("datos.txt");
switch(as)
{
case '2':
entrada.open("datos6.txt");
break;
case '3':
entrada.open("datos2.txt");
break;
case '4':
entrada.open("datos3.txt");
break;
case '5':
entrada.open("datos4.txt");

break;
case '6':
entrada.open("datos5.txt");
break;
}
entrada>>codig;
su=verificar(codig);
while(su!='F')
{
entrada>>cantida;
entrada>>caj;
entrada>>detalle;
salida<<codig<<" ";
salida<<cantida<<" ";
salida<<caj<<" ";
salida<<detalle<<" "<<endl;
sali<<codig<<" ";
sali<<cantida<<" ";
sali<<caj<<" ";
sali<<detalle<<" "<<endl;
entrada>>codig;
su=verificar(codig);
}
sali<<endl;
sali<<endl;
sali<<"FIN FIN FIN FIN FIN";
salida<<endl;
salida<<endl;
salida<<"FIN FIN FIN FIN FIN";
salida.close();
sali.close();
entrada.close();
return;
}

programa para tranferencia de informacin si se


utilizan 2 o mas computadoras
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
#include<fstream.h>
struct producto{
char codigo[10];
char
nombre[50];
double preciocliente;
double preciovecino;
double cantidad;
char
ubicacion[3];
double precio;
char
iva;
char
fecha1[12];
char
credito;
char
fecha2[12];
char
provedor[5];
};
producto escogido;
producto nuevo;
producto elimina;
producto actualiza;
char problems;
char menu();
void actualizarpro();
void eliminarpro();
void menuavanzado();
void guardarlainfo();
void recuperasistem();
char alexmira();
void seguroalex();
void nuevoproducto();
char verificaralex(char guia[70]);
double revisapreschar();

double revisacantchar();
char revisacodigo(char un[20]);
char buscarunco(char un[20]);
char buscarpro(char un[20]);
void meternuevo();
void eliminarproducto();
void main()
{
ifstream entra;
ofstream sale;
char sus[70];
char su;
cout.flush();
clrscr();
cout<<endl<<endl<<"INGRESE EL DISQUET CON LA
INFORMACION Y PULSE ENTER...";
cout<<endl<<endl<<"SI DESEA SALIR Y ABORTAR
EL PROCESO PULSE 0";
gotoxy(55,3);
cout.flush();
su=getch();
if(su=='0')
return;
cout<<endl<<endl<<"TRABAJANDO!!!";
entra.open("a:producto.txt");
sale.open("alex.txt");
entra>>sus;
su=verificaralex(sus);
while(su!='F')
{
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<" ";
entra>>sus;
sale<<sus<<endl;
entra>>sus;
su=verificaralex(sus);
}
sale<<"+++++";
entra.close();
sale.close();
seguroalex();
seguroalex();
}
void seguroalex()
{
char su;
int contador=0;
int elseguro;
int cuantos;
char sus[70];
ofstream salex1;
ofstream salex;
ifstream entralex;
entralex.open("elseguro.txt");
entralex>>elseguro;
entralex>>cuantos;
entralex.close();
elseguro++;
if(elseguro==15)
elseguro=1;
salex1.open("alexmira.txt");
if(elseguro==1)
salex.open("alex1.txt");
if(elseguro==2)
salex.open("alex2.txt");
if(elseguro==3)
salex.open("alex3.txt");
if(elseguro==4)

salex.open("alex4.txt");
if(elseguro==5)
salex.open("alex5.txt");
if(elseguro==6)
salex.open("alex6.txt");
if(elseguro==7)
salex.open("alex7.txt");
if(elseguro==8)
salex.open("alex8.txt");
if(elseguro==9)
salex.open("alex9.txt");
if(elseguro==10)
salex.open("alex10.txt");
if(elseguro==11)
salex.open("alex11.txt");
if(elseguro==12)
salex.open("alex12.txt");
if(elseguro==13)
salex.open("alex13.txt");
if(elseguro==14)
salex.open("alex14.txt");
if(elseguro==15)
salex.open("alex15.txt");
entralex.open("alex.txt");
entralex>>sus;
su=verificaralex(sus);
while(su!='F')
{
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<endl;
salex1<<sus<<endl;
entralex>>sus;
contador++;
su=verificaralex(sus);
}
salex<<endl<<"+++++";
salex1<<endl<<"+++++";
salex.close();
salex1.close();
entralex.close();
salex.open("elseguro.txt");
salex<<elseguro<<endl;
salex<<contador;
salex.close();
return;
}
char verificaralex(char guia[70])
{
if(guia[0]=='+')
if(guia[1]=='+')
if(guia[2]=='+')
if(guia[3]=='+')
if(guia[4]=='+')
return 'F';
return 'N';
}

programa para iniciar el sistema a la hora de la


instalacion
#include<iostream.h>

#include<conio.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
#include<fstream.h>
struct producto{
char codigo[10];
char
nombre[50];
double preciocliente;
double preciovecino;
double cantidad;
char
ubicacion[3];
double precio;
char
iva;
char
fecha1[12];
char
credito;
char
fecha2[12];
char
provedor[5];
};
producto escogido;
producto nuevo;
producto elimina;
producto actualiza;
char problems;
char menu();
void actualizarpro();
void eliminarpro();
void menuavanzado();
void guardarlainfo();
void recuperasistem();
char alexmira();
void seguroalex();
void nuevoproducto();
char verificaralex(char guia[70]);
double revisapreschar();
double revisacantchar();
char revisacodigo(char un[20]);
char buscarunco(char un[20]);
char buscarpro(char un[20]);
void meternuevo();
void eliminarproducto();
void main()
{
seguroalex();
}
void seguroalex()
{
char su;
int contador=0;
int elseguro;
int cuantos;
char sus[70];
ofstream salex1;
ofstream salex;
ifstream entralex;
entralex.open("elseguro.txt");
entralex>>elseguro;
entralex>>cuantos;
entralex.close();
elseguro++;
if(elseguro==15)
elseguro=1;
salex1.open("alexmira.txt");
if(elseguro==1)
salex.open("alex1.txt");
if(elseguro==2)
salex.open("alex2.txt");
if(elseguro==3)
salex.open("alex3.txt");
if(elseguro==4)
salex.open("alex4.txt");
if(elseguro==5)
salex.open("alex5.txt");
if(elseguro==6)
salex.open("alex6.txt");
if(elseguro==7)

salex.open("alex7.txt");
if(elseguro==8)
salex.open("alex8.txt");
if(elseguro==9)
salex.open("alex9.txt");
if(elseguro==10)
salex.open("alex10.txt");
if(elseguro==11)
salex.open("alex11.txt");
if(elseguro==12)
salex.open("alex12.txt");
if(elseguro==13)
salex.open("alex13.txt");
if(elseguro==14)
salex.open("alex14.txt");
if(elseguro==15)
salex.open("alex15.txt");
entralex.open("alex.txt");
entralex>>sus;
su=verificaralex(sus);
while(su!='F')
{
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<" ";
salex1<<sus<<" ";
entralex>>sus;
salex<<sus<<endl;
salex1<<sus<<endl;
entralex>>sus;
contador++;
su=verificaralex(sus);
}
salex<<endl<<"+++++";
salex1<<endl<<"+++++";
salex.close();
salex1.close();
entralex.close();
salex.open("elseguro.txt");
salex<<elseguro<<endl;
salex<<contador;
salex.close();
return;
}
char verificaralex(char guia[70])
{
if(guia[0]=='+')
if(guia[1]=='+')
if(guia[2]=='+')
if(guia[3]=='+')
if(guia[4]=='+')
return 'F';
return 'N';
}

programa para la facturacin y verificasr los precios


#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
#include<fstream.h>
#include<stdlib.h>

struct nodo{
char codigo[10];
char
nombre[50];
double preciocliente;
double preciovecino;
int
cantidad;
char
ubicacion[3];
double precio;
char
iva;
char
fecha1[12];
char
credito;
char
fecha2[12];
char
provedor[5];
nodo
*siguiente;
};

class lista{
private:
nodo *cabeza;
public:
lista();
void
mostrar(nodo *&p);
void destruir(int
cont);///////////////////////////////////
void
ubicar(nodo*&q,nodo*&p,char
n[50],int cont);
int
iniciaralex(char archalex[10]);
void
consultar(int cont,char sus[50]);
char
comono(int cont,char ri);
void
consultar1(int cont,int drull);
};
void borraped();
void cambilis(double reas);
char tads;
double tads1;
int primo1;
int primo2;
int primo3;
char facata[12];
double tomax;
void fecha();
void imfecha();
char codi[10][10];
char nomb[10][50];
char nombri[50];
void buscapro(char codo[10]);
char verificaralex(char guia[70]);
char verificar(char guia[70]);
char menu();
void imprimir();
void imprimir1();
void imprimir2();
char clavep(char z[12]);
char clave2(char z[12]);
char verificaralex(char guia[70]);
void inicial();
char casa(int cont1);
char aumento(char abc);
double revisapreschar();
double revisacantchar();
void main()
{
inicial();
char disque[70];
int ssl=0;
char sqsq;
ifstream entralex;
ifstream ferew;
ifstream fere;
ifstream solo;
ofstream salir;
ofstream fare;
ofstream farew;
salir.open("pedido1.txt",ios::app);

salir<<endl;
salir<<"FIN FIN FIN ";
salir.close();
salir.open("pedixdo.txt");
solo.open("pedido1.txt");
solo>>disque;
sqsq='N';
sqsq=verificar(disque);
while(sqsq!='F')
{
ssl++;
salir<<disque<<" ";
solo>>disque;
salir<<disque<<endl;
solo>>disque;
sqsq=verificar(disque);
}
salir<<endl;
salir<<"FIN FIN FIN";
solo.close();
salir.close();

solo.close();
solo.open("factuk.txt");
dess=0;
tioas=0;
solo>>maria;
cout<<maria<<" fecha:";
fecha();
cout<<facata<<endl;
for(yes=0;yes<numer;yes++)
{
solo>>maria;
cout<<maria;
solo>>tias;
cout<<"Cant.";
cout<<tias;
solo>>tios;
cout<<".Precio.$";
cout<<tios<<endl;
tioas=tioas+tios;
solo>>tia;
dess=dess+tia;

salir.open("pedido2.txt");
salir<<ssl;
salir.close();

}
if(numer>0)
cout<<"TOTAL...$"<<tioas;
if((dess-tioas)>0)
cout<<"
DESCUENTO..."<<(dess-tioas)/dess*100<<"%";
cout<<endl;
solo.close();
cout<<endl;

salir.open("pedido1.txt");
solo.open("pedixdo.txt");
solo>>disque;
sqsq=verificar(disque);
while(sqsq!='F')
{
salir<<disque<<" ";
solo>>disque;
salir<<disque<<endl;
solo>>disque;
sqsq=verificar(disque);
}
salir<<endl;
solo.close();
salir.close();
salir.open("lasdehoy.txt");
salir<<endl;
salir.close();
int siza;
char mahoma2;
int mahoma1;
int cont;
int ww;
int numer;
char lasde1[60];
int lasde2;
int mahoma;
int yes;
double dess;
double tias;
double tia;
double tios;
double tioas;
char sw;
int dw;
int dwr;
char archalex[10];
char sus[50];
char elegido[50];
char maria[150];
char a,t;
lista x;
do{
cont=0;
cout.flush();
clrscr();
solo.open("numerok.txt");
solo>>numer;
solo>>dess;

cout<<"OPCIONES...(NUEVA,BORRAR,ELI
MINAR,FACTURA,COTIZA,REMISION,PEDIDO)"<<e
ndl;
cout<<"Ingrese el nombre del
producto.(de 0 para salir)...";
cout.flush();
gets(sus);
cout.flush();
clrscr();
tads='0';
switch(sus[0])
{
case'A':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='A')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'B':
if(sus[1]=='O')
if(sus[2]=='R')
if(sus[3]=='R')
if(sus[4]=='A')
if(sus[5]=='R')
{
fere.open("pedido2.txt");
fere>>mahoma;

fere.close();

sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='B')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

if(mahoma<2)
borraped();
if(mahoma>=2)
{
mahoma--;
fare.open("pedido2.txt");
fare<<mahoma;
fare.close();
fere.open("pedido1.txt");
fare.open("pedido3.txt");
for(dwr=0;dwr<mahoma;dwr++)
{
fere>>lasde1;
fare<<lasde1<<" ";
fere>>lasde2;
fare<<lasde2<<endl;
}
fere.close();
fare.close();

case'C':
if(sus[1]=='O')
if(sus[2]=='T')
if(sus[3]=='I')
if(sus[4]=='Z')
if(sus[5]=='A')
{
imprimir1();
fare.open("numerok.txt");
fare<<0<<" ";
fare<<0;
fare.close();
fare.open("factuk.txt");

fere.open("pedido3.txt");
fare.open("pedido1.txt");
for(dwr=0;dwr<mahoma;dwr++)
{
fere>>lasde1;
fare<<lasde1<<" ";
fere>>lasde2;
fare<<lasde2<<endl;
}
fere.close();
fare.close();
}

fare<<"FACTURACION/CONSULTAS"<<en
dl;

fare.open("numerok.txt");
fare<<numer-1<<" ";
fare<<0;
fare.close();
fere.open("factuk.txt");
fare.open("factu1k.txt");
fere>>sus;
fare<<sus<<endl;
for(dwr=0;dwr<numer-1;dwr++)
{
for(dw=0;dw<4;dw++)
{
fere>>sus;
fare<<sus<<" ";
}
fare<<endl;
}
fare.close();
fere.close();
fere.open("factu1k.txt");
fare.open("factuk.txt");
fere>>sus;
fare<<sus<<endl;
for(dwr=0;dwr<numer-1;dwr++)
{
for(dw=0;dw<4;dw++)
{
fere>>sus;
fare<<sus<<" ";
}
fare<<endl;
}
fare.close();
fere.close();
break;
}
entralex.open("alexarch.txt");
entralex>>archalex;

fare.close();
fare.open("controlk.txt");
fare<<"1";
fare.close();
borraped();
break;
}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='C')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'D':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='D')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);

}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

{
fare<<sus<<" ";
fare<<endl;
}
}
}
if(siza!=0)
{
farew.open("numerok.txt");
farew<<numer-siza<<" ";
farew<<0;
farew.close();
siza=0;
}

case'E':
if(sus[1]=='L')
if(sus[2]=='I')
if(sus[3]=='M')
if(sus[4]=='I')
if(sus[5]=='N')

fare.close();
fere.close();
fere.open("numerok.txt");
fere>>numer;
fere>>dess;
fere.close();

{
solo.open("numerok.txt");
solo>>numer;
solo>>dess;
solo.close();
solo.open("factuk.txt");
dess=0;
tioas=0;
solo>>maria;
cout<<maria<<endl;
for(yes=0;yes<numer;yes++)
{
solo>>maria;
cout<<maria;
solo>>tias;
cout<<"..Cant.";
cout<<tias;
solo>>tios;
cout<<"..Precio..$";
cout<<tios<<endl;
tioas=tioas+tios;
solo>>tia;
dess=dess+tia;
}

fere.open("factu1k.txt");
fare.open("factuk.txt");
fere>>sus;
fare<<sus<<endl;
for(dwr=0;dwr<numer;dwr++)
{
for(dw=0;dw<4;dw++)
{
fere>>sus;
fare<<sus<<" ";
}
fare<<endl;
}
fare.close();
fere.close();
break;
}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='E')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

cout<<endl;
cout<<"digite el codigo que desea
eliminar...";
cout.flush();
gets(elegido);
siza=0;
fere.open("factuk.txt");
fare.open("factu1k.txt");
fere>>sus;
fare<<sus<<endl;
for(dwr=0;dwr<numer;dwr++)
{
for(dw=0;dw<4;dw++)
{
fere>>sus;
if(dw==0)
{
if(sus[0]==elegido[0])
if(sus[1]==elegido[1])
if(sus[2]==elegido[2])
if(sus[3]==elegido[3])
if(sus[4]==elegido[4])
if(sus[5]==elegido[5])
if(sus[6]==elegido[6])
{
fere>>sus;
fere>>sus;
fere>>sus;
dw=5;
siza++;
}
}
if(dw!=5)

case'F':
if(sus[1]=='A')
if(sus[2]=='C')
if(sus[3]=='T')
if(sus[4]=='U')
if(sus[5]=='R')
{
imprimir();
fare.open("numerok.txt");
fare<<0<<" ";
fare<<0;
fare.close();
fare.open("factuk.txt");

break;
fare<<"FACTURACION/CONSULTAS"<<en

case'I':

dl;
fare.close();
fare.open("controlk.txt");
fare<<"1";
fare.close();
borraped();
break;
}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='F')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='I')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'J':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='J')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'G' :
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='G')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'K':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='K')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'H':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='H')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();

case'L':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='L')
{
cont=x.iniciaralex(archalex);

x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='O')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'M':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='M')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'N':
if(sus[1]=='U')
if(sus[2]=='E')
if(sus[3]=='V')
if(sus[4]=='A')
{
fare.open("numerok.txt");
fare<<0<<" ";
fare<<0;
fare.close();
fare.open("factuk.txt");

case'P':
if(sus[1]=='E')
if(sus[2]=='D')
if(sus[3]=='I')
if(sus[4]=='D')
if(sus[5]=='O')
{
fere.open("pedido2.txt");
fere>>mahoma;
fere.close();
fere.open("pedido1.txt");
fare.open("pedidop.txt",ios::app);
fare<<endl;
for(dwr=0;dwr<mahoma;dwr++)
{
fere>>lasde1;
fare<<lasde1<<" ";
fere>>lasde2;
fare<<lasde2<<endl;
}
fere.close();
fare.close();

fare<<"FACTURACION/CONSULTAS"<<en
dl;

borraped();
fare.close();
borraped();
break;
}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='N')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'O':

cout<<endl<<endl<<endl;
cout<<"....LISTO SU
PEDIDO!!!!!"<<endl<<endl;
cout<<"
...pulse tecla
para continuar...";
cout.flush();
getch();

break;
}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='P')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();

goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'Q':

goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'T':

entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='Q')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'R':

entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='T')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'U':

if(sus[1]=='E')
if(sus[2]=='M')
if(sus[3]=='I')
if(sus[4]=='S')
if(sus[5]=='I')
{
imprimir2();
break;
}
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='R')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='U')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'V':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='V')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;

case'S':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='S')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();

case'W':
entralex.open("alexarch.txt");
entralex>>archalex;

sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='W')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'X':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='X')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'Y':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='Y')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')
{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
case'Z':
entralex.open("alexarch.txt");
entralex>>archalex;
sw=verificaralex(archalex);
while(sw!='F')
{
if(archalex[0]=='Z')
{
cont=x.iniciaralex(archalex);
x.consultar(cont,sus);
x.destruir(cont);
}
if(tads!='0')

{
entralex.close();
goto adioschao;
}
entralex>>archalex;
sw=verificaralex(archalex);
}
entralex.close();
break;
}
adioschao:
sw='+';
}while(sus[0]!='0');
return;
}
void fecha()
{
ifstream entrada("fecha.txt");
entrada>>facata;
entrada.close();
}
void cambilis(double reas)
{
primo1=0;
primo2=0;
primo3=0;
while(reas>1000000)
{
reas=reas-1000000;
primo1++;
}
while(reas>1000)
{
reas=reas-1000;
primo2++;
}
while(reas>1)
{
reas=reas-1;
primo3++;
}
primo3++;
if(primo3==1000)
{
primo3=0;
primo2++;
if(primo2==1000)
{
primo2=0;
primo1++;
}
}
return;
}
void buscapro(char codo[10])
{
char jiz1[70];
char sux;
double mixq=0;
double mixq1=0;
ifstream enr;
enr.open("datos1.txt");
enr>>jiz1;
sux=verificar(jiz1);
while(sux!='F')
{
enr>>mixq1;
if(codo[0]==jiz1[0])
if(codo[1]==jiz1[1])
if(codo[2]==jiz1[2])
if(codo[3]==jiz1[3])
if(codo[4]==jiz1[4])
if(codo[5]==jiz1[5])
if(codo[6]==jiz1[6])

mixq=mixq+mixq1;
enr>>jiz1;
enr>>jiz1;
enr>>jiz1;
sux=verificar(jiz1);
}
enr.close();
cout<<mixq;
return;
}
void imfecha()
{
char estado='0';
char df='0';
char su='N';
char kk[10];
ifstream des;
char guia1[50];
char guia2[50];
char nit[50];
int you;
nuev:
df='0';
cout.flush();
clrscr();
cout<<endl<<endl<<endl;
cout<<"Si el cliente esta en archivo pulse la tecla (+) y
de enter "<<endl<<endl;
cout<<"Ingrese el nombre del cliente...";
cout.flush();
gets(nombri);
if(nombri[0]!='+')
df='1';
if(nombri[0]=='+')
{
estado='0';
des.open("clientes.txt");
cout<<endl<<"Ingrese las 3 primeras letras del
nombre...";
cout.flush();
gets(kk);
des>>guia1;
su=verificar(guia1);
while(su!='F')
{
des>>guia2;
if(guia1[0]==kk[0])
if(guia1[1]==kk[1])
if(guia1[2]==kk[2])
{
cout<<endl;
cout<<guia1<<endl;
cout<<guia2<<endl;
cout<<"acepta el cliente (s/n)? ...";
su=getch();
if(su=='S')
{
for(you=0;you<40;you++)
{
nit[you]=guia2[you];
nombri[you]=guia1[you];
}
df='1';
goto loca;
}
}
des>>guia1;
su=verificar(guia1);
}
des.close();
}
if(df=='0')
goto nuev;

cout<<"Ingrese datos adicionales...";


cout.flush();
gets(nit);
loca:
for(int ui=0;ui<39;ui++)
{if(nombri[ui]=='\0')
{for(int uiy=ui;uiy<39;uiy++)
nombri[uiy]=' ';
}
}
nombri[39]='\0';

fstream cou;
cou.open("LPT1",ios::out);
cou<<nombri<<facata[0]<<facata[1]<<" ";
cou<<facata[3]<<facata[4]<<" "<<facata[6]<<facata[7];
cou<<endl;
cou<<nit<<endl;
cou<<endl;
cou<<endl;
cou<<endl;
cou.close();
}
void imprimir2()
{
imfecha();
double numero;
char uno[60];
double cant;
double dess;
double pres1;
double pres2;
double total1;
double total2;
fstream cou;
int pi;
int pe;
int po;
ifstream entrada;
ofstream salida;
cout.flush();
clrscr();
total1=0;
total2=0;
entrada.open("numerok.txt");
entrada>>numero;
entrada>>dess;
entrada.close();
entrada.open("factuk.txt");
cou.open("LPT1",ios::out);
entrada>>uno;
cout<<"
"<<endl;
cout<<"
"<<endl;
cout<<endl;
cout<<endl;
cou<<endl;
cou<<endl;
cou<<endl;
for(pe=0;pe<numero;pe++)
{
entrada>>uno;
entrada>>cant;
entrada>>pres1;
entrada>>pres2;
for(pi=0;pi<55;pi++)
{
if(pi==6)
{
pi=pi+2;
}
if(uno[pi]=='\0')
break;

}
cout<<cant;
if(cant<1000)
cout<<" ";
if(cant<100)
cout<<" ";
if(cant<10)
cout<<" ";
cout<<" ";
cou<<cant;
if(cant<1000)
cou<<" ";
if(cant<100)
cou<<" ";
if(cant<10)
cou<<" ";
cou<<" ";
for(pi=3;pi<41;pi++)
{
if(uno[pi]=='\0')
{
for(po=pi;po<40;po++)
uno[po]='.';
uno[po]='\0';
}
if(uno[pi]=='.')
{
cout<<" ";
cou<<" ";
}
else
{
cout<<uno[pi];
cou<<uno[pi];
}
}
cout<<" ";
if(pres1/cant<10000000)
cout<<" ";
if(pres1/cant<1000000)
cout<<" ";
if(pres1/cant<100000)
cout<<" ";
if(pres1/cant<10000)
cout<<" ";
if(pres1/cant<1000)
cout<<" ";
if(pres1/cant<100)
cout<<" ";
cout<<(pres1/cant);
cou<<" ";
if(pres1/cant<10000000)
cou<<" ";
if(pres1/cant<1000000)
cou<<" ";
if(pres1/cant<100000)
cou<<" ";
if(pres1/cant<10000)
cou<<" ";
if(pres1/cant<1000)
cou<<" ";
if(pres1/cant<100)
cou<<" ";
cou<<" ";
if(pres1<100000000)
cout<<" ";
if(pres1<10000000)
cout<<" ";
if(pres1<1000000)
cout<<" ";
if(pres1<100000)
cout<<" ";
if(pres1<10000)
cout<<" ";
if(pres1<1000)
cout<<" ";

if(pres1<100)
cout<<" ";
cout<<pres1<<endl;
if(pres1<100000000)
cou<<" ";
if(pres1<10000000)
cou<<" ";
if(pres1<1000000)
cou<<" ";
if(pres1<100000)
cou<<" ";
if(pres1<10000)
cou<<" ";
if(pres1<1000)
cou<<" ";
if(pres1<100)
cou<<" ";
cou<<endl;
total1=total1+pres1;
total2=total2+pres2;
}
while(numero<20)
{
cou<<endl;
numero++;
}
cou.close();
entrada.close();
return;
}
void borraped()
{
ofstream rey;
rey.open("pedido1.txt");
rey<<endl;
rey.close();
rey.open("pedido2.txt");
rey<<"0"<<endl;
rey.close();
}
void imprimir1()
{
imfecha();
double numero;
char uno[60];
double cant;
double dess;
double pres1;
double pres2;
double total1;
double total2;
fstream cou;
int pi;
int pe;
int po;
ifstream entrada;
ofstream salida;
cout.flush();
clrscr();
total1=0;
total2=0;
entrada.open("numerok.txt");
entrada>>numero;
entrada>>dess;
entrada.close();
salida.open("lasdehoy.txt",ios::app);
entrada.open("factuk.txt");
cou.open("LPT1",ios::out);
entrada>>uno;
salida<<"NUEVA "<<facata<<endl;
cout<<"
"<<endl;
cout<<"
"<<endl;
cout<<endl;
cout<<endl;
cou<<endl;

cou<<endl;
cou<<endl;
for(pe=0;pe<numero;pe++)
{
entrada>>uno;
entrada>>cant;
entrada>>pres1;
entrada>>pres2;
for(pi=0;pi<55;pi++)
{
salida<<uno[pi];
if(pi==6)
{
salida<<" ";
pi=pi+2;
}
if(uno[pi]=='\0')
break;
}
salida<<" ";
salida<<cant<<" ";
salida<<pres1<<endl;
cout<<cant;
if(cant<1000)
cout<<" ";
if(cant<100)
cout<<" ";
if(cant<10)
cout<<" ";
cout<<" ";
cou<<cant;
if(cant<1000)
cou<<" ";
if(cant<100)
cou<<" ";
if(cant<10)
cou<<" ";
cou<<" ";
for(pi=3;pi<40;pi++)
{
if(uno[pi]=='\0')
{
for(po=pi;po<39;po++)
uno[po]='.';
uno[po]='\0';
}
if(uno[pi]=='.')
{
cout<<" ";
cou<<" ";
}
else
{
cout<<uno[pi];
cou<<uno[pi];
}
}
cout<<" ";
if(pres1/cant<10000000)
cout<<" ";
if(pres1/cant<1000000)
cout<<" ";
if(pres1/cant<100000)
cout<<" ";
if(pres1/cant<10000)
cout<<" ";
if(pres1/cant<1000)
cout<<" ";
if(pres1/cant<100)
cout<<" ";
cout<<(pres1/cant);
cou<<" ";
if(pres1/cant<10000000)
cou<<" ";
if(pres1/cant<1000000)
cou<<" ";

if(pres1/cant<100000)
cou<<" ";
if(pres1/cant<10000)
cou<<" ";
if(pres1/cant<1000)
cou<<" ";
if(pres1/cant<100)
cou<<" ";
cou<<(pres1/cant);
cou<<" ";
if(pres1<100000000)
cout<<" ";
if(pres1<10000000)
cout<<" ";
if(pres1<1000000)
cout<<" ";
if(pres1<100000)
cout<<" ";
if(pres1<10000)
cout<<" ";
if(pres1<1000)
cout<<" ";
if(pres1<100)
cout<<" ";
cout<<pres1<<endl;
if(pres1<100000000)
cou<<" ";
if(pres1<10000000)
cou<<" ";
if(pres1<1000000)
cou<<" ";
if(pres1<100000)
cou<<" ";
if(pres1<10000)
cou<<" ";
if(pres1<1000)
cou<<" ";
if(pres1<100)
cou<<" ";
cou<<pres1<<endl;
total1=total1+pres1;
total2=total2+pres2;
}
while(numero<20)
{
cou<<endl;
numero++;
}
//cou.close();
cout<<endl;
cout<<endl;
//cout<<"
DESCUENTO $"<<(total2total1)<<""<<endl;
cout<<"
TOTAL
"<<total1<<endl;
//cou<<"
DESCUENTO $"<<(total2total1)<<""<<endl;
if((total1-(total1*16/100))<100000000)
cou<<" ";
if((total1-(total1*16/100))<10000000)
cou<<" ";
if((total1-(total1*16/100))<1000000)
cou<<" ";
if((total1-(total1*16/100))<100000)
cou<<" ";
if((total1-(total1*16/100))<10000)
cou<<" ";
if((total1-(total1*16/100))<1000)
cou<<" ";
cou<<endl;
cou<<endl;
if(((total1*16/100))<100000000)
cou<<" ";
if(((total1*16/100))<10000000)
cou<<" ";

if((total1*16/100)<1000000)
cou<<" ";
if(((total1*16/100))<100000)
cou<<" ";
if(((total1*16/100))<10000)
cou<<" ";
if(((total1*16/100))<1000)
cou<<" ";
cou<<endl;
cou<<endl;
if(total1<100000000)
cou<<" ";
if(total1<10000000)
cou<<" ";
if(total1<1000000)
cou<<" ";
if(total1<100000)
cou<<" ";
if(total1<10000)
cou<<" ";
if(total1<1000)
cou<<" ";
cambilis(total1);
if(total1>=1000000)
{
cou<<"
"<<primo1<<".";
if(primo2<100)
cou<<"0";
if(primo2<10)
cou<<"0";
cou<<primo2<<".";
if(primo3<100)
cou<<"0";
if(primo3<10)
cou<<"0";
cou<<primo3<<endl;
}
if(total1<1000000)
if(total1>=1000)
{
cou<<"
"<<primo2<<".";
if(primo3<100)
cou<<"0";
if(primo3<10)
cou<<"0";
cou<<primo3<<endl;
}
if(total1<1000)
{
cou<<"
"<<primo3<<endl;
}
cout.flush();
getch();
cou.close();
entrada.close();
salida.close();
return;
}
void imprimir()
{
imfecha();
double numero;
char uno[60];
double cant;
double dess;
double pres1;
double pres2;
double total1;
double total2;
fstream cou;
int pi;
int pe;
int po;

ifstream entrada;
ofstream salida;
cout.flush();
clrscr();
total1=0;
total2=0;
entrada.open("numerok.txt");
entrada>>numero;
entrada>>dess;
entrada.close();
salida.open("lasdehoy.txt",ios::app);
entrada.open("factuk.txt");
cou.open("LPT1",ios::out);
entrada>>uno;
salida<<"NUEVA "<<facata<<endl;
cout<<"
"<<endl;
cout<<"
"<<endl;
cout<<endl;
cout<<endl;
cou<<endl;
cou<<endl;
cou<<endl;
for(pe=0;pe<numero;pe++)
{
entrada>>uno;
entrada>>cant;
entrada>>pres1;
entrada>>pres2;
for(pi=0;pi<55;pi++)
{
salida<<uno[pi];
if(pi==6)
{
salida<<" ";
pi=pi+2;
}
if(uno[pi]=='\0')
break;
}
salida<<" ";
salida<<cant<<" ";
salida<<pres1<<endl;
cout<<cant;
if(cant<1000)
cout<<" ";
if(cant<100)
cout<<" ";
if(cant<10)
cout<<" ";
cout<<" ";
cou<<cant;
if(cant<1000)
cou<<" ";
if(cant<100)
cou<<" ";
if(cant<10)
cou<<" ";
cou<<" ";
for(pi=3;pi<40;pi++)
{
if(uno[pi]=='\0')
{
for(po=pi;po<39;po++)
uno[po]='.';
uno[po]='\0';
}
if(uno[pi]=='.')
{
cout<<" ";
cou<<" ";
}
else
{
cout<<uno[pi];
cou<<uno[pi];
}

}
cout<<" ";
if(pres1/cant<10000000)
cout<<" ";
if(pres1/cant<1000000)
cout<<" ";
if(pres1/cant<100000)
cout<<" ";
if(pres1/cant<10000)
cout<<" ";
if(pres1/cant<1000)
cout<<" ";
if(pres1/cant<100)
cout<<" ";
cout<<(pres1/cant);
cou<<" ";
if(pres1/cant<10000000)
cou<<" ";
if(pres1/cant<1000000)
cou<<" ";
if(pres1/cant<100000)
cou<<" ";
if(pres1/cant<10000)
cou<<" ";
if(pres1/cant<1000)
cou<<" ";
if(pres1/cant<100)
cou<<" ";
cou<<(pres1/cant);
cou<<" ";
if(pres1<100000000)
cout<<" ";
if(pres1<10000000)
cout<<" ";
if(pres1<1000000)
cout<<" ";
if(pres1<100000)
cout<<" ";
if(pres1<10000)
cout<<" ";
if(pres1<1000)
cout<<" ";
if(pres1<100)
cout<<" ";
cout<<pres1<<endl;
if(pres1<100000000)
cou<<" ";
if(pres1<10000000)
cou<<" ";
if(pres1<1000000)
cou<<" ";
if(pres1<100000)
cou<<" ";
if(pres1<10000)
cou<<" ";
if(pres1<1000)
cou<<" ";
if(pres1<100)
cou<<" ";
cou<<pres1<<endl;
total1=total1+pres1;
total2=total2+pres2;
}
while(numero<20)
{
cou<<endl;
numero++;
}
//cou.close();
cout<<endl;
cout<<endl;
//cout<<"
DESCUENTO $"<<(total2total1)<<""<<endl;
cout<<"
"<<total1(total1*16/100)<<endl;

cout<<"
"<<(total1*16/100)<<endl;
cout<<"
"<<total1<<endl;
//cou<<"
DESCUENTO $"<<(total2total1)<<""<<endl;
tomax=total1/1.16;
if(tomax<100000000)
cou<<" ";
if(tomax<10000000)
cou<<" ";
if(tomax<1000000)
cou<<" ";
if(tomax<100000)
cou<<" ";
if(tomax<10000)
cou<<" ";
if(tomax<1000)
cou<<" ";
cambilis(tomax);
if(tomax>=1000000)
{
cou<<"
"<<primo1<<".";
if(primo2<100)
cou<<"0";
if(primo2<10)
cou<<"0";
cou<<primo2<<".";
if(primo3<100)
cou<<"0";
if(primo3<10)
cou<<"0";
cou<<primo3<<endl;
}
if(tomax<1000000)
if(tomax>=1000)
{
cou<<"
"<<primo2<<".";
if(primo3<100)
cou<<"0";
if(primo3<10)
cou<<"0";
cou<<primo3<<endl;
}
if(tomax<1000)
{
cou<<"
"<<primo3<<endl;
}
cou<<endl;
tomax=total1-(total1/1.16);
if(tomax<100000000)
cou<<" ";
if(tomax<10000000)
cou<<" ";
if(tomax<1000000)
cou<<" ";
if(tomax<100000)
cou<<" ";
if(tomax<10000)
cou<<" ";
if(tomax<1000)
cou<<" ";
cambilis(tomax);
if(tomax>=1000000)
{
cou<<"
"<<primo1<<".";
if(primo2<100)
cou<<"0";
if(primo2<10)
cou<<"0";
cou<<primo2<<".";

if(primo3<100)
cou<<"0";
if(primo3<10)
cou<<"0";
cou<<primo3<<endl;
}
if(tomax<1000000)
if(tomax>=1000)
{
cou<<"
"<<primo2<<".";
if(primo3<100)
cou<<"0";
if(primo3<10)
cou<<"0";
cou<<primo3<<endl;
}
if(tomax<1000)
{
cou<<"
"<<primo3<<endl;
}
cou<<endl;
if(total1<100000000)
cou<<" ";
if(total1<10000000)
cou<<" ";
if(total1<1000000)
cou<<" ";
if(total1<100000)
cou<<" ";
if(total1<10000)
cou<<" ";
if(total1<1000)
cou<<" ";
cambilis(total1);
if(total1>=1000000)
{
cou<<"
"<<primo1<<".";
if(primo2<100)
cou<<"0";
if(primo2<10)
cou<<"0";
cou<<primo2<<".";
if(primo3<100)
cou<<"0";
if(primo3<10)
cou<<"0";
cou<<primo3<<endl;
}
if(total1<1000000)
if(total1>=1000)
{
cou<<"
"<<primo2<<".";
if(primo3<100)
cou<<"0";
if(primo3<10)
cou<<"0";
cou<<primo3<<endl;
}
if(total1<1000)
{
cou<<"
"<<primo3<<endl;
}
cout.flush();
getch();
cou.close();
entrada.close();
salida.close();
return;
}

void lista::ubicar(nodo*&q,nodo*&p,char n[50],int


cont)/////////////////////////////
{
q=NULL;
p=cabeza;
for(int f=0;f<cont;f++)
{
if(n[0]>p->codigo[0])
{
q=p;
p=p->siguiente;
}
else
break;
}
if(n[0]==p->codigo[0])
{
for(int ry=f;ry<cont;ry++)
{
if(n[0]==p->codigo[0]&&n[1]>p->codigo[1])
{
q=p;
p=p->siguiente;
}
else
break;
}
if(n[1]==p->codigo[1])
{
for(int fab=ry;fab<cont;fab++)
{
if(n[1]==p->codigo[1]&&n[2]>p->codigo[2])
{
q=p;
p=p->siguiente;
}
else
break;
}
}
}
}
void lista::consultar(int cont,char
sus[50])///////////////////////////////////////
{
char res;
nodo *p,*q,*cliente;
cliente=new nodo;
int papo=0;
for(int dd=0;dd<cont;dd++)
cliente->codigo[dd]=sus[dd];
ubicar(q,p,cliente->codigo,cont);
if(p->codigo[0]==cliente->codigo[0])
{
if(p->codigo[1]==cliente->codigo[1])
{
char ri;
while(p->codigo[2]==cliente->codigo[2])
{
cout<<" "<<p->codigo<<"."<<p->nombre<<" Ub."<<p>ubicacion<<endl;
cout<<" $"<<p->preciovecino;
if(p->preciovecino<100000)
cout<<" ";
if(p->preciovecino<10000)
cout<<" ";
if(p->preciovecino<1000)
cout<<" ";
if(p->preciovecino<100)
cout<<" ";
if(p->preciovecino<10)

cout<<" ";
cout<<" $"<<p->preciocliente;
cout<<" -->"<<papo<<endl;
for(int reas=0;reas<8;reas++)
codi[papo][reas]=p->codigo[reas];
papo++;
if(papo==10)
{
papo=0;
cout<<"salir(PRESIONE
+)/continuar(enter)/seleccione...";
cout.flush();
ri=getch();
ri=comono(cont,ri);
cout.flush();
clrscr();
if(ri=='+')
return;
}
p=p->siguiente;
}
}
}
if(papo!=0)
{
cout<<"salir(PRESIONE
+)/continuar(enter)/seleccione...";
cout.flush();
res=getch();
res=comono(cont,res);
cout.flush();
clrscr();
}
return;
}
char lista::comono(int cont,char
ri)///////////////////////////////////////
{
switch(ri)
{
case '0':
consultar1(cont,0);
return '+';
break;
case '1':
consultar1(cont,1);
return '+';
break;
case '2':
consultar1(cont,2);
return '+';
break;
case '3':
consultar1(cont,3);
return '+';
break;
case '4':
consultar1(cont,4);
return '+';
break;
case '5':
consultar1(cont,5);
return '+';
break;
case '6':
consultar1(cont,6);
return '+';
break;
case '7':
consultar1(cont,7);
return '+';
break;
case '8':

consultar1(cont,8);
return '+';
break;
case '9':
consultar1(cont,9);
return '+';
break;
case '+':
return '+';
break;
}
return 'N';
}
void lista::consultar1(int cont,int
drull)///////////////////////////////////////
{
char preschar[20];
char cantchar[20];
ofstream pasout;
ifstream pasoin;
int tan=0;
int wqe;
ofstream sale;
cout.flush();
clrscr();
nodo *p,*q,*cliente;
cliente=new nodo;
for(int dd=0;dd<8;dd++)
cliente->nombre[dd]=codi[drull][dd];
ubicar(q,p,cliente->nombre,cont);
if(p->codigo[1]==cliente->nombre[1])
{
if(p->codigo[1]==cliente->nombre[1])
{
char ri;
while(p->codigo[2]==cliente->nombre[2])
{
if(p->codigo[3]==cliente->nombre[3])
if(p->codigo[4]==cliente->nombre[4])
if(p->codigo[5]==cliente->nombre[5])
if(p->codigo[6]==cliente->nombre[6])
if(p->codigo[7]==cliente->nombre[7])
{
ifstream entr;
double cant;
double toti;
double numero;
double numero12;
double descuento;
double descu;
if(p->codigo[0]=='N')
if(p->codigo[1]=='A')
if(p->codigo[2]=='D')
if(p->codigo[3]=='A')
{
tan=8;
cout<<"Ingrese el nombre del producto...";
cout.flush();
gets(p->nombre);
cout<<endl;
for(wqe=0;wqe<50;wqe++)
{
if(p->nombre[wqe]==' ')
p->nombre[wqe]='.';
if(p->nombre[wqe]=='\0')
p->nombre[wqe]='.';
}
p->nombre[45]='\0';
}
cout<<" "<<p->codigo<<".."<<p>nombre<<"...precio..$";
if(tan==8)
cout<<" "<<endl;
if(tan==0)
cout<<p->preciocliente<<endl;

cout<<endl;
tads='1';
cout<<"Cantidad en existencia...";
buscapro(p->codigo);
cout<<endl;
cout<<endl;
cout<<"Cual es la cantidad a vender...";
cout.flush();
gets(cantchar);
pasout.open("cantchar.txt");
pasout<<cantchar;
pasout.close();
cant=revisacantchar();
if(cant==0)
return;
cout<<"....precio venta unitario...";
cout.flush();
gets(preschar);
pasout.open("preschar.txt");
pasout<<preschar;
pasout.close();
toti=revisapreschar();
if(tan==8)
p->preciovecino=toti;
if(tan!=8)
if(toti<p->preciovecino*3/4)
toti=0;
if(toti>p->preciovecino*9)
toti=0;
toti=toti*cant;
if(toti==0)
return;
cout<<endl;
cout<<" "<<p->codigo<<".."<<p>nombre<<"Cant."<<cant<<".unidad..$"<<toti/cant<<e
ndl;
cout<<endl;
cout<<"precio total...$"<<toti<<"...."<<endl;
descu=(1-(toti/(cant*p->preciocliente)))*100;
if(tan==8)
descu=0;
if(descu>0)
cout<<"DESCUENTO.."<<descu<<"%";

}
}

lista::lista()////////////////////////////////////////////////////////////////
{
cabeza=NULL;
}
void lista::destruir(int
cont)////////////////////////////////////////////////
{
nodo *p;
p=cabeza;
for(int w=0;w<cont;w++)
{
cabeza=cabeza->siguiente;
delete p;
p=cabeza;
}
}
int lista::iniciaralex(char
archalex[10])//////////////////////////////////////
{
nodo *p,*q,*nuevo;

int cont;
ifstream entrada(archalex);
if(!entrada)
{
cout<<"llamar a juan";
cout.flush();
getch();
}
entrada>>cont;
cabeza=new nodo;
entrada>>cabeza>codigo;
entrada>>cabeza>nombre;
entrada>>cabeza>preciocliente;
entrada>>cabeza>preciovecino;
entrada>>cabeza-

entr.open("numerok.txt");
entr>>numero;
entr>>descuento;
entr.close();
sale.open("numerok.txt");
sale<<numero+1<<" ";
sale<<((descuento*numero)+descu)/(numero+1);
sale.close();
sale.open("factuk.txt",ios::app);
sale<<p->codigo<<"..";
sale<<p->nombre<<" "<<cant<<" "<<toti<<"
"<<cant*p->preciocliente<<endl;
sale.close();
entr.open("pedido2.txt");
entr>>numero12;
entr.close();
sale.open("pedido2.txt");
sale<<numero12+1<<" ";
sale.close();
sale.open("pedido1.txt",ios::app);
sale<<p->codigo<<"..";
sale<<p->nombre<<" "<<cant<<endl;
sale.close();
cout.flush();
getch();
}
p=p->siguiente;
}
}

>cantidad;
entrada>>cabeza>ubicacion;p=cabeza;

nuevo=new nodo;
for(int jav=1;jav<cont;jav++)
{
entrada>>nuevo>codigo;
entrada>>nuevo>nombre;
entrada>>nuevo>preciocliente;
entrada>>nuevo>preciovecino;
entrada>>nuevo>cantidad;
entrada>>nuevo>ubicacion;p->siguiente=nuevo;
nuevo=new nodo;
p=p->siguiente;
p->siguiente=NULL;
}

entrada.close();
return cont;

}
char verificar(char guia[70])
{
if(guia[0]=='F')
if(guia[1]=='I')
if(guia[2]=='N')
return 'F';
return 'N';
}
char verificaralex(char guia[70])
{
if(guia[0]=='+')
if(guia[1]=='+')
if(guia[2]=='+')
if(guia[3]=='+')
if(guia[4]=='+')
return 'F';
return 'N';
}
void inicial()
{
char abc;
char archiv[10];
char su;
ofstream salida;
ofstream salida2;
ifstream entrada;
int cont0;
int cont;
int cont1;
int ww;
char sus[70];
char a,t;
cout.flush();
clrscr();
cout<<"PORFAVOR ESPERE MIENTRAS TERMINA
LA TRANSFERENCIA..."<<endl;
cout<<endl;
cout<<endl;
archiv[2]='.';
archiv[3]='t';
archiv[4]='x';
archiv[5]='t';
archiv[6]='\0';
salida2.open("alexarch.txt");
cont=0;
cont1=0;
entrada.open("alex.txt");
entrada>>sus;
su=verificaralex(sus);
abc='A';
while(su!='F')
{
again:
if(sus[0]!=abc)
{
abc=aumento(abc);
su=verificaralex(sus);
if(su=='F')
goto sale;
goto again;
}
if(abc=='0')
goto sale;
if(sus[0]==abc)
{
archiv[0]=abc;
archiv[1]=casa(cont1);
salida.open(archiv);
salida<<75<<endl;
while(sus[0]==abc)
{
salida<<sus<<" ";
entrada>>sus;

salida<<sus<<" ";
entrada>>sus;
salida<<sus<<" ";
entrada>>sus;
salida<<sus<<" ";
entrada>>sus;
salida<<sus<<" ";
entrada>>sus;
salida<<sus<<endl;
cont++;
entrada>>sus;
if(cont==75)
{
cont=0;
cont1++;
salida2<<archiv<<endl;
archiv[1]=casa(cont1);
salida.close();
salida.open(archiv);
salida<<75<<endl;
}
if(sus[0]!=abc)
{
for(cont0=0;cont0<75;cont0++)
{
salida<<"ZZZZZZZ 1 2 3 4 5"<<endl;
}
salida2<<archiv<<endl;
salida.close();
cont1=0;
cont=0;
abc=aumento(abc);
archiv[0]=abc;
goto again;
}
su=verificaralex(sus);
if(su=='F')
goto sale;
}
salida2<<archiv<<endl;
salida.close();
}
}
sale:
salida2<<"+++++";
salida.close();
salida2.close();
entrada.close();
}
char casa(int cont1)
{
if(cont1==0)
return'0';
if(cont1==1)
return'1';
if(cont1==2)
return'2';
if(cont1==3)
return'3';
if(cont1==4)
return'4';
if(cont1==5)
return'5';
if(cont1==6)
return'6';
if(cont1==7)
return'7';
if(cont1==8)
return'8';
if(cont1==9)
return'9';
}
char aumento(char abc)
{
if(abc=='A')

return 'B';
if(abc=='B')
return 'C';
if(abc=='C')
return 'D';
if(abc=='D')
return 'E';
if(abc=='E')
return 'F';
if(abc=='F')
return 'G';
if(abc=='G')
return 'H';
if(abc=='H')
return 'I';
if(abc=='I')
return 'J';
if(abc=='J')
return 'K';
if(abc=='K')
return 'L';
if(abc=='L')
return 'M';
if(abc=='M')
return 'N';
if(abc=='N')
return 'O';
if(abc=='O')
return 'P';
if(abc=='P')
return 'Q';
if(abc=='Q')
return 'R';
if(abc=='R')
return 'S';
if(abc=='S')
return 'T';
if(abc=='T')
return 'U';
if(abc=='U')
return 'V';
if(abc=='V')
return 'W';
if(abc=='W')
return 'X';
if(abc=='X')
return 'Y';
if(abc=='Y')
return 'Z';
if(abc=='Z')
return '0';
return '0';
}
double revisacantchar()
{
int pra;
char elchar[20];
double estesi;
ifstream pasoin;
pasoin.open("cantchar.txt");
pasoin>>elchar;
pasoin.close();
if(elchar[0]=='0')
return 0;
if(elchar[0]=='\0')
{
cout<<"no es numero";
cout.flush();
getch();
return 0;
}
if(elchar[0]!='1' && elchar[0]!='2' && elchar[0]!='3' &&
elchar[0]!='4' && elchar[0]!='5' && elchar[0]!='6' &&
elchar[0]!='7' && elchar[0]!='8' && elchar[0]!='9')
{
cout<<"no es numero";

cout.flush();
getch();
return 0;
}
for(pra=0;pra<20;pra++)
{
if(elchar[pra]!='0' && elchar[pra]!='1' && elchar[pra]!='2'
&& elchar[pra]!='3' && elchar[pra]!='4' &&
elchar[pra]!='5' && elchar[pra]!='6' && elchar[pra]!='7'
&& elchar[pra]!='8' && elchar[pra]!='9')
{
if(elchar[pra]=='\0')
{
pasoin.open("cantchar.txt");
pasoin>>estesi;
pasoin.close();
return estesi;
}
else
{
cout<<"no es numero";
cout.flush();
getch();
return 0;
}
}
}
return 0;
}
double revisapreschar()
{
int pra;
char elchar[20];
double estesi;
ifstream pasoin;
pasoin.open("preschar.txt");
pasoin>>elchar;
pasoin.close();
if(elchar[0]=='0')
return 0;
if(elchar[0]=='\0')
{
cout<<"no es numero";
cout.flush();
getch();
return 0;
}
if(elchar[0]!='1' && elchar[0]!='2' && elchar[0]!='3' &&
elchar[0]!='4' && elchar[0]!='5' && elchar[0]!='6' &&
elchar[0]!='7' && elchar[0]!='8' && elchar[0]!='9')
{
cout<<"no es numero";
cout.flush();
getch();
return 0;
}
for(pra=0;pra<20;pra++)
{
if(elchar[pra]!='0' && elchar[pra]!='1' && elchar[pra]!='2'
&& elchar[pra]!='3' && elchar[pra]!='4' &&
elchar[pra]!='5' && elchar[pra]!='6' && elchar[pra]!='7'
&& elchar[pra]!='8' && elchar[pra]!='9')
{
if(elchar[pra]=='\0')
{
pasoin.open("preschar.txt");
pasoin>>estesi;
pasoin.close();
return estesi;
}
else
{
cout<<"no es numero";
cout.flush();
getch();
return 0;}}}return 0;}

22. LABORATORIO DE DISEO

JERINGA INDUSTRIAL

ESTRUCTURA DE SOPORTE DEL DOSIFICADOR

ACOPLE AL PISTON

ACOPLE DE EMPUJE DEL LQUIDO

PISTON DE DOBLE VASTAGO PARA EL SENSADO

RACOR NORMA AMERICANA 6mm

VASTAGO DELGADO TRACERO DE SENSADO

TALLER DE MECANIZADO DE PIEZAS

MODELO A ESCALA SISTEMA DE SELLADO HORIZONTAL

SISTEMA COMERCIAL DE SELLADO HORIZONTAL

SELLADORA VERTICAL

RESISTENCIA DE SELLADO INCRUSTADAS EN LAS MORDAZAS DE


BRONCE

TANQUE DE ALMACENAMIENTO

DOSIFICADOR

SISTEMA CHEQUE-CHEQUE CON 2 TIPOS DE CHEQUE DISTINTO

ACONDICIONAMIENTO PARA MOTORES ACTUADORES DE VALVULAS

VALVULA DE CORTINA CON ACOPLE AL MOTOR

ELECTROVALVULA PARA PASO DE FLUIDO

ELECTROVALVULA PARA AIRE 3/2 DE 120VAC

PIROMETRO ECONOMICO

SISTEMA DE CONTROL DOSIFICADOR SIN PC (PRODUCTO


INDEPENDIENTE)

PIROMETRO DE CONTROL

CONTROLADOR DE VOLTAJE AC PARA RESISTENCIAS SELLADORAS

PC DE CONTROL PARA PC

INTERFASES DE POTENSIA

23. CONCLUSIONES

Con este proyecto se pudo entender y dar a conocer en que consiste un


dosificador de lquidos alimenticios, proporcionando una solucion eficiente y
eficaz a los problemas que presenta hoy da la industria en Colombia.

Cada una de las soluciones planteadas en cada uno de los aspectos, refleja un
grado de investigacin a nivel de ingeniera que debe esperarse en el
desarrollo de un proyecto de nivel industrial con el cual los interesados buscan
soluciones factibles.

La implementacin de sistemas de cmputo en el mbito industrial es una ficha


clave en la comercializacin de un producto. La pequea y mediana industria
del pas aunque busca la automatizacin de algunos de sus procesos ve lejana
la implementacin de control por computadora que a su vez le ayude en sus
procesos de organizacin interna de produccin y manejo de la materia prima.
Es este un punto clave con que cuenta el proyecto presentado ya que al
realizar reingeniera en la utilizacin de tecnologa como las computadoras de
bajo nivel para el desarrollo de los puntos tratados el empresario se ve
motivado a incursionar con el producto ofrecido y a su vez al diseador no
representa mas que un producto agregado de costos despreciables dado que
el desarrollo de software no implican ningn tipo de inversin y si hace mas
llamativo un producto.

El uso de la electrnica se hace hoy da necesaria dada la economa que ella


nos brinda en las etapas de control. El conocimiento en los aspectos de
neumtica e hidrulica es bsico para el diseo de sistemas industriales. Y de
igual forma la interaccin entre esta electrnica de control y el manejo de de
sistemas automticos es el beneficio claro que pudo ser evidenciado en el
desarrollo de este proyecto.
Es

de

suma

importancia

parmetros

alternos

como

normatividad

recomendaciones que se tienen que tener en cuenta para la elaboracin de un


proyecto de carcter industrial, asi como normas en cuanto a seguridad

industrial. Esto nos permite ver que la parte tcnica-terica de diseo no es


suficiente ya que un desarrollo de esta categora requiere del conocimiento de
una serie de aspectos legales que poseen un grado de importancia bastante
considerable y no pueden ser dejados fuera de vista a la hora de cotizar un
proyecto.

La investigacin realizada y el trabajo hecho han permitido evidenciar la alta


gama de productos, tecnologas y profesionales expertos que se renen en
torno al tema de la automatizacin industrial referente al empacado, dosificado,
control de calidad, accesorios, materiales, consultoras y todo el entorno en el
que se desenvuelve este amplio desarrollo.

La exigencia es cada vez ms alta y aunque se han desarrollado ciertos


estndares en cuanto a sistemas de produccin la competencia es cada vez
ms alta. Hoy da se evidencia como todos los productos de consumo masivo
son empacados y as mismo podemos ver como toda esta produccin y
desarrollo gira en torno a la productividad que cada vez exige estndares de
calidad ms altos.

Los sistemas de informacin se hacen hoy da mas necesarios ya que el


control de producciones elevadas no es de fcil manejo y es por esto que no
solo mecanismos eficientes y eficaces son la necesidad sino que tambin la
industria exige una adecuada monitorizacin y supervisin de los procesos, a
su vez con entornos cada vez mas amigables a las necesidades del empresario
que nos plantea la industria actual. En nuestro caso se genero ms que un
producto de alta tecnologa, una ayuda practica y econmica que permitir el
desarrollo de la industria del pas y especialmente de la pequea industria que
abarca la mayor parte de la produccin nacional.

El proyecto permiti observar que la industria colombiana se encuentra con


muchas desventajas ya que no existe la tecnologa de desarrollo que puede
evidenciarse en maquinas europeas y estadounidenses y aunque encontramos
muchas soluciones ya desarrolladas son los acabados un claro ejemplo de las
capacidades de nuestro entorno. Aunque no desmerita el hecho que si bien las

maquinas nacionales no presentan la calidad de la maquinaria internacional,


estn avanzando en sus desarrollos y evidentemente estn dando igualmente
solucin a muchas de las necesidades que el pas presenta.

Nos damos cuenta que las exigencias para nuestros ingenieros son cada vez
mas altas, ya que no solo en desarrollo sino en el mantenimiento y
sostenimiento de toda esta infraestructura implementada en nuestra industria
debemos darnos a la tarea de estar en capacidad de aportar la calidad
educativa y de conocimiento que el actual entorno nos exige para
desarrollarnos como profesionales de alto nivel en esta rea de la ingeniera.

El rea de automatizacin enfocada al empaque y dosificacin de productos es


hoy da alta y de mucha competencia. Las diferentes empresas presentan
maquinaria especializada ofreciendo al pas un desarrollo industrial en cuanto
al tema, aunque a nivel de confiabilidad y economa estamos aun muy lejos de
competir con pases desarrollados que ofrecen servicios de ultima tecnologa
con alta productividad y de difcil desarrollo en nuestro medio social dado que
no se cuenta ni con los recursos, ni con la infraestructura necesaria.

Las herramientas tecnolgicas permiten generar expectativas de carcter


tcnico y comercial. Es as que la utilizacin de software como solid edge
permite evidenciar de manera ms clara y concisa el ideal de un diseo sin
necesidad de llevarlo a la prctica. De igual manera herramientas como C++ o
mplab dan la posibilidad de generar desarrollos de forma eficiente y econmica
a las expectativas de un cliente final.

24. BIBLIOGRAFIA

AMPUDIA, E. Danilo. (1991). Mantenimiento de equipo oleohidrulico.


Universidad del valle.

AVALLONE, Eugene A. (1995). Manual del ingeniero mecnico. Mc Graw Hill.

BEER Ferdinand P, JOHNSTON E Russel, ( 1993 ) Mecnica de materiales.


Mc Graw Hill. Bogot. ( Colombia )

BEER Ferdinand P, JOHNSTON E Russel, ( 1998 ) Mecnica vectorial para


ingenieros Esttica. Mc Graw Hill. Espaa.

BEER Ferdinand P, JOHNSTON E Russel, ( 1998 ) Mecnica vectorial para


ingenieros Dinmica. Mc Graw Hill. Espaa.

BOYLESTAD, Robert. (1998). Anlisis introductorio de Circuitos. Ed. Prentice


Hall. Mxico.

CONSIDINE, Douglas M. (1998). Process Industrial Instruments and Controls.


Handbook.

DEMPSEY, John A. (1984). Electrnica digital bsica: con aplicaciones de


circuitos MSI. Fondo educativo interamericano.

CHAPMAN, Stephen. (1991). Mquinas elctricas. Ed. McGraw-Hill. Mxico

DORF, Richard. (1995). Circuitos Elctricos. Introduccin al anlisis y diseo.


Editorial Alfaomega. 2a. Edicin. Espaa.

DORF, C. Richard. (1989). Sistemas modernos de control. Addison-Wesly.

FLOWER LEIVA, Luis. (1989). Controles y Automatismo elctricos. Teora y


prctica. Telemecanique. Colombia.

GERHARTZ, J. (1995). Neumtica en bucle cerrado: nivel bsico, libro de


trabajo TP 111. Fest didctic.

GOTTFRIED, Byron. (199/). Programacin en C. Ed. McGraw-Hill. Mxico

Hidrulica Proporcional. Manual de estudio. Festo didctic.

Hidrulica proporcional. Nivel bsico. Coleccin de ejercicios con soluciones.


Festo didctic.

HIBBELER Russel Charles, ( 1995 ) Mecnica de materiales. Prentice Hall.


Mxico.

HALLYDAY David, ( 1992 ) Fsica Parte I. Mc Graw Hill. Espaa.

HUBERT, Charles. (1987).Circuitos Elctricos CA/CC. Ed. McGraw-Hill.


Mxico.

MANZANO, Orrego. Juan Jose. ( 1999). Mantenimiento de mquinas elctricas.


Paraninfo.

MANNESMANN REXROTH. (1995). Tcnica de vlvulas proporcionales y de


servovlvulas. Training hidrulico. Compendio 2.

MALVINO, Albert Paul. (1994). Principios de electrnica. Ed. McGraw-Hill

MURRAY, William.(1990) Manual de BORLAND C++. Serie de informtica. Ed.


McGraw-Hill. Mxico

MORRIS, Mano. (1998). Fundamento de diseo Lgica y computadoras. Ed.


Prentice Hall. Mxico.

MORRIS,Mano. (1987). Diseo Digital. Ed. Prentice Hall. Mxico.

MORRIS, Mano. (1992). Lgica Digital y diseo de computadores. Prentice


Hall.

Mc KERVEY, Jhon. ( 1992 ). Fsica para ciencias e ingeniera. Vol 1. Ed. Harla.
Espaa.

NELSON , Victor P. (1996). Analisis y diseo de Circuitos Logicos Digitales. Ed.


Prentice Hall. Mxico, Mxico.

ORLOV, P. (1985). Ingeniera de diseo. Mir.

OGATA, Katsuhito. (1994). Solving control enginering problems with matlab.


Prentice Hall.

OGATA, Katsuhito. (1993). Ingeniera de control moderna. Prentice Hall.

PRATT Terrense W. (1997) . Lenguajes de programacin. Ed. Prentice Hall.


Mxico.

RAMIREZ, Castao. Samuel. (1985). Mantenimiento. Universidad Nacional de


Colombia.

RICHARDSON,

Donal

V.

(1997).

Maquinas

Elctricas

Rotativas

Transformadores. Ed. Prentice Hall. Mxico.

SCHILDT, Herbert. ( 1994). Gua Autodidctica. Serie de informtica. Ed.


McGraw-Hill. Mxico

SMITH, Carlos A. CORRIPIO, Armando B. (1997). Control automtico de


procesos. Limusa.

SHIGLEY, Joseph Eduard, (1990). Diseo en ingeniera mecnica. Mc Graw


Hill.

SHINSKEY, F G. (1996). Sistemas de control de procesos. Mc Graw Hill.

SAVANT, C.J. (1992). Diseo Electrnico. Circuitos y sistemas. Ed. Addison


Wesley.

TAVERNIER, Christian. (1997). Microcontroladores PIC. Paraninfo.

TOCCI, Ronald. (1997). Sistemas Digitales, principios y aplicaciones. Ed.


Prentice Hall. Mxico.

TOMASI, Wayne. (1996). Sistemas de comunicaciones Electrnicas. Ed.


Prentice Hall. Mxico.

TOKHEIM, Roger L.. (1995). Principios Digitales.Ed. McGraw Hill. Mxico,


Mxico.

WAKERLY, John. (1992). Diseo digital, Principios y prcticas. Ed. Prentice


Hall. Mxico, Mxico.

"Certificacin de BPM", nfasis Alimentacin N 8 A o V, Diciembre 99- Enero


2003.

"BPM y HACCP, Cmo controlar la inocuidad", nfasis Alimentacin N 1 Ao


VI, Febrero-Marzo 2000.

Gua para las Buenas Prcticas de Manufactura y Manual de Anlisis de


Riesgos y Puntos Crticos de Control, Editorial El Obrador, Ao 1997.

Maquina semiautomtica para dosificado y empaque


de lquidos en bolsa
Juan Carlos Vizcaino Aponte. Universidad de La Salle

I. Resumen: Sistema semiautomtico de dosificado y


empaque en el cual el usuario cuenta con el tubo (bolsa) de
empaque y necesita dosificar, empacar, sellar y cortar la
dosis necesaria. Alimenta un tanque ubicado en la parte
superior de la maquina por medio de bombeo de un
tanque mas grande que abastece de material a la maquina.
Luego por medio de una jeringa industrial se succiona la
cantidad deseada de empaque para luego dosificarla por
un tubo que dirige el liquido a la zona de empaque en
donde un sistema de selle por medio de mordazas realiza
la accin de sellar y cortar la unidad de empaque. El
control del sistema es realizado por medio de un
computador el cual se encuentra conectado al sistema de
dosificado y empaque del producto por medio del cual se
controla el correcto funcionamiento del sistema en su
conjunto, proveyendo a su vez la posibilidad de planear la
produccin as como supervisando el comportamiento de
la maquina. Es importante resaltar que el sistema es hecho
bajo DOS lo que implica bajos costos de software.
II.

INTRODUCCION

El creciente desarrollo de la industria en el pas, lleva consigo


un amplio desarrollo de la ingeniera que en este podemos
encontrar. Siendo cada vez mayor la oferta de productos y
servicios que para el mbito industrial encontramos.
La industria alimenticia por su parte no se escapa de esta
realidad. No obstante la economa no parece ser el centro del
desarrollo de productos que solucionen las dificultades y
problemas que se encuentran para dar solucin.
Es por ello que se pretende dar a conocer un enfoque mas
practico y funcional referente a la economa tan necesaria de
pequeas y medianas industrias que no cuentan con el capital
suficiente ni poseen la una produccin tan grande como para
exigir inversiones altas para el crecimiento de sus empresas.
La maquina dosificadora y empacadora semiautomtica
presentada a continuacin se desarrollo en torno a esa
economa y desarrollo planteado, dejando en claro que el
sistema ofrece solucin a las necesidades y a su vez introduce
al empresario en un mbito mas productivo y de crecimiento
industrial dndole mayores posibilidades de adquisicin.
III.

Figura 1 (sistema alimentacin de material)


tanque que abastece de producto a la maquina se encuentre
vaci. Para ello se utiliza un control basado en reles y por
supuesto esta implcito el control de nivel en los mismos. De
modo que se hace necesario implementar el sistema de
sensores que nos indiquen los niveles bajo y alto del tanque
pequeo (superior) y el nivel bajo de material (liquido) en el
tanque de abastecimiento.
Para ello se implemento un sistema de sensores tipo resistivo
que se implementa y acondiciona como lo muestra la figura 2.
En este se introduce un par de varillas delgadas (1/8) en el
tanque, unidas a un hilo conductor de modo que la resistencia
medida entre los dos hilos es proporcional al lquido interno
del tanque. Luego de ello electrnicamente se acondiciona
segn sea la necesidad un nivel bajo y nivel alto de liquido a
sensar.

Figura 2 (sensor resistivo y acondicionamiento)

SISTEMA DE ALIMENTACION DE MATERIAL

Se tiene un gran tanque de almacenamiento de material el cual


por medio de un bombeo alimentara un pequeo tanque (50Lt)
ubicado en la parte superior de la maquina como lo muestra la
figura 1. Este sistema de abastecimiento debe controlarse solo
de modo que la maquina no pare de trabajar a menos que el

Figura 3(circuito de control)

2
Teniendo el sensado y acondicionamiento se realiza el circuito
de control que sensa nivel alto y bajo en el tanque superior y
el nivel bajo en el tanque inferior. Este sistema debe controlar
la activacin automtica del bombeo. Figura 3.

Es decir que a nivel electronico debemos conocer el circuito


inversor de giro para motores DC que fue hecho a base de
reles como lo muestra la figura 6.

Para calcular la potencia de bomba que utilizamos tenemos en


cuenta la altura y el dimetro de la tubera por la cual vamos a
transportar el lquido para calcular la presin, luego
calculamos el caudal sabiendo la necesidad en litros por
minuto que necesitamos, as con los datos de presin y caudal
calculamos la potencia de la bomba.
Presin = 10 * peso liquido (N) / rea del tubo (mm) = X bar
Caudal = Lt / m
Presin * Caudal / 15 = Potencia (KW)

IV.

SISTEMA DE DOSIFICACION

El sistema de dosificacin tiene como eje central la jeringa


dosificadora. Como su nombre lo indica, el sistema funciona
cargando la jeringa por medio de succin para luego
inyectarla en el rea de salida del dosificado. Para generar la
succin y empuje de la jeringa se cuenta con un pistn
neumtico de doble efecto y doble vstago con el cual vamos
a proporcionar el empuje de la dosis as como la carga de la
dosis controlada a succionar ya que el doble vstago proveer
en su parte trasera el sistema de sensor por medio del cual
tendremos la posibilidad de elegir una dosis diferente segn
sea requerido como lo indica la figura 4.

Figura 6 (inversor de giro motor DC)


A fin de evitar una sobre carga de los motores en los puntos
abierto y cerrado se dispone un final de carrera en serie al
circuito que impide que se de corriente cuando la vlvula se
encuentre ya abierta o ya cerrada. Como lo muestra la figura
7.

Figura 7 (finales de carrera apertura y cierre de la vlvula)


Figura 4 (Jeringa dosificadora)
Para controlar la salida y entrada de liquido se dispone de
vlvulas de embolo, mal conocidas en el mercado como
registros, que se automatizan por medio de motores para
proporcionar la apertura y cierre de las mismas. Mientras se
succin el liquido una de las vlvulas debe abrirse y al
momento del empuje debe abrirse la otra as que por una
cavidad entra el material y por el otro sale. Estas dos vlvulas
(succin y empuje) deben estar controladas simultneamente
de modo que el sistema funcione correctamente como lo
muestra la figura 5.

Figura 5 (sistema de succin y empuje de la jeringa)

El tanque superior se conecta al punto de succin del


dosificador y el punto de empuje se conecta a la tubera en la
que encuentra alojado el tubo plstico de empaque para el
lquido. El circuito de control dosifica en la succin,
controlada por un final de carrera accionado por el vstago
trasero del pistn, para luego de esto entregar la dosis en el
empuje. Figura 8.

3
Figura 8 (circuito control dosificador)
V.

SISTEMA DE SELLADO

Luego de dosificado el producto a empacar la jeringa


dosificadora entrega la dosis en el empuje por entre un tubo
llegando al sistema de sellado en el que por medio de unas
mordazas hechas en bronce se produce el selle del empaque y
el posterior corte por medio de un fino hilo colocado sobre las
mismas mordazas. El sistema de selle trabaja con un pistn
neumtico que es el encargado de presionar el empaque en el
punto de corte. Para mayor claridad la figura 9 nos muestra el
sistema en su conjunto.

Figura 11 (variacin temperatura con pirometro)


Por esto se recomienda la implementacin de un sistema
PWM el cual garantiza que la resistencia se calienta a una
temperatura mas constante ya que el voltaje aplicado no es
mximo y mnimo, sino proporcional al valor de temperatura
que se desea (figura 12).

Figura 12(PWM)
El siguiente circuito nos da este tipo de seal. Diseado por
medio de sistema PIC nos permite entregar dicha seal PWM
que hace ms eficiente el trabajo de calentamiento de las
resistencias selladoras.

Figura 9 (sistema de sellado)


Un sensor mvil es el encargado de la orden al pistn para
ejecutar el selle. Este sensor puede realizarse por medio de
una foto-celda la cual reacciona a los cambios de luz. El
empaque (plstico) lleva en su elaboracin una franja de
diferente color la cual nos indica el punto en donde debemos
realizar el corte (figura 10). Este sensor puede acondicionarse
como lo muestra la figura 10 dando un valor on/off para el
punto de corte.

Figura 10 (sensor del punto de corte acondicionado)


Las mordazas selladoras trabajan en caliente por lo que
debemos disear un sistema de control para la temperatura.
Dentro de ellas va alojada una resistencia la cual se calienta y
el bronce disipa de forma proporciona el calor. El circuito de
control para esta temperatura comnmente utilizado a sido el
pirometro el cual tiene el problema de generar una variacin
de temperatura inestable como lo indica la figura 11.

El sistema consiste en sincronizar la seal AC de la red con la


seal de salida. Para ello detectamos el cruce de la onda
senosoidal por 0V. Al detectar el cruce por 0 el
microcontrolador debe poseer la forma de interactuar con el
usuario para saber el porcentaje de seal que desea proveer a
la resistencia para el calentamiento. De este modo el restante
del porcentaje se entrega como desactivado a la salida para
luego activar el porcentaje de activado a la salida. La
activacin nombrada consiste en switchar un triac para el paso
y no paso de corriente hacia las mordazas.
Si lo desea puede generar una visualizacin dinmica al
usuario de modo que facilite la programacin de dicho
porcentaje. Para el sincronismo con el cruce por 0 puede
utilizar el mismo transformador que utiliza en su fuente de
voltaje para el circuito. Figura 13

4
Figura 13 (control de temperatura)
A fin de clarificar el desarrollo del programa para el PIC en la
figura 14 se establece el diagrama de flujo que permite el
correcto funcionamiento del circuito electronico.

Figura 14 (diagrama de flujo del programa para PIC)

VI.

INTEGRACION DE PROCESOS

La integracin de toso los sistemas plasmados en este


documento se pueden realizar por medio de un computador
pequeo de capacidad. Es decir con caractersticas de
procesador 486(166MHz), RAM de 16M, monitor
monocromtico, disco de 100Mb, sistema operativo DOS y
teclado estndar. La interfase se realiza por medio del puerto
paralelo acondicionando como lo muestra la figura 15 a los
dems circuitos plasmados en este documento.

Figura 16 (diagrama de flujo programa de control)


El manejo del puerto paralelo en C++ se realiza con la funcin
outportb (puerto,0xXX); en donde puerto corresponde a la
direccin del puerto paralelo utilizada, la cual podemos cargar
con la instruccin int puerto; puerto=peek(0x40,0x08); y el
dato 0xXX es un dato hexagesimal que va desde 0x00 hasta
0xFF o si lo prefiere utilice datos decimales 0 a 255 de la
forma outportb(puerto,45);

VII. CONCLUSION

Figura 15 (interfase puerto paralelo).


El software de control realizado en asembler, o para mayor
facilidad utilizando lenguaje de programacin C. Conociendo
el comportamiento lgico de la maquina se plantea el
diagrama de flujo que desarrolla este proyecto. Figura 16.

El desarrollo de proyectos de ingeniera que proponen la


reutilizacin de tecnologa abandonada o ya desplazada por
nuevos desarrollos, generan para el pas propuestas
econmicas y de fcil acceso. El empresario colombiano
busca eficiencia y eficacia en el desarrollo de sus productos
que puede conseguir fcilmente con elementos prcticos,
econmicos y de fcil manejo que no impliquen una ardua
capacitacin, sino que por el contrario logran la finalidad
esencial que es una ayuda prctica a las dificultades que se
presentan.
El rea de automatizacin enfocada al empaque y dosificacin
de productos es hoy da alta y de mucha competencia La
industria alimenticia, y especficamente la de empaque de
refrescos, yogures y similares necesita prontamente sistemas
econmicos que les permitan crecer como industria

Das könnte Ihnen auch gefallen