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