MuhammadSajid commited on
Commit
d74ceea
·
verified ·
1 Parent(s): 54d5837

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -70
app.py CHANGED
@@ -8,7 +8,7 @@ available_capacitors = [25, 20, 15, 10, 5, 2.5, 1.5, 1]
8
  def calculate_power_parameters(voltage, current, power_factor):
9
  if voltage > 0 and current > 0:
10
  apparent_power = math.sqrt(3) * voltage * current
11
- real_power = apparent_power * power_factor / 1000 # W to kW
12
  try:
13
  reactive_power = math.sqrt((apparent_power / 1000) ** 2 - real_power ** 2)
14
  except ValueError:
@@ -44,87 +44,82 @@ def design_capacitor_bank(reactive_power, num_caps):
44
  suggested_capacitors = [f"{cap} kVAR" for cap in best_combo]
45
  total_kvar = sum(best_combo)
46
  message = f"Total Compensation: {round(total_kvar, 2)} kVAR"
47
- mismatch = abs(total_kvar - reactive_power) > 0.5
48
- if mismatch:
49
- message += ". Small mismatch detected."
50
  return {
51
  "suggested_capacitors": suggested_capacitors,
52
  "total_kvar": round(total_kvar, 2),
53
- "message": message,
54
- "mismatch": mismatch
55
  }
56
  else:
57
  return {"message": "No suitable combination found."}
58
  else:
59
  return None
60
 
61
- def three_phase_power_calculator(voltage, current, power_factor, frequency, num_caps):
62
  power_results = calculate_power_parameters(voltage, current, power_factor)
63
-
64
  if power_results:
65
- apparent_power_out = f"**Apparent Power:** {power_results['apparent_power']} VA"
66
- real_power_out = f"**Real Power:** {power_results['real_power']} kW"
67
- reactive_power_out = f"**Reactive Power:** {power_results['reactive_power']} kVAR"
68
- calculated_pf_out = f"**Calculated Power Factor:** {power_results['calculated_pf']}"
69
- reactive_power_value = power_results['reactive_power']
 
 
70
  else:
71
- return ("⚠️ Please enter valid Voltage and Current!", "", "", "", "", "", "")
72
-
73
- if reactive_power_value > 0:
74
- cap_bank_design = design_capacitor_bank(reactive_power_value, num_caps)
75
- if cap_bank_design:
76
- suggested_capacitors_text = "<br>".join(
77
- [f"🔹 Capacitor {i+1}: {cap}" for i, cap in enumerate(cap_bank_design['suggested_capacitors'])]
78
- )
79
- total_kvar_out = f"{cap_bank_design['message']}"
80
- cap_bank_message = cap_bank_design['message']
81
- else:
82
- suggested_capacitors_text = "⚠️ Could not find a suitable combination."
83
- total_kvar_out = ""
84
- cap_bank_message = ""
 
 
 
 
85
  else:
86
- suggested_capacitors_text = "Please first calculate power parameters."
87
- total_kvar_out = ""
88
- cap_bank_message = ""
89
-
90
- return (
91
- apparent_power_out,
92
- real_power_out,
93
- reactive_power_out,
94
- calculated_pf_out,
95
- suggested_capacitors_text,
96
- total_kvar_out,
97
- cap_bank_message
98
- )
99
-
100
- # Gradio Interface
101
- iface = gr.Interface(
102
- fn=three_phase_power_calculator,
103
- inputs=[
104
- gr.Number(label="🔌 Voltage (V)", value=400),
105
- gr.Number(label="⚡ Current (A)", value=100),
106
- gr.Slider(label="💡 Power Factor", minimum=0.0, maximum=1.0, value=1.0, step=0.01),
107
- gr.Radio(label="🔁 Frequency (Hz)", choices=[50, 60], value=50),
108
- gr.Slider(label="🔢 Number of Capacitors", minimum=1, maximum=6, step=1, value=2)
109
- ],
110
- outputs=[
111
- gr.Markdown(label="Apparent Power"),
112
- gr.Markdown(label="Real Power"),
113
- gr.Markdown(label="Reactive Power"),
114
- gr.Markdown(label="Calculated Power Factor"),
115
- gr.Markdown(label="Suggested Capacitor Sizes"),
116
- gr.Markdown(label="Total Compensation"),
117
- gr.Markdown(label="Message")
118
- ],
119
- title="⚙️ Three-Phase Power & Capacitor Bank Calculator",
120
- description="Enter voltage, current, and power factor to calculate three-phase power parameters and design a capacitor bank.",
121
- flagging_mode="never",
122
- examples=[
123
- [400, 100, 0.8, 50, 2],
124
- [220, 50, 0.95, 60, 3],
125
- [415, 120, 0.75, 50, 4]
126
- ]
127
- )
128
 
