297
Universidad de La Salle Universidad de La Salle Ciencia Unisalle Ciencia Unisalle Ingeniería en Automatización Facultad de Ingeniería 10-2007 Máquina semiautomática para dosificado y empaque de líquidos Máquina semiautomática para dosificado y empaque de líquidos en bolsa en bolsa Juan Carlos Vizcaino Aponte Universidad de La Salle, Bogotá Follow this and additional works at: https://ciencia.lasalle.edu.co/ing_automatizacion Part of the Mechanical Engineering Commons Citación recomendada Citación recomendada Vizcaino Aponte, J. C. (2007). Máquina semiautomática para dosificado y empaque de líquidos en bolsa. Retrieved from https://ciencia.lasalle.edu.co/ing_automatizacion/100 This Trabajo de grado - Pregrado is brought to you for free and open access by the Facultad de Ingeniería at Ciencia Unisalle. It has been accepted for inclusion in Ingeniería en Automatización by an authorized administrator of Ciencia Unisalle. For more information, please contact [email protected].

Máquina semiautomática para dosificado y empaque de

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Máquina semiautomática para dosificado y empaque de

Universidad de La Salle Universidad de La Salle

Ciencia Unisalle Ciencia Unisalle

Ingeniería en Automatización Facultad de Ingeniería

10-2007

Máquina semiautomática para dosificado y empaque de líquidos Máquina semiautomática para dosificado y empaque de líquidos

en bolsa en bolsa

Juan Carlos Vizcaino Aponte Universidad de La Salle, Bogotá

Follow this and additional works at: https://ciencia.lasalle.edu.co/ing_automatizacion

Part of the Mechanical Engineering Commons

Citación recomendada Citación recomendada Vizcaino Aponte, J. C. (2007). Máquina semiautomática para dosificado y empaque de líquidos en bolsa. Retrieved from https://ciencia.lasalle.edu.co/ing_automatizacion/100

This Trabajo de grado - Pregrado is brought to you for free and open access by the Facultad de Ingeniería at Ciencia Unisalle. It has been accepted for inclusion in Ingeniería en Automatización by an authorized administrator of Ciencia Unisalle. For more information, please contact [email protected].

Page 2: Máquina semiautomática para dosificado y empaque de

TESIS

MAQUINA SEMIAUTOMATICA PARA DOSIFICADO Y EMPAQUE DE

LIQUIDOS EN BOLSA

PRESENTADO POR

JUAN CARLOS VIZCAINO APONTE

UNIVERSIDAD DE LA SALLE

ING. DISEÑO Y AUTOMATIZACION ELECTRONICA

BOGOTA, OCTUBRE 2007

Page 3: Máquina semiautomática para dosificado y empaque de

MAQUINA SEMIAUTOMATICA PARA DOSIFICADO Y EMPAQUE DE

LIQUIDOS EN BOLSA

PRESENTADO POR

JUAN CARLOS VIZCAINO APONTE

UNIVERSIDAD DE LA SALLE

ING. DISEÑO Y AUTOMATIZACION ELECTRONICA

BOGOTA, OCTUBRE 2007

Page 4: Máquina semiautomática para dosificado y empaque de

TABLA.DE.CONTENIDO INTRODUCCION 1 PLANTEAMIENTO.DEL.PROBLEMA 1 1.1 ALCANCE.DEL.PROYECTO 3 1.2 FORMULACION.DEL.PROBLEMA 4 2 JUSTIFICACION.DEL.PROYECTO 5 3 OBJETIVOS 6 3.1 OBJETIVO.GENERAL 6 3.2 OBJETIVOS.ESPECIFICOS 6

4 PRESENTACION.PRELIMINAR.ESQUEMATICA. DEL.SISTEMA 7

SISTEMAS.MECANICOS 9 5 SISTEMA.DE.ALIMENTACION.DE.MATERIAL 9 5.1 DESCRIPCION.DEL.PROCESO 9 5.2 TANQUE.DE.ALIMENTACION.PRINCIPAL 9 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 6 SISTEMA.DE.AIRE.A.PRESION 13 6.1 CALCULO.DEL.COMPRESOR 13 6.1.1 CONDUCCION.DE.AIRE 13 6.1.2 CAUDAL 13

Page 5: Máquina semiautomática para dosificado y empaque de

6.1.3 PRESION 15 6.1.4 POTENCIA 16 7 ACTUADORES 17 7.1 ACTUADORES.ELECTRICOS 17 7.2 ACTUADORES.NEUMATICOS 17 7.3 VÁLVULA.3/2.PARA.LOS.ACTUADORES 17 8 VALVULAS.PARA.EL.PASO.DE.LÍQUIDO 19 8.1 ELECTROVALVULA.PARA.SALIDA.Y.ENTRADA. DE.LÍQUIDO.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 VÁLVULA.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 9 SISTEMA.DE.DOSIFICACION 30 9.1 JERINGA.INDUSTRIAL.(ESTRUCTURA.BASICA. DE.DOSIFICADOR) 30 9.1.1 ENVASE.DE.DOSIFICACION 30

Page 6: Máquina semiautomática para dosificado y empaque de

9.1.2 VÁSTAGO.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 UBICACIÓN.DOSIFICADOR 37 10.1 ESTRUCTURA.DE.SOPORTE.DEL.DOSIFICADOR 37 10.2 UBICACIÓN.HORIZONTAL 37 10.3 UBICACIÓN.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 12 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

Page 7: Máquina semiautomática para dosificado y empaque de

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

Page 8: Máquina semiautomática para dosificado y empaque de

13.9.2.1 TIPO.PNP 61 13.9.2.2 TIPO.NPN 61 13.9.3 INDUCTIVOS.Y.CAPACITIVOS 61 13.9.3.1 ESQUEMA.INDUCTIVO 62 13.9.3.2 ESQUEMA.CAPACITIVO 63 13.9.4 AUTOREFLEX.Y.ULTRASONICO 63 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 14.2.3 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.ELECTROVÁLVULA.D.C.y.A.C 74 15.2.2 ACCIONAMIENTO.DE.LA.ELECTROVÁLVULA.POR.PC 75

Page 9: Máquina semiautomática para dosificado y empaque de

15.3 ACCIONAMIENTO.PARA.VALVULAS.DE.EMBOLO 76 15.3.1 ACCIONAMIENTO.MECANICO 76 15.3.2 ACCIONAMIENTO.CON.ACTUADOR.NEUMÁTICO. ROTATIVO 76 15.3.3 ACCIONAMIENTO.LINEAL.NEUMATICO 77 15.3.4 ACTUADOR.LINEAL.ELECTRICO.PIÑON-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.VÁSTAGO 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

Page 10: Máquina semiautomática para dosificado y empaque de

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 DISEÑO.DE.LA.ELECTRONICA.DE.INTERFASE.AL.PIC 97 16.6.3.1 DISEÑO.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 DESCRIPCIÓN.DEL.PC.UTILIZADO 114 18.2 INTERFASE.PARA.SALIDAS.PC 115

Page 11: Máquina semiautomática para dosificado y empaque de

18.2.1 ACONDICIONAMIENTO.PARA.NIVELES.DC 116 18.2.2 ACONDICIONAMIENTO.PARA.SEÑALES.A.C 116 18.2.3 CONTROL.ELECTROVALVULA.DE.LÍQUIDO 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.LÍQUIDO.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 21.4.1 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 21.8 CODIGO DE PROGRAMA PIC CONTROL DE TEMPERATURA 159 21.9 CODIGO.FUENTE.DEL.SOFTWARE.CONTROL.DE.LA. MAQUINA 166

Page 12: Máquina semiautomática para dosificado y empaque de

21.9.1 PROGRAMA.PARA.PROBAR.LOS.DIFERENTES. ACCIONISMOS.DEL.SISTEMA 166 21.9.2 PROGRAMA.PARA.MANEJO.DE.TIEMPOS. CONFIGURACION.DE.LA.MAQUINA 167 21.9.3 PROGRAMA.PRINCIPAL.CON.ARREGLOS.PARA.UNA. SIMULACION 172 21.10 MANUAL DE TRABAJO PARA SOFWARE DE INVENTARIOS DE FACTURACION 176 21.10.1 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.DISEÑO 256 23 CONCLUSIONES 266

Page 13: Máquina semiautomática para dosificado y empaque de

24 BIBLIOGRAFIA 269 TABLA DE FIGURAS FIG 1 ESQUEMA GENERAL DE LA MAQUINA 7 FIG 2 SISTEMA DE ALIMENTACION MATERIAL 7 FIG 3 ESQUEMA GENERAL DEL SISTEMA 8 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

Page 14: Máquina semiautomática para dosificado y empaque de

FIG 19 ESTRUCTURA QUE EMPUJA EL LIQUIDO ADAPTADA AL CILINDRO 30 FIG 20 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 UBICACIÓN DOCIFICADOR Y TANQUE DE ALMACENAMIENTO 37 FIG 29 UBICACIÓN 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 FIG 37 CIRCUITO DE CONTROL SISTEMA DE ALIMENTACION 45 FIG 38 CIRCUITO DE POTENCIA SISTEMA DE ALIMENTACION 46 FIG 39 ESQUEMA REFERENTE SENSOR INFRAROJO 48 FIG 40 CIRCUITO DE CONTRO SENSOR INFRAROJO 48

Page 15: Máquina semiautomática para dosificado y empaque de

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 SEGÚN DIN 4007 60 FIG 58 CONEXIONADO PNP Y NPN 61 FIG 59 TIPO PNP 61 FIG 60 TIPO NPN 62 FIG 61 UBICACIÓN SENSOR INDUCTIVO 62 FIG 63 UBICACIÓN SENSOR CAPACITIVO 63 FIG 64 MODELO AUTOREFLEX 64 FIG 65 ESQUEMA DE INSTALACION AUTOREFLEX 64

Page 16: Máquina semiautomática para dosificado y empaque de

FIG 66 CELDA DE CARGA 65 FIG 67 UBICACIÓN DE CELDA 65 FIG 68 AMPLIFICADOR.DE.INSTRUMENTACION 66 FIG 69 CIRCUITO DE CONTROL APLICANDO A.I 68 FIG 70 UBICACIÓN 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

Page 17: Máquina semiautomática para dosificado y empaque de

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.VÁSTAGO 91 FIG 74 CONTROL.Y.MANDO.DEL.PISTON 91 FIG 75 CIRCUITO.DE.CONTROL.PARA.EL.DOSIFICADOR. COMO.PRODUCTO.INDEPENDIENTE 92 FIG 76 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 DISEÑO.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 UBICACIÓN 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 FIG 92 OSILACION ON/OFF ALREDEDOR DE PUNTO DE EQUILIBRIO 107

Page 18: Máquina semiautomática para dosificado y empaque de

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

Page 19: Máquina semiautomática para dosificado y empaque de

INTRODUCCION

La creciente tasa de desarrollo científico y tecnológico alcanzada por las

sociedades del tercer milenio, ha permitido un notable aumento del nivel de

vida de los habitantes satisfaciendo las necesidades mas básicas, pero a la vez

aumentando la brecha económica 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 aplicación de las técnicas de mando y control a los mas

variados tipos de maquinas y procesos es factor fundamental para el

crecimiento tecnológico como fuente de conocimiento, para la generación de

riqueza al mejorar la calidad de bienes y servicios con incrementos de la

producción y la reducción de costos, así como, para la comodidad y bienestar

del ser humano al liberarlo de tareas peligrosas, monótonas y repetitivas.

La creciente complejidad lleva a que surja una disciplina aun más dinámica,

que integra diversos campos de la ingeniería como son la mecánica, la

electrónica, el control, la automatización, la robótica y los sistemas de

información lo que incluye software de programación y aplicación.

El presente proyecto aplica en forma practica los conocimientos adquiridos

presentando fundamentalmente un ejemplo de los aspectos conceptuales

técnicos y de ingeniería que ofrece el campo de la dosificación de productos y

que pueden ser fácilmente adaptados a las necesidades del país con el fin de

mejorar la eficiencia y calidad de los procesos productivos, especialmente en la

pequeña y mediana industria que cuenta con menores recursos técnicos,

humanos y de capital.

Igualmente, la ejecución del proyecto representa para mí la ocasión de

materializar mis conocimientos con el ánimo de contribuir directa o

indirectamente, con un aporte para el progreso académico, tecnológico, social y

económico de la comunidad.

Page 20: Máquina semiautomática para dosificado y empaque de

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

opciones que se tomaron en cuenta para el correcto diseño del proyecto.

Especificando con claridad en cada uno de los aspectos, sus posibilidades de

cambio y posterior funcionamiento de las diferentes partes en función de los

requerimientos de un cliente final. Además se hacen los anexos pertinentes con

información 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 investigación e

implementación de los temas propuestos como finalidad. Se tiene como

propósito dar a conocer los desarrollos que se han tenido en cuenta durante el

diseño de la maquina y los respectivos sistemas de control, así como el

software aplicado que se ha generado con la realización del mismo.

También se plantean algunas soluciones a los distintos problemas que

surgieron durante este período de investigación. Así mismo estoy exponiendo

teóricamente el proceso de desarrollo lo que incluye paso a paso todo el

perfeccionamiento de una máquina 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

resultaría más conveniente en términos de eficiencia del sistema total en toda

su complejidad.

Page 21: Máquina semiautomática para dosificado y empaque de

1. PLANTEAMIENTO DEL PROBLEMA

Se tiene un material líquido 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 diseña el sistema de bombeo para la carga del mismo. Luego

de que ya tenemos el líquido en la parte superior optamos por implementar la

dosificación. Inicialmente se piensa que la gravedad es suficiente para que con

el simple hecho de abrir una válvula el líquido fuese entregado a la sección de

empaque y de manera eficiente la dosificación sería controlada por el tiempo

de apertura de la válvula dosificadora, tomando claro está, factores implícitos

como el nivel de liquido, la presión, velocidad de salida para el liquido logrando

dosis de gran exactitud. Este sistema resultaría eficiente con líquidos de baja

viscosidad con el fin de lograr un dosificado rápido.

Es evidente que en el proceso de dosificación, además de los factores

