Энэхүү программ нь флотацийн машин сонгох тооцоолол гүйцэтгэх ба хэрэглэгч бага зэрэг өөрчлөн өөрийн төслийн тооцоог хялбар гүйцэтгэж болно.
Нөгөө талаас Python дээр class бүтцийг хэрхэн ашиглах талаар зөвлөмж болох юм.
import math
from dataclasses import dataclass
# =============================================
# 1.Лабораторийн кинетик болон пульпын мэдээлэл
# =============================================
@dataclass
class SlurryConditions:
Q_s_tph: float # Хүчин чадал [т/ц]
w_s: float # Хатуугийн агуулга (жишээ нь 32%-ийг 0.32 гэж өгнө)
rho_s: float = 2.8 # Хүдрийн нягт [т/м3]
rho_w: float = 1.0 # Шингэний нягт [т/м3]
def slurry_flows(self):# Пульпын урсгалын дэд программ
"""
Тооцох нь:
Q_slurry_mass [t/h],
Q_water_mass [t/h],
Q_slurry_vol [m3/h]
"""
# Урсгалын нийт жин [т/ц]
Q_slurry_mass = self.Q_s_tph / self.w_s
# Усны нийт жин [т/ц]
Q_water_mass = Q_slurry_mass - self.Q_s_tph
# Урсгалын эзэлхүүн [м3/ц]
Q_s_vol = self.Q_s_tph / self.rho_s
Q_w_vol = Q_water_mass / self.rho_w
Q_slurry_vol = Q_s_vol + Q_w_vol
return Q_slurry_mass, Q_water_mass, Q_slurry_vol
@dataclass
class LabKinetics:
k_lab: float # Лабораторийн кинетикийн тогтмол [1/мин]
R_inf: float # Хамгийн их авалт (0-1)
def ideal_time_for_recovery(self, R_target: float) -> float:
"""
Compute ideal residence time (no scale-up) for target recovery.
"""
if R_target >= self.R_inf:
raise ValueError("R_target must be less than R_inf.")
t_ideal = -1.0 / self.k_lab * math.log(1.0 - R_target / self.R_inf)
return t_ideal
# ==========================================
# 2. Флотацийн машины тооцоо
# ==========================================
@dataclass
class RougherDesign:
slurry: SlurryConditions
kinetics: LabKinetics
R_target: float # Зорилтот металл авалт (0-1)
scale_factor: float # Лаб-аас үйлддвэрлэлд шилжих коэфф-т
cell_volume_m3: float # Нэг камерийн эзэлхүүн [м3]
def design(self):
# ---- Slurry flow ----
Q_slurry_mass, Q_water_mass, Q_slurry_vol = self.slurry.slurry_flows()
# ---- Time: lab -> plant ----
t_ideal = self.kinetics.ideal_time_for_recovery(self.R_target)
t_design = t_ideal * self.scale_factor
# ---- Total required volume ----
V_total = Q_slurry_vol * (t_design / 60.0) # [m3]
# ---- Number of cells ----
N_cells = math.ceil(V_total / self.cell_volume_m3)
V_installed = N_cells * self.cell_volume_m3
t_actual = V_installed / Q_slurry_vol * 60.0 # [min]
return {
"Q_slurry_mass_tph": Q_slurry_mass,
"Q_water_mass_tph": Q_water_mass,
"Q_slurry_vol_m3ph": Q_slurry_vol,
"t_ideal_min": t_ideal,
"t_design_min": t_design,
"V_total_required_m3": V_total,
"cell_volume_m3": self.cell_volume_m3,
"N_cells": N_cells,
"V_installed_m3": V_installed,
"t_actual_min": t_actual
}
# ==================================================
# 3. Optional: first-order recovery check for a bank
# ==================================================
def bank_recovery_first_order(k: float, t_cell_min: float, N_cells: int, R_inf: float = 0.95) -> float:
"""
Approximate recovery in a bank of N CSTRs in series
using first-order kinetics.
k : rate constant [1/min]
t_cell_min : residence time per cell [min]
N_cells : number of cells
R_inf : ultimate recovery (0-1)
Returns:
R_bank : total recovery (0-1)
"""
# Single CSTR recovery (underlying form)
# C_out/C_in = 1 / (1 + k * t_cell)
# Overall bank: (C_out/C_in)^N
theta = 1.0 / (1.0 + k * t_cell_min)
C_out_over_C_in = theta ** N_cells
R_bank = R_inf * (1.0 - C_out_over_C_in)
return R_bank
# =======================================================================
# 4. ЖИШЭЭ: 1812 т/ц хүчин чадалтай си-мо цехийн үндсэн флотацийн тооцоо
# хатуугийн агуулга - 32% , Зорилтот металл авалт (R_target) = 92%
# =======================================================================
if __name__ == "__main__":
# ---- Inputs you can change ----
Q_s_tph = 1812.0
w_s = 0.32
rho_s = 2.8
R_target = 0.92 # 92% target rougher recovery
k_lab = 0.25 # 1/min (example lab kinetic constant)
R_inf = 0.95 # 95% ultimate
scale_factor = 1.5 # lab -> plant scale-up
cell_volume_m3 = 160.0 # chosen cell size
# ---- Build objects ----
slurry = SlurryConditions(Q_s_tph=Q_s_tph, w_s=w_s, rho_s=rho_s)
kinetics = LabKinetics(k_lab=k_lab, R_inf=R_inf)
rougher = RougherDesign(
slurry=slurry,
kinetics=kinetics,
R_target=R_target,
scale_factor=scale_factor,
cell_volume_m3=cell_volume_m3
)
# ---- Run design ----
results = rougher.design()
# ---- Үр дүнг хэвлэх ----
print("=== Cu-Mo Үндсэн флотацийн төсөл ===")
print(f"Хүчин чадал : {Q_s_tph:.1f} т/ц")
print(f"Хатуугийн агуулга (%): {w_s*100:.1f} %")
print(f"Пульпын урсгал : {results['Q_slurry_mass_tph']:.1f} т/ц")
print(f"Урсгал дахь ус : {results['Q_water_mass_tph']:.1f} т/ц")
print(f"Пульпын эзэлхүүн : {results['Q_slurry_vol_m3ph']:.1f} m3/h")
print()
print(f"Лабораторийн k : {k_lab:.3f} 1/мин")
print(f"Лаб. авалт R_хяз : {R_inf*100:.1f} %")
print(f"Зорилтот авалт R : {R_target*100:.1f} %")
print(f"Флот.хугацаа : {results['t_ideal_min']:.2f} мин")
print(f"Флот.хугацаа (төсөл) : {results['t_design_min']:.2f} мин")
print()
print(f"Шаардлагатай V : {results['V_total_required_m3']:.1f} м3")
print(f"Камерийн V : {results['cell_volume_m3']:.1f} м3")
print(f"Камерийн тоо : {results['N_cells']}")
print(f"Нийт эзэлхүүн : {results['V_installed_m3']:.1f}м3")
print(f"Флот.хугацаа(жинхэнэ): {results['t_actual_min']:.2f} мин")
Friday, January 23, 2026
ФЛОРТАЦИЙН МАШИНЫ ТООЦОО (PYTHON)
Subscribe to:
Post Comments (Atom)

![[Most Recent Quotes from www.kitco.com]](http://www.kitconet.com/charts/metals/gold/t24_au_en_usoz_2.gif)
No comments:
Post a Comment