129
  if __name__ == "__main__":
130
- iface.launch()
 
8
  def calculate_power_parameters(voltage, current, power_factor):
9
  if voltage > 0 and current > 0:
10
  apparent_power = math.sqrt(3) * voltage * current
11
+ real_power = apparent_power * power_factor / 1000
12
  try:
13
  reactive_power = math.sqrt((apparent_power / 1000) ** 2 - real_power ** 2)
14
  except ValueError:
 
44
  suggested_capacitors = [f"{cap} kVAR" for cap in best_combo]
45
  total_kvar = sum(best_combo)
46
  message = f"Total Compensation: {round(total_kvar, 2)} kVAR"
47
+ if abs(total_kvar - reactive_power) > 0.5:
48
+ message += " (Small mismatch detected)"
 
49
  return {
50
  "suggested_capacitors": suggested_capacitors,
51
  "total_kvar": round(total_kvar, 2),
52
+ "message": message
 
53
  }
54
  else:
55
  return {"message": "No suitable combination found."}
56
  else:
57
  return None
58
 
59
+ def step1_calculate_reactive(voltage, current, power_factor, frequency):
60
  power_results = calculate_power_parameters(voltage, current, power_factor)
 
61
  if power_results:
62
+ return (
63
+ f"**Apparent Power:** {power_results['apparent_power']} VA",
64
+ f"**Real Power:** {power_results['real_power']} kW",
65
+ f"**Reactive Power:** {power_results['reactive_power']} kVAR",
66
+ f"**Calculated Power Factor:** {power_results['calculated_pf']}",
67
+ round(power_results['reactive_power'], 2)
68
+ )
69
  else:
70
+ return ("⚠️ Invalid input", "", "", "", 0.0)
71
+
72
+ def step2_design_bank(reactive_power, num_caps):
73
+ try:
74
+ num_caps = int(num_caps)
75
+ except ValueError:
76
+ return "⚠️ Please enter a valid number.", "", ""
77
+
78
+ cap_bank_design = design_capacitor_bank(reactive_power, num_caps)
79
+ if cap_bank_design:
80
+ suggested_capacitors = "<br>".join(
81
+ [f"🔹 Capacitor {i+1}: {cap}" for i, cap in enumerate(cap_bank_design['suggested_capacitors'])]
82
+ )
83
+ return (
84
+ suggested_capacitors,
85
+ f"{cap_bank_design['total_kvar']} kVAR",
86
+ cap_bank_design['message']
87
+ )
88
  else:
89
+ return ("⚠️ No suitable combination found.", "", "")
90
+
91
+ with gr.Blocks(title="Three-Phase Power & Capacitor Bank Calculator") as app:
92
+ gr.Markdown("## ⚡ Three-Phase Power Calculator with Capacitor Bank Design")
93
+
94
+ with gr.Row():
95
+ voltage = gr.Number(label="🔌 Voltage (V)", value=400)
96
+ current = gr.Number(label="⚡ Current (A)", value=100)
97
+ pf = gr.Slider(label="💡 Power Factor", minimum=0.0, maximum=1.0, value=0.9, step=0.01)
98
+ freq = gr.Radio(label="🔁 Frequency (Hz)", choices=[50, 60], value=50)
99
+
100
+ calc_btn = gr.Button("Step 1️⃣: Calculate Power Parameters")
101
+
102
+ apparent = gr.Markdown()
103
+ real = gr.Markdown()
104
+ reactive = gr.Markdown()
105
+ calc_pf = gr.Markdown()
106
+ reactive_hidden = gr.Number(visible=False)
107
+
108
+ calc_btn.click(fn=step1_calculate_reactive,
109
+ inputs=[voltage, current, pf, freq],
110
+ outputs=[apparent, real, reactive, calc_pf, reactive_hidden])
111
+
112
+ gr.Markdown("## ➕ Step 2️⃣: Enter Number of Capacitors for Bank Design")
113
+ cap_input = gr.Textbox(label="Enter number of capacitors (e.g., 3)", placeholder="e.g. 3")
114
+ design_btn = gr.Button("Design Capacitor Bank")
115
+
116
+ cap_list = gr.Markdown()
117
+ total_comp = gr.Markdown()
118
+ msg = gr.Markdown()
119
+
120
+ design_btn.click(fn=step2_design_bank,
121
+ inputs=[reactive_hidden, cap_input],
122
+ outputs=[cap_list, total_comp, msg])
 
 
 
 
 
 
 
 
123
 
124
  if __name__ == "__main__":
125
+ app.launch()