implícitos 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 compactación (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 líquido que se

tenga en el tanque y sus condiciones de estado, proporciona una dosificación

de exactitud y sin alterar los factores de control en el dispositivo encargado.

Consiste en implementar una dosificación por succión. En este tipo de

dosificación se pretende hacer una jeringa industrial (acero inoxidable) de

modo que se succiona el producto líquido 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

tubería adaptada en la parte de salida de la dosificación hacia la zona de

empaque. En esta dicha tubería previamente el usuario ha metido un tubo de

Page 22: Máquina semiautomática para dosificado y empaque de

papel de empaque. Esta parte del proceso debe hacerse manualmente ya que

ese punto de investigación no se ha plasmado en los objetivos de este

proyecto; aunque se procurara que un sistema existente para realizar el

empaque automáticamente pueda ser fácilmente adaptable aislando este punto

de la maquina como elemento adicional. Además esta tubería debe ser

fácilmente adaptable a tamaños distintos de empaque en cuanto a diámetro y

longitud. Dependiendo del tamaño y la cantidad de estos se permitirá el control

del numero de ciclos de empacado que puede realizarse sin detención.

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 después 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 más eficiente que los implementados en la

actualidad (de bajo costo y mayor eficiencia). También se debe tener en cuenta

que el tipo de material exigirá no solo temperaturas específicas 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 económica solución 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

parámetros que la empresa requiere para el correcto proceso. La computadora

utilizada debe ser de un perfil lo más bajo posible de modo que la economía de

este elemento es un factor de mercadeo que genera una visión más alta al

proyecto. El software debe guardar alguna información del proceso así como

ayudar en algunos procesos básicos que pueden eventualmente utilizar el

usuario como procesos de venta, consulta y manejo de inventarios y

Page 23: Máquina semiautomática para dosificado y empaque de

producción 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 tecnología que puede implementar

El proyecto plantea que cada uno de los sistemas ya expuestos sea adaptable

a las necesidades de modo que serán en su defecto sistemas diferentes que

pueden integrarse al acomodo del cliente y los recursos económicos asociados.

1.1 ALCANCE DEL PROYECTO

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

tienen las pequeñas y medianas empresas de la industria alimenticia en cuanto

a dar un dosificado exacto en el empacado de líquidos 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

producción con altos grados de certeza, ya que existen factores ergonomicos y

emocionales que impiden tal planificación.

Por otro lado esta dedicado a empresas que no cuentan con el capital para

adquirir dosificadores de alta tecnología que en el mercado se encuentran a

costos muy elevados

Por eso se trata de hacer un prototipo económico pero que su funcionamiento

sea viable y nos de un grado aceptable de exactitud para la buena realización

de las labores de dosificación de líquidos alimenticios.

Se tratara al máximo de solucionar cada uno de los problemas que se conocen

en el proceso de dosificación de líquidos, sin embargo se deja claro que de no

ser posible llegar a la meta con la construcción física del proyecto en su

totalidad, lo hecho será aporte suficiente para culminar el proyecto

inmediatamente los presupuestos sean suplementados.

Page 24: Máquina semiautomática para dosificado y empaque de

1.2 FORMULACION DEL PROBLEMA

Como generar sistemas de dosificación económicos que permitan un desarrollo

de la industria del país. A su vez generar bases de conocimiento que permitan

al empresario atacar puntos críticos de la producción implementando algunas o

sino todas las soluciones planteadas en este documento.

Page 25: Máquina semiautomática para dosificado y empaque de

2. JUSTIFICACION DEL PROYECTO

El propósito de realizar este proyecto es dar una solución sencilla y económica

a las pequeñas y medianas empresas de la industria que laboran con líquidos

alimenticios. La industria “H y C” por su parte en compromiso verbal, pretende

comercializar el producto y/o los productos que la elaboración de este proyecto

han generado.

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

de tesis aplicado en la industria del país como solución a aquellas empresas

que dosifican líquidos alimenticios creando un producto llamativo y tecnológico

que se acomode mucho mejor al bolsillo y las necesidades; A la vez se sienta

un precedente, dada la elaboración basada en una buena eficiencia y la

notable reducción de costos que pretenden plasmarse, referentes a los que el

mercado genera actualmente en sistemas con las mismas características del

proyecto.

Se plasman conocimientos adquiridos que han sido puestos en practica en

cuanto a electro neumática, electrónica general, electrónica de interfase y

acondicionamiento, mecanismos, la programación de bajo y medio nivel para el

manejo de señales de control y una amplia investigación sobre el tema de

dosificado que permitió establecer los puntos críticos de diseño a fin de lograr

los objetivos.

Page 26: Máquina semiautomática para dosificado y empaque de

3. OBJETIVOS

3.1 OBJETIVO GENERAL

Diseñar y construir un sistema semiautomático para el dosificado de

líquidos, a su vez el empaque en bolsa, selle y corte.

3.2 OBJETIVOS ESPECIFICOS

Diseñar el sistema de alimentación de material

Diseñar el sistema de dosificación de líquido.

Diseñar un sistema para el sellado y corte.

Diseñar un sistema de control para la temperatura del selle

Diseñar un sistema de software que permita manejar información para el

control de producción e inventarios.

Page 27: Máquina semiautomática para dosificado y empaque de

4. PRESENTACION PRELIMINAR ESQUEMATICA DEL SISTEMA

Fig 1.Esquema general de la maquina

Un tanque de alimentación 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 alimentación de material

El tanque principal (1) alimenta por gravedad el sistema de dosificación (4) el

cual por medio de un acople, a una jeringa industrial (5), un pistón neumático

(6) se encarga de dosificación proporcionando succión para luego generar

Page 28: Máquina semiautomática para dosificado y empaque de

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 líquido. 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 pistón neumático (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 según los requerimientos de cantidad de

dosificación y tipo de material de empaque. Adicionalmente el PC posee un

pequeño sistema de información que le permite manejar su producción y

ventas.

Page 29: Máquina semiautomática para dosificado y empaque de

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

más pequeñas. Este pequeño tanque (30, 40, 50 litros) alimenta por gravedad

el liquido (producto a empacar) al sistema de dosificación. De tal modo que

nuestro gran tanque suministra por medio de una bomba (eléctrica) el liquido al

tanque menor. Este sistema de los tanques y su correspondiente alimentación

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 lógica del control del sistema principal dado que el circuito de control

de este subsistema se diseño con miras en que el control fuese al control

propio del sistema general de maquina.

5.2 TANQUE DE ALIMENTACION PRINCIPAL

El tanque de alimentación principal hace referencia a todo el conjunto en el que

se deposita el líquido ya listo para el seguido empaque. Este sistema consiste

en una motobomba que debe cargar un tanque mas pequeño ubicado en la

parte superior de la maquina que proporciona la entrada del liquido al punto

dosificador por gravedad.

Page 30: Máquina semiautomática para dosificado y empaque de

Fig 4. Tanque de alimentación principal y secundario. Bomba de alimentacion

5.3 CALCULO DE LA BOMBA (MOTOBOMBA)

La bomba es la encargada de suministrar un impulso al líquido para ser

transportado automáticamente hacia un nivel de potencial mas elevado. Es

decir subir nuestro líquido al tanque pequeño superior. En este proceso

investigativo para la correcta adquisición de la bomba, es evidente que existe

gran variedad de modelos funcionales en cuanto al tema. Lo más

recomendable será obviamente acogerse a la oferta comercial existente.

En la sección de anexos encontraremos una breve información 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 específicos del sistema los cuales se nombran a

continuación.

5.3.1 Las partes que entran en contacto con el líquido deben ser de

acero inoxidable ya que es el único que cumple con las características

técnicas de durabilidad, resistencia y sanidad. Ya que resulta un tanto

costoso su fabricación por parte nuestra, el mandarla fabricar resulta ser

un tanto más económico y mas aun acceder a la oferta comercial.

5.3.2 La presión 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

Page 31: Máquina semiautomática para dosificado y empaque de

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

diámetro de la tubería con lo cual obtendremos la cantidad máxima de

liquido que en un momento dado puede estar alojado en la tubería. Con

ello podeos encontrar el peso (fuerza) que tendrá el liquido y también la

presión que esta columna de liquido genera en contra presión a la

presión y fuerza que ejerce la bomba sobre el liquido.

P = F / A ; F = mg ; A = Área de tubería.

Un tubo de 1” = 2,5cm de diámetro y una altura de más o menos 2

metros.

La fuerza es proporcional a la viscosidad del líquido. En laboratorio más

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 Presión = 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

mínimo. Tomamos comercialmente 5 a 10 psi como la presión máxima

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

presión tampoco es necesario en vista que se utiliza un punto abierto a

la entrada del líquido (sin válvula 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

Page 32: Máquina semiautomática para dosificado y empaque de

implica que de la señal de los sensores dependerá el encendido y

apagado de la bomba.

5.3.4 En cuanto al caudal que depende directamente del diámetro de la

tubería y el flujo proporcionado en la bomba. Este caudal debe ser

suficiente para no detener en ningún momento el trabajo realizado con la

maquina así que queda este punto relevado al calculo en función 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

mínimo 120 W. Recuerde que un H.P = 745W. lo que aproxima a

1/4H.P

Page 33: Máquina semiautomática para dosificado y empaque de

6. SISTEMA DE AIRE A PRESION

6.1 CALCULO DEL COMPRESOR

El compresor es el encargado de suministrar el aire a presión necesario para

manejar nuestro circuito neumático.

Existen gran variedad de modelos funcionales en cuanto al tema. Lo más

recomendable será obviamente acogerse a la oferta comercial existente.

El compresor que se utiliza para este proyecto debe cumplir con algunos

requisitos específicos del sistema los cuales se nombran a continuación.

6.1.1 La transmisión de aire se hace por medio de manguera flexible y

se procura que las distancias entre el punto de distribución de aire y el

elemento que la necesita sea lo mas corta posible.

6.1.2 Calculo del caudal. Para el cálculo del consumo de aire se deben

sumar uno a uno el consumo de los elementos de trabajo que estarán

presentes. Dado que en este caso el sistema de control se hace

eléctricamente los únicos elementos que consumen aire a presión serán

los cilindros utilizados que básicamente serán 2. Las válvulas de paso

(electrovalvulas) no son tomadas en cuenta ya que la pérdida es mínima

y se tienen más en cuenta en el referido a las caídas de presión.

Suponiendo que no posemos información de consumo estimada por el

fabricante podemos realizar el cálculo de consumo neumático (el caudal) de

la siguiente manera.

Page 34: Máquina semiautomática para dosificado y empaque de

Fig 5 .Medidas del cilindro neumatico

Sea V = volumen. PI = 3.1416. L = longitud D = diámetro.

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 * PI Q = v donde la velocidad es la deseada de

trabajo.

Desde este punto de vista bastaría con calcular los volúmenes, áreas,

velocidades de trabajo deseadas o en su defecto el tiempo de ciclo

requerido.

Por otro lado podemos tener 2 casos básicamente. 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 tuberías de distribución 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 tubería deben ser

tenidas en cuenta ya que por efectos de condensación 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 sección se explica un poco más a fondo el caso

en que una red de aire proporciona el aire a presión en el punto deseado

y los factores que debemos tener en cuenta para la elaboración de dicha

red.

Page 35: Máquina semiautomática para dosificado y empaque de

Para un mismo caudal el área del pistón es inversamente proporcional a

la velocidad lo que implica que en el deseo de un aumento de la

velocidad podríamos proceder con disminuir el diámetro utilizado para el

pistón lo que generara un aumento en la velocidad de desplazamiento.

6.1.3 La presión de trabajo se maneja a nivel de estándares.

Generalmente se utilizan 6bar o 10bar. Para nuestro caso la presión

requerida no es muy alta y se puede trabajar sobre el estándar. Mas sin

embargo en la red de aire se incluye un regulador de presión el cual

puede graduarse manualmente a la presión que se desee de trabajo.

Dado que los niveles de trabajo son estandarizados los elementos de

paso como las válvulas y los pistones deben incluir en la hoja técnica los

niveles máximos de presión a los que pueden ser sometidos. El tipo de

líquido entre más 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 presión para el pistón de dosificación será P = 50N / 0.002m² =

25000 Pa = 25000/10000 bar = 0.4bar como presión mínima requerida.

Para el pistón 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 presión mínima

requerida. Para la presión que utiliza el sistema aparte del cálculo para

requerimientos de presión en los distintos puntos de accionamiento

debemos tener en cuenta unas pequeñas caídas de presión originadas

en el camino de distribución así como en los elementos de conmutación

para el paso del aire. Por lo tanto y teniendo en cuenta nuestro sistema

agregamos algo menos de 1bar como caídas máximas de presión y es

teórico el uso de esta cantidad para caídas de presión en líneas

principales lo que incluye el FRL que se explica mas adelante. Para un

cálculo exacto nos podemos remitir a las tablas que ofrecen los

Page 36: Máquina semiautomática para dosificado y empaque de

fabricantes en donde encontramos detallado el factor caída de presión

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 presión 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 mínimo 30 W. recuerde que un H.P

=745W lo que implica un motor de menos de 1/4 H.P.

Page 37: Máquina semiautomática para dosificado y empaque de

7 ACTUADORES

7.1 ACTUADORES ELECTRICOS

Los actuadores eléctricos son básicamente los motores. Para el caso en

cuestión se ha tomado la decisión de utilizar motor D.C ya que estos en

relación 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 más pequeño

físicamente. Por otro lado el control de velocidad, sentido de giro y posición

resultan más 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 comprensión

de el diseño de este tipo de actuadotes consulte el anexo seccion 16.

7.3 VÁLVULA 3/2 PARA LOS ACTUADORES

La aplicación de válvula 3/2 es básicamente en los actuadores ya que al aplicar

fuerza con aire a presión 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 válvula 3/2 vemos como el aire en

una posición puede fluir en una dirección y en la otra posición puede fluir en la

dirección 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 válvula 3/2

Page 38: Máquina semiautomática para dosificado y empaque de

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

Como parámetros técnicos debemos conocer la potencia neumática soportable

en la electroválvula para lo que debemos conocer la presión y el caudal de

trabajo a la que va a someterse. Tenga en cuenta que la ficha técnica nos da la

presión máxima que la válvula soporta y en función a ello podemos hallar el

caudal máximo que tendremos por el elemento. El consumo de energía es

referido a la potencia neumática, lo que nos da un equivalente en dinero del

recurso energético que se consume. Así que la eficiencia del elemento se

refiere precisamente a la caída de presión que el elemento proporciona al

circuito y la velocidad de flujo perdida por efectos de rozamiento en el

elemento.

Page 39: Máquina semiautomática para dosificado y empaque de

8. VALVULAS PARA EL PASO DE LÍQUIDO.

Para la selección de las válvulas se deben tener en cuenta 2 aspectos

importantes. Tipo de válvulas existentes y la forma de conmutación.

En cuanto al tipo de válvulas tenemos las electrovalvulas las cuales se

conmutan con señales eléctricas, encontramos también las válvulas de embolo

2 vías y 3 vías, las válvulas de cortina, mariposa y aguja. Estos últimos tipos de

válvulas comercialmente presentan accionamientos de tipo manual, aunque

muchas de las empresas proveedoras de esto productos ofrecen sistemas para

la conmutación adaptables al tipo de necesidad y condición preestablecida por

el cliente. A fin de clarificar en este aspecto se hace referencia explicita de los

diferentes tipos de válvula para el control de paso de liquido y así mismo los

distintos sistemas propuestos de conmutación que son viables a implementar.

8.1. ELECTROVALVULA PARA SALIDA Y ENTRADA DE LÍQUID O AL

DOSIFICADO.

El funcionamiento y accionamiento de la electroválvula es presentado

posteriormente en el capitulo relacionado a los sistemas de control para

actuadores neumáticos en los que por medio de la electroválvula una señal

eléctrica se traduce en una conmutación de válvula. Esta válvula se consigue

en el mercado. Inicialmente se pensó en trabajar directamente con electro

válvulas elaboradas en acero inoxidable de modo que su implementación

resultaba realmente sencilla. Producto del trabajo de campo realizado al cotizar

los materiales que se encuentran en el mercado de electro válvulas en acero

inoxidable y los requerimientos de diámetro para el paso de liquido deseados,

se llego a la conclusión 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 electroválvula es decir su

activación será por causa de una señal de voltaje que se debe aplicar a la

bobina del elemento y que permite la conmutación.

Page 40: Máquina semiautomática para dosificado y empaque de

Las cavidades para el paso de fluido que las electrovalvulas ofrecen son muy

pequeñas y por lo general es complicado conseguir una válvula eléctrica que

presente el sistema de electroválvula común utilizado para el paso de aire a

presión en donde los efectos un electroimán posibilitan el taponamiento del

paso pero de un espacio muy reducido ya que de lo contrario la bobina de

electroimán requerirá mucha mas fuerza lo que implica los costos se eleven

desfavoreciendo el sentido costo-beneficio. Es por esta misma razón, que

comercialmente cuando se requieren diámetros grandes para el paso de líquido

se remiten a un sistema de activación acoplado a las válvulas comerciales que

poseen un sistema manual de activación. Siendo así, se debe comprar una

válvula de acción manual en acero inoxidable he implementarle a ella un

sistema especial que permite el cierre y apertura de la misma, lo que resulta

mas económico.

8.2 CHEQUES

8.2.1 CHEQUE VENTANA

El cheque tiene su equivalente eléctrico que en el diodo. Así que solo permite

flujo en una sola dirección 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 análisis partiendo de esta analogía. Las

referencias técnicas de un cheque nos deben decir la presión que soporta al

dar paso. La presión máxima que soporta en sentido inverso de conducción de

flujo y el diámetro de acople para adaptar algún punto especifico. De igual

forma ofrece caídas de presión y velocidad pero en general estas pérdidas son

muy pequeñas y en la mayoría de ocasiones despreciable.

Page 41: Máquina semiautomática para dosificado y empaque de

Así que la ecuación para el fluido que representa la presión mínima para

vencer la inercia del cheque será Ff (fuera del fluido) > Tr (torque de la bisagra

rotora);

Ff = P * A así que P= presión A = area, la presión debe ser tal que vensa dicho

torque que es muy pequeño.

Fig 8.Funcionamiento cheque ventana

Note que en el punto de máximo taponamiento el torque producido por el flujo

tiene un máximo así que el punto critico es en los puntos intermedios de

recorrido para el elemento tapón. Es decir que en cierto caso el cheque podría

quedar en puntos intermedios es decir ni totalmente abierto ni totalmente

cerrado.

Dado que la fuerza sobre la superficie se distribuye unifórmenle encontramos el

punto de mayor torque en la parte mas alejada, dado matemáticamente

generamos una sumatoria podemos encontrar el punto intermedio equivalente

dada la linealidad que representa la ecuación 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

Page 42: Máquina semiautomática para dosificado y empaque de

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 líquido. Para el ciclo en que si pasa el agua

debemos tener las consideraciones de mínima presión necesaria. Los resortes

poseen cada uno su constante de resorte k. así que la ecuación P*A > 2kX

nos dice que la presión debe tener un umbral mínimo tal que vensa la

resistencia que oponen los resortes en el sentido de conducción (2kX

suponemos que los resortes son totalmente iguales). Note que este modelo de

cheque nos provee de un flujo de líquido menor y el mantenimiento sanitario es

mucho mas complicado.

8.3 VALVULAS DE EMBOLO

8.3.1 VALVULAS DE EMBOLO 2 VIAS

Es una válvula 2/2, dos vías, dos posiciones. La válvula de embolo es de uso

común en la vida cotidiana. Una esfera hueca se aloja en una cavidad esférica

también hueca que posee un par de adaptaciones a lado y lado para ser puesta

como interruptor de paso y no paso de un fluido. También las hay del tipo

cilindro con la misma funcionalidad uno dentro de otro.

La válvula esférica en su comportamiento puede verse como una cilíndrica ya

que las ranuras son únicamente laterales y en la parte superior es totalmente

maciza.

Page 43: Máquina semiautomática para dosificado y empaque de

8.3.1.1 ESQUEMA DE FUNCIONAMIENTO

Fig 11.Funcionamiento válvula embolo

La válvula comercial de estudio tiene una articulación rotacional que por medio

de un acople tipo poligonal, permite que una fuerza externa aplicada en el

eslabón acoplado produzca un torque sobre el embolo que le permite girar para

producir la conmutación. Así que se comporta como una transmisión tipo

palanca. El giro que debe proporcionarse para la conmutación es de 90º,

girando nuevamente los mismos 90º en sentido inverso para la reconmutación.

La válvula presenta el inconveniente del desgaste de los empaques por lo que

los expertos recomiendan utilizar otro sistema más eficiente. Con esta válvula

tenemos pues el inconveniente del cambio de esta en periodos de 6 a 8 meses.

Otro inconveniente es el torque exigido por la válvula para ser conmutada. La

fuerza que un actuador externo debe ejercer resulta ser muchas veces mas

elevada de lo que otro tipo de válvula solicita.

Cabe resaltar que el torque máximo se realiza en los puntos de máxima

conmutación, es decir totalmente abierta (para cerrarla) o totalmente cerrada

(para abrirla), es en donde se presentan los puntos de máximo esfuerzo para el

mecanismo.

8.3.2 VÁLVULA DE TRES VIAS

Es una válvula 3/2 tres vías dos posiciones. La válvula de tres vías es una

válvula de embolo con el mismo mecanismo que la nombrada anteriormente,

solo que para este caso el la válvula posee tres orificios por lo que la válvula es

capaz de conectar una vía con las otras dos pero no al mismo tiempo. El

usuario selecciona el orifico a conectar empleando el mismo mecanismo

Page 44: Máquina semiautomática para dosificado y empaque de

aunque el embolo internamente posee una construcción diferente porque el

embolo posee tres orificios. Igualmente el giro de conmutación es de 90º

Fig 12.Válvula tres vias (catalogo corbeta)

Es posible que al mover el embolo encontraremos una tercera posición que es

cuando las vías quedan taponadas impidiendo el paso de fluido, esta es una

posición intermedia que puede ser también 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 dirección (2 entradas 1

salida) o el caso en que una vía se utiliza de entrada y salida. Mientras que las

otras dos vías son una entrada y una salida. (1 entrada, 1 salida, 1

salida/entrada).

Fig 13.Funcionamiento válvula 3 vias

8.3.3 MARIPOSA

Fig 14.Valvula mariposa(catalogo corbeta)

Page 45: Máquina semiautomática para dosificado y empaque de

La válvula de mariposa aunque no posee embolo como tal, presenta el mismo

sistema de accionamiento para la conmutación que las válvulas de embolo. Así

que los circuitos de control son los mismos y son igualmente 90º de giro para

conmutar la válvula de mariposa.Tenga en cuenta que en este caso el torque

de operación es mucho mas bajo y es por esto que la válvula es mas

recomendable. Aunque resulta algo complicado de conseguir en el mercado y

es mas costosa que la válvula anterior. Los análisis dinámicos presentan la

misma ecuación 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 ecuación

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

También podemos afirmar que el torque aplicado debe ser mayor al torque

generado por la inercia del elemento en conjunto con la fricción que ofrecen los

materiales con que se realiza el empaque de la válvula (elemento que no

permite escapes de fluido)

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

Donde k es básicamente la constante de inercia que posee el movimiento y

donde Fr es la fuerza de rozamiento producida por la fricción que se opone al

torque ejercido y a la vez es función de la velocidad en el diagrama dinámico

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 oposición.

La función de transferencia de la velocidad y el torque es del tipo

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

Page 46: Máquina semiautomática para dosificado y empaque de

Por medio de la función de transferencia obtenida podemos analizar la parte

transitoria en la señal de salida que nuestro punto de interés ya que lo que

buscamos es encontrar la relación entre la velocidad de apertura y el torque

ejercido por el elemento actuador de la válvula. Suponiendo que el torque

aplicado es constante podemos también afirmar que la respuesta es del tipo:

V(t)=T * (1/k) * (1 – Ε -(kt/b))

La ecuación 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 válvulas los factores y especialmente el

de rozamiento es elevado y por lo tanto el elemento actuador consume

mas energía.

Fig 14.Respuesta posición proporcional al torque

De tal modo que para una rápida estabilización en un punto dado debemos

proporcionar un alto torque logrando así que la grafica llegue a su punto de

equilibrio lo más rápidamente posible. La aceleración que debemos

proporcionar al sistema debe ser también controlada con el fin de optimizar el

consumo de energía.

Page 47: Máquina semiautomática para dosificado y empaque de

8.4 CORTINA

Fig 15.Valvula cortina (manual corbeta)

8.4.1 ANALISIS DINAMICO

En este caso de la cortina tenemos una transmisión 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

relación con el número de vueltas. En la practica se pudo concluir que para

válvula de este tipo en ½ pulgada en sus acoples se produce el taponamiento

total de la válvula con 5 o 6 vueltas. En válvulas mas grandes, como las

utilizadas en tubería de alcantarillado este numero de vueltas aumenta mas o

menos proporcionalmente al tamaño del acople. Mas sin embargo se puede

analizar que el torque ejercido por el operario para abrirla o cerrarla es

muchísimo mas bajo que el que aplicábamos en las válvulas de embolo.

Además este torque se presenta constante en todo el proceso de apertura y

cierre. La potencia requerida por los acondicionamientos mecánicos que se

puedan hacer se reduce a mas 10 veces en relación con el otro tipo de

válvulas.

Eventualmente la válvula de cortina se presta para controlar el flujo de paso ya

que pude ser abierta parcialmente, es decir que no trabajamos la válvula en los

puntos máximos sino que los puntos intermedios nos permitirán controlar el

Page 48: Máquina semiautomática para dosificado y empaque de

caudal reduciendo el área de paso a nuestro gusto. Es decir comportándose

como una válvula proporcional.

8.5 TIPO AGUJA

Fig 16. Válvula tipo aguja (manual corbeta)

8.5.1 ANALISIS DINAMICO

La válvula 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 compresión de

modo que ejerce la fuerza necesaria para vencer la inercia del selle y mantener

la válvula cerrada la estructura de la válvula se opone al desplazamiento de

este resorte generando una fuerza que constantemente existe y se opone al

desplazamiento en la dirección de apertura del selle. Al conmutar la válvula

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 válvula y dar paso al fluido, resulta pequeña realmente por lo que

la energía que debe ser suministrada en la conmutación es baja.

Fig 17.Analisis dinamico válvula aguja

Page 49: Máquina semiautomática para dosificado y empaque de

Dado que realmente la fuerza de apertura es mínima, este sistema es muy

recomendable por la fácil implementación del accionamiento con actuadores

neumáticos. Aunque el hecho de trabajar un resorte en estas condiciones

puede resultar perjudicial dado que venzamos la zona elástica generando una

deformación permanente en el.

Page 50: Máquina semiautomática para dosificado y empaque de

9. SISTEMA DE DOSIFICACION

9.1 JERINGA INDUSTRIAL (ESTRUCTURA BASICA DE DOSIFI CADOR)

9.1.1 ENVASE DE DOSIFICACION

El envase de dosificación esta hecho en acero inoxidable. El mercado de acero

inoxidable tiene en el mercado tubería en este material. Esta tubería la

encontramos en los distintos estándares a lo que referimos una comodidad en

cuanto a la elaboración ya que basta con adquirir el pedazo de tubo requerido y

ponerle tapa con adaptaciones.

Existe un gravísimo inconveniente y radica en que la tubería en su proceso de

almacenaje y transporte tiende a pandearse aunque muy poco. El sistema a

implementar requiere una alta redondez del perímetro del tubo para evitar el

escape de líquido que se pudiese presentar si no se sucede esta condición.

Por estos motivos resulta más conveniente mecanizar esta estructura a fin de

que el grosor del pistón sea tal que impida el pandeo con facilidad.

Fig 18.Envase dosificación

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

Page 51: Máquina semiautomática para dosificado y empaque de

9.1.2 VÁSTAGO DE EMPUJE

El pistón encargado de proporcionar el empuje lleva consigo el elemento que

deberá empujar el líquido y a su vez generar el vacío capas de succionarlo.

Fig 19.Estructura que empuja el líquido adaptada al cilindro.

El diámetro externo de la sección de empuje debe ser milésimas mas pequeño

el diámetro interno del cilindro dosificador.

Fig 20.O RINGS. Empaques acoplados para evitar escape de líquido

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

dosificadora.

Fig 21.Jeringa dosificadora

Page 52: Máquina semiautomática para dosificado y empaque de

9.1.3 DOSIFICACION POR SUCCION

Fig 22.Dosificacion por succion

El sistema de dosificación consiste en un envase de dosificación que tiene una

capacidad de un litro. El envase tiene dos orificios, por uno entra el líquido del

tanque y por el otro sale líquido dosificado. La entrega de la dosis se hace tipo

jeringa y por medio de un actuador (cilindro) neumático que es controlado en el

sistema. Este cilindro a su vez lleva una adaptación especial que permite

empujar el líquido y su vez impide que el líquido se salga del envase

dosificador. Para la salida y entrada de liquido se manejan electro válvulas tipo

3/2 de retorno por fuelle. Para poder utilizar diferentes dosificaciones se

implementa un elemento deslizable sobre el vástago de pistón 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

dosificación).

9.2 MODELOS DE SALIDA Y ENTRADA DE LÍQUIDO AL DOSIF ICADOR

9.2.1CHEQUE / CHEQUE

FIG 23. Modelo cheque/cheque

Page 53: Máquina semiautomática para dosificado y empaque de

Teóricamente el sistema debe funcionar, es evidente que el sistema depende

de varios factores mecánicos. 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 líquido

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 líquido de

forma directa.

9.2.2 CHEQUE / VALVULA

Fig 24.Modelo cheque válvula

El sistema cheque, válvula resulta económico y en este caso se controla el

punto de salida. El cheque cumple la función de permitir el llenado de la jeringa

dosificadora y evitar que en el momento del empuje el líquido 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 válvula lo que reduce el numero de

accionamientos controlados necesarios para la manipulación del dosificador.

Page 54: Máquina semiautomática para dosificado y empaque de

9.2.3 VALVULA DE TRES VIAS

Fig 25.Modelo válvula de tres vias

La válvula de tres vías es una solución óptima, ya que en este caso se controla

por medio de válvula la entrada y salida del líquido de forma alternativa. La

válvula de tres vías exige el mismo sistema de control que implica el sistema

cheque- válvula de modo que solo se controlara una válvula. La válvula en

forma alternativa conecta el dosificador con la entrada para la succión y luego

la salida para el empuje. El inconveniente de esta válvula radica en lo

complicado para conseguirla en el mercado y más aun en acero inoxidable. Su

funcionamiento no presenta más recomendaciones y es considerado el más

óptimo de todos por su etapa de control, implementación y fiabilidad. Claro esta

adicionalmente los problemas que presentan las válvulas de embolo y que ya

fue mencionado en la sección 8.3.

9.2.4 VALVULA / VALVULA

Page 55: Máquina semiautomática para dosificado y empaque de

FIG 26. Modelo válvula / válvula

El sistema válvula-válvula es tan óptimo como el sistema de tres vías. En este

caso el sistema de control debe permitir el accionamiento de 2 válvulas. 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 optimización 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 válvula. En el proceso de control debemos tener en

cuenta que el sistema puede presentar varios estados como por ejemplo las

dos válvulas abiertas. Algunos estados no son deseados, problema que no se

presenta con la válvula de tres vías. 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 implementación de válvulas cortina dado

que se consiguen fácilmente 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 económicos. Las estructuras de soporte son de

igual forma de fácil implementación.

9.2.5 VALVULA MECANIZADA 3/2

Fig 27.Valvula mecanizada 3/2

Page 56: Máquina semiautomática para dosificado y empaque de

Este sistema nos proporciona un sistema tipo válvula 4/2 cuatro vías 2

posiciones pero el caso es que es un conjunto de 2 válvulas 2/2 que se

combinan en un único sistema por medio del cual se conmutan

alternativamente con un único pistón que bien podría tratarse de un pistón de

simple efecto o doble efecto lo que haría el control de igual forma que la válvula

de 3 vías. Aunque presenta el inconveniente de tener que mecanizar la

estructura que realizara la conmutación.

Page 57: Máquina semiautomática para dosificado y empaque de

10. UBICACIÓN DOSIFICADOR

10.1 ESTRUCTURA DE SOPORTE DEL DOSIFICADOR

Fig 28.Ubicación dosificador y tanque de

almacenamiento

La ubicación del dosificador será en la base del pequeño tanque de

alimentación, ya que necesitamos adaptar el tanque al dosificador además que

en el caso en cuestión se cae por gravedad y la bolsa se aplica alrededor del

tubo de salida y por esta razón queremos que la salida del dosificador sea lo

mas alta posible para una mayor cantidad de papel.

Además claro esta que aprovechamos la estructura definida para el tanque en

el dosificador con un requerimiento un poco más alto en cuanto a soporte de

peso se refiere, sin ser este punto muy relevante.

10.2 UBICACIÓN HORIZONTAL

Fig 29.Ubicacion horizontal

Page 58: Máquina semiautomática para dosificado y empaque de

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

10.3 UBICACIÓN VERTICAL

Fig 31.Ubicacion vertical

Igualmente la adaptación entre el tanque y el dosificador puede ser por medio

de manguera o tubo inoxidable.

Page 59: Máquina semiautomática para dosificado y empaque de

11. SISTEMA DE SELLADO

11.1 SELLADO VERTICAL

Fig 32 Sellado vertical

Luego de que el líquido ha sido dosificado, cae por gravedad a través del tubo

de salida del dosificador. Este tubo se encuentra revestido por la bolsa en la

cual se empacará el líquido. En el momento en que el líquido toca la bolsa, la

desplaza en forma vertical obligándola a pasar por las resistencias de

sellamiento. Un (sensor bolsita) está ubicado en un punto estratégico, 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 activación 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 teflón.

El desplazamiento de estas láminas (resistencias) para hacer unidas sobre la

bolsa, se realiza por medio de un cilindro neumático. Este cilindro es un

cilindro de simple efecto dado que únicamente se necesita control para producir

la unión de las dos laminillas. El cilindro que se utiliza está normalmente

abierto dada la estructura diseñada para el sello en el momento en que se

Page 60: Máquina semiautomática para dosificado y empaque de

recibe la señal, el cilindro se cierra produciendo la unión de las dos laminas

sobre la bolsa.

Se adiciona en este sistema una bandejita ubicada justo a la caída de la bolsa

que nos ayuda a minimizar la velocidad de caída 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 más o menos a un metro del piso.

Fig 33.1.vistas en solid edge

Page 61: Máquina semiautomática para dosificado y empaque de

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 diseñada para producir el sellado.

Page 62: Máquina semiautomática para dosificado y empaque de

Al accionamiento del modelo podemos fácilmente adaptar un pistón neumático

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 sección 22 laboratorio de diseño.

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 básicamente 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 sólido a un punto de

fácil fusión 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 metálicos. Un

segundo paso es el sellado en frío 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 solidificación. Los tiempos de selle en frío y caliente dependen del

material y de la temperatura de trabajo así que el usuario debe graduar estos

dos tiempo por parte separada.

Page 63: Máquina semiautomática para dosificado y empaque de

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

Utilizamos 2 resistencias básicamente con bolsas en material de alta densidad

que lo requieren para producir la fusión. Generalmente con una sola es

suficiente.

Existen 2 clases o tipos básicos de resistencias: de calentamiento rápido y de

calentamiento lento refiriéndonos a la velocidad en que alcanza la temperatura

de sellado. La rápida podríamos decir que es instantánea y la lenta si toma

mucho más tiempo relativamente (de 5 a 10 minutos).

Page 64: Máquina semiautomática para dosificado y empaque de

SISTEMAS DE CONTROL

12. CIRCUITOS CONTROL Y POTENCIA PARA CARGA DEL TA NQUE

SUPERIOR.

Fig 36.Esquema de sensores en sistema de alimentación

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 líquido la bomba no debe funcionar.

3. La activación de la bomba debe ser hecha en función al sensor S2 de

manera que cuando S2 no detecte líquido debe prender la motobomba.

Esta debe cargar el tanque hasta la altura indicada por el sensor S1 de

modo que cuando S1 censa el líquido debe detener la bomba impidiendo

que esta vuelva a trabajar hasta no cumplir la condición en el S2 para la

nueva activación de bomba.

Page 65: Máquina semiautomática para dosificado y empaque de

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

activación 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 alimentación

Page 66: Máquina semiautomática para dosificado y empaque de

12.2 POTENCIA

Siendo KB un relé para la interfase al circuito de potencia. Este podría bien

activar un contactor o un triac elementos que permitirán manejar la corriente y

voltaje asociado a la bomba. Dado que el sistema no requiere alta velocidad de

conmutación la utilización de un elemento u otro depende exclusivamente de

los costos y su ubicación dentro del sistema por cuestiones de estética y

espacio.

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

mecánico 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

Page 67: Máquina semiautomática para dosificado y empaque de

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 discriminación de la cantidad exacta de liquido en el

tanque. Lo que si es relevante es que el líquido 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 opción se utiliza un sensor tipo flotador que nos da una señal 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 fácilmente y a un costo relativamente muy bajo y aunque

pudiese cumplir los requerimientos sanitarios deseados, el hecho de tocar el

líquido implica un desacuerdo en el cliente quien a todo costo quiere mantener

el líquido lo más 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 adaptación 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 señal recibida

es de tipo ON/OFF como optocoplador ya que un emisor de rayo emite una

señal y un fotodiodo justamente al frente recibe o no la señal activando o no la

conducción del fotodiodo de modo que este se coloca a un voltaje y así cuando

se produce la conducción se mide un voltaje que es fácilmente el voltaje de

activación para la entrada al PC.

Page 68: Máquina semiautomática para dosificado y empaque de

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 opción 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 calibración del

sensor por lo que un único sistema no podría hacerse universal a manera de

Page 69: Máquina semiautomática para dosificado y empaque de

ser utilizado en forma indiscriminada para el distinto tipo de líquidos en

densidad y color.

13.3 FENOMENO RESISTIVO

Una tercera opción es introducir un par de varillas delgadas de acero inoxidable

al tanque. Las varillas están unidas a un cable conductor de tal modo que al

variar la cantidad de liquido tenemos una variación 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 mínima o máxima requerida según sea

el caso. Recordemos que utilizamos tres sensores de nivel: dos en el tanque

pequeño (nivel máximo y nivel mínimo) y uno en el tanque grande (nivel

mínimo).

13.3.1 ESQUEMA REFERENTE

Fig 41.Esquema referente sensor resistivo

Page 70: Máquina semiautomática para dosificado y empaque de

13.3.2 CIRCUITO DE CONTROL Y ACONDICIONAMIENTO

Fig 42 Circuito contro sistema resistivo

Este arreglo electrónico 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 alimentación 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 líquido al tanque menor.

En estos primeros modelos alternativos para la solución 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.

Page 71: Máquina semiautomática para dosificado y empaque de

13.4 MODELO DE SALIENTE

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

ecuación fundamental de la estática de fluidos que afirma que la presión

depende únicamente de la profundidad. El principio de pascall afirma que

cualquier aumento de presión en la superficie de un fluido se transmite a

cualquier punto del fluido.

Fig 43 Prinsipio de Pascall

Aplicando este fenómeno físico podemos asegurar que independiente del

diámetro 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

dosificación sin la implementación de la bomba automática, se puede

simplemente observar por simple inspección el nivel de líquido alojado en el

tanque.

13.4.1 ESQUMA REFERENTE

Fig 44 Modelo saliente

Page 72: Máquina semiautomática para dosificado y empaque de

13.5 TIPO REED SWITCH

Podemos manejar reed switch los cuales por medio de propiedad magnéticas

de atracción genera el contacto de 2 elementos conductores efectuando un

contacto que inmediatamente permite el paso de una señal de control. Por

medio de un par de reed switch se censan los niveles máximo y mínimo 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 señal de control que permita activar los reles

correspondientes...

Page 73: Máquina semiautomática para dosificado y empaque de

13.6 EFECTO MAGNETICO

Otra solución corresponde al tema de efectos magnéticos 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 varía según el valor de la inductancia que cambia con

efectos de núcleo.

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

eléctrica, 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 señal del tipo DC la cual ingresa al comparador. Esta señal 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 comparación aunque se

presentara oscilación en la respuesta de salida en el amplificador, dada la

variación de la señal que sale del bobinado, la corta activación de las señales

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 metálico

implican una variación mas abrupta en la inducción de voltaje presentada por lo

que el acondicionamiento resulta un tanto mas sencillo que si utilizamos la

variación en el núcleo como solamente por el liquido que este o no este.

El uso de la rectificación de señal por medio del puente de diodos es necesario

ya que es necesario referenciar nuestra señal de salida y de igual manera el

comparador y el set point en un mismo punto.

Page 74: Máquina semiautomática para dosificado y empaque de

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 variación en la impedancia

del condensador, producto de una variación en el dieléctrico que se da cuando

el líquido se encuentra entre el par de placas paralelas. De igual forma que en

nuestro sensor de efectos magnéticos la señal es acondicionada por medio de

Page 75: Máquina semiautomática para dosificado y empaque de

una rectificación que entra aun comparador que permite relacionar la señal

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

Page 76: Máquina semiautomática para dosificado y empaque de

13.8 SENSOR DE ULTRASONIDO

Como una cuarta opción 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

solución. Aunque encontramos sensores de ultrasonido tanto digitales como

análogos, para el caso se requería propiamente el digital, aunque un análogo

podría también utilizarse.

13.8.1 ESQUEMA REFERENTE

Fig 52.Sensor ultrasonido

El principio físico de funcionamiento nos explica que por medio de un oscilador

generamos una señal con una frecuencia de ultrasonido la cual es emitida con

la ayuda de un transductor de ultrasonido el cual es un elemento piezoeléctrico

interno que por medio de la señal eléctrica presenta oscilaciones en una

membrana interna. Estas vibraciones mecánicas, emiten una onda con una

determinada amplitud. Esta amplitud se atenúa 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 señal que llega a recepción es proporcional a la distancia que la señal

recorrió (eco), al medio por el que se desplazo y a factores referentes al ángulo

de reflexión de la señal ultrasónica.

Page 77: Máquina semiautomática para dosificado y empaque de

Fig 53 forma de onda ultrasonica

Para el caso en cuestión se expone el diseño del control por ultrasonido

elaborando por completo e sistema de oscilación, y calibración de las y

manipulación de las señales llegadas al receptor. Es posible adquirir sensores

de ultrasonido sin acondicionamiento alguno, ni interfase de aplicaciones al

usuario a costos mucho más bajos y realizar por medio de un sistema

electrónico el control.

13.8.2 ACONDICIONAMIENTO

El oscilador es diseñado 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

Page 78: Máquina semiautomática para dosificado y empaque de

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 angulación del rayo incidente. De

tal modo que agitaciones prolongadas o abruptas pueden generar un

movimiento del líquido, que si es tal, pude inferir una variación en la reflexión

del as ultrasónico que al ser desviado no genera información. En estos casos el

sistema podría recibir señales incorrectas, haciendo trabajar a la maquina en

momentos incorrectos.

Fig 56.Problemas de ultrasonidos

Page 79: Máquina semiautomática para dosificado y empaque de

La ubicación de los sensores resulta de alguna manera practica aunque las

estructuras de soporte para el sensor podría generar corrosión 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 resultaría algo costoso, podríamos utilizar PVC como elemento

alternativo procurando conservar la estética.

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

debe tener mas potencia para producir una señal ultrasónica con mayor

alcance. También tenga en cuenta que este tipo de sensor maneja una

histéresis producto de sus propias características físicas de construcción y por

lo tanto el factor sentido de flujo de liquido en la carga va ha generar

diferencias de señal en el receptor. También un espacio cercano en el que el

sensor no alcanza a recibir el eco producido por la señal, este espacio cercano

de trabajo también presenta el fenómeno de histéresis dando diferentes

señales según el caso se hacer o se aleje al liquido.

13.9 SENSORES COMERCIALES DIGITALES

Como su nombre lo dice estos sensores entregan una señal. Aunque

encontramos con diferentes propiedades físicas 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 rápida y fácilmente.

Igualmente para la ubicación en el sistema estos poseen ayudas mecánicas

con las cuales puedo fijar el sensor implementando soporte sencillos que se

atornillan y se fijan a la maquina en la posición deseada.

Una última solución mas practica pero a la vez la mas costosa aunque nos

brindan confiabilidad y dan solución al problema planteado. Es importante

hacer claridad que el sensor tipo posee características técnicas de construcción

Page 80: Máquina semiautomática para dosificado y empaque de

en la que se incluye una referencia de protección. Para el caso en cuestión

necesitamos que dicha protección sea IP67. Que significa un nivel alto de

protección. Puntualmente contra polvo y agua.

13.9.1 CONEXIONADO

Con esta simbología y tipo de conexionado vamos a encontrar los sensores

inductivos, capacitivos, ultrasónicos.

Fig 57.Símbolo según DIN 4007

Color de los hilos según DIN 50044:

Marrón: Terminal (+); Azul: Terminal (-); Negro: Salida NA; Blanco: Salida NC

La conexión 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 utilización son descritas a

continuación. Los sensores de fibra óptica resultan de muy costosa

implementación por lo que no fueron tenidos en cuenta para análisis en este

proyecto.

Page 81: Máquina semiautomática para dosificado y empaque de

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 continuación en conjunto al

circuito de control pertinente a la energización de motobomba.

13.9.2.1 TIPO PNP

Fig 59.Tipo PNP

13.9.2.2 TIPO NPN

Fig 60.tipo NPN

Page 82: Máquina semiautomática para dosificado y empaque de

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 ubicación e implementación 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 magnético se requiere un elemento con propiedades

metálicas 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 ningún elemento

adicional y el solo líquido producirá el efecto de dieléctrico necesario para

afectar la respuesta del sensor. E inclusive no se hace necesario la

implementación de la saliente en el tanque de almacenamiento.

Page 83: Máquina semiautomática para dosificado y empaque de

13.9.3.2 ESQUEMA CAPACITIVO

Fig 62 Ubicación 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 utilización 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 líquido refleja directamente

un porcentaje de la luz emitida, activando el receptor muy similar a lo que

ocurre en el sensor ultrasónico solo que en este caso es una señal de distinta

frecuencia pero con el mismo principio. Los sistemas que ofrece el mercado

son compactos y además 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 técnicas de los

modelos.

Page 84: Máquina semiautomática para dosificado y empaque de

13.9.4.1 SISTEMA AUTOREFLEX

Fig 64 Modelo autoreflex

El acondicionamiento y ubicación de este sensor procede de la misma manera

que en el sensor de ultrasonido y su diseño para el control. A su vez los

problemas presentados en el tema de la reflexión competen también 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 magnética es

inversamente proporcional a la atenuación de la señal. Paralelo a ello los

diferentes tipos de material tendrán una absorbancia diferente así que de igual

forma los ecos serán una función del líquido que aloja el tanque. Este tipo de

sensores son algo más costosos que los capacitivos y más 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.

Page 85: Máquina semiautomática para dosificado y empaque de

13.10 SENSOR ANALOGO DE PESO (CELDA DE CARGA)

Fig 66.Celda de carga

Una común solución 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 además de, la medición de masa (peso) con alta precisión y más aun

proporciona mediciones de tipo análogo. 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

alteración en el peso sensado y debe hacerse una recalibración en la etapa de

acondicionamiento. Además es propenso a afectarse por la intemperie, hielo,

nieve, vientos y temperatura.

Page 86: Máquina semiautomática para dosificado y empaque de

13.10.1 ACONDICIONAMIENTO

Para el acondicionamiento de la celda debemos en primera instancia amplificar

la señal ya que son milésimas de voltaje las que se perciben, importante que

dicho amplificador sea de instrumentación a fin de eliminar ruido ya que en

señales tan pequeñas una mínima variación de las condiciones del sistema

puede ocasionar mediciones erráticas.

En esta ocasión, aunque se cumple a cabalidad la condición del no contacto

con el liquido, la solución resulta un tanto costosa y en realidad se desperdicia

la utilización 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 básico para la utilización

de este tipo de sensor.

13.10.1.1 AMPLIFICADOR DE INSTRUMENTACION

Fig 68. Amplificador de instrumentación

La figura nos muestra el esquema electrónico del amplificador operacional y su

esquema simplificado. La idea del amplificar operacional es utilizar la propiedad

de entrada común en la que el ruido es eliminado por efectos de cancelación.

Si por el positivo ingresa una señal de ruido que a su vez entra por el negativo

esta automáticamente es cancelada por efectos de sustracción.

Page 87: Máquina semiautomática para dosificado y empaque de

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 pequeño sea

el valor de K mas grande es la ganancia.

Para el caso de el amplificador de instrumentación de uso común la relación

entre las resistencias R y la resistencia variable llamada KR es mucho mas

pequeña en casi 100 veces de modo que el factor de ganancia se convierte en

(200 /K + 1) es por esto que el amplificador de instrumentación es de alta

utilidad para amplificar señales de voltaje muy pequeñas y el factor K nos

permite graduar la ganancia.

13.10.2 CIRCUITO DE CONTROL

Dado que en nuestro caso necesitamos conocer 2 niveles básicamente el

máximo y el mínimo, por medio de potenciómetros es posible ubicar estas dos

posiciones de tal modo que nuestro sistema quedara implementado de la

siguiente manera

Page 88: Máquina semiautomática para dosificado y empaque de

Fig 69. Circuito de control aplicando A.I

Page 89: Máquina semiautomática para dosificado y empaque de

14. CICLO DE MAQUINA

14.1 CONTROL DEL PROCESO DE ABASTECIMIENTO DE PRODU CTO

HACIA EL DOSIFICADO

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

máquina. Asumimos que el papel esta en el dispensador previamente listo

para ser utilizado. Consiste nuestra tarea a seguir el desarrollo del dosificado

del líquido. Retomemos rápidamente la situación que se nos presenta.

Un pequeño tanque ubicado en la parte superior de la maquina permite el

suministro de liquido. Este líquido entra a un dosificador que permite una

cantidad definida previamente. Al tener el dispensador cargado se empuja el

líquido por un orificio en la parte inferior del dispensador. Esta salida debe ser

controlada impidiendo al líquido caer sin control. De modo que se manejan y

controlan el empuje y la salida del líquido simultáneamente.

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

previamente cargado con un tubo externo de plástico; así que el liquido al caer

llena el pedazo de tubo plástico final, obligando al plástico a deslizarse un poco

a través del tubo inoxidable y obligándolo a pasar a través del sistema de

sellado y corte que esta listo y esperando para sellar luego que el plástico

sobrepasa lo suficiente la selladora. El selle demora un tiempo presionando en

caliente para el selle y a su vez justo después de un tiempo presionando en frió

para el corte. Luego de esto el ciclo se repite mientras se cumpla que exista

líquido en el tanque y plástico 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 dosificación independientemente del

líquido que esté en el tanque.

Page 90: Máquina semiautomática para dosificado y empaque de

14.1.1 ESQUEMA REFERENTE

Fig 70. Ubicación 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 señal necesaria para acondicionar al

circuito de control que envía la señal al PC.

14.2.1 ACONDICIONAMIENTO

Fig 71.Acondicionamiento sensor de papel

Page 91: Máquina semiautomática para dosificado y empaque de

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 CONT ROL

La fuente de alimentación 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 alimentación de corriente y

protección contra corto y sobrecarga.

La corriente manejada depende del transistor driver y obviamente el

transformador debe entregar y el puente de rectificación soportar la corriente

total que se utiliza en los diferentes circuitos.

Page 92: Máquina semiautomática para dosificado y empaque de

Fig 73.Fuente de alimentacion

Fig 74.Fuente de alimentación para altas corrientes

Page 93: Máquina semiautomática para dosificado y empaque de

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 máxima. 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 válvula como tal permite el paso y no de flujo. En nuestro caso nos

referimos a aire a presión. Este tipo de válvula debe ser conmutada con algún

tipo de accionamiento aunque existen de muchos tipos las que se controlan

eléctricamente son mas conveniente ya que los circuito de control son mas

sencillos y económicos, además permite que un sistema de control digital

pueda maniobrarla. Una señal eléctrica permite la conmutación de la válvula y

en este sentido de control encontramos también 2 clasificaciones. Las

monoestables que son válvulas que al sentir la presencia de señal eléctrica

conmutan a otra posición, al quitar dicha señal la válvula retorna a su estado de

reposo. La otra clasificación es la biestable, válvula que tiene 2 puntos

diferentes en donde recibir señales eléctricas de tal modo que una señal la

Page 94: Máquina semiautomática para dosificado y empaque de

conmuta en una dirección y la otra señal es necesaria para hacerla conmutar

nuevamente a su posición inicial.

Estas electrovalvulas se caracterizan por el número de vías que manejan y el

número de posiciones posible que puede tener. A nuestro sistema podemos

adaptar básicamente el tipo de eletroválvula 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 electroválvula

monoestable es mas económica que la biestable y el en el circuito de control

nos es mas útil la monoestable ya veremos porque. Por norma para las

válvulas en la simbología, el estado normal de la válvula sin accionamiento se

da en la parte derecha.

15.2.1 ACCIONAMIENTO DE LA ELECTROVÁLVULA D.C y A.C

El accionamiento de la válvula DC se hace por medio de un transistor como lo

muestra la figura. Para este caso debemos calcular la máxima resistencia

necesaria que colocamos en la base. Sabiendo que la bobina interna de la

electro válvula consume por catalogo alrededor de 50mA. Así que sea la

ecuación del transistor. Ic = B Ib = 50mA donde B (hfe) que utilizamos en el

diseño de drivers es de 100. Decimos que Ib = 50mA / 100 = 0.5mA. Sabiendo

que disparamos con señal de 5v entonces la R <= (5v - 0.7) / 0.5mA = 8,8 KΩ.

El disparo de una electroválvula 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 máxima corriente por lo que podemos usar un rele pequeño para 1

o 2 Amperios.

Page 95: Máquina semiautomática para dosificado y empaque de

Fig 76.Accionamiento acondicionado electrovalvula

15.2.2 ACCIONAMIENTO DE LA ELECTROVÁLVULA POR PC

Esta es accionada por medio del PC en modo automático y en modo manual se

acciona exactamente con el mismo pulso utilizado por el cilindro que empuja el

líquido en el dosificador. De modo que estas dos operaciones (dosificar y abrir

la válvula) sean simultáneas. Por lo tanto los mandos manuales del dosificador

y electro válvula deben estar enclavados mecánicamente o bien accionarse de

alguna manera al mismo tiempo.

La electroválvula requiere que su parte interna sea en acero inoxidable ya que

tendrá contacto directo con el líquido.

Fig 57 Accionamiento por PC

Page 96: Máquina semiautomática para dosificado y empaque de

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 ROTATIV O

La primera de ella consiste en implementar un actuador neumático rotativo que

actúa de igual modo que un actuador pero produciendo un desplazamiento

angular. De modo que de manera simple se adapta la válvula de acero

inoxidable (de embolo) al mismo para así abrirla y cerrarla.

El actuador neumático rotativo podría se fácilmente remplazado por un motor

eléctrico en el cual controlemos el desplazamiento máximo en un sentido y

máximo en el otro para así no llevarlo a un sobreesfuerzo que podría dañarlo o

desgastarlo fácilmente. Otra implantación podría hacerse utilizando la válvula

de embolo en acero inoxidable y adaptando a ella un pistón 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 señal

se encuentra totalmente en un lado o totalmente en el otro

Page 97: Máquina semiautomática para dosificado y empaque de

15.3.3 ACCIONAMIENTO LINEAL NEUMATICO

El accionamiento de la válvula se realiza por medio de un pistón neumático. El

sistema resulta eficiente en cuanto a torque. Puede ser trabajado tanto de

simple como de doble efecto y es evidente que resulta más económico

utilizando un pistón de simple efecto.

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

El siguiente modelo plantea una transmisión un poco mas alejada del cuerpo

de la válvula. Este sistema puede ser implementado si la ubicación en forma

cercana resulta complicada. La transmisión 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

Page 98: Máquina semiautomática para dosificado y empaque de

15.3.4 ACTUADOR LINEAL ELECTRICO (PIÑON – CREMALLER A)

El sistema permite que por medio de una transmisión de circular a lineal

produzcamos el mismo efecto de movimiento que los actuadores lineales

neumático. En este caso utilizamos un motor eléctrico y por medio de la

transmisión tipo cremallera conseguimos el movimiento. El mecanizado de este

elemento resulta algo complicado aunque existen varias microempresas y

talleres mecánicos que las fabrican con rapidez y su costo es relativamente un

poco más costoso que el neumático. Solo que en este caso la energía es

proporcionada directamente de la red eléctrica. A nivel de potencia que se

consigue con este sistema, es evidente que la relación costo beneficio no es

favorable para este tipo de mecanismo. El mecanismo esta expuesto en la

sección de actuadores.

15.3.5 ACTUADOR ROTATIVO ELECTRICO

Los actuadores rotativos eléctricos son básicamente los motores los cuales

pueden ser de corriente continua o corriente alterna. A fin de lograr un torque

necesario para producir la conmutación de la válvula usamos preferiblemente el

motor D.C además que el control de giro y velocidad es mucho mas fácil 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 inversión de giro para un motor A.C

resultaría 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 válvula.

Page 99: Máquina semiautomática para dosificado y empaque de

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

posición final del recorrido, que será un sensor tipo microswitch. Y utilizamos

dos reles k1 y k2 que utilizan la retención para realizar el ciclo completo hasta

que el sensor de la apertura del circuito. Si los dos reles se activan a la vez el

Page 100: Máquina semiautomática para dosificado y empaque de

moto queda a un potencial de 0 voltios entre sus dos terminales ya que recibe

la misma señal 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 fácil el control de la posición de este con el simple hecho de contar

pasos. A fin de lograr el máximo 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 serán respectivamente las

presentadas en la figura. Para el motor paso a paso debemos conocer el

número de pasos que posee para con ello conocer con exactitud el número de

pasos necesarios para producir un giro controlado. El sistema de control es

definitivamente más fácil, práctico y económico de realizar con un pic ya que

por medio de este puedo controlar la velocidad (tiempo entre paso y paso) y el

número de pasos a realizar. La interfase seria la siguiente.

Page 101: Máquina semiautomática para dosificado y empaque de

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º daría 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 transmisión de potencia ya que el motor paso a paso

posee menor torque y es aun más 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 válvula requiere un movimiento circular nos remitimos

propiamente al accionamiento por motor. Dicho motor es escogido del tipo

eléctrico ya que un motor neumático nos resulta muy costoso e ineficiente por

la mismas razones. Es por esto que se escoge el motor D.C fíjese que dicho

motor debe dar mas de un giro aunque en este caso el torque es muchísimo

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 económico nos resultara útil para efectuar el

cierre y apertura de la válvula. Al desear un punto máximo y mínimo de

apertura el control resulta mas sencillo, pero esta el inconveniente en los topes

máximo y mínimo el motor sufrirá una sobrecarga producto del alto torque que

se produce al tener la válvula completamente cerrada y tratar de cerrarla aun

mas y viceversa. Otra desventaja grande es el hecho de no poder sensar de

Page 102: Máquina semiautomática para dosificado y empaque de

alguna manera esta posición 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 solución 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

alimentación del motor para evitar la sobrecarga pero siempre garantizando la

completa apertura y cierre (principalmente) de la válvula. El sistema empleado

es la adaptación del motor y un circuito controlador de tiempo por medio del

cual generamos la conmutación.

Fig 65 Accionamiento válvula de cortina

La implementación con un motor paso a paso resulta también apropiada

generando el número de pasos suficiente para producir el giro. Pero es

considerable que resultaría un poco más 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 líquido.

Page 103: Máquina semiautomática para dosificado y empaque de

15.5 ACCIONAMIENTO PARA VALVULA TIPO AGUJA

Utilizar una válvula en la que el sistema de cierre y apertura es de tipo lineal.

Estas válvulas 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 pistón de corta carrera y poca fuerza

producimos el desplazamiento lineal abriendo y cerrando la válvula.

Este sistema seria mejor pensando en la eficiencia del sistema y el desgaste de

las piezas que en el trabajan. La durabilidad de esta válvula para trabajo

continuo es mayor, pero así mismo los costos son mas elevados que la válvula

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 implantación de este sistema lleva un poco mas de tiempo pero los

costos se reducen en un 80%.

Page 104: Máquina semiautomática para dosificado y empaque de

16. CONTROL DE DOSIFICACION

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

respectivo control y 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 además de este el

sistema de sellado y corte.

En el sistema de dosificación se pretende proporcionar a la maquina la

posibilidad de seleccionar una cantidad deseada en dosificación y que el

dosificador sea capaz de realizar cargas con esa cantidad de manera exacta y

a su vez que posea la precisión necesaria para cumplir con los requerimientos

del cliente.

La viscosidad del liquido es el aspecto mas relevante para el diseño de este

sistema por lo que se trajo a colación 2 modelos base para el sistema de

dosificado.

1. dosificación por tiempo y trabajo semiautomático en líquidos de baja

viscosidad con caída por gravedad.

2. dosificación por succión para líquidos con viscosidades un poco más

elevadas.

Page 105: Máquina semiautomática para dosificado y empaque de

16.1 DOSIFICACION POR VALVULA DE EMBOLO Y/O GUAYA D E

TRANSMISION

En la actualidad, en los sistemas de tipo manual, el operario abre una válvula

generalmente de bola o embolo por medio de una operación manual. A esta

operación se puede agregar un mecanismo tal que el operario puede abrir la

válvula 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 válvula alguno de los modelos

presentados para apertura y cierre de la válvula de tal manera que el usuario

posea los controles pertinentes de apertura y cierre de la válvula. Para realizar

un trabajo de dosificación plenamente manual.

Page 106: Máquina semiautomática para dosificado y empaque de

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 dosificación. 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 implementación de este sistema se hace necesario la

implementación 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 líquido que existe sobre

el punto mas bajo del líquido ya que la presión ejercida cambia en función al

Page 107: Máquina semiautomática para dosificado y empaque de

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

de salida cambiara según la cantidad de líquido alojada en el tanque para el

instante de análisis. Por esta razón el simple hecho de manejar un tiempo de

apertura no va a garantizar el dosificado de alta exactitud, a medida que el

líquido desciende de nivel la velocidad disminuye y las dosis serán cada vez

más pequeñas.

Recordando que la presión depende exclusivamente de la altura podríamos

pensar que en determinados casos dicha variación de dosificación puede llegar

a no ser tan relevante lo que implica que el sistema por tiempo podría funcionar

para la dosificación 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 análogo 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 líquido en todo momento y así mismo determinar el tiempo

que debe abrir la válvula para proporcionar la dosificación requerida. La

ecuación que rige el comportamiento puede ser generalizada pero el factor de

relación 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 relación es función de la viscosidad del fluido y a su vez del nivel de

líquido alojado en el tanque.

Tiempo = peso * (factor de relación). El peso puede ser variado por software de

tal modo que se presente al usuario como la relación Tiempo = volumen *

(factor de relación).

Page 108: Máquina semiautomática para dosificado y empaque de

16.3 SISTEMA DOSIFICADO POR SUCCION

Fig.70 Sistema dosificado por succion

El sistema de dosificación consiste en un envase de dosificación que tiene una

capacidad de un litro. El envase tiene dos orificios, por uno entra el líquido del

tanque y por el otro sale líquido dosificado. La entrega de la dosis se hace tipo

jeringa y por medio de un actuador (cilindro) neumático que es controlado en el

sistema. Este cilindro a su vez lleva una adaptación especial que permite

empujar el líquido y su vez impide que el líquido se salga del envase

dosificador. Para la salida y entrada de liquido se manejan electro válvulas tipo

3/2 de retorno por fuelle. Para poder utilizar diferentes dosificaciones se

implementa un elemento deslizable sobre el vástago de pistón 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

dosificación).

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

Page 109: Máquina semiautomática para dosificado y empaque de

La dosificación por final de carrera hace que simplemente el pistón no entre

más de la dosificación necesaria bloqueando el ingreso de aire en la dirección

de entrada. Así que independiente de lo que pase en el control, el pistón

neumático del cilindro no puede avanzar más de esa posición.

5 elementos básicos son empleados para controlar la salida y entrada de

líquido al dosificador. 2 elementos son utilizados para la manipulación del

actuador neumático que es del tipo doble efecto. Estos dos elementos son

electro válvulas 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 dosificación ubicándolo en una posición

fija y desplazando un elemento deslizable sobre el pistón del actuador, este

hace posible manipular su carrera o dicho de otra forma manipular el

desplazamiento de ese pistón. Por ultimo tenemos los dos elementos faltantes

que son electro válvulas de 3/8 de pulgada, estas electro válvulas 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 líquido. 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 válvula de entrada al dosificador se abre

inmediatamente el actuador entra, proporcionando al sistema una succión que

hace más rápido el llenado de la dosis. En este proceso el circuito de empuje

esta abierto impidiendo que la válvula 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 líquido al dosificador, por lo tanto cierra la válvula de entrada y para

al actuador en la posición correcta. En este momento el dosificador esta listo

Page 110: Máquina semiautomática para dosificado y empaque de

para dar empuje a una dosis así que en el momento de aplicar la señal de

dosificado, inicia el temporizador as la vez que abre la válvula de salida y

proporciona la salida del pistón (secuencial mente). Estos dos electos están

activados mientras el temporizador este activo. Al terminar el temporizador con

su tiempo encendido la válvula 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 erróneo 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 succión

entonces la velocidad de empuje es mayor a la de succión.

Page 111: Máquina semiautomática para dosificado y empaque de

16.4.2 PISTON DE DOBLE EFECTO Y DOBLE VÁSTAGO.

Fig 73 Piston doble efecto y vastago

El inconveniente de este sistema es que la fuerza de empuje se reduce según

el diámetro del vástago utilizado para el sensado. Pero nos genera un aumento

de la velocidad lo que en ocasiones puede resultar más conveniente.

16.4.3 CONTROL Y MANDO DEL PISTON

Fig 74.Control y mando del piston

Page 112: Máquina semiautomática para dosificado y empaque de

16.4.4 VELOCIDAD SISTEMA DOSIFICADOR POR SUCCION

En el capitulo referido a los cilindros neumáticos 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 pistón.= v Sabiendo el diámetro de la camisa sabemos el área y por

consiguiente la velocidad lineal de avance. Podemos calcular así el costo

eléctrico que representa la velocidad del deseada relacionando la potencia

neumática ejercida por el compresor P = Pr * Q con la potencia eléctrica.

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 electroválvulas de empuje, succión, entrada y salida de líquido son

activadas por medio de reles que activan la correspondiente electro válvula.

El control del temporizador se hace por medio del 555 con potenciómetro.

Page 113: Máquina semiautomática para dosificado y empaque de

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 pistón son máximas de entrada y

máxima de salida y la dosificación se ve limitada por la ubicación 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 más viable

16.5.1 CONTROL Y MANDO

Fig 77 Control y mando dosificador

Se pretende que la entrada del líquido que viene del tanque sea por un orificio

grande que haga lo más rápido 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 rápidamente y como

Page 114: Máquina semiautomática para dosificado y empaque de

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 líquido sale por un orificio más pequeño. Este

tamaño se debe al tamaño general de las bolsas para empacar este tipo de

líquidos (refrescos). Por esta razón se utiliza el pistón de empuje para

apresurar la salida del producto.

La parte final del pistón de empuje tiene adaptado un cilindro del tamaño del

dosificador para impedir que el líquido se salga por los bordes. A su vez esta

adaptación tiene una altura suficiente para que por el orificio del costado no se

salga líquido por la parte superior. Esta estructura no es necesariamente

maciza pero el peso ayuda a dar un poco mas de presión al empuje pero no es

necesario.

Lo que si es necesario es que la parte baja del dosificador sea de forma algo

cónica, esto ayuda a aminorar la fuerza de reacción que el liquido ejerce en

contra (reacción) del empuje del pistón. Este sistema garantiza que el tiempo

de dosificado y empuje es igual para cada ciclo

16.6 SISTEMA DE CONTROL INDEPENDIENTE PARA EL DOSIF ICADOR

COMO PRODUCTO UNICO

Se ha diseñado 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 fácilmente al sistema completo en el que un PC tendrá el control del

sistema. El modelo que se plantea a continuación funciono plenamente en la

práctica (a nivel técnico). El acondicionamiento a la maquina completa se hará

en el pulso de ciclo automático el cual se adapta fácilmente.

Este diseño permite usar los diferentes modelos de dosificado planteados,

cheque/cheque, cheque/válvula, válvula 3 vías, válvula/válvula, simplemente se

adapta el sistema físicamente a los requerimientos. El sistema de control es

realizado con PIC, la maquina requiere el uso de electrovalvulas activadora del

pistón de empuje y succión.

Page 115: Máquina semiautomática para dosificado y empaque de

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 pequeño cambio en el conexiado de salidas en el sistema.

Es decir que sin hacer ningún cambio en el diseño el usuario tiene la opción de

conectar a su acomodo según sea el sistema que desee de salida y entrada de

líquido al dosificador.

Fig 78 Salida del dosificador

Estas válvulas que deberán ser accionadas por medio del de señales de control

en modo automático y en modo manual se acciona exactamente con el mismo

pulso utilizado por el cilindro que empuja el líquido en el dosificador. De modo

que estas dos operaciones (dosificar y abrir la válvula) sean simultáneas. Por lo

tanto los mandos manuales del dosificador y electro-válvulas de control deben

estar enclavados mecánicamente 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 válvula se realice primero y luego se realice

el empuje. Al no utilizar presiones muy elevadas es de entender que la ruptura

de una válvula de estas difícilmente se va a presentar. Los diferentes sistemas

de acondicionamiento se presentaron en el capitulo correspondiente a válvulas

para el paso de liquido.

Page 116: Máquina semiautomática para dosificado y empaque de

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 válvula.

Este sistema permite manejar tiempos mas precisos y constantes (+/-)

TIEMPO.

Posee también el pulso de dosificar (P1) y el de empuje (P2). MANUAL

16.6.2.1 DIAGRAMA DE FLUJO PARA EL PROGRAMA EN EL P IC

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

Page 117: Máquina semiautomática para dosificado y empaque de

16.6.3 DISEÑO DE LA ELECTRONICA DE INTERFASE AL PIC

16.6.3.1 DISEÑO DE LA FUENTE

Fig 80 Diseño de la fuente

16.6.3.2 INVERSORES DE GIRO

Fig 81.Inversor de giro

Page 118: Máquina semiautomática para dosificado y empaque de

16.6.3.3 ACTIVACION DE ELECTROVALVULAS

Fig 82 Activacion de electrovalvulas

16.6.4 CIRCUITO FINAL

Fig 84.Circuito final control de dosificador

Page 119: Máquina semiautomática para dosificado y empaque de

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 succión y empuje a fin de lograr la

máxima 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 pistón 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 práctica y directamente en planta por el usuario. El margen de

tiempo puede ser cambiado en software pero para la aplicación 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 succión y un empuje respectivamente. También nos brinda el ciclo

automático el cual es realizar ciclos únicos indiscriminadamente mientras el

pulsador de automático este encendido. Para esta operación automática se

utiliza el tiempo de espera entre ciclos que es también graduable por medio de

Page 120: Máquina semiautomática para dosificado y empaque 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 apagón

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

succión, empuje y espera. Para guardar una secuencia basta con designar en

los visualizadores los tiempos deseados de empuje, succión y espera. Lugo

varia la secuencia buscando la secuencia en la que se desea guardar su nueva

combinación y pulsar el pulsador guardar e inmediatamente la combinación que

se visualiza queda almacenada en esa secuencia.

El sistema posee un par de pulsadores (empuje y succión) por medio de los

cuales se puede manipular el dosificador al acomodo. Puede hacer la succión o

bien el empuje indiscriminadamente. Tenga en cuenta que estos no aplican si

el sistema se encuentra en estado de ciclo automático. 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, succión del dosificador.

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

realizar la succión y luego el empuje o realizar el empuje y luego la succión, en

tal caso el sistema detenido tendrá una carga lista para empujar. La utilización

de un modelo u otro dependerá del usuario ya que la utilización de una u otra

puede ser relevante en cuanto a los tiempos de trabajo. El sistema se adapta

fácilmente a ambos modelos y simplemente en la bornera de salida invertimos

las conexiones de empuje y succión dejando así el sistema listo para trabajar

en la forma deseada.

Page 121: Máquina semiautomática para dosificado y empaque de

Es importante tener en cuenta que las entradas están todas aseguradas en 0v

de modo que se activan si reciben un 1. Para efectos del ejercicio práctico del

software note que algunas de las entradas están 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 conexión el dato debe leerse negado. Simplemente

cambiando la instrucción “btfss” por “btfsc” cambiamos esa lógica.

Page 122: Máquina semiautomática para dosificado y empaque de

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 rápida llega a una alta temperatura. Esto implica una eficiencia alta

en cuanto a la velocidad de trabajo manejada adicionalmente con un alto

consumo de energía. Por este motivo el sistema se utiliza con temporizado de

modo que producimos calentamiento rápido para sellar y luego de forma

temporizada apagamos la resistencia para producir el sellado en frío.

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

Page 123: Máquina semiautomática para dosificado y empaque de

Fig 87.Control resistencia calentamiento rapido

En el momento de realizar el sellado la resistencia se encuentra fría. 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 actúan nuevamente

abriendo el circuito a la resistencia selladora actúa se detiene

momentáneamente hasta que la selladora sea abierta nuevamente.

fig 88 ubicación microswitch

El circuito de control es explicado de forma mas completa en la sección 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 energía 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.

Page 124: Máquina semiautomática para dosificado y empaque de

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 estarán 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 operación. Pero se utiliza básicamente

cuando el proceso es de alta velocidad, es decir que la frecuencia de sellado es

mucho mas elevada y el sistema de calentamiento rápido resultaría ineficiente

ya que el incremento de la frecuencia haría 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. además 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

teflón 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 instalación de las mordazas es necesario que el bronce se aísle

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.

Page 125: Máquina semiautomática para dosificado y empaque de

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 diseñado 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

análoga. En ambos casos el acondicionamiento se hace por medio de un

comparador de modo que al PC llegue una señal 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. También debemos tener en cuenta el modelo empleado. Si se

utiliza en el sistema temperatura constante o calentamiento rápido.

Para el caso de resistencias de calentamiento rápido, se efectúan ciclos de

encendido y apagado. En el proceso del sellado se sella un tiempo en caliente

y un tiempo en frío por que el control en este caso se hace por medio de

temporizadores.

Page 126: Máquina semiautomática para dosificado y empaque de

Así que en el momento del sellado un sensor de algún tipo, que

preferiblemente será final de carrera por su economía, dará inicio al

calentamiento de la resistencia un tiempo para luego apagarla y permitir un

espacio de sellado en frío. El circuito controlador seria básicamente el

siguiente.

Fig 91.Control de temperatura para las selladoras

“S” nos indica el microswitch de activación 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.

Nótese 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 alimentación general se ha dispuesto un pulsador de

enclavamiento mecánico para energizar o desenergizar el sistema por

completo.

Los sistemas de calentamiento rápido se utilizan en ciclos de trabajo no tan

rápidos de modo que se da una disminución notable en el consumo de energía.

Tener un sistema de calentamiento constante implicaría muchos mas gastos de

luz.

Page 127: Máquina semiautomática para dosificado y empaque de

En este caso el operario debe hacer uso de su practica para determinar los

tiempos correspondientes para el calentamiento a miras de no dañar el papel

de empaque y proporcionar a su vez el selle correcto.

En otro modelo podemos controlar por medio de la comparación como lo hace

un pirometro. En este sistema de control, se sensa la variable a controlar

(temperatura) y por medio de una comparación 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 variación alrededor del valor deseado.

Igualmente apreciamos como el circuito de control genera el on / off de

encendido y apagado de la conmutación 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

potenciómetro 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 operación. Esta corriente generalmente no excede los 15Amp.

El circuito sigue como lo muestra la siguiente figura.

Fig 93.Control on/off

Page 128: Máquina semiautomática para dosificado y empaque de

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 económicamente mas accesible. En este tipo

de termistores encontramos que manejan temperaturas de 0º a más de 1000º

lo que para nuestro caso es más 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 variación 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 potenciómetro el cual permitirá la

selección 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 relación generalmente no es lineal lo que implica la

selección 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 métodos de

linealizacion que existen.

Este modelo presenta fallas referentes a la variación 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

señal de contacto, el resistor se encontraba en proceso de calentamiento lo

que hace no cambie inmediatamente sino que una especie de histéresis hace

que se presente un sobrepico de temperatura al valor deseado y de igual forma

en el momento del enfriamiento también se da esta histéresis de sobrepico

indeseado. En la práctica se observa que en el proceso de calentamiento la

Page 129: Máquina semiautomática para dosificado y empaque de

histéresis es un poco más pronunciada. Mas sin embargo se da una variación

de alrededor de 50 ºC lo que representa un mal funcionamiento del sistema de

sellado y una cantidad considerable de empaque dañado.

Fig 94.Error execivo

Para mantener una temperatura más constante sobre la resistencia es

necesario entonces hacer una variación 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

más 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 eléctrica. El control es diseñado 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 activación y desactivación; Por

medio de una entrada análoga 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 máximo escalizamos una salida en

porcentaje y así sabemos exactamente cuanto tenemos a la salida del sistema.

Page 130: Máquina semiautomática para dosificado y empaque de

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

consideración. 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

Page 131: Máquina semiautomática para dosificado y empaque de

Podemos incluir la visualización 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 visualización 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

Page 132: Máquina semiautomática para dosificado y empaque de

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 también manejar

fusible a fin de evitar que se dañe el triac o algún elemento de la etapa de

potencia como el relé o el optocoplador.

Page 133: Máquina semiautomática para dosificado y empaque de

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 máxima. El pulsador indicado

como máximo permite que al utilizar resistencias de calentamiento lento

ejecutemos 2 etapas en el proceso, en donde en la primera etapa llevamos la

resistencia rápidamente a una temperatura calculada por el operario e

inmediatamente después pone en off dando paso a que el sistema trabaje para

lo que esta propuesto.

17.5.4 LOGICA DEL PROGRAMA DEL PIC

Page 134: Máquina semiautomática para dosificado y empaque de

18 CONTROL E INTEGRACION DE PROCESOS

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

18.1 DESCRIPCIÓN DEL PC UTILIZADO:

Procesador 386 o 486 (166MHz)

Pantalla monocromática 14 pulgadas

8 o 16 MHz de memoria RAM

Entorno D.O.S (sistema operativo)

Teclado estándar

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

operación hechos en lenguaje de programación 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 número de entradas y salidas.

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

ventaja que resultan muy económicas, 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 operación es un

punto tampoco relevante y la velocidad de la maquina es mas que suficiente

para el sistema en cuestión.

El programa desarrollado permite diferentes tipos de operación, desde un

manejo puramente manual con elementos externos o si lo prefiere directamente

con el teclado y permite a su vez el modo automático de dosificado y sellado.

El software de trabajo permite la selección de modo discreto del tiempo de

sellado y ciclo de sellado. También permite la visualización de un contador que

indica el numero de ciclos de sellado realizados.

Page 135: Máquina semiautomática para dosificado y empaque de

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 prácticos 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 activación, por lo tanto es necesario hacer un circuito

electrónico que permita cambiar estos voltajes de 5 V a los niveles de voltajes

necesarios.

Page 136: Máquina semiautomática para dosificado y empaque de

18.2.1ACONDICIONAMIENTO PARA NIVELES DC

Fig 103.Acondicionamiento para niveles dc

18.2.2 ACONDICIONAMIENTO PARA SEÑALES A.C

Fig 104.Acondicionamiento para niveles ac

18.2.3 CONTROL ELECTROVALVULA DE LÍQUIDO

Asumimos que para el control de líquido vamos a utilizar una señal de control,

independientemente del sistema implementado. En el software la aplicación de

apertura puede ser para válvula de 3 vías manejada con pistón de simple

efecto. Pero en el caso de dar solución 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 fácilmente adaptable a cualquiera de los sistemas planteados.

Page 137: Máquina semiautomática para dosificado y empaque de

Fig 105.Control válvula 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

Page 138: Máquina semiautomática para dosificado y empaque de

necesaria debemos hacer el cambio en el algoritmo y dosificar después de todo

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

Page 139: Máquina semiautomática para dosificado y empaque de

18.4 PROGRAMAS

18.4.1PROGRAMA DE VERIFICACION DE ACCIONAMIENTOS DE L

SISTEMA

Permite al usuario la manipulación 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

según la tarea que se realiza al ingresar por teclado los números 1,2,3,4 o 0

(otra información no produce efecto alguno). El software escribe el dato en la

salida del puerto paralelo. Allí se tiene el dato de activación o no activación de

la válvula, dosificador, sellador y resistencia.

También es posible verificar el correcto funcionamiento de las entradas al

sistema de control que son el sensor de líquido, sensor de papel, sensor bolsita

y el switch externo.

Page 140: Máquina semiautomática para dosificado y empaque de

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 frío. 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 frío.

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 detección de la bolsita si después de un tiempo

definido la maquina no detecta nada pone el sistema en estado inicial y sale

abruptamente.

Page 141: Máquina semiautomática para dosificado y empaque de

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

calentarse y estar lista para trabajar correctamente.

La opción de contador actual trabaja igual que las anteriores y permite al

usuario cambiar el contador en caso de algún pequeño descuadre en el conteo

que puede darse por causas externas.

Tenemos también la opción 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

Page 142: Máquina semiautomática para dosificado y empaque de

ELIMINAR VISUALIZAR

La opción 8 nos permite guardar la configuración actual la cual nos muestra en

pantalla

Page 143: Máquina semiautomática para dosificado y empaque de

La opción 9 nos permite resetear el contador esta opción es restringida de tal

modo que obligue al usuario a dar datos como la fecha de la cantidad pasada y

esta información pueda guardarse en una base de datos.

18.4.3 PROGRAMA PRINCIPAL

El programa principal es el que hace el control automático de la maquina. Para

este caso al software se le anulan las partes del manejo de entradas al puerto

simplemente dejándolas como comentarios para que podamos ver como

trabajará el sistema. El programa lleva un acondicionamiento especial para la

simulación.

En la simulación damos un número inicial que simplemente es un número que

define un dato aleatorio que hace que el proceso pare por falta de papel,

líquido o simplemente una salida correcta del mismo por medio del switch

externo.

Vemos el contador, válvula 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 fría (OFF).

ESTADO INICIAL

Page 144: Máquina semiautomática para dosificado y empaque de

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

automático 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

Page 145: Máquina semiautomática para dosificado y empaque de

Inmediatamente después 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 succión de líquido. También se produce el cierre de la válvula

en el dosificador.

Page 146: Máquina semiautomática para dosificado y empaque de

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

selle en frío. A su vez el dosificador que ya a tenido tiempo de cargar la dosis

entrega líquido 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

Page 147: Máquina semiautomática para dosificado y empaque de

El sistema continúa 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)

Page 148: Máquina semiautomática para dosificado y empaque de

FINALIZACION

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

líquido o papel en este caso igualmente realiza un último ciclo y termina.

Page 149: Máquina semiautomática para dosificado y empaque de

En todos los casos la maquina queda en estado inicial.

Page 150: Máquina semiautomática para dosificado y empaque de

19. SISTEMA DE INFORMACION

El proyecto como tal ofrece el servicio del sistema de información, lo que hace

más llamativo el producto a nivel de comercialización.

El usuario no cuenta en sus planes la implementación de un servicio que

proporcione el manejo de base de datos de algún tipo de información que

puede ser beneficiosa para el desarrollo de una pequeña o mediana empresa

que pretende implementar automatización 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 pequeña información sobre el proceso de empacado.

Así como lo es la producción que se realiza a diario y alguna programación

especifica de maquina que pude ser recuperada según se desee.

El sistema de información esta básicamente aislado de esa parte del proceso.

El proceso de producción 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

Page 151: Máquina semiautomática para dosificado y empaque de

del inventario y la facturación, aunque podrían 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 podrían verse reflejados en un

descontrol total de la información 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 elaboración 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 pequeño o

mediano empresario.

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

facturación. De modo que el usuario tiene a su disposición un sistema que le

permite realizar consultas de precios, cantidades en almacén, actualización de

precios e inventarios. El sistema le da la posibilidad al cliente de manejar más

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 fácilmente de

una u otra forma al beneficio que el sistema en su totalidad ofrece.

Para la implantación del sistema de información 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 ningún inconveniente solo que los

programas deben llamarse por el nombre correspondiente asignado para el

ejecutable.

Page 152: Máquina semiautomática para dosificado y empaque de

20. PRESUPUESTOS

Los presupuestos correspondientes a la maquina dependerán del sistema a

implementar. En el transcurso de este trabajo se han especificado en cada uno

de los referentes las ventajas económicas versus la eficiencia que cada uno de

los modelos planteados presenta. Por esta razón solo algunas de las partes del

proyecto básicas en su desarrollo se especifican en este ítem. Y no es un

presupuesto como tal de un modelo específico sino una referencia económica 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 técnico que esta alcanzando el país hace que cada vez

esta mano de obra cueste aun menos cada día y los costos en materia prima

de igual forma cada vez se compiten mas y por esta razón se considera que

unos costos de referencia pueden ser minimizados en la medida en que se

desarrolle el país.

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

Page 153: Máquina semiautomática para dosificado y empaque de

MOTOR D.C $20.000 X 2

CONTROL TEMPERATURA $70.000

RELES INDUSTRIALES $10.000 X 5

COMPUTADOR NECESARIO $100.000

DRIVER DE COMUNICACIÓN 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

Page 154: Máquina semiautomática para dosificado y empaque de

21. ANEXOS

21.1 PROBLEMAS CON EL LÍQUIDO A EMPACAR

Teniendo en cuenta que como los líquidos que serán utilizados están

compuestos por azúcar, anilina, colorante, saborizante y demás ingredientes,

se hace necesario que en el tanque grande exista una especie de gancho en

acero inoxidable que haga la función de batidor, con el fin de que las sustancia

esté siempre homogénea y sus componentes no se retengan en el fondo del

tanque, debido a que algunos de estos componentes no solamente son

líquidos sino también sólidos.

Este batidor esta compuesto por un motor al que se añade un gancho con

aspas de acero inoxidable que se encargarán de batir la sustancia

constantemente.

Básicamente para el diseño 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 más económico y resulta más fácil de

conseguir en el comercio.

Otra consideración importante es que en el momento de mantener

constantemente el líquido en movimiento de forma circular se produce el efecto

de una centrifuga que implicaría 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 además que es claro que podemos generar derramamiento del liquido

por la parte superior. Específicamente las aspas deberán ser del diámetro del

tanque contenedor y así proporcionar una mezcla uniforme y no generar un

centro vacío de líquido. Además la batidora deberá alojar las aspas en forma

intercalada ya que de esta manera resultara mas económica la estructura a

Page 155: Máquina semiautomática para dosificado y empaque de

realizar. Con 2 aspas es más que suficiente. Además recuerde que en la parte

inferior del tanque las aspas no deben evitar que el líquido 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

DISEÑO 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 común 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

número de pedales en las operaciones cotidianas del trabajo; sin embargo,

cuando sea necesario su utilización, es conveniente considerar en su diseño

que: Su nivel sea lo más cercano posible al nivel del piso y sean del largo

suficiente para su fácil operación, y que permita ser operados con cualquiera

de los dos pies. Minimice la distancia entre el trabajador y su objeto de trabajo

Asegúrese de proporcionar un soporte adecuado para mano y antebrazo

cuando se realicen operaciones de precisión, 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

también es conveniente proporcionar un soporte para la herramienta, lo que

Page 156: Máquina semiautomática para dosificado y empaque de

reduce la necesidad de aplicación de fuerza por parte del usuario y le permite

un mejor control. Proteja a los trabajadores de sustancias químicas para que

puedan desarrollar su trabajo de forma segura y eficiente; la exposición a

pinturas, solventes, limpiadores, ácidos, pesticidas y gases daña su salud y

disminuye su desempeño y precisión en el trabajo. Al trabajar sentado,

asegúrese de que sus brazos bajen en forma vertical o lo más 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 también que los pies queden bien apoyados en

el piso o en alguna superficie de soporte adecuado. Las rampas con poca

inclinación, entre el 5 y 8%, y con superficie antiresbalante representan una

mejor opción en los sitios de trabajo que pequeñas 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. Asegúrese de que la altura de los tableros de

control, indicadores y botones de emergencia estén a una altura y distancia

adecuada para ser operados por todos los trabajadores. Asegúrese 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 posición 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 rápidamente y resultan difíciles de controlar; en estos casos lo más

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

diseñadas para utilizarse con cualquiera de las dos manos permiten que el

usuario las utilice con la mano que más se acomode, además de que permiten

alternar el trabajo con ambas manos, lo que disminuye la fatiga y el riesgo de

Page 157: Máquina semiautomática para dosificado y empaque 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; también

deben contar con un mango aislante de la electricidad y el calor, además de

reducir las vibraciones que se puedan transmitir a la mano y brazo. Los

músculos que cierran la mano son más 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 iluminación suficiente mejora el confort y desempeño de los

trabajadores, además de reducir la posibilidad de errores y el riesgo de

accidentes. El nivel de iluminación depende de la actividad que se realice y el

tiempo para observar los objetos; debe habe un mayor nivel de iluminación

cuando la actividad sea minuciosa o deba realizarse en forma muy rápida. Para

lugares donde se realizan tareas finas, delicadas o con piezas muy pequeñas,

es conveniente utilizar dos tipos de iluminación: Una para el alumbrado

general, y una específicamente para el área de trabajo. Un aspecto importante

a cuidar es que la iluminación 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 características 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. También 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 visión del trabajador, ya

que el reflejo provoca distracción, incomodidad y fatiga visual. La iluminación

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

disposición del mobiliario adecuada con respecto a la ubicación de la ventana,

esta debe contar con cortinas o persianas que permitan evitar reflejos y

molestias al usuario.

Page 158: Máquina semiautomática para dosificado y empaque de

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 condición de humedad relativa ambiental más cómoda para

el ser humano es cercana al 50%; cuando es muy elevada, es difícil la

evaporación del sudor y la resistencia del ser humano a altas temperaturas se

reduce. Para evitar esta situación es conveniente mejorar la ventilación del

lugar de trabajo. Así mismo, cuando la humedad relativa es muy baja, hay una

excesiva evaporación del sudor y se resecan las membranas mucosas, como

las de nariz y boca; en esta situación es conveniente incrementar artificialmente

la humedad del lugar. El propósito principal de la ventilación 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 física es ligera, la temperatura ambiente debe estar entre los 19 y 21

°C, pero para un trabajo industrial de gran demanda física se recomienda una

temperatura ambiente entre los 12 y 16 °C.

AMBIENTE SONORO. Aísle 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 estén bien

colocadas y ajustadas para evitar el ruido que provoca su vibración. Los pisos

deben ser de materiales que resulten seguros para transitar y proporcionen el

soporte adecuado para la actividad que se realiza, pero su diseño y el material

no deben generar elevados niveles de ruido al transitar por ellos. Las conchas

para protección auditiva representan una mejor protección a los niveles

elevados de ruido que los tapones para oídos, y permiten su combinación

además para los supervisores es fácil monitorear su uso y no se mueven

fácilmente de su lugar. Aunque el oído presenta una forma de protección

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

Page 159: Máquina semiautomática para dosificado y empaque de

que accione su mecanismo de protección. Coloque barreras para contener el

sonido y que no afecte a personas sin protección auditiva en otras áreas de

trabajo o pasillos cercanos lo que resultara muy útil en el caso del uso de

compresores.

CONTROLES E INDICADORES. Asegúrese que los controles e indicadores

importantes estén 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

demás en dentro del área secundaria. La lectura incorrecta de los indicadores

en los tableros de control puede resultar crítica y peligrosa para los usuarios, el

proceso y los productos. Asegúrese que los controles e indicadores sean

fáciles de distinguir y que la visibilidad de sus indicadores (punteros, caracteres

o números) sea adecuada para las condiciones de trabajo. En algunas

ocasiones es conveniente seleccionar la posición "normal" de los indicadores

de tal forma que queden alineados, lo que facilita la identificación de

situaciones "fuera de lo normal". Asegúrese que las señales, controles y

apagadores sean fáciles de ver, de leer y de entender. Asegúrese que los

controles de encendido sean difíciles de accionar por accidente, y que los

controles de apagado sean fáciles de localizar y accionar. En los indicadores se

debe evitar escalas múltiples o no-lineales. Los números, marcas de escala y

unidades deben ser claramente distinguibles desde la distancia a la que el

operador normalmente realiza la lectura, además debe ser fácilmente

distinguible el apuntador y la lectura que indica. Es conveniente reforzar con

otro color la información que recibe el usuario sobre situaciones críticas o

peligrosas. Los indicadores analógicos son más fáciles de interpretar por el

usuario cuando no se requiere una lectura precisa del valor indicado; la

posición de la aguja y el color de la zona donde se encuentra permiten

identificar rápidamente la situación sin tener que interpretar el significado de la

medición; por el contrario, si se requiere una lectura precisa de la medición

indicada, es más conveniente utilizar uno digital. La mejor ubicación para los

controles manuales e indicadores es a una altura entre la cadera y el hombro,

así como a una distancia máxima de la longitud del brazo del usuario, desde su

posición normal de trabajo. Asegurese que los elementos de control sean del

Page 160: Máquina semiautomática para dosificado y empaque de

tamaño, forma y diseño adecuados para las condiciones en que van a ser

utilizados, considerando que el usuario pueda utilizarlos con el equipo de

seguridad y protección personal requerido para la tarea que desarrolla.

Asegúrese de que los trabajadores conozcan el significado de las señales de

los tableros de control y que estén capacitados para actuar ante ellas. También

es importante no saturar de información por medio de estas señales al

operador. Si el control únicamente responde a dos opciones, como apagado y

encendido, un botón de pulsación, pedal o interruptor de dos posiciones es el

tipo de control indicado; si se requiere de control gradual o existen más

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 lesión en cuello, hombros y

espalda. Asegúrese 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 más

fácil, rápido y seguro si los objetos cuentan con una forma adecuada de agarre

y sujeción. 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 más 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

más seguro y efectivo si el movimiento se realiza enfrente del cuerpo y no en

forma lateral. Sin embargo, se debe reducir al mínimo posible el movimiento

manual de cargas pesadas. Indique de forma clara, explicita y redundante

cuando el peso de los elementos represente un riesgo de lesión 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 diseño de los contenedores, pero también deben

realizarse revisiones periódicas para evitar utilizar contenedores maltratados o

desgastados por el uso, y que puedan lesionar a sus usuarios. En el diseño de

contenedores hay que considerar que sus dimensiones no sean excesivas para

Page 161: Máquina semiautomática para dosificado y empaque de

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

centímetros de largo o 50 centímetros de ancho, se debe considerar en el

diseño que va a ser transportado por más de una persona, contando con los

suficientes medios de agarre para varios operadores distribuidos

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

acérquese al objeto lo más posible y apoye los pies separados para mantener

un buen equilibrio. Es preferible en el movimiento manual de cargas repartir

simétricamente el peso entre ambos brazos y mantener las cargas lo más

cercano posible al cuerpo. Evite girar cargando objetos pesados cuando se

encuentre sentado. Asegúrese que el diseño y tamaño 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

protección personal sea del tamaño adecuado del usuario; en el caso de los

guantes de trabajo, el trabajador tiene que aplicar hasta 20% más de fuerza si

no son de su tamaño. El equipo de protección personal debe ser de fácil

mantenimiento y limpieza por parte del usuario; también se debe realizar

inspecciones periódicas y frecuentes de sus condiciones, para renovarlos en

caso de deterioro que represente algún riesgo para el trabajador. Asegurese

que el personal utilice el equipo de protección regularmente proporcionándole

una adecuada información y entrenamiento sobre su uso, la forma de ajustarlo,

inspeccionarlo, limpiarlo y mantenerlo. Además, 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 algún riesgo de accidente en los pies y de conformidad

con la legislación local vigente. En forma general, la selección 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 caída de objetos o golpes; La suela de seguridad

protege al usuario de lesiones por picos o puntas en el suelo; Si hay riesgo

eléctrico y agua o humedad en el piso, se utilizan botas impermeables y

aislantes. Se consideran zapatos al calzado que cubre totalmente el pie, y

Page 162: Máquina semiautomática para dosificado y empaque de

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. Asegúrese que el equipo de protección personal sea

adecuado para las dimensiones del usuario y se ajuste a su antropometría, ya

que puede incrementar el riesgo el utilizar equipo que no sea del tamaño

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 instalación. De conectar el motor en forma incorrecta la

bomba girara en el sentido contrario y su efecto será el de no proporcionar flujo

alguno.

También como sugerencia técnica 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 término, para que esta arranque a trabajar correctamente.

En otras palabras diríamos 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 tubería de salida

de la bomba con el fin de que en estado de reposo, la bomba no debe soportar

la presión que ejerce el líquido en reposo en la tubería.

21.4 RECOMENDACIONES PARA EL MANEJO DE AIRE A PRESI ON Y LA

CORRECTA FORMA DE INSTALAR UNA RED DE AIRE

El compresor se considera de tamaño pequeño ya que su consumo será menor

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

Page 163: Máquina semiautomática para dosificado y empaque de

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, consérvese alejado de: humo de vehículos, de otras

maquinas, reverberos y procurar no mantenerlo estacionado con el motor en

funcionamiento. Evite sitios dónde 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 dónde 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 rápido de los diferentes

elementos que componen el circuito neumático.

Para la red de aire como elementos básicos 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 prepararán las condiciones del aire comprimido

justamente antes de utilizarlo en los equipos neumáticos o maquinaria

neumática. Esto asegura que el suministro de aire sea limpio, la presión sea la

correcta y que partículas finas de aceite limpio sean transportadas en el aire

para lubricar válvulas, cilindros y herramientas neumáticas.

Como tal el filtro es encargado de evitar que partículas de agua pasen a los

elementos finales, así como partículas sólidas contaminantes. Estas partículas

decantan a un pequeño 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 automáticos que se

auto limpian o purgan en la medida en que se van llenando. En este filtro se

retienen partículas hasta de 1µm de diámetro.

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

farmacéuticos básicamente. Este tiene la capacidad de remover partículas por

Page 164: Máquina semiautomática para dosificado y empaque de

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

prevenir una corta vida del elemento filtrante. Recuerde que estos elementos

filtrantes son zeolitas (mallas químicas) especiales la cuales después de un

tiempo deben desecharse y ser cambiadas.

El regulador es el encargado de proporcionar una presión de trabajo en los

elementos reduciendo una presión p1 de línea a una presión p2 requerida por

el elemento (pistones). Generalmente este elemento lleva consigo un

manómetro el cual permite observar la presión de salida que entrega el

regulador.

En el lubricador por efectos de presión negativa (tubo de benturi) se succionan

pequeñas y pocas partículas de aceite las cuales van a mezclarse con el aire

de trabajo. Estas partículas son muy pequeñas y básicamente ayudan a

proteger la vida útil de los elementos neumáticos, alargar la vida útil de los

sellos y empaques, y proporcionar lubricación en las partes donde se genere

fricción. 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 básicos de instalación. Estos son:

Se procura que en cada banco de trabajo exista una unidad FRL según la

necesidad y el filtro coalescente si así se requiriera. La distribución de aire se

hace por medio de tubería en la que se utiliza el pvc. Es importante tener en

cuenta las curvas que se utilizan las cuales deben evitarse al máximo ya que

en estos ángulos y más aun en ángulos mayores podría presentarse

fenómenos de turbulencia del aire lo que implicaría más condensación. En

estas esquinas se recomienda instalar colas de purgas para recolectar y

remover agua producto de la condensación del aire. Igualmente el nivel se

Page 165: Máquina semiautomática para dosificado y empaque de

sube proporcionando a cada línea de tubería una inclinación de 5º en caída

para cada tramo que en términos generales no debe sobrepasar los 35m sin

purga. Esta purga existe del tipo manual y automática y su utilización depende

básicamente de la economía del cliente o de factores alternos que puedan

exigir la utilización de una u otra. Así mismo se coloca una válvula incorporada

para despresurizar la unidad antes de un mantenimiento. Es bueno también

instalar un filtro de malla para retener las partículas sólidas grandes.

En los puntos en que se va a tomar aire a presión sacado de la línea principal

se utiliza una salida en cuello de ganso como se conoce popularmente de tal

modo que no se convierta en un punto de decantación 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 cálculo de las

caídas de presión que se presenta en las tuberías teniendo en cuenta la

presión de trabajo, el caudal o flujo requerido, la longitud y diámetro de la

tubería. Con esta grafica podemos encontrar cualquiera de las variables

establecidas conociendo las demás.

21.5 TRANSMISIONES

Para producir movimientos de rotación es evidente que el motor es un

elemento útil. Si queremos producir un movimiento lineal debemos adicionar

una transmisión 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 teoría física es la misma.

Page 166: Máquina semiautomática para dosificado y empaque de

El perímetro es proporcional al radio de la forma P = 2 (pi) r

Y la relación entre velocidades, perímetros y torques es:

P1 / P2 = W1 / W2 = T2 / T1

Para el caso de los engranajes dicha relación se conserva pero el perímetro en

este caso es equivalente al número de dientes de modo que para el engranaje

la variable perímetro “P” será “N” nuecero de dientes.

N1 / N2 = W1 / W2 = T2 / T1

Note que el máximo torque se realiza en la parte externa del anillo en donde es

más 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 transmisión 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 estandarización de las medidas de diámetro y rosca

que estos pueden tener. Podemos definirlos en pulgadas o en milímetros ya

Page 167: Máquina semiautomática para dosificado y empaque de

que sus equivalentes son fácilmente adquiribles. Este diámetro de racor

depende del diámetro de la manguera flexible que vayamos a utilizar y por ello

debemos tener presente el caudal y presión.

21.7 CODIGO DE PROGRAMA PIC CONTROL DEL DOSIFICADOR

º;trabaja mostrando hasta 5s;ya tien cuacrados

tiempos para los 0.1s;memoria EEprom

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

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

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

succión , empuje

;y espera entre ciclos;esta listo las funciones falta

cambio de PIC

;reformar entradas portb,menos3 y portb,menos4

cambiar por otras 2 entradas

; y actualizar cambio en la parte

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

trabaja con rele y recupera 2 salidas;muestra tiempo

decrementando mientras pasa el tiempo espera entre

ciclos

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

motores y no caliente todo el tiempo

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

porte,1 mmanejan pistón sale y entra individualmente

;listo ese ani……..

listp=16f877

PC equ 0x02

estado equ 0x03

porta equ 0x05

portb equ 0x06

portc equ 0x07

portd equ 0x08

porte equ 0x09

intcon equ 0x0b

EEDATA_EECON1 equ 0x0c

EEADR_EECON2 equ 0x0d

eedata equ 0x08

eeadr equ 0x09

eecon1 equ 0x08

eecon2 equ 0x09

adcon1 equ 0x1f

dato equ 0x20

tiempo1 equ 0x21

tiempo2 equ 0x22

tiempo3 equ 0x23

tiempo4 equ 0x24

uni1 equ 0x25

uni2 equ 0x26

dec1 equ 0x27

dec2 equ 0x28

uni3 equ 0x29

uni4 equ 0x2a

con1 equ 0x2b

con2 equ 0x2c

enlinea equ 0x2d

enlinea1 equ 0x2e

unidad equ 0x2f

decena equ 0x30

numero equ 0x31

con3 equ 0x32

con4 equ 0x33

con5 equ 0x34

direccion equ 0x35

unid3 equ 0x36

trans1d equ 0

trans1u equ 1

trans2d equ 2

trans2u equ 3

trans3 equ 4

trans4 equ 5

mas1 equ 7

Page 168: Máquina semiautomática para dosificado y empaque de

menos1 equ 1

mas2 equ 2

menos2 equ 3

mas3 equ 4

menos3 equ 5

mas4 equ 6

menos4 equ 7

único equ 6

darciclo equ 7

salentra equ 2

md equ 3

mi equ 4

e equ 5

setiar equ 0

gardar equ 1

org 0

bcf estado,6

bsf estado,5 ;cambio banco1.

movlw 0x80

movwf portd

;puerto d de salida (visualizacion),

d7=entrada mas1

movlw 0xfe

movwf portb

movlw 0xc0

movwf portc ;viusualizacion

dinamica; c7,c6 entradas

movlw 0x07

movwf adcon1

movlw 0x03

movwf porta

movlw 0x03

movwf porte

bcf estado,6

bcf estado,5 ;cambio banco0.

inicio

;pruebas1

bcf intcon,7

movlw 0x00

movwf tiempo1

movlw 0x00

movwf tiempo2

movlw 0x00

movwf tiempo3

movlw 0x00

movwf tiempo4

clrf porta

clrf porte

bcf portc,trans1u

bcf portc,trans1d

bcf portc,trans2u

bcf portc,trans2d

bcf portc,trans3

bcf portc,trans4

bsf portc,trans1d

movlw 3fh ;0 0011 1111 3f 0100 0000 40

movwf portd

call tiemposs

movlw 06h ;1 0000 0110 06 0111 1001

79

movwf portd

call tiemposs

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

movwf portd

call tiemposs

movlw 4fh ;3 0100 1111 4f 0011 0000 30

movwf portd

call tiemposs

movlw 66h ;4 0110 0110 66 0001 1001

19

movwf portd

call tiemposs

movlw 6dh ;5 0110 1101 6d 0001 0010

12

movwf portd

call tiemposs

movlw 7dh ;6 0111 1101 7d 0000 0010

02

movwf portd

call tiemposs

movlw 07h ;7 0000 0111 07 0111 1000

78

movwf portd

call tiemposs

movlw 7fh ;8 0111 1111 7f 0000 0000 00

movwf portd

call tiemposs

movlw 6fh ;9 0110 1111 6f 0001 0000 10

movwf portd

call tiemposs

bcf portc,trans1d

clrf uni4 ;inicialmente

siempre carga el registro 0(ultimo usado)

call cargartiempos

call llenardecuni

rutina

btfss portc,unico

call elciclo

btfss portc,darciclo

call elciclo

Page 169: Máquina semiautomática para dosificado y empaque de

btfsc portd,mas1 ;si el bit de entrada

esta "on" aumenta tiempo1.

incf tiempo1,1

btfss portb,menos1 ;si el bit de entrada

esta "on" decrementa tiempo1.

decf tiempo1,1

btfsc portb,mas2 ;si el bit de entrada

esta "on" aumenta tiempo2.

incf tiempo2,1

btfsc portb,menos2 ;si el bit de entrada

esta "on" decrementa tiempo2.

decf tiempo2,1

btfsc portb,mas3 ;si el bit de entrada

esta "on" aumenta tiempo3.

incf tiempo3,1

btfsc portb,menos3 ;si el bit de entrada

esta "on" decrementa tiempo4.

decf tiempo3,1

btfsc portb,mas4 ;si el bit de entrada

esta "on" aumenta tiempo3.

incf tiempo4,1

btfsc portb,menos4 ;si el bit de entrada

esta "on" decrementa tiempo4.

decf tiempo4,1

btfss porta,setiar

call cargartiempos

btfss porta,gardar

call cambiartiempos1

btfsc porte,0

call tienda

btfsc porte,1

call tienda

;$$$$$$$$$$$$$$$$$$$$$ y listo funcionando.

call cambiartiempos

call llenardecuni

call visualizo

goto rutina

tienda

btfss porte,0

goto derecho

bsf porta,2

bsf porte,2

bsf porta,md

call tiempoabrir

bcf porta,md

bcf porte,2

bsf porta,e

izq

call visualizo

btfsc porte,0

goto izq

bcf porta,e

bsf porte,2

bsf porta,mi

call tiempocerrar

bcf porta,mi

bcf porte,2

bcf porta,2

return

derecho

bcf porta,2

bsf porte,2

bsf porta,md

call tiempoabrir

bcf porta,md

bcf porte,2

bsf porta,e

der

call visualizo

btfsc porte,1

goto der

bcf porta,e

bsf porte,2

bsf porta,mi

call tiempocerrar

bcf porta,mi

bcf porte,2

bcf porta,2

return

cargartiempos

;selleciona la secuencia a cargar el set

call tiemposs

call tiemposs

call tiemposs

call tiemposs

clrf direccion

movf uni4,0

movwf con5

incf con5,1

decfsz con5,1

goto cualx

goto estex

cualx

incf direccion,1

incf direccion,1

incf direccion,1

decfsz con5,1

goto cualx

estex

movf direccion,0

bsf estado,6 ;

Page 170: Máquina semiautomática para dosificado y empaque de

bcf estado,5 ;

movwf EEADR_EECON2 ;

bsf estado,5 ;

bcf EEDATA_EECON1,7

bsf EEDATA_EECON1,0 ;

lee1

btfsc EEDATA_EECON1,0

goto lee1

bcf estado,5 ;

movf EEDATA_EECON1,0

bcf estado,5

bcf estado,6 ;bank0

movwf tiempo1

incf direccion,1

movf direccion,0

bsf estado,6 ;

bcf estado,5 ;

movwf EEADR_EECON2 ;

bsf estado,5 ;

bcf EEDATA_EECON1,7

bsf EEDATA_EECON1,0 ;

lee2

btfsc EEDATA_EECON1,0

goto lee2

bcf estado,5 ;

movf EEDATA_EECON1,0

bcf estado,5

bcf estado,6 ;bank0

movwf tiempo2

incf direccion,1

movf direccion,0

bsf estado,6 ;

bcf estado,5 ;

movwf EEADR_EECON2 ;

bsf estado,5 ;

bcf EEDATA_EECON1,7

bsf EEDATA_EECON1,0 ;

lee3

btfsc EEDATA_EECON1,0

goto lee3

bcf estado,5 ;

movf EEDATA_EECON1,0

bcf estado,5

bcf estado,6 ;bank0

movwf tiempo3

incf direccion,1

return

cambiartiempos

clrf direccion

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

bsf estado,6

bsf estado,5

atril0

btfsc EEDATA_EECON1,1

goto atril0

bcf estado,5

bcf estado,6

movf direccion,0

bsf estado,6

movwf EEADR_EECON2

bcf estado,6

movf tiempo1,0

bsf estado,6

movwf EEDATA_EECON1

bsf estado,5

bcf EEDATA_EECON1,7

bsf EEDATA_EECON1,2

bcf intcon,7

movlw 0x55

;MOVLW 0x55

;Write 55h to

movwf EEADR_EECON2

;MOVWF EECON2

;EECON2

movlw 0xAA

;MOVLW 0xAA

;Write AAh to

movwf EEADR_EECON2

;MOVWF EECON2

;EECON2

bsf EEDATA_EECON1,1

;BSF EECON1, WR

;Start write operation

bsf intcon,7 ;BSF INTCON,

GIE ;if using interrupts,

atril1

btfsc EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

goto atril1

;write to finish

;Only enable interrupts

bcf EEDATA_EECON1,2

;BCF EECON1, WREN ;Disable writes

bcf estado,5

bcf estado,6

incf direccion,1

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

bsf estado,6 ;BSF STATUS, RP1

Page 171: Máquina semiautomática para dosificado y empaque de

bsf estado,5 ;BSF STATUS, RP0

;Bank 3

atril2

btfsc EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

goto atril2

;write to finish

bcf estado,5 ;BCF

STATUS, RP0 ;Bank 2

bcf estado,6 ;bank0

movf direccion,0 ;MOVF ADDR,

W ;Address to

bsf estado,6 ;bank2

movwf EEADR_EECON2

;MOVWF EEADR ;write to

bcf estado,6

movf tiempo2,0 ;VALUE, W

;Data to

bsf estado,6

movwf EEDATA_EECON1

;MOVWF EEDATA ;write

bsf estado,5 ;BSF

STATUS, RP0 ;Bank 3

bcf EEDATA_EECON1,7

;BCF EECON1, EEPGD ;Point to Data

memory

bsf EEDATA_EECON1,2

;BSF EECON1, WREN ;Enable writes

;Only disable interrupts

bcf intcon,7 ;BCF INTCON, GIE ;if

already enabled,;otherwise discard

movlw 0x55

;MOVLW 0x55

;Write 55h to

movwf EEADR_EECON2

;MOVWF EECON2

;EECON2

movlw 0xAA

;MOVLW 0xAA

;Write AAh to

movwf EEADR_EECON2

;MOVWF EECON2

;EECON2

bsf EEDATA_EECON1,1

;BSF EECON1, WR

;Start write operation

bsf intcon,7 ;BSF INTCON,

GIE ;if using interrupts,

atril3

btfsc EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

goto atril3

;write to finish

;Only enable interrupts

bcf EEDATA_EECON1,2

;BCF EECON1, WREN ;Disable writes

bcf estado,5

bcf estado,6

incf direccion,1

bsf estado,6 ;BSF

STATUS, RP1

bsf estado,5 ;BSF

STATUS, RP0 ;Bank 3

atril4

btfsc EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

goto atril4

;write to finish

bcf estado,5 ;BCF

STATUS, RP0 ;Bank 2

bcf estado,6 ;bank0

movf direccion,0 ;MOVF ADDR,

W ;Address to

bsf estado,6 ;bank2

movwf EEADR_EECON2

;MOVWF EEADR ;write to

bcf estado,6

movf tiempo3,0 ;VALUE, W

;Data to

bsf estado,6

movwf EEDATA_EECON1

;MOVWF EEDATA ;write

bsf estado,5 ;BSF

STATUS, RP0 ;Bank 3

bcf EEDATA_EECON1,7

;BCF EECON1, EEPGD ;Point to Data

memory

bsf EEDATA_EECON1,2

;BSF EECON1, WREN ;Enable writes

;Only disable interrupts

bcf intcon,7 ;BCF INTCON,

GIE ;if already enabled,;otherwise discard

movlw 0x55

;MOVLW 0x55

;Write 55h to

movwf EEADR_EECON2

;MOVWF EECON2

;EECON2

Page 172: Máquina semiautomática para dosificado y empaque de

movlw 0xAA

;MOVLW 0xAA

;Write AAh to

movwf EEADR_EECON2

;MOVWF EECON2

;EECON2

bsf EEDATA_EECON1,1

;BSF EECON1, WR

;Start write operation

bsf intcon,7 ;BSF INTCON,

GIE ;if using interrupts,

atril5

btfsc EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

goto atril5

;write to finish

;Only enable interrupts

bcf EEDATA_EECON1,2

;BCF EECON1, WREN ;Disable writes

bcf estado,5

bcf estado,6

incf direccion,1

return;

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

cambiartiempos1

clrf direccion

movf uni4,0

movwf con5

incf con5,1

decfsz con5,1

goto cualy

goto estey

cualy

incf direccion,1

incf direccion,1

incf direccion,1

decfsz con5,1

goto cualy

estey

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

bsf estado,6 ;BSF

STATUS, RP1

bsf estado,5 ;BSF

STATUS, RP0 ;Bank 3

atril10

btfsc EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

goto atril10

;write to finish

bcf estado,5 ;BCF

STATUS, RP0 ;Bank 2

bcf estado,6 ;bank0

movf direccion,0 ;MOVF ADDR,

W ;Address to

bsf estado,6 ;bank2

movwf EEADR_EECON2

;MOVWF EEADR ;write to

bcf estado,6

movf tiempo1,0 ;VALUE, W

;Data to

bsf estado,6

movwf EEDATA_EECON1

;MOVWF EEDATA ;write

bsf estado,5 ;BSF

STATUS, RP0 ;Bank 3

bcf EEDATA_EECON1,7

;BCF EECON1, EEPGD ;Point to Data

memory

bsf EEDATA_EECON1,2

;BSF EECON1, WREN ;Enable writes

;Only disable interrupts

bcf intcon,7 ;BCF INTCON,

GIE ;if already enabled,;otherwise discard

movlw 0x55

;MOVLW 0x55

;Write 55h to

movwf EEADR_EECON2

;MOVWF EECON2

;EECON2

movlw 0xAA

;MOVLW 0xAA

;Write AAh to

movwf EEADR_EECON2

;MOVWF EECON2

;EECON2

bsf EEDATA_EECON1,1 ;BSF

EECON1, WR ;Start write operation

bsf intcon,7 ;BSF INTCON,

GIE ;if using interrupts,

atril11

btfsc EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

goto atril11

;write to finish

;Only enable interrupts

bcf EEDATA_EECON1,2

;BCF EECON1, WREN ;Disable writes

bcf estado,5

Page 173: Máquina semiautomática para dosificado y empaque de

bcf estado,6

incf direccion,1

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

bsf estado,6 ;BSF

STATUS, RP1

bsf estado,5 ;BSF

STATUS, RP0 ;Bank 3

atril12

btfsc EEDATA_EECON1,1

;BTFSC EECON1, WR ;Wait for

goto atril12

;write to finish

bcf estado,5 ;BCF

STATUS, RP0 ;Bank 2

bcf estado,6 ;bank0

movf direccion,0 ;MOVF ADDR,

W ;Address to

bsf estado,6 ;bank2

movwf EEADR_EECON2

;MOVWF EEADR ;write to

bcf estado,6

movf tiempo2,0 ;VALUE, W

;Data to

bsf estado,6

movwf EEDATA_EECON1

;MOVWF EEDATA ;write

bsf estado,5 ;BSF

STATUS, RP0 ;Bank 3

bcf EEDATA_EECON1,7

;BCF EECON1, EEPGD ;Point to Data

memory

bsf EEDATA_EECON1,2

;BSF EECON1, WREN ;Enable writes

bcf intcon,7

movlw 0x55

movwf EEADR_EECON2

movlw 0xAA

movwf EEADR_EECON2

bsf EEDATA_EECON1,1

bsf intcon,7

atril13

btfsc EEDATA_EECON1,1

goto atril13

bcf EEDATA_EECON1,2

bcf estado,5

bcf estado,6

incf direccion,1

bsf estado,6

bsf estado,5

atril14

btfsc EEDATA_EECON1,1

goto atril14

bcf estado,5

bcf estado,6

movf direccion,0

bsf estado,6

movwf EEADR_EECON2

bcf estado,6

movf tiempo3,0

bsf estado,6

movwf EEDATA_EECON1

bsf estado,5

bcf EEDATA_EECON1,7

bsf EEDATA_EECON1,2

bcf intcon,7

movlw 0x55

movwf EEADR_EECON2

movlw 0xAA

movwf EEADR_EECON2

bsf EEDATA_EECON1,1

bsf intcon,7

atril15

btfsc EEDATA_EECON1,1

goto atril15

bcf EEDATA_EECON1,2

bcf estado,5

bcf estado,6

incf direccion,1

return;

elciclo

call secuenciax

btfsc portc,unico

return

movf uni3,0

ciclon

movlw 0x20

movwf con4

triciclo

call tiempoespera

decfsz con4,1

goto triciclo

decfsz uni3,1

goto ciclon

call tiempoespera

call tiempoespera

call tiempoespera

call tiempoespera

Page 174: Máquina semiautomática para dosificado y empaque de

call tiempoespera

call tiempoespera

call tiempoespera

call tiempoespera

call tiempoespera

call tiempoespera

call tiempoespera

call tiempoespera

return

secuenciax

bsf porta,2

bsf porte,2

bsf porta,md

call tiempoabrir

bcf porta,md

bcf porte,2

bsf porta,e

call primertiempo

bcf porta,e

bsf porte,2

bsf porta,mi

call tiempocerrar

bcf porta,mi

bcf porte,2

bcf porta,2

bsf porte,2

bsf porta,md

call tiempoabrir

bcf porta,md

bcf porte,2

bsf porta,e

call segundotiempo

bcf porta,e

bsf porte,2

bsf porta,mi

call tiempocerrar

bcf porta,mi

bcf porte,2

return;

llenardecuni

movf tiempo1,0

movwf enlinea

call llenadad

call llenadau

movf decena,0

movwf dec1

movf unidad,0

movwf uni1

movf tiempo2,0

movwf enlinea

call llenadad

call llenadau

movf decena,0

movwf dec2

movf unidad,0

movwf uni2

movf tiempo3,0

movwf enlinea

call llenadau

movf unidad,0

movwf uni3 ;tiempo espera

funciona con uni3 no con tiempo3

movf tiempo4,0

movwf enlinea

call llenadau

movf unidad,0

movwf uni4 ;secuencia

funciona con uni4 no con tiempo4

return

llenadad

clrf decena

movf enlinea,0

sublw .49

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .99

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .149

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .199

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .249

btfsc estado,0

return

incf decena,1

return

llenadau

movf enlinea,0

movwf enlinea1

clrf unidad

movf enlinea1,0

Page 175: Máquina semiautomática para dosificado y empaque de

sublw .4

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .9

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .14

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .19

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .24

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .29

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .34

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .39

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .44

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .49

btfsc estado,0

return

clrf unidad

movf enlinea1,0

sublw .54

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .59

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .64

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .69

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .74

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .79

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .84

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .89

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .94

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .99

btfsc estado,0

return

clrf unidad

movf enlinea1,0

sublw .104

btfsc estado,0

Page 176: Máquina semiautomática para dosificado y empaque de

return

incf unidad,1

movf enlinea1,0

sublw .109

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .114

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .119

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .124

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .129

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .134

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .139

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .144

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .149

btfsc estado,0

return

clrf unidad

movf enlinea1,0

sublw .154

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .159

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .164

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .169

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .174

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .179

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .184

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .189

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .194

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .199

btfsc estado,0

return

clrf unidad

movf enlinea1,0

sublw .204

btfsc estado,0

return

incf unidad,1

Page 177: Máquina semiautomática para dosificado y empaque de

movf enlinea1,0

sublw .209

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .214

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .219

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .224

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .229

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .234

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .239

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .244

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .249

btfsc estado,0

return

clrf unidad

return

visualizo

movf dec1,0

movwf numero

call lamuestra

movwf portd

bsf portc,trans1d

call tiempomuestra

bcf portc,trans1d

movf uni1,0

movwf numero

call lamuestra

movwf portd

bsf portc,trans1u

call tiempomuestra

bcf portc,trans1u

movf dec2,0

movwf numero

call lamuestra

movwf portd

bsf portc,trans2d

call tiempomuestra

bcf portc,trans2d

movf uni2,0

movwf numero

call lamuestra

movwf portd

bsf portc,trans2u

call tiempomuestra

bcf portc,trans2u

movf uni3,0

movwf numero

call lamuestra

movwf portd

bsf portc,trans3

call tiempomuestra

bcf portc,trans3

movf uni4,0

movwf numero

call lamuestra

movwf portd

bsf portc,trans4

call tiempomuestra

bcf portc,trans4

return

tiempomuestra1

clrf con1

movlw 0x02

movwf con2

tm1

decfsz con1,1

goto tm1

decfsz con2,1

goto tm1

return;

tiemposs

clrf con1

Page 178: Máquina semiautomática para dosificado y empaque de

clrf con2

movlw 0x2

movwf con3

tms

decfsz con1,1

goto tms

decfsz con2,1

goto tms

decfsz con3,1

goto tms

return;

tiempoespera

call visualizo

call visualizo

call visualizo

return;

tiempoabrir

movlw 0x40

movwf con3

tmab

call visualizo

call visualizo

decfsz con3,1

goto tmab

return;

tiempocerrar

movlw 0x40

movwf con3

tmce

call visualizo

call visualizo

decfsz con3,1

goto tmce

return;

primertiempo

movf tiempo1,0

movwf con3

incf con3,1

tmun

call visualizo

call visualizo

decfsz con3,1

goto tmun

return;

segundotiempo

movf tiempo2,0

movwf con3

incf con3,1

tmseg

call visualizo

call visualizo

decfsz con3,1

goto tmseg

return;

tiempomuestra

clrf con1

movlw 0x10

movwf con2

tme

decfsz con1,1

goto tme

decfsz con2,1

goto tme

return;

lamuestra

incf numero,1

decfsz numero,1

goto m1

retlw 3fh ;0 0011 1111 3f 0100 0000 40

m1

decfsz numero,1

goto m2

retlw 06h ;1 0000 0110 06 0111 1001

79

m2

decfsz numero,1

goto m3

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

m3

decfsz numero,1

goto m4

retlw 4fh ;3 0100 1111 4f 0011 0000 30

m4

decfsz numero,1

goto m5

retlw 66h ;4 0110 0110 66 0001 1001

19

m5

decfsz numero,1

goto m6

retlw 6dh ;5 0110 1101 6d 0001 0010

12

m6

decfsz numero,1

goto m7

retlw 7dh ;6 0111 1101 7d 0000 0010

02

m7

decfsz numero,1

goto m8

retlw 07h ;7 0000 0111 07 0111 1000

78

Page 179: Máquina semiautomática para dosificado y empaque de

m8

decfsz numero,1

goto m9

retlw 7fh ;8 0111 1111 7f 0000 0000 00

m9

decfsz numero,1

goto m10

retlw 6fh ;9 0110 1111 6f 0001 0000 10

m10

retlw 0x79

End

21.8 CODIGO DEL PROGRAMA PIC PARA CONTROL DE TEMPER ATURA

programa para el PIC de temperatura

;CONTROL DE TEMPERATURA 7 segmentos

;visualiza dinamicamente por el puerto B las dos

salidas de 7 segmentos y el

;bit de control muestra datos grabados en la eprom del

tiempo de

Pc equ 0x02

porta equ 0x05

portb equ 0x06

estado equ 0x03

intcon equ 0x0B

eedata equ 0x08

eeadr equ 0x09

eecon1 equ 0x08

eecon2 equ 0x09

dato equ 0x10

t1 equ 0x11

t2 equ 0x12

con1 equ 0x13

t11 equ 0x14

t22 equ 0x15

contr equ 0x16

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 0x25

con4 equ 0x26

mas equ 4

menos equ 3

cruce equ 2

hot equ 1

org 0

bsf estado,5

bcf estado,6 ;cambio banco1.

movlw 0x1c ;00011100 tres entradas y

las otras salidas.

movwf porta

clrf portb ;puerto de

salida (en caso de visualizacion)

bcf estado,5 ;cambio banco0.

bcf porta,hot ;apaga resistencia.

rutinsini

movlw 0xff

movwf portb

bsf portb,7

call tiempogradual

bcf portb,7

call tiempogradual

bsf portb,7

call tiempogradual

bcf portb,7

call tiempogradual

bsf portb,7

call tiempogradual

bcf portb,7

call tiempogradual

call cargart1t2 ;rutina que carga al

programa el porcentaje del

;periodo en que la

resistencia esta apagada.

call tiempoinicial

movlw 0x02

movwf con3

movlw 0x50

movwf con4

secuenci

btfss porta,mas ;si el bit de entrada esta

"on" aumenta tiempo.

decfsz con4,1

Page 180: Máquina semiautomática para dosificado y empaque de

goto men

call aumente ;rutina de aumento.

movlw 0x50

movwf con4

men

btfss porta,menos ;si el bit de entrada -

esta on decrementa tiempo.

decfsz con4,1

goto yas

call decremente ;rutina de

decremento.

movlw 0x50

movwf con4

yas

decfsz con3,1

goto des

goto uni

des

call visualiza1 ;(opcional)visualizacion

del porcentaje de calor

goto cruce1 ;que la

resistencia entrega.

uni

call visualiza ;(opcional)visualizacion del

porcentaje de calor

incf con3,1

incf con3,1

goto cruce1 ;que la

resistencia entrega.

cruce1

btfss porta,2

goto cruce1

bcf porta,hot

cruce2

btfsc porta,2

goto cruce2

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

bcf porta,hot

movlw 0xfa

movwf t22

segun

call tiempopwm

decfsz t22,1

goto segun

primermita

bcf porta,hot

movf t1,0

movwf t11

incf t11,1

prime

call tiempopwm

decfsz t11,1

goto prime

bsf porta,hot

return

cargart1t2

movlw 0x00 ;cargat1

movwf eeadr

bsf estado,5

bsf eecon1,0

bcf estado,5

movf eedata,0

movwf t1

bsf estado,5

bcf eecon1,0

bcf estado,5

movlw 0x01 ;cargat2

movwf eeadr

bsf estado,5

bsf eecon1,0

bcf estado,5

movf eedata,0

movwf t2

bsf estado,5

bcf eecon1,0

bcf estado,5

movf t1,0 ;cargar variables en

caso de visualizacion

movwf t11

movf t2,0

movwf t22

return

decremente

bcf porta,hot

Page 181: Máquina semiautomática para dosificado y empaque de

call cargart1t2 ;carga los valores

existentes

movf t1,0

xorlw 0x00 ;verifica si t1=0

btfsc estado,2

goto decre

decf t1,1

call guardart1t2

return

decre

movf t2,0

xorlw 0x00 ;verifica si t2=0

btfsc estado,2

return ;si es 0 es porque t1=0

y t2=0 no hace nada

decf t2,1

movlw 0xf9

movwf t1

call guardart1t2

return

aumente

bcf porta,hot

call cargart1t2 ;carga los valores

existentes

movf t1,0

xorlw 0xf9 ;verifica si t1=250

btfsc estado,2

goto aumen

incf t1,1

call guardart1t2

return

aumen

movf t2,0

xorlw 0x01 ;verifica si t2=1

btfsc estado,2

return ;si es 1 es porque

t1=250 y t2=1 no hace nada

movlw 0x01

movwf t2

clrf t1

call guardart1t2

return

guardart1t2

call guardast1

call guardast2

call tiempodecambio

call tiempodecambio

return

guardast1

movlw 0x00 ;guarda t1

movwf eeadr

movf t1,0

movwf eedata

bsf estado,5

bcf intcon,7

bcf eecon1,4; para grabacion poner

en 0

bsf eecon1,2

movlw 0x55

movwf eecon2

movlw 0xaa

movwf eecon2

bsf eecon1,1

gua1

btfss eecon1,4;vigila final de la

grabacion correctamente

goto gua1

bcf intcon,7

bcf eecon1,1

bcf estado,5

return

guardast2

movlw 0x01 ;guarda t2

movwf eeadr

movf t2,0

movwf eedata

bsf estado,5

bcf intcon,7

bcf eecon1,4; para conversion

bsf eecon1,2

movlw 0x55

movwf eecon2

movlw 0xaa

movwf eecon2

bsf eecon1,1

gua2

btfss eecon1,4 ;verificar que si

goto gua2

bcf intcon,7

bcf eecon1,1

bcf estado,5

return

visualiza

call cambioenlinea1

call unidades

call lamuestra1

movwf portb

bsf portb,7

return

visualiza1

call cambioenlinea

Page 182: Máquina semiautomática para dosificado y empaque de

call decenas

call lamuestra

movwf portb

bcf portb,7

return

lamuestra

movf decena,0

addwf Pc,1

retlw 10h ;9 0110 1111 6f 0001 0000 10

retlw 00h ;8 0111 1111 7f 0000 0000 00

retlw 78h ;7 0000 0111 07 0111 1000 78

retlw 02h ;6 0111 1101 7d 0000 0010 02

retlw 12h ;5 0110 1101 6d 0001 0010 12

retlw 19h ;4 0110 0110 66 0001 1001 19

retlw 30h ;3 0100 1111 4f 0011 0000 30

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

retlw 79h ;1 0000 0110 06 0111 1001 79

retlw 40h ;0 0011 1111 3f 0100 0000 40

return

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

asi en la tabla

movf unidad,0

addwf Pc,1

retlw 10h ;9 0110 1111 6f 0001 0000 10

retlw 00h ;8 0111 1111 7f 0000 0000 00

retlw 78h ;7 0000 0111 07 0111 1000 78

retlw 02h ;6 0111 1101 7d 0000 0010 02

retlw 12h ;5 0110 1101 6d 0001 0010 12

retlw 19h ;4 0110 0110 66 0001 1001 19

retlw 30h ;3 0100 1111 4f 0011 0000 30

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

retlw 79h ;1 0000 0110 06 0111 1001 79

retlw 40h ;0 0011 1111 3f 0100 0000 40

return

tiempogradual ; con1 * con2 graduacion de porcentaje

a los 60Hz

movlw 0xff

movwf con1

movlw 0x01;ff

movwf con2

tex1

decfsz con1,1

goto tex1

decfsz con2,1

goto tex1

return

tiempopwm ; con1 * con2 graduacion de porcentaje a

los 60Hz

nop

nop

nop

nop

nop

nop

nop

nop

nop

return

tiempodecambio

; movlw 0xff

; movwf con1

; movlw 0xff

; movwf con2

;viva

; decfsz con1,1

; goto viva

; decfsz con2,1

; goto viva

return

tiempoinicial

movlw 0xff

movwf con1

movlw 0xff

movwf con2

viva2

decfsz con1,1

goto viva2

decfsz con2,1

goto viva2

return

decenas

btfss enlinea,7

goto troya

decf enlinea,1

decf enlinea,1

decf enlinea,1

troya clrf decena

movf enlinea,0

sublw .24

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .49

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .74

btfsc estado,0

return

Page 183: Máquina semiautomática para dosificado y empaque de

incf decena,1

movf enlinea,0

sublw .99

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .124

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .149

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .174

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .199

btfsc estado,0

return

incf decena,1

movf enlinea,0

sublw .224

btfsc estado,0

return

incf decena,1

return

cambioenlinea

clrf enlinea

btfsc t1,1

bsf enlinea,0

btfsc t1,2

bsf enlinea,1

btfsc t1,3

bsf enlinea,2

btfsc t1,4

bsf enlinea,3

btfsc t1,5

bsf enlinea,4

btfsc t1,6

bsf enlinea,5

btfsc t1,7

bsf enlinea,6

btfsc t2,0

bsf enlinea,7

return

cambioenlinea1

movf t1,0

movwf enlinea1

return

unidades

clrf unidad

movf enlinea1,0

sublw .4

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .9

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .14

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .19

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .24

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .29

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .34

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .39

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .44

btfsc estado,0

return

incf unidad,1

Page 184: Máquina semiautomática para dosificado y empaque de

movf enlinea1,0

sublw .49

btfsc estado,0

return

clrf unidad

movf enlinea1,0

sublw .54

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .59

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .64

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .69

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .74

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .79

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .84

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .89

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .94

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .99

btfsc estado,0

return

clrf unidad

movf enlinea1,0

sublw .104

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .109

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .114

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .119

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .124

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .129

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .134

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .139

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .144

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .149

Page 185: Máquina semiautomática para dosificado y empaque de

btfsc estado,0

return

clrf unidad

movf enlinea1,0

sublw .154

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .159

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .164

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .169

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .174

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .179

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .184

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .189

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .194

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .199

btfsc estado,0

return

clrf unidad

movf enlinea1,0

sublw .204

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .209

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .214

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .219

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .224

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .229

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .234

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .239

btfsc estado,0

return

incf unidad,1

movf enlinea1,0

sublw .244

btfsc estado,0

return

incf unidad,1

return

End

Page 186: Máquina semiautomática para dosificado y empaque de

21.9 CODIGO FUENTE DEL SOFTWARE CONTROL DE LA MAQUI NA 21.9.1 PROGRAMA PARA PROBAR LOS DIFERENTES ACCIONIS MOS 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();

Page 187: Máquina semiautomática para dosificado y empaque de

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 CONFIGURACIO N 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);

Page 188: Máquina semiautomática para dosificado y empaque de

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(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";

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); 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;

Page 189: Máquina semiautomática para dosificado y empaque de

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<<" ";

Page 190: Máquina semiautomática para dosificado y empaque de

entrada>>codig; salida<<codig<<" "; entrada>>codig; salida<<codig<<" "<<endl; else cout.flush(); clrscr(); cout<<endl<<endl<<endl; cout<<"CONFIGURACION QUE 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()

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();

Page 191: Máquina semiautomática para dosificado y empaque de

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();

Page 192: Máquina semiautomática para dosificado y empaque de

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 SIM ULACION #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];

Page 193: Máquina semiautomática para dosificado y empaque de

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;

Page 194: Máquina semiautomática para dosificado y empaque de

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<<" "; 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 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<<"= "<<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;

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; 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;

Page 195: Máquina semiautomática para dosificado y empaque de

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 Tiempo de espera (milisegundos)..."; cin>>dato; if(dato<1) return; while(dato>30000); tiempoespera=dato; guardainfo(); void menu4()

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;

Page 196: Máquina semiautomática para dosificado y empaque de

21.10 MANUAL DE TRABAJO PARA SOFTWARE DE INVENTARIO S Y FACTURACION

NOTA: LOS PROGRAMAS TRABAJAN EN LETRAS MAYUSCULAS E STO

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 dígitos.

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 opción (0) que le sirve para salir del

programa con solo presionarlo.

Page 197: Máquina semiautomática para dosificado y empaque de

21.10.1.1 INGRESAR NUEVOS PRODUCTOS

La primera opción le brinda la posibilidad de actualizar datos. Esta opción la

veremos mas adelante para que primero ingresemos nuestros productos y ahí

si los podemos actualizar.

La opción 2 nos da la posibilidad de ingresar los nuevos productos.

Lo primero que nos pide es el código en lo que tenemos en cuenta 3 cosas

básicamente recordando que el software trabaja con letras mayúsculas.

El código es de 7 dígitos de letras y números, es decir que no acepta otro tipo

de caracteres. El primer digito debe ser una letra. Los demás programas del

software total hacen filtros de búsqueda con el código, es decir que para

realizar una consulta buscara por los tres primeros dígitos del código más 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 números.

Los datos que sean ingresados erróneamente el software los detecta, le

informa y retorna para que pueda rectificar el error

Error por primer digito debe ser letra

Page 198: Máquina semiautomática para dosificado y empaque de

Código con número de dígitos menor que 7. Si ingresa un código de más de 7

dígitos el programa toma los 7 primeros.

Cuando se ingresa un código ya existente el programa indica y no lo deja

continuar. Al ingresar un nuevo producto lo ordena automáticamente en orden

de lista. Así que lo ubica en la posición que le corresponde al código ingresado.

Al ingresar de forma correcta el código ingresa el nombre de máximo 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.

Page 199: Máquina semiautomática para dosificado y empaque de

El software genera error y le deja continuar corrigiéndolo primero.

Al ingresar los precios adecuadamente se nos pide ubicación. Esta ubicación

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 ubicación es de modo más global.

Puede no utilizarla y simplemente dar enter, el programa asigna una ubicación

“a1” por defecto. Esta ubicación es un código de 2 caracteres.

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

confirmación 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

Page 200: Máquina semiautomática para dosificado y empaque de

21.10.1.2 ACTUALIZAR PRODUCTO

La actualización de producto es la opción 1 en la pantalla principal

El sistema le pide el código que debe ingresarlo completo.

Ahora nos da las tres opciones de cambiar nombre, precios y ubicación.

Si desea cambiar el código no lo puede hacer para tal caso debe eliminar el

producto y luego ingresarlo de nuevo con el mismo código.

Page 201: Máquina semiautomática para dosificado y empaque de

Luego de ingresados los datos de actualización puede salir con 0 21.10.1.3 ELIMINAR PRODUCTO

La ventana le muestra que esta la opción de eliminar y le pide el código el cual

debe ingresar completo

Luego ingresar el código el programa le mostrara el producto seleccionado e

inmediatamente le pedirá confirmar 2 veces dando opción al arrepentimiento.

21.10.1.4 OPCIONES AVANZADAS

21.10.1.4.1 CAMBIO DE CLAVES

Le pide la clave actual

Page 202: Máquina semiautomática para dosificado y empaque de

Luego le muestra su clave y pide la nueva clave deseada

Ingresa la clave

El programa pide confirmación y muestra que la clave fue aceptada

21.10.1.4.2 RECUPERACION POR FALLOS

La opción 3 nos da información de mantenimiento en caso de fallos por un

corto o que se vaya la luz durante un proceso. Esta opción solo puede

aplicarse si el programa por si mismo reconoce el problema. Si pulsa la opción

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

información de los productos esta errado.

Page 203: Máquina semiautomática para dosificado y empaque de

El programa le impide que usted seleccione otra opción diferente a la

recomendada.

En la opción 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 recuperación que será vista mas

adelante.

21.10.1.4.3 GUARDAR LA INFORMACION

La opción 4 da la opción de guardar la información en un disquete para hacer

esta operación pedirá la clave de nuevo

Page 204: Máquina semiautomática para dosificado y empaque de

Pedirá el disquete para luego proceder a guardar.

21.10.2 CAMBIO DE FECHA

Para efectos de información que se almacena el usuario puede modificar la

fecha del día a su acomodo. Esta fecha se vera reflejada en los programas de

facturación/consultas e inventarios.

El programa le muestra la fecha actual y pide la confirmación 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 facturación

21.10.3.1 CONSULTAS

Page 205: Máquina semiautomática para dosificado y empaque de

Con los tres primeros dígitos del código se realiza la búsqueda. En este

ejemplo se ha codificado los jugos con un código en el que los primero tres

códigos son las letras JUG. Luego pulsa enter para realizar la búsqueda.

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

lista que el código en sus 3 primeras letras es el ingresado.

En esta pantalla usted puede ver la información de nombre y ubicación general,

debajo del nombre encuentra los 2 precios sugeridos. En el caso de ser un

producto de materia prima aparecerán los mismos valores en las dos casillas.

Además de los precios mayor y menor se observa un número asignado 0-9

para seleccionarlo. Para observar la cantidad que existe actualmente en

inventario (ingresada al sistema) debe seleccionar el número correspondiente

al producto con el teclado numérico 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 código. Pulse 0 para salir.

Si el producto buscado no esta en estos primero 10 códigos presione enter

para ver los siguientes productos. (Muestra en grupo de 10 o menos)

El programa da otra opción ‘+’ que es para salir de la búsqueda

inmediatamente.

Page 206: Máquina semiautomática para dosificado y empaque de

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 búsqueda del producto ingresando los 3 primeros

dígitos del código, buscamos el articulo deseado en el listado de pantalla

seleccionándolo 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 código, 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

Page 207: Máquina semiautomática para dosificado y empaque de

encuentra restringido y no deja que ingresemos un precio un 20% más 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 función del precio

mayor (precio en pantalla) en relación al precio vendido.

De igual manera puede meter más productos hasta un máximo de 25 por

factura.

Page 208: Máquina semiautomática para dosificado y empaque de

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 según el valor real de

factura.

La realización de la factura permite borrar el “ultimo producto” con la opción

BORRAR

Nos permite eliminar con la opción ELIMINAR

Al dar eliminar el programa nos muestra un pantallaso de códigos y nombres y

nos pide ingresar el código a eliminar.

Page 209: Máquina semiautomática para dosificado y empaque de

Inmediatamente eliminara todos los ítems que encuentre con el código

ingresado.

La opción 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 impresión FACTURA, COTIZA Y REMISION

La opción 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 opción cotización (COTIZA) da la opción de imprimir con precios y total pero

no discrimina IVA.

Page 210: Máquina semiautomática para dosificado y empaque de

La opción remisión imprime los productos y sus cantidades sin precio.

Cualquiera sea la opción seleccionada se da la opción de ingresar datos

adicionales como nombre, NIT o dirección para lo cual se asignan 2 casillas de

impresión. Cabe resaltar que cualquiera fuese el caso el software pude ser

adaptado para imprimir en hoja especial, variando unas pequeñas cosas en el

programa fuente. Mas sin embargo la impresión 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

impresión.

Otra opción es PEDIDO esta opción 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 opción 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 después ser

descargados.

Page 211: Máquina semiautomática para dosificado y empaque de

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 razón 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 artículos.

Entonces debemos realizar una factura de la misma forma como lo hicimos en

el programa de facturación. Tenemos las opciones de NUEVA, BORRAR Y

ELIMINAR de igual forma. Excepto que no permite impresión alguna.

Tiene una opción 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.

Page 212: Máquina semiautomática para dosificado y empaque de

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 artículo nos pide los datos de (caja)

ubicación real para lo que tenemos un espacio que debe ser numérico y de no

más 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 opción de poner detalles que pueden ser color, algo de recordar,

vencimiento. Estos datos adicionales son de tipo alfanumérico 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 razón 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

Page 213: Máquina semiautomática para dosificado y empaque de

Al dar INGRESO y enter el programa muestra el listado y pide confirmación

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

indicación de modo que puede estar tranquilo. No falla.

Page 214: Máquina semiautomática para dosificado y empaque de

21.10.5 INVENTARIO El programa de inventario le va a permitir realizar consultas y descargas del

archivo que guarda el inventario de producción y materia prima.

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

consulta rápida y general. Con las 3 primeras letras consulto los productos en

los que su código 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 mercancía que existe en

inventario es mostrada.

Así mismo como en el programa de consultas y facturación para realizar una

salida de producto selecciono la opción 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

ocasión lo que voy es a descargar de stocks la mercancía.

Si busca un producto específicamente debe ingresar el código de 7 dígitos 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.

Page 215: Máquina semiautomática para dosificado y empaque de

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 opción 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 ubicación de la cual se saca y la

prioridad que tiene la salida del producto. Este programa es muy práctico para

manejar bodega.

Para datos erróneos 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 ubicación

así que pulsamos cajas y buscamos el lugar deseado de búsqueda. Así que

buscamos los productos y cantidades que se encuentren en un lugar

específico. Podemos encontrar diferentes productos en una misma ubicación.

Page 216: Máquina semiautomática para dosificado y empaque de

La opción PEDIR y PEDIDO sirven para la descarga de los productos que se

hallan en lista. Es decir en el programa de facturación 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 instrucción PEDIDO se

utiliza para la descarga de los productos que usted ha ido acumulando en

listado para la descarga.

El programa automáticamente busca los productos y permite que usted

seleccione la ubicación y condiciones de detalles con las que quiere descargar

los productos dando la opción de selección con enter.

Page 217: Máquina semiautomática para dosificado y empaque de

Para buscar siguiente producto con “+”.

El programa visualiza la mercancía 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 confirmación de la

operación.

Page 218: Máquina semiautomática para dosificado y empaque de

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 dígitos. El usuario que saca productos

ingresa el código 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 información. Cada vez que se da un terminar el programa

guarda una protección en un archivo de reserva. Si desea ver el procedimiento

remítase al código fuente en su parte de opción terminar.

Page 219: Máquina semiautomática para dosificado y empaque de

•Por ultimo tenemos la opción de GUARDAR por medio de la cual podemos

guardar la información en un disquete simplemente se da la opción 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 opción es

clave en el caso que se maneje la bodega por aparte así que los pedidos para

descargar mercancía pueden reverenciarse en papel en donde se especifica la

ubicación, los detalles y la prioridad que tiene el producto para ser físicamente

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 información entre archivos. Para este

caso es posible recuperar la información.

Page 220: Máquina semiautomática para dosificado y empaque de

Al ejecutar nuestro programa el software pide confirmación ya que el lleva una

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

tiempo están listos para dichas recuperaciones que como veíamos

anteriormente puede hacerse también con los listados de productos ya

explicados en la sección 12.1.

Para este caso nos pedirá doble confirmación y que ingresemos nombre,

detalles y hora para dejar una referencia

Al aceptar la operación nos muestra un mensaje que nos recuerda que si se

realizaba una descarga en el momento del daño debemos realizarla de nuevo.

21.10.7 LISTADO GENERAL

El programa genera un listado general buscando en cada código la existencia

actual real en inventario de modo que nos da la información de precios y

Page 221: Máquina semiautomática para dosificado y empaque de

cantidades actuales en sistema. Nos muestra el código, nombre, precio mayor

y menor y la sumatoria de cantidad en inventarios del código correspondiente.

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

instalación utilizar accesos directos a los programas con un nombre más

representativo del programa a trabajar. Así mismo lo archivos bien sean tipo

.TXT o .DAT que contienen información como el listado general, o el reporte de

salidas de inventarios también con su acceso directo de modo que el usuario

no pueda equivocarse a la hora de manipular y pueda cometer errores

borrando información 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 específico que máximo abarca 8 caracteres y de igual forma los

archivos donde se guarda la información los cuales podrán ser visto o utilizados

con el comando EDIT del D.O.S dando la instrucción “c:\>edit nombre.txt”.

21.10.8 CODIGO FUENTE DEL SOFTWARE SISTEMA DE INFOR MACION 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;

Page 222: Máquina semiautomática para dosificado y empaque de

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/GUARDAR/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;

Page 223: Máquina semiautomática para dosificado y empaque de

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;

Page 224: Máquina semiautomática para dosificado y empaque de

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;

Page 225: Máquina semiautomática para dosificado y empaque de

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;

Page 226: Máquina semiautomática para dosificado y empaque de

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;

Page 227: Máquina semiautomática para dosificado y empaque de

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';

Page 228: Máquina semiautomática para dosificado y empaque de

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<<" ";

Page 229: Máquina semiautomática para dosificado y empaque de

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')

Page 230: Máquina semiautomática para dosificado y empaque de

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();

Page 231: Máquina semiautomática para dosificado y empaque de

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();

Page 232: Máquina semiautomática para dosificado y empaque de

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')

Page 233: Máquina semiautomática para dosificado y empaque de

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;

Page 234: Máquina semiautomática para dosificado y empaque de

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;

Page 235: Máquina semiautomática para dosificado y empaque de

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();

Page 236: Máquina semiautomática para dosificado y empaque de

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();

Page 237: Máquina semiautomática para dosificado y empaque de

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();

Page 238: Máquina semiautomática para dosificado y empaque de

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?!?";

Page 239: Máquina semiautomática para dosificado y empaque de

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;

Page 240: Máquina semiautomática para dosificado y empaque de

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)

Page 241: Máquina semiautomática para dosificado y empaque de

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");

Page 242: Máquina semiautomática para dosificado y empaque de

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;

Page 243: Máquina semiautomática para dosificado y empaque de

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 da¤ado. 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 consultar(int cont,char sus[50]); char comono(int cont,char ri); void 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];

Page 244: Máquina semiautomática para dosificado y empaque de

char maria[150]; char murcigay[40]; 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<<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,ELIMINAR,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])

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') 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);

Page 245: Máquina semiautomática para dosificado y empaque de

x.destruir(cont); if(tads!='0') entralex.close(); goto adioschao; entralex>>archalex; sw=verificaralex(archalex); entralex.close(); break; case'C': 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; 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++)

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; cout<<endl; cout<<"digite el codigo que desea 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; 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++)

Page 246: Máquina semiautomática para dosificado y empaque de

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; case'F': 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; 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'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]=='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'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);

Page 247: Máquina semiautomática para dosificado y empaque de

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'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("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'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'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();

Page 248: Máquina semiautomática para dosificado y empaque de

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'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'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':

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': 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'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);

Page 249: Máquina semiautomática para dosificado y empaque de

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;

Page 250: Máquina semiautomática para dosificado y empaque de

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<<" ";

Page 251: Máquina semiautomática para dosificado y empaque de

salida<<caja<<" "; salida<<deta<<endl; 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;

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; 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':

Page 252: Máquina semiautomática para dosificado y empaque de

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);

Page 253: Máquina semiautomática para dosificado y empaque de

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

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); void consultar(int cont,char sus[50]); void 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<<" ";

Page 254: Máquina semiautomática para dosificado y empaque de

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;

Page 255: Máquina semiautomática para dosificado y empaque de

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.ES.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");

Page 256: Máquina semiautomática para dosificado y empaque de

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 información 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)

Page 257: Máquina semiautomática para dosificado y empaque de

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)

Page 258: Máquina semiautomática para dosificado y empaque de

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 facturación 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);

Page 259: Máquina semiautomática para dosificado y empaque de

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(); salir.open("pedido2.txt"); salir<<ssl; salir.close(); 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;

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; if(numer>0) cout<<"TOTAL...$"<<tioas; if((dess-tioas)>0) cout<<" DESCUENTO..."<<(dess-tioas)/dess*100<<"%"; cout<<endl; solo.close(); cout<<endl; cout<<"OPCIONES...(NUEVA,BORRAR,ELIMINAR,FACTURA,COTIZA,REMISION,PEDIDO)"<<endl; 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;

Page 260: Máquina semiautomática para dosificado y empaque de

fere.close(); 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(); 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.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;

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; 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"); fare<<"FACTURACION/CONSULTAS"<<endl; 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);

Page 261: Máquina semiautomática para dosificado y empaque de

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("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; 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)

fare<<sus<<" "; fare<<endl; if(siza!=0) farew.open("numerok.txt"); farew<<numer-siza<<" "; farew<<0; farew.close(); siza=0; fare.close(); fere.close(); fere.open("numerok.txt"); fere>>numer; fere>>dess; fere.close(); 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; 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");

Page 262: Máquina semiautomática para dosificado y empaque de

fare<<"FACTURACION/CONSULTAS"<<endl; 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; 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'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': 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'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);

Page 263: Máquina semiautomática para dosificado y empaque de

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"); fare<<"FACTURACION/CONSULTAS"<<endl; 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':

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'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(); borraped(); 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();

Page 264: Máquina semiautomática para dosificado y empaque de

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'R': 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; 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': 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': 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'W': entralex.open("alexarch.txt"); entralex>>archalex;

Page 265: Máquina semiautomática para dosificado y empaque de

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

Page 266: Máquina semiautomática para dosificado y empaque de

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;

Page 267: Máquina semiautomática para dosificado y empaque de

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;

Page 268: Máquina semiautomática para dosificado y empaque de

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 $"<<(total2-total1)<<""<<endl; cout<<" TOTAL "<<total1<<endl; //cou<<" DESCUENTO $"<<(total2-total1)<<""<<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<<" ";

Page 269: Máquina semiautomática para dosificado y empaque de

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

Page 270: Máquina semiautomática para dosificado y empaque de

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 $"<<(total2-total1)<<""<<endl; cout<<" "<<total1-(total1*16/100)<<endl;

cout<<" "<<(total1*16/100)<<endl; cout<<" "<<total1<<endl; //cou<<" DESCUENTO $"<<(total2-total1)<<""<<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<<".";

Page 271: Máquina semiautomática para dosificado y empaque de

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)

Page 272: Máquina semiautomática para dosificado y empaque de

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;

Page 273: Máquina semiautomática para dosificado y empaque de

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<<endl; 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<<"%"; 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;

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->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;

Page 274: Máquina semiautomática para dosificado y empaque de

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')

Page 275: Máquina semiautomática para dosificado y empaque de

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;

Page 276: Máquina semiautomática para dosificado y empaque de

22. LABORATORIO DE DISEÑO

JERINGA INDUSTRIAL

ESTRUCTURA DE SOPORTE DEL DOSIFICADOR

ACOPLE AL PISTON

ACOPLE DE EMPUJE DEL LÍQUIDO

Page 277: Máquina semiautomática para dosificado y empaque de

PISTON DE DOBLE VASTAGO PARA EL SENSADO

Page 278: Máquina semiautomática para dosificado y empaque de

RACOR NORMA AMERICANA 6mm

VASTAGO DELGADO TRACERO DE SENSADO

TALLER DE MECANIZADO DE PIEZAS

Page 279: Máquina semiautomática para dosificado y empaque de

MODELO A ESCALA SISTEMA DE SELLADO HORIZONTAL

Page 280: Máquina semiautomática para dosificado y empaque de

SISTEMA COMERCIAL DE SELLADO HORIZONTAL

SELLADORA VERTICAL

RESISTENCIA DE SELLADO INCRUSTADAS EN LAS MORDAZAS DE BRONCE

Page 281: Máquina semiautomática para dosificado y empaque de

TANQUE DE ALMACENAMIENTO

DOSIFICADOR

SISTEMA CHEQUE-CHEQUE CON 2 TIPOS DE CHEQUE DISTINTO

Page 282: Máquina semiautomática para dosificado y empaque de

ACONDICIONAMIENTO PARA MOTORES ACTUADORES DE VALVULAS

VALVULA DE CORTINA CON ACOPLE AL MOTOR

ELECTROVALVULA PARA PASO DE FLUIDO

Page 283: Máquina semiautomática para dosificado y empaque de

ELECTROVALVULA PARA AIRE 3/2 DE 120VAC

PIROMETRO ECONOMICO

SISTEMA DE CONTROL DOSIFICADOR SIN PC (PRODUCTO INDEPENDIENTE)

Page 284: Máquina semiautomática para dosificado y empaque de

PIROMETRO DE CONTROL

CONTROLADOR DE VOLTAJE AC PARA RESISTENCIAS SELLADORAS

Page 285: Máquina semiautomática para dosificado y empaque de

PC DE CONTROL PARA PC INTERFASES DE POTENSIA

Page 286: Máquina semiautomática para dosificado y empaque de
Page 287: Máquina semiautomática para dosificado y empaque de

23. CONCLUSIONES

Con este proyecto se pudo entender y dar a conocer en que consiste un

dosificador de líquidos alimenticios, proporcionando una solucion eficiente y

eficaz a los problemas que presenta hoy día la industria en Colombia.

Cada una de las soluciones planteadas en cada uno de los aspectos, refleja un

grado de investigación a nivel de ingeniería que debe esperarse en el

desarrollo de un proyecto de nivel industrial con el cual los interesados buscan

soluciones factibles.

La implementación de sistemas de cómputo en el ámbito industrial es una ficha

clave en la comercialización de un producto. La pequeña y mediana industria

del país aunque busca la automatización de algunos de sus procesos ve lejana

la implementación de control por computadora que a su vez le ayude en sus

procesos de organización interna de producción y manejo de la materia prima.

Es este un punto clave con que cuenta el proyecto presentado ya que al

realizar reingeniería en la utilización de tecnología 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 diseñador no

representa mas que un producto agregado de costos despreciables dado que

el desarrollo de software no implican ningún tipo de inversión y si hace mas

llamativo un producto.

El uso de la electrónica se hace hoy día necesaria dada la economía que ella

nos brinda en las etapas de control. El conocimiento en los aspectos de

neumática e hidráulica es básico para el diseño de sistemas industriales. Y de

igual forma la interacción entre esta electrónica de control y el manejo de de

sistemas automáticos es el beneficio claro que pudo ser evidenciado en el

desarrollo de este proyecto.

Es de suma importancia parámetros alternos como normatividad y

recomendaciones que se tienen que tener en cuenta para la elaboración de un

proyecto de carácter industrial, asi como normas en cuanto a seguridad

Page 288: Máquina semiautomática para dosificado y empaque de

industrial. Esto nos permite ver que la parte técnica-teórica de diseño no es

suficiente ya que un desarrollo de esta categoría 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 investigación realizada y el trabajo hecho han permitido evidenciar la alta

gama de productos, tecnologías y profesionales expertos que se reúnen en

torno al tema de la automatización industrial referente al empacado, dosificado,

control de calidad, accesorios, materiales, consultorías y todo el entorno en el

que se desenvuelve este amplio desarrollo.

La exigencia es cada vez más alta y aunque se han desarrollado ciertos

estándares en cuanto a sistemas de producción la competencia es cada vez

más alta. Hoy día se evidencia como todos los productos de consumo masivo

son empacados y así mismo podemos ver como toda esta producción y

desarrollo gira en torno a la productividad que cada vez exige estándares de

calidad más altos.

Los sistemas de información se hacen hoy día mas necesarios ya que el

control de producciones elevadas no es de fácil manejo y es por esto que no

solo mecanismos eficientes y eficaces son la necesidad sino que también la

industria exige una adecuada monitorización y supervisión 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 más que un

producto de alta tecnología, una ayuda practica y económica que permitirá el

desarrollo de la industria del país y especialmente de la pequeña industria que

abarca la mayor parte de la producción nacional.

El proyecto permitió observar que la industria colombiana se encuentra con

muchas desventajas ya que no existe la tecnología 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

Page 289: Máquina semiautomática para dosificado y empaque de

maquinas nacionales no presentan la calidad de la maquinaria internacional,

están avanzando en sus desarrollos y evidentemente están dando igualmente

solución a muchas de las necesidades que el país 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 ingeniería.

El área de automatización enfocada al empaque y dosificación de productos es

hoy día alta y de mucha competencia. Las diferentes empresas presentan

maquinaria especializada ofreciendo al país un desarrollo industrial en cuanto

al tema, aunque a nivel de confiabilidad y economía estamos aun muy lejos de

competir con países desarrollados que ofrecen servicios de ultima tecnología

con alta productividad y de difícil desarrollo en nuestro medio social dado que

no se cuenta ni con los recursos, ni con la infraestructura necesaria.

Las herramientas tecnológicas permiten generar expectativas de carácter

técnico y comercial. Es así que la utilización de software como solid edge

permite evidenciar de manera más clara y concisa el ideal de un diseño sin

necesidad de llevarlo a la práctica. De igual manera herramientas como C++ o

mplab dan la posibilidad de generar desarrollos de forma eficiente y económica

a las expectativas de un cliente final.

Page 290: Máquina semiautomática para dosificado y empaque de

24. BIBLIOGRAFIA

AMPUDIA, E. Danilo. (1991). Mantenimiento de equipo oleohidráulico.

Universidad del valle.

AVALLONE, Eugene A. (1995). Manual del ingeniero mecánico. Mc Graw Hill.

BEER Ferdinand P, JOHNSTON E Russel, ( 1993 ) Mecánica de materiales.

Mc Graw Hill. Bogotá. ( Colombia )

BEER Ferdinand P, JOHNSTON E Russel, ( 1998 ) Mecánica vectorial para

ingenieros Estática. Mc Graw Hill. España.

BEER Ferdinand P, JOHNSTON E Russel, ( 1998 ) Mecánica vectorial para

ingenieros Dinámica. Mc Graw Hill. España.

BOYLESTAD, Robert. (1998). Análisis introductorio de Circuitos. Ed. Prentice

Hall. México.

CONSIDINE, Douglas M. (1998). Process Industrial Instruments and Controls.

Handbook.

DEMPSEY, John A. (1984). Electrónica digital básica: con aplicaciones de

circuitos MSI. Fondo educativo interamericano.

CHAPMAN, Stephen. (1991). Máquinas eléctricas. Ed. McGraw-Hill. México

DORF, Richard. (1995). Circuitos Eléctricos. Introducción al análisis y diseño.

Editorial Alfaomega. 2a. Edición. España.

DORF, C. Richard. (1989). Sistemas modernos de control. Addison-Wesly.

Page 291: Máquina semiautomática para dosificado y empaque de

FLOWER LEIVA, Luis. (1989). Controles y Automatismo eléctricos. Teoría y

práctica. Telemecanique. Colombia.

GERHARTZ, J. (1995). Neumática en bucle cerrado: nivel básico, libro de

trabajo TP 111. Fest didáctic.

GOTTFRIED, Byron. (199/). Programación en C. Ed. McGraw-Hill. México

Hidráulica Proporcional. Manual de estudio. Festo didáctic.

Hidráulica proporcional. Nivel básico. Colección de ejercicios con soluciones.

Festo didáctic.

HIBBELER Russel Charles, ( 1995 ) Mecánica de materiales. Prentice Hall.

México.

HALLYDAY David, ( 1992 ) Física Parte I. Mc Graw Hill. España.

HUBERT, Charles. (1987).Circuitos Eléctricos CA/CC. Ed. McGraw-Hill.

México.

MANZANO, Orrego. Juan Jose. ( 1999). Mantenimiento de máquinas eléctricas.

Paraninfo.

MANNESMANN REXROTH. (1995). Técnica de válvulas proporcionales y de

servoválvulas. Training hidráulico. Compendio 2.

MALVINO, Albert Paul. (1994). Principios de electrónica. Ed. McGraw-Hill

MURRAY, William.(1990) Manual de BORLAND C++. Serie de informática. Ed.

McGraw-Hill. México

MORRIS, Mano. (1998). Fundamento de diseño Lógica y computadoras. Ed.

Prentice Hall. México.

Page 292: Máquina semiautomática para dosificado y empaque de

MORRIS,Mano. (1987). Diseño Digital. Ed. Prentice Hall. México.

MORRIS, Mano. (1992). Lógica Digital y diseño de computadores. Prentice

Hall.

Mc KERVEY, Jhon. ( 1992 ). Física para ciencias e ingeniería. Vol 1. Ed. Harla.

España.

NELSON , Victor P. (1996). Analisis y diseño de Circuitos Logicos Digitales. Ed.

Prentice Hall. México, México.

ORLOV, P. (1985). Ingeniería de diseño. Mir.

OGATA, Katsuhito. (1994). Solving control enginering problems with matlab.

Prentice Hall.

OGATA, Katsuhito. (1993). Ingeniería de control moderna. Prentice Hall.

PRATT Terrense W. (1997) . Lenguajes de programación. Ed. Prentice Hall.

México.

RAMIREZ, Castaño. Samuel. (1985). Mantenimiento. Universidad Nacional de

Colombia.

RICHARDSON, Donal V. (1997). Maquinas Eléctricas Rotativas y

Transformadores. Ed. Prentice Hall. México.

SCHILDT, Herbert. ( 1994). Guía Autodidáctica. Serie de informática. Ed.

McGraw-Hill. México

SMITH, Carlos A. CORRIPIO, Armando B. (1997). Control automático de

procesos. Limusa.

Page 293: Máquina semiautomática para dosificado y empaque de

SHIGLEY, Joseph Eduard, (1990). Diseño en ingeniería mecánica. Mc Graw

Hill.

SHINSKEY, F G. (1996). Sistemas de control de procesos. Mc Graw Hill.

SAVANT, C.J. (1992). Diseño Electrónico. Circuitos y sistemas. Ed. Addison

Wesley.

TAVERNIER, Christian. (1997). Microcontroladores PIC. Paraninfo.

TOCCI, Ronald. (1997). Sistemas Digitales, principios y aplicaciones. Ed.

Prentice Hall. México.

TOMASI, Wayne. (1996). Sistemas de comunicaciones Electrónicas. Ed.

Prentice Hall. México.

TOKHEIM, Roger L.. (1995). Principios Digitales.Ed. McGraw Hill. México,

México.

WAKERLY, John. (1992). Diseño digital, Principios y prácticas. Ed. Prentice

Hall. México, México.

"Certificación de BPM", Énfasis Alimentación N° 8 A ño V, Diciembre 99- Enero

2003.

"BPM y HACCP, Cómo controlar la inocuidad", Énfasis Alimentación N° 1 Año

VI, Febrero-Marzo 2000.

Guía para las Buenas Prácticas de Manufactura y Manual de Análisis de

Riesgos y Puntos Críticos de Control, Editorial El Obrador, Año 1997.

Page 294: Máquina semiautomática para dosificado y empaque de

1

Maquina semiautomática para dosificado y empaque de líquidos en bolsa

Juan Carlos Vizcaino Aponte. Universidad de La Salle

I. Resumen: Sistema semiautomático 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 acción 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 producción 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 país, lleva consigo un amplio desarrollo de la ingeniería 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 economía no parece ser el centro del desarrollo de productos que solucionen las dificultades y problemas que se encuentran para dar solución. Es por ello que se pretende dar a conocer un enfoque mas practico y funcional referente a la economía tan necesaria de pequeñas y medianas industrias que no cuentan con el capital suficiente ni poseen la una producción tan grande como para exigir inversiones altas para el crecimiento de sus empresas. La maquina dosificadora y empacadora semiautomática presentada a continuación se desarrollo en torno a esa economía y desarrollo planteado, dejando en claro que el sistema ofrece solución a las necesidades y a su vez introduce al empresario en un ámbito mas productivo y de crecimiento industrial dándole mayores posibilidades de adquisición.

III. SISTEMA DE ALIMENTACION DE MATERIAL Se tiene un gran tanque de almacenamiento de material el cual por medio de un bombeo alimentara un pequeño 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 1 (sistema alimentación 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 implícito 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 pequeño (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 líquido interno del tanque. Luego de ello electrónicamente se acondiciona según sea la necesidad un nivel bajo y nivel alto de liquido a sensar.

Figura 2 (sensor resistivo y acondicionamiento)

Figura 3(circuito de control)

Page 295: Máquina semiautomática para dosificado y empaque de

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 activación automática del bombeo. Figura 3. Para calcular la potencia de bomba que utilizamos tenemos en cuenta la altura y el diámetro de la tubería por la cual vamos a transportar el líquido para calcular la presión, luego calculamos el caudal sabiendo la necesidad en litros por minuto que necesitamos, así con los datos de presión y caudal calculamos la potencia de la bomba. Presión = 10 * peso liquido (N) / área del tubo (mm) = X bar Caudal = Lt / m Presión * Caudal / 15 = Potencia (KW)

IV. SISTEMA DE DOSIFICACION El sistema de dosificación tiene como eje central la jeringa dosificadora. Como su nombre lo indica, el sistema funciona cargando la jeringa por medio de succión para luego inyectarla en el área de salida del dosificado. Para generar la succión y empuje de la jeringa se cuenta con un pistón neumático de doble efecto y doble vástago 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 vástago proveerá en su parte trasera el sistema de sensor por medio del cual tendremos la posibilidad de elegir una dosis diferente según sea requerido como lo indica la figura 4.

Figura 4 (Jeringa dosificadora) Para controlar la salida y entrada de liquido se dispone de válvulas 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 succión el liquido una de las válvulas 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 válvulas (succión y empuje) deben estar controladas simultáneamente de modo que el sistema funcione correctamente como lo muestra la figura 5.

Figura 5 (sistema de succión y empuje de la jeringa)

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.

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 válvula se encuentre ya abierta o ya cerrada. Como lo muestra la figura 7.

Figura 7 (finales de carrera apertura y cierre de la válvula) El tanque superior se conecta al punto de succión del dosificador y el punto de empuje se conecta a la tubería en la que encuentra alojado el tubo plástico de empaque para el líquido. El circuito de control dosifica en la succión, controlada por un final de carrera accionado por el vástago trasero del pistón, para luego de esto entregar la dosis en el empuje. Figura 8.

Page 296: Máquina semiautomática para dosificado y empaque de

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 pistón neumático 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 9 (sistema de sellado) Un sensor móvil es el encargado de la orden al pistón para ejecutar el selle. Este sensor puede realizarse por medio de una foto-celda la cual reacciona a los cambios de luz. El empaque (plástico) lleva en su elaboración 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 diseñar 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 comúnmente utilizado a sido el pirometro el cual tiene el problema de generar una variación de temperatura inestable como lo indica la figura 11.

Figura 11 (variación temperatura con pirometro) Por esto se recomienda la implementación de un sistema PWM el cual garantiza que la resistencia se calienta a una temperatura mas constante ya que el voltaje aplicado no es máximo y mínimo, sino proporcional al valor de temperatura que se desea (figura 12).

Figura 12(PWM) El siguiente circuito nos da este tipo de señal. Diseñado por medio de sistema PIC nos permite entregar dicha señal PWM que hace más eficiente el trabajo de calentamiento de las resistencias selladoras. El sistema consiste en sincronizar la señal AC de la red con la señal 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 señal 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 activación nombrada consiste en switchar un triac para el paso y no paso de corriente hacia las mordazas. Si lo desea puede generar una visualización dinámica al usuario de modo que facilite la programación 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

Page 297: Máquina semiautomática para dosificado y empaque de

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 integración de toso los sistemas plasmados en este documento se pueden realizar por medio de un computador pequeño de capacidad. Es decir con características de procesador 486(166MHz), RAM de 16M, monitor monocromático, disco de 100Mb, sistema operativo DOS y teclado estándar. La interfase se realiza por medio del puerto paralelo acondicionando como lo muestra la figura 15 a los demás circuitos plasmados en este documento.

Figura 16 (diagrama de flujo programa de control) El manejo del puerto paralelo en C++ se realiza con la función outportb (puerto,0xXX); en donde puerto corresponde a la dirección del puerto paralelo utilizada, la cual podemos cargar con la instrucción 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 El desarrollo de proyectos de ingeniería que proponen la reutilización de tecnología abandonada o ya desplazada por nuevos desarrollos, generan para el país propuestas económicas y de fácil acceso. El empresario colombiano busca eficiencia y eficacia en el desarrollo de sus productos que puede conseguir fácilmente con elementos prácticos, económicos y de fácil manejo que no impliquen una ardua capacitación, sino que por el contrario logran la finalidad esencial que es una ayuda práctica a las dificultades que se presentan. Figura 15 (interfase puerto paralelo). El área de automatización enfocada al empaque y dosificación de productos es hoy día alta y de mucha competencia La industria alimenticia, y específicamente la de empaque de refrescos, yogures y similares necesita prontamente sistemas económicos que les permitan crecer como industria

El software de control realizado en asembler, o para mayor facilidad utilizando lenguaje de programación C. Conociendo el comportamiento lógico de la maquina se plantea el diagrama de flujo que desarrolla este proyecto. Figura 16.