jueves, 15 de mayo de 2025

03.- Programación II - Esquema de Bombeo - Simulación Clase Nro 2

Basado en el siguientes esquema de Control



En la clase de hoy se elaboró un programa que simula el apagado y encendido de la bomba y el comportamiento de la presión a la descarga de la bomba.

Adicionalmente se elaboró un archivo de texto que simula: el Switch de Nivel (Interruptor de Bajo nivel),  la Válvula de servicios y Modo de Operación de la bomba (Local / Remoto).




Se indicó que tanto la Válvula como el Switch  lo manipularía el estudiante desde el archivo de texto y que el programa respondería basado en las tablas de la verdad para la Presión y la Bomba:






PROGRAMA 


/* PROGRAMA ELABORADO POR: CARLOS FERRER 
Control de nivel simple
Elaborado: Carlos Ferrer
Rev May 2025*/

#include<iostream> // Mostrar datos en pantalla
#include<fstream> // Leer y escribir en un archivo de texto
#include<windows.h> // Control de ejecución (tiempo de refrescamiento de pantalla)
using namespace std;

int main()
{
 string bomba="APAGADA";
 double presion=0;
 string pantalla="ON",texto_aux;
 int aux=1;
 
 
 
 /*Leemos los datos del archivo de texto prueba a través de la función
 conticinio (Puede ser cualquier nombre coloque conticinio porque me gusto la palabra)*/
 
 inicio:
 
 ifstream conticinio("C:\\Prueba\\prueba.txt"); 
  
 string sw_bajo_nivel;
 string valvula;
 string modobomba; 
  
 conticinio >>sw_bajo_nivel>>valvula>>modobomba; 
 
 //Verifico el modo de operación de la bomba
 
 if(modobomba=="Remoto" or modobomba=="remoto" or modobomba=="REMOTO")
  {
modobomba="REMOTO";
}
else
{
modobomba="LOCAL";
}
 
 //Verifico el estado del Switch de bajo nivel
 
 if(sw_bajo_nivel=="ON" or sw_bajo_nivel=="on" or sw_bajo_nivel=="On")
  {
sw_bajo_nivel="ON";
}

 else if(sw_bajo_nivel=="OFF" or sw_bajo_nivel=="off" or sw_bajo_nivel=="Off")
  {
sw_bajo_nivel="OFF";
}
 else 
  {
  modobomba="LOCAL";
  }
 //Verifico el estado de la válvula de servicio
 
 if(valvula=="ABIERTA" or valvula=="abierta" or valvula=="Abierta")
  {
valvula="ABIERTA";
}

 else if(valvula=="CERRADA" or valvula=="cerrada" or valvula=="Cerrada")
  {
valvula="CERRADA";
}
 else 
  {
  modobomba="LOCAL";
  }

 
 //CHEQUEO EL MODO DE OPERACIÓN DE LA BOMBA
 
 if (modobomba=="REMOTO" )
  {
  aux=0;
  }
 if (modobomba=="LOCAL" )
  {
  aux=1;
  }
 
 
 
 // HACEMOS TODOS LOS CÁLCULOS PARA EL MODO REMOTO AUTOMÁTICO
  
 if (aux==0)
  {
  
 // imprimimos los valores en pantalla para el modo Remoto
 
 
  if(pantalla=="ON")
  {
  system("cls");
  cout <<"La Presion= "<<presion<<endl;
  cout <<"Tu bomba esta= "<<bomba<<endl; 
  if(sw_bajo_nivel=="OFF")
  {
  texto_aux="ALARMA";
  }
else
  {
  texto_aux="NORMAL";
  }
  cout <<"El Switch de nivel= "<<texto_aux<<endl;
  cout <<"La valvula esta= "<<valvula<<endl<<endl;  
    cout <<"                               **** MODO AUTOMATICO REMOTO *****";
  pantalla ="OFF"; 
    }

//  Establecemos un tiempo de 1 de segundo para ver los cambios en la presión

    Sleep (1000);
    
    
// Simulamos la Presión    
    
    if (valvula=="CERRADA" and bomba=="ENCENDIDA")
    {
      presion=presion+3;
        pantalla ="ON";
    }
 
  if (valvula=="ABIERTA" and bomba=="APAGADA")
    {
      presion=presion-3;
        pantalla ="ON";
    }
 
     if (valvula=="ABIERTA" and bomba=="ENCENDIDA" and presion<32)
    {
      presion=presion+1;
        pantalla ="ON";
      }
 
      if (valvula=="ABIERTA" and bomba=="ENCENDIDA" and presion>32)
    {
      presion=presion-1;
        pantalla ="ON";
        }
 
 //impedimos que la presión de negativo
  
      if (presion<0)
    {
      presion=0;
        pantalla ="ON";
      }

    // Controlamos el encendido y apagado de la bomba
    
      if (sw_bajo_nivel=="OFF" and bomba=="ENCENDIDA")
    {
      bomba="APAGADA";
        pantalla ="ON";
     
  
      if (sw_bajo_nivel=="ON" and presion<20 and bomba=="APAGADA")
    {
      bomba="ENCENDIDA";
        pantalla ="ON";
      }  
      if (sw_bajo_nivel=="ON" and presion>40 and bomba=="ENCENDIDA")
    {
      bomba="APAGADA";
        pantalla ="ON";
     
  
   
  }
 
  // PRESENTAMOS LOS DATOS DEL MODO LOCAL
  
 if (aux==1)
  {
  
 // imprimimos los valores en pantalla para el modo Local
  
  if(pantalla=="ON")
  {
  system("cls");
    cout <<" **** MODO LOCAL - EL PROGRAMA NO CONTROLA LA BOMBA "<<endl; 
cout <<"O NO HAY COMUNICACIÓN CON EL ARCHIVO .TXT *****";
  pantalla ="OFF"; 
    }  
 
   }
 
 goto inicio;
 
}

PROGRAMA EN PYTHON



# PROGRAMA ELABORADO POR: CARLOS FERRER
# Control de nivel simple
# Elaborado: Carlos Ferrer
# Rev Nov 2024*/


import time # Biblioteca para dormir el programa 1 seg
import os # Biblioteca para limpiar pantalla

# Establecemos valores iniciales
os.system("cls")

bomba = "APAGADA" # Status Bomba
presion = 0    # Presión de descarga en psi
pantalla = "ON" # Actualización de Pantalla
texto_aux = "" # Variable de texto de la alarma del switch de bajo nivel
aux = 1      # Variable aux modo bomba

while True:
   
    with open("C:\\Prueba\\prueba.txt", "r") as conticinio:   # abrimos archivo
        linea=conticinio.readline() # leemos la 1ra linea
        datos = linea.split() # separamos las palabras en un arreglo
       
        # vaciamos los datos
        sw_bajo_nivel = datos[0]
        valvula = datos[1]
        modobomba = datos[2]
       
    # Verifico el modo de operación de la bomba
    if (modobomba == "remoto" or modobomba=="Remoto" or modobomba=="REMOTO"):
        modobomba = "REMOTO"
    else:
        modobomba = "LOCAL"

    # Verifico el estado del Switch de bajo nivel
    if (sw_bajo_nivel == "on" or sw_bajo_nivel == "On" or sw_bajo_nivel == "ON"):
        sw_bajo_nivel = "ON"
    elif (sw_bajo_nivel== "off" or sw_bajo_nivel== "Off" or sw_bajo_nivel== "OFF"):
        sw_bajo_nivel = "OFF"
    else:
        modobomba = "LOCAL"

    # Verifico el estado de la válvula de servicio
    if (valvula == "abierta" or valvula == "Abierta" or valvula == "ABIERTA"):
        valvula = "ABIERTA"
    elif (valvula == "cerrada" or valvula == "Cerrada" or valvula == "CERRADA"):
        valvula = "CERRADA"
    else:
        modobomba = "LOCAL"

    # CHEQUEO EL MODO DE OPERACIÓN DE LA BOMBA
    if modobomba == "REMOTO":
        aux = 0
    elif modobomba == "LOCAL":
        aux = 1
       
    # HACEMOS TODOS LOS CÁLCULOS PARA EL MODO REMOTO AUTOMÁTICO
    if aux == 0:
        # imprimimos los valores en pantalla para el modo Remoto
        if pantalla == "ON":
            os.system("cls")
            print(f"La Presion= {presion}")
            print(f"Tu bomba esta= {bomba}")
            texto_aux = "ALARMA" if sw_bajo_nivel == "OFF" else "NORMAL"
            print(f"El Switch de nivel= {texto_aux}")
            print(f"La valvula esta= {valvula}\n")
            print("**** MODO AUTOMATICO REMOTO *****")
            pantalla = "OFF"

        # Establecemos un tiempo de 1 de segundo para ver los cambios en la presión
        time.sleep(1)

        # Simulamos la Presión
        if valvula == "CERRADA" and bomba == "ENCENDIDA":
            presion += 3
            pantalla = "ON"

        if valvula == "ABIERTA" and bomba == "APAGADA":
            presion -= 3
            pantalla = "ON"

        if valvula == "ABIERTA" and bomba == "ENCENDIDA" and presion < 32:
            presion += 1
            pantalla = "ON"

        if valvula == "ABIERTA" and bomba == "ENCENDIDA" and presion > 32:
            presion -= 1
            pantalla = "ON"

        # impedimos que la presión sea negativa
        if presion < 0:
            presion = 0
            pantalla = "ON"

        # Controlamos el encendido y apagado de la bomba
        if sw_bajo_nivel == "OFF" and bomba == "ENCENDIDA":
            bomba = "APAGADA"
            pantalla = "ON"

        if sw_bajo_nivel == "ON" and presion < 20 and bomba == "APAGADA":
            bomba = "ENCENDIDA"
            pantalla = "ON"

        if sw_bajo_nivel == "ON" and presion > 40 and bomba == "ENCENDIDA":
            bomba = "APAGADA"
            pantalla = "ON"

    # PRESENTAMOS LOS DATOS DEL MODO LOCAL
    if aux == 1:
        # imprimimos los valores en pantalla para el modo Local
        if pantalla == "ON":
            print("**** MODO LOCAL - EL PROGRAMA NO CONTROLA LA BOMBA")
            print("O NO HAY COMUNICACIÓN CON EL ARCHIVO .TXT *****")
            pantalla = "OFF"




ARCHIVO PRUEBA.TXT

  OFF                                       ABIERTA                               REMOTO

 Switch de Nivel            Válvula a la descarga                 Modo Bomba

(ON= Agua, Off=Vacio)   (ABIERTA / CERRADA)  (LOCAL /REMOTO)

                                              

Nota: En modo REMOTO el control de la bomba es del programa  en modo LOCAL el programa pierde el control de la bomba


El Archivo de texto debe presentar la data en la primera línea de lo contrario no será leído por el programa.

Verifique que la ruta donde colocó el archivo de texto sea la indicada en el programa de lo contrario la data no será leída.

Para C++ Recuerde cambiar "\" por "\\" cuando declare la ruta dentro del programa.

Éxito 

No hay comentarios.:

Publicar un comentario