import streamlit as st import pandas as pd # Fixed latent heat values for given pressures (in kcal/kg) LATENT_HEAT_VALUES = { 5: 486, 6: 480, 7: 475 } def main(): st.title("Dyeing Machine Temperature Overshoot Calculator") # Step 1: User Inputs num_machines = st.number_input("Enter the number of machines:", min_value=1, step=1) machine_type = st.selectbox("Select Dyeing Machine Type:", ["SoftFlow", "Yarn Dyeing", "Jet Dyeing"]) # Modify as needed # Step 2: Single input for control system (applies to all machines) control_system = st.selectbox( "Select Current Control System:", ["ON/OFF Valve", "PID Control Valve", "Manual"] ) # Assign fixed latent heat based on machine type steam = 0 if machine_type == "SoftFlow": enthalpy = LATENT_HEAT_VALUES[6] # 6 Kg/cm²g pressure mlr = 6 elif machine_type == "Yarn Dyeing": enthalpy = LATENT_HEAT_VALUES[7] # 7 Kg/cm²g pressure mlr = 4 elif machine_type == "Jet Dyeing": enthalpy = LATENT_HEAT_VALUES[5] # 5 Kg/cm²g pressure mlr = 10 # Specific heat values specific_heat_water = 1.0 # kcal/kg°C specific_heat_cloth = 0.4 # kcal/kg°C # Step 3: Creating input table dynamically machines_data = [] for i in range(1, num_machines + 1): st.subheader(f"Machine {i}") machine_name = f"{machine_type}_Machine_{i}" quantity = st.number_input(f"{machine_name} - Quantity (kg)", min_value=0.0, step=0.1, key=f"qty_{i}") set_temp = st.number_input(f"{machine_name} - Set Temperature (°C)", min_value=0.0, step=0.1, key=f"set_temp_{i}") actual_temp = st.number_input(f"{machine_name} - Actual Temperature (°C)", min_value=0.0, step=0.1, key=f"act_temp_{i}") overshoot = actual_temp - set_temp q_water = mlr * quantity * specific_heat_water * overshoot q_cloth = quantity * specific_heat_cloth * overshoot steam_consumption = (q_water + q_cloth) / enthalpy steam += steam_consumption machines_data.append({ "Machine Name": machine_name, "Selected Machine Quantity (kg)": quantity, "Set Temperature (°C)": set_temp, "Actual Temperature (°C)": actual_temp, "Overshoot (°C)": overshoot }) # Step 4: Display Data & Calculate Range if machines_data: df = pd.DataFrame(machines_data) st.write("### Machines Data") st.dataframe(df) overshoot_values = df["Overshoot (°C)"].tolist() min_overshoot = min(overshoot_values) if overshoot_values else 0 max_overshoot = max(overshoot_values) if overshoot_values else 0 # Step 5: Recommendation Logic if control_system != "PID Control Valve": recommendation_text = f"- **Recommended:** Use PID Control Valve instead of {control_system} for better control and reduced steam consumption." else: recommendation_text = "**No additional recommendations.**" # Step 6: Editable Text Output default_text = ( f"Currently, there is temperature overshoot observed (from {min_overshoot}°C to {max_overshoot}°C) in heating, holding cycle in {machine_type} machine. " f"Due to overshoot, there is unnecessary heating. This leads to an increase in steam consumption. Estimated Steam Saving is {steam:.2f} Kg/day.\n\n" f"{recommendation_text}" ) user_text = st.text_area("Editable Report:", value=default_text, height=200) st.write("### Final Report") st.write(user_text) if __name__ == "__main__": main()