Hyd.pump-power / app.py
mughal-88's picture
Update app.py
4095c7f verified
raw
history blame
4.35 kB
import streamlit as st
import matplotlib.pyplot as plt
from PIL import Image
# Set page configuration
st.set_page_config(page_title="Hydraulic Pump Power Calculator", page_icon="\U0001F6E0", layout="centered")
# Load engineering icon
icon = Image.open("engineering_icon.png")
# Unit conversion factors
UNIT_CONVERSIONS = {
"Displacement": {"cc/rev": 1, "in^3/rev": 16.387},
"Pressure": {"bar": 1, "PSI": 0.0689476},
"Torque": {"Nm": 1, "lb-ft": 1.35582}
}
# Hydraulic Power Calculation and Missing Parameter Estimation
@st.cache
def calculate_hydraulic_parameters(displacement, pressure, rpm, torque, displacement_unit, pressure_unit, torque_unit):
# Convert inputs to base units
displacement_cc = displacement * UNIT_CONVERSIONS["Displacement"].get(displacement_unit, 1) if displacement else None
pressure_bar = pressure * UNIT_CONVERSIONS["Pressure"].get(pressure_unit, 1) if pressure else None
torque_nm = torque * UNIT_CONVERSIONS["Torque"].get(torque_unit, 1) if torque else None
# Calculate missing parameters if possible
if displacement_cc and pressure_bar and rpm and not torque_nm:
torque_nm = (displacement_cc * pressure_bar) / (20 * 3.14159)
elif torque_nm and pressure_bar and rpm and not displacement_cc:
displacement_cc = (torque_nm * 20 * 3.14159) / pressure_bar
elif torque_nm and displacement_cc and rpm and not pressure_bar:
pressure_bar = (torque_nm * 20 * 3.14159) / displacement_cc
# Calculate power using available data
power_displacement = (displacement_cc * pressure_bar * rpm) / 600.0 if displacement_cc and pressure_bar and rpm else None
power_torque = (torque_nm * rpm) / 9549 if torque_nm and rpm else None
return displacement_cc, pressure_bar, rpm, torque_nm, power_displacement, power_torque
# Generate chart
@st.cache
def generate_chart(displacement, pressure, rpm, torque):
terms = ["Displacement (cc/rev)", "Pressure (bar)", "RPM", "Torque (Nm)"]
values = [displacement, pressure, rpm, torque]
fig, ax = plt.subplots()
ax.bar(terms, values, color=['blue', 'green', 'red', 'orange'])
ax.set_title("Hydraulic Parameters")
ax.set_ylabel("Values")
plt.xticks(rotation=45)
return fig
# Streamlit App
st.image(icon, width=100)
st.title("Hydraulic Pump Power Calculator")
st.sidebar.header("Input Units")
# Unit selection
displacement_unit = st.sidebar.selectbox("Displacement Unit:", ["cc/rev", "in^3/rev"])
pressure_unit = st.sidebar.selectbox("Pressure Unit:", ["bar", "PSI"])
torque_unit = st.sidebar.selectbox("Torque Unit:", ["Nm", "lb-ft"])
st.sidebar.header("Input Parameters")
# User inputs
displacement = st.sidebar.number_input("Pump Displacement (cc/rev or in^3/rev):", min_value=0.0, step=0.1)
pressure = st.sidebar.number_input("Working Pressure (bar or PSI):", min_value=0.0, step=0.1)
rpm = st.sidebar.number_input("Pump RPM:", min_value=0.0, step=1.0)
torque = st.sidebar.number_input("Torque (Nm or lb-ft):", min_value=0.0, step=0.1)
# Calculate parameters and power
if st.sidebar.button("Calculate"):
displacement_cc, pressure_bar, rpm, torque_nm, power_displacement, power_torque = calculate_hydraulic_parameters(
displacement, pressure, rpm, torque, displacement_unit, pressure_unit, torque_unit
)
st.subheader("Results")
st.write(f"Pump Displacement: {displacement_cc:.2f} cc/rev" if displacement_cc else "Pump Displacement: Not provided or calculable.")
st.write(f"Working Pressure: {pressure_bar:.2f} bar" if pressure_bar else "Working Pressure: Not provided or calculable.")
st.write(f"Torque: {torque_nm:.2f} Nm" if torque_nm else "Torque: Not provided or calculable.")
st.write(f"Hydraulic Power based on Displacement: {power_displacement:.2f} kW" if power_displacement else "Power based on Displacement: Not calculable.")
st.write(f"Hydraulic Power based on Torque: {power_torque:.2f} kW" if power_torque else "Power based on Torque: Not calculable.")
# Display chart
fig = generate_chart(displacement, pressure, rpm, torque)
st.pyplot(fig)
# Hugging Face Space Deployment Notice
st.sidebar.markdown("---")
st.sidebar.write("This app is ready for deployment on Hugging Face Spaces using Streamlit.")
st.sidebar.write("To deploy, include this `app.py` and `requirements.txt` in your Hugging Face Space repository.")