Spaces:
Sleeping
Sleeping
File size: 6,869 Bytes
6e2024a 28a5017 6e2024a 4b996c7 6e2024a 0177ad7 6e2024a 4b996c7 0177ad7 4b996c7 6e2024a 0177ad7 6e2024a 0177ad7 4b996c7 0177ad7 806292e 6e2024a 4b996c7 6e2024a 4b996c7 6e2024a 806292e 6e2024a 0177ad7 806292e 4b996c7 6e2024a 806292e 6e2024a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import streamlit as st
# Set page configuration
st.set_page_config(page_title="Hydraulic Pump Power Calculator", page_icon="\U0001F6E0", layout="centered")
# Unit conversion factors
UNIT_CONVERSIONS = {
"Displacement": {"cc/rev": 1, "in^3/rev": 16.387, "liters/rev": 1000},
"Pressure": {"bar": 1, "MPa": 10, "PSI": 0.0689476, "kPa": 0.01, "atm": 1.01325},
"Torque": {"Nm": 1, "lb-ft": 1.35582},
"Flow Rate": {"L/min": 1, "m^3/h": 16.6667, "GPM (US)": 3.78541, "GPM (UK)": 4.54609}
}
# Hydraulic Power Calculation and Missing Parameter Estimation
@st.cache
def calculate_hydraulic_parameters(displacement, pressure, rpm, torque, flow_rate,
displacement_unit, pressure_unit, torque_unit, flow_rate_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
flow_rate_lpm = flow_rate * UNIT_CONVERSIONS["Flow Rate"].get(flow_rate_unit, 1) if flow_rate 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
power_flow_rate = (flow_rate_lpm * pressure_bar) / 600.0 if flow_rate_lpm and pressure_bar else None
# Convert results to all available units
results = {
"displacement": {unit: displacement_cc / factor for unit, factor in UNIT_CONVERSIONS["Displacement"].items()} if displacement_cc else {},
"pressure": {unit: pressure_bar / factor for unit, factor in UNIT_CONVERSIONS["Pressure"].items()} if pressure_bar else {},
"torque": {unit: torque_nm / factor for unit, factor in UNIT_CONVERSIONS["Torque"].items()} if torque_nm else {},
"flow_rate": {unit: flow_rate_lpm / factor for unit, factor in UNIT_CONVERSIONS["Flow Rate"].items()} if flow_rate_lpm else {},
"power_displacement": power_displacement,
"power_torque": power_torque,
"power_flow_rate": power_flow_rate
}
return results, displacement_cc, pressure_bar, torque_nm, flow_rate_lpm
# Streamlit App
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", "liters/rev"])
pressure_unit = st.sidebar.selectbox("Pressure Unit:", ["bar", "MPa", "PSI", "kPa", "atm"])
torque_unit = st.sidebar.selectbox("Torque Unit:", ["Nm", "lb-ft"])
flow_rate_unit = st.sidebar.selectbox("Flow Rate Unit:", ["L/min", "m^3/h", "GPM (US)", "GPM (UK)"])
st.sidebar.header("Input Parameters")
# User inputs
displacement = st.sidebar.number_input("Pump Displacement (cc/rev, in^3/rev, or liters/rev):", value=None, step=0.1, format="%.2f")
pressure = st.sidebar.number_input("Working Pressure (bar, MPa, PSI, kPa, or atm):", value=None, step=0.1, format="%.2f")
rpm = st.sidebar.number_input("Pump RPM:", value=None, step=1.0, format="%.0f")
torque = st.sidebar.number_input("Torque (Nm or lb-ft):", value=None, step=0.1, format="%.2f")
flow_rate = st.sidebar.number_input("Flow Rate (L/min, m^3/h, GPM (US), or GPM (UK)):", value=None, step=0.1, format="%.2f")
# Calculate parameters and power
if st.sidebar.button("Calculate"):
results, displacement_cc, pressure_bar, torque_nm, flow_rate_lpm = calculate_hydraulic_parameters(
displacement, pressure, rpm, torque, flow_rate,
displacement_unit, pressure_unit, torque_unit, flow_rate_unit
)
st.subheader("Results")
# Display formulas
st.write("### Formulas Used:")
if displacement_cc and pressure_bar and rpm:
st.write("Power based on Displacement: Power (kW) = (Displacement (cc/rev) × Pressure (bar) × RPM) / 600")
if torque_nm and rpm:
st.write("Power based on Torque: Power (kW) = (Torque (Nm) × RPM) / 9549")
if flow_rate_lpm and pressure_bar:
st.write("Power based on Flow Rate: Power (kW) = (Flow Rate (L/min) × Pressure (bar)) / 600")
# Display input conversions
st.write("### Converted Input Parameters:")
if displacement_cc:
st.write(f"Displacement: {displacement_cc:.2f} cc/rev")
if pressure_bar:
st.write(f"Pressure: {pressure_bar:.2f} bar")
if torque_nm:
st.write(f"Torque: {torque_nm:.2f} Nm")
if flow_rate_lpm:
st.write(f"Flow Rate: {flow_rate_lpm:.2f} L/min")
# Display results for all units
if results["displacement"]:
st.write("### Pump Displacement:")
for unit, value in results["displacement"].items():
st.write(f"{value:.2f} {unit}")
if results["pressure"]:
st.write("### Working Pressure:")
for unit, value in results["pressure"].items():
st.write(f"{value:.2f} {unit}")
if results["torque"]:
st.write("### Torque:")
for unit, value in results["torque"].items():
st.write(f"{value:.2f} {unit}")
if results["flow_rate"]:
st.write("### Flow Rate:")
for unit, value in results["flow_rate"].items():
st.write(f"{value:.2f} {unit}")
# Power results
st.write("### Hydraulic Power:")
if results['power_displacement']:
st.write(f"Based on Displacement: {results['power_displacement']:.2f} kW / {(results['power_displacement'] * 1.34102):.2f} HP")
else:
st.write("Power based on Displacement: Not calculable.")
if results['power_torque']:
st.write(f"Based on Torque: {results['power_torque']:.2f} kW / {(results['power_torque'] * 1.34102):.2f} HP")
else:
st.write("Power based on Torque: Not calculable.")
if results['power_flow_rate']:
st.write(f"Based on Flow Rate: {results['power_flow_rate']:.2f} kW / {(results['power_flow_rate'] * 1.34102):.2f} HP")
else:
st.write("Power based on Flow Rate: Not calculable.")
# 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.")
|