44002119
-
Upload
yerco-gonzales -
Category
Documents
-
view
240 -
download
1
description
Transcript of 44002119
![Page 1: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/1.jpg)
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 2: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/2.jpg)
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: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/3.jpg)
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 4: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/4.jpg)
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 5: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/5.jpg)
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 6: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/6.jpg)
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 7: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/7.jpg)
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 8: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/8.jpg)
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 9: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/9.jpg)
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 10: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/10.jpg)
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 11: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/11.jpg)
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 12: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/12.jpg)
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 13: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/13.jpg)
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 14: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/14.jpg)
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 15: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/15.jpg)
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 16: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/16.jpg)
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 17: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/17.jpg)
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 18: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/18.jpg)
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 19: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/19.jpg)
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 20: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/20.jpg)
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 21: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/21.jpg)
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 22: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/22.jpg)
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 23: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/23.jpg)
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 24: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/24.jpg)
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 25: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/25.jpg)
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 26: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/26.jpg)
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 27: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/27.jpg)
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 28: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/28.jpg)
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 29: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/29.jpg)
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 30: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/30.jpg)
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 31: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/31.jpg)
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 32: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/32.jpg)
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 33: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/33.jpg)
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 34: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/34.jpg)
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 35: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/35.jpg)
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 36: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/36.jpg)
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 37: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/37.jpg)
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 38: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/38.jpg)
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 39: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/39.jpg)
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 40: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/40.jpg)
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 41: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/41.jpg)
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 42: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/42.jpg)
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 43: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/43.jpg)
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 44: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/44.jpg)
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 45: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/45.jpg)
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 46: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/46.jpg)
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 47: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/47.jpg)
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 48: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/48.jpg)
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 49: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/49.jpg)
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 50: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/50.jpg)
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 51: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/51.jpg)
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 52: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/52.jpg)
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 53: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/53.jpg)
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 54: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/54.jpg)
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 55: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/55.jpg)
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 56: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/56.jpg)
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 57: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/57.jpg)
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 58: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/58.jpg)
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 59: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/59.jpg)
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 60: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/60.jpg)
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 61: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/61.jpg)
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 62: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/62.jpg)
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 63: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/63.jpg)
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 64: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/64.jpg)
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 65: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/65.jpg)
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 66: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/66.jpg)
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 67: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/67.jpg)
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 68: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/68.jpg)
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 69: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/69.jpg)
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 70: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/70.jpg)
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 71: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/71.jpg)
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 72: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/72.jpg)
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 73: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/73.jpg)
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 74: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/74.jpg)
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 75: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/75.jpg)
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 76: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/76.jpg)
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 77: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/77.jpg)
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 78: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/78.jpg)
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 79: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/79.jpg)
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 80: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/80.jpg)
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 81: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/81.jpg)
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 82: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/82.jpg)
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 83: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/83.jpg)
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 84: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/84.jpg)
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 85: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/85.jpg)
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 86: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/86.jpg)
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 87: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/87.jpg)
Fig 69. Circuito de control aplicando A.I
![Page 88: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/88.jpg)
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 89: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/89.jpg)
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 90: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/90.jpg)
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 91: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/91.jpg)
Fig 73.Fuente de alimentacion
Fig 74.Fuente de alimentación para altas corrientes
![Page 92: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/92.jpg)
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 93: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/93.jpg)
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 94: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/94.jpg)
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 95: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/95.jpg)
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 96: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/96.jpg)
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 97: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/97.jpg)
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 98: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/98.jpg)
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 99: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/99.jpg)
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 100: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/100.jpg)
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 101: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/101.jpg)
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 102: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/102.jpg)
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 103: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/103.jpg)
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 104: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/104.jpg)
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 105: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/105.jpg)
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 106: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/106.jpg)
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 107: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/107.jpg)
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 108: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/108.jpg)
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 109: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/109.jpg)
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 110: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/110.jpg)
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 111: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/111.jpg)
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 112: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/112.jpg)
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 113: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/113.jpg)
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 114: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/114.jpg)
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 115: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/115.jpg)
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 116: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/116.jpg)
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 117: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/117.jpg)
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 118: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/118.jpg)
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 119: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/119.jpg)
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 120: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/120.jpg)
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 121: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/121.jpg)
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 122: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/122.jpg)
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 123: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/123.jpg)
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 124: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/124.jpg)
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 125: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/125.jpg)
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 126: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/126.jpg)
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 127: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/127.jpg)
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 128: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/128.jpg)
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 129: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/129.jpg)
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 130: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/130.jpg)
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 131: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/131.jpg)
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 132: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/132.jpg)
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 133: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/133.jpg)
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 134: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/134.jpg)
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 135: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/135.jpg)
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 136: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/136.jpg)
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 137: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/137.jpg)
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 138: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/138.jpg)
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 139: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/139.jpg)
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 140: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/140.jpg)
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 141: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/141.jpg)
ELIMINAR VISUALIZAR
La opción 8 nos permite guardar la configuración actual la cual nos muestra en
pantalla
![Page 142: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/142.jpg)
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 143: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/143.jpg)
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 144: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/144.jpg)
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 145: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/145.jpg)
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 146: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/146.jpg)
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 147: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/147.jpg)
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 148: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/148.jpg)
En todos los casos la maquina queda en estado inicial.
![Page 149: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/149.jpg)
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 150: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/150.jpg)
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 151: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/151.jpg)
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 152: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/152.jpg)
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 153: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/153.jpg)
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 154: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/154.jpg)
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 155: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/155.jpg)
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 156: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/156.jpg)
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 157: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/157.jpg)
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 158: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/158.jpg)
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 159: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/159.jpg)
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 160: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/160.jpg)
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 161: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/161.jpg)
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 162: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/162.jpg)
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 163: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/163.jpg)
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 164: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/164.jpg)
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 165: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/165.jpg)
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 166: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/166.jpg)
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 167: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/167.jpg)
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 168: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/168.jpg)
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 169: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/169.jpg)
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 170: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/170.jpg)
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 171: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/171.jpg)
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 172: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/172.jpg)
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 173: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/173.jpg)
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 174: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/174.jpg)
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 175: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/175.jpg)
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 176: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/176.jpg)
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 177: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/177.jpg)
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 178: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/178.jpg)
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 179: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/179.jpg)
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 180: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/180.jpg)
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 181: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/181.jpg)
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 182: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/182.jpg)
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 183: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/183.jpg)
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 184: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/184.jpg)
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 185: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/185.jpg)
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 186: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/186.jpg)
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 187: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/187.jpg)
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 188: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/188.jpg)
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 189: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/189.jpg)
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 190: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/190.jpg)
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 191: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/191.jpg)
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 192: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/192.jpg)
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 193: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/193.jpg)
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 194: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/194.jpg)
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 195: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/195.jpg)
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 196: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/196.jpg)
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 197: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/197.jpg)
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 198: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/198.jpg)
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 199: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/199.jpg)
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 200: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/200.jpg)
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 201: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/201.jpg)
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 202: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/202.jpg)
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 203: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/203.jpg)
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 204: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/204.jpg)
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 205: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/205.jpg)
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 206: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/206.jpg)
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 207: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/207.jpg)
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 208: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/208.jpg)
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 209: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/209.jpg)
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 210: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/210.jpg)
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 211: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/211.jpg)
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 212: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/212.jpg)
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 213: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/213.jpg)
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 214: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/214.jpg)
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 215: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/215.jpg)
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 216: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/216.jpg)
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 217: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/217.jpg)
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 218: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/218.jpg)
•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 219: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/219.jpg)
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 220: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/220.jpg)
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 221: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/221.jpg)
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 222: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/222.jpg)
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 223: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/223.jpg)
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 224: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/224.jpg)
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 225: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/225.jpg)
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 226: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/226.jpg)
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 227: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/227.jpg)
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 228: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/228.jpg)
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 229: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/229.jpg)
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 230: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/230.jpg)
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 231: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/231.jpg)
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 232: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/232.jpg)
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 233: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/233.jpg)
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 234: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/234.jpg)
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 235: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/235.jpg)
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 236: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/236.jpg)
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 237: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/237.jpg)
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 238: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/238.jpg)
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 239: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/239.jpg)
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 240: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/240.jpg)
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 241: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/241.jpg)
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 242: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/242.jpg)
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 243: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/243.jpg)
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 244: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/244.jpg)
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 245: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/245.jpg)
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 246: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/246.jpg)
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 247: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/247.jpg)
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 248: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/248.jpg)
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 249: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/249.jpg)
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 250: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/250.jpg)
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 251: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/251.jpg)
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 252: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/252.jpg)
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 253: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/253.jpg)
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 254: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/254.jpg)
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 255: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/255.jpg)
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 256: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/256.jpg)
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 257: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/257.jpg)
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 258: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/258.jpg)
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 259: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/259.jpg)
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 260: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/260.jpg)
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 261: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/261.jpg)
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 262: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/262.jpg)
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 263: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/263.jpg)
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 264: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/264.jpg)
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 265: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/265.jpg)
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 266: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/266.jpg)
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 267: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/267.jpg)
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 268: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/268.jpg)
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 269: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/269.jpg)
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 270: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/270.jpg)
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 271: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/271.jpg)
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 272: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/272.jpg)
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 273: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/273.jpg)
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 274: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/274.jpg)
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 275: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/275.jpg)
22. LABORATORIO DE DISEÑO
JERINGA INDUSTRIAL
ESTRUCTURA DE SOPORTE DEL DOSIFICADOR
ACOPLE AL PISTON
ACOPLE DE EMPUJE DEL LÍQUIDO
![Page 276: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/276.jpg)
PISTON DE DOBLE VASTAGO PARA EL SENSADO
![Page 277: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/277.jpg)
RACOR NORMA AMERICANA 6mm
VASTAGO DELGADO TRACERO DE SENSADO
TALLER DE MECANIZADO DE PIEZAS
![Page 278: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/278.jpg)
MODELO A ESCALA SISTEMA DE SELLADO HORIZONTAL
![Page 279: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/279.jpg)
SISTEMA COMERCIAL DE SELLADO HORIZONTAL
SELLADORA VERTICAL
RESISTENCIA DE SELLADO INCRUSTADAS EN LAS MORDAZAS DE BRONCE
![Page 280: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/280.jpg)
TANQUE DE ALMACENAMIENTO
DOSIFICADOR
SISTEMA CHEQUE-CHEQUE CON 2 TIPOS DE CHEQUE DISTINTO
![Page 281: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/281.jpg)
ACONDICIONAMIENTO PARA MOTORES ACTUADORES DE VALVULAS
VALVULA DE CORTINA CON ACOPLE AL MOTOR
ELECTROVALVULA PARA PASO DE FLUIDO
![Page 282: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/282.jpg)
ELECTROVALVULA PARA AIRE 3/2 DE 120VAC
PIROMETRO ECONOMICO
SISTEMA DE CONTROL DOSIFICADOR SIN PC (PRODUCTO INDEPENDIENTE)
![Page 283: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/283.jpg)
PIROMETRO DE CONTROL
CONTROLADOR DE VOLTAJE AC PARA RESISTENCIAS SELLADORAS
![Page 284: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/284.jpg)
PC DE CONTROL PARA PC INTERFASES DE POTENSIA
![Page 285: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/285.jpg)
![Page 286: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/286.jpg)
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 287: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/287.jpg)
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 288: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/288.jpg)
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 289: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/289.jpg)
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 290: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/290.jpg)
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 291: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/291.jpg)
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 292: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/292.jpg)
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 293: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/293.jpg)
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 294: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/294.jpg)
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 295: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/295.jpg)
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 296: 44002119](https://reader036.fdocuments.ec/reader036/viewer/2022082218/56d6c0751a28ab30169a7793/html5/thumbnails/296.jpg)
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.