АШИГТ МАЛТМАЛЫН БАЯЖУУЛАЛТЫН ТЕХНИК, ТЕХНОЛОГИ

Ашигт малтмалын баяжуулалтын чиглэлээр сурч буй оюутан сурагчид, залуу инженерүүдэд зориулав.

Saturday, January 31, 2026

PYTHON сонирхогч залуучуудад сонирхуулах зорилгоор БИОРИТМ программыг оруулав.

Биоритм Тооцоолуур

📊 Биоритм Тооцоолуур

Таны бие, сэтгэл, оюун ухааны долоо хоногийн мөчлөг

Тооцоолж байна...

ℹ️ Биоритмын тухай

Бие бялдар (23 хоног): Хүч чадал, эрч хүч, биеийн тамир
Сэтгэл санаа (28 хоног): Мэдрэмж, сэтгэл хөдлөл, уур хилэн
Оюун ухаан (33 хоног): Оюун ухаан, санах ой, шийдвэр гаргах

SABC схемийн шаардлагатай чадлыг тооцох нь (JK A*b)

GD Mill Design Toolkit (Web) — 3 Tabs

Tab1: SABC Power (JK A*b) • Tab2: Ball Mill + Cyclone • Tab3: Mill Power Design (Q → P)
Input Data
Results
E_total (kWh/t)
-
E_SAG (kWh/t)
-
E_Ball (kWh/t)
-
SAG fraction of total energy
-
SAG Power (kW)
-
Ball Mill Power (kW)
-
Total SABC Power (kW)
-
Hybrid split uses Bond energy split + JK A*b correction (Ab_ref=42.5).
Ball Mill Input (Bond + EF1–3, Installed Power)
Cyclone Input
Results
Mill E_basic (kWh/t)
-
Mill E_corrected (kWh/t)
-
Mill Q_basic (t/h)
-
Mill Q_corrected (t/h)
-
Cyclone Feed (m³/h)
-
Cyclone D50 (µm)
-
Cyclone Body Dia calc (mm)
-
Cyclone Dia selected (mm)
-
Capacity per cyclone (m³/h)
-
Number of cyclones
-
Vortex finder dia (mm)
-
Inlet dia (mm)
-
Design Input
Results
E_basic (kWh/t)
-
E_corrected (kWh/t)
-
Required Mill Power (kW)
-
Required Mill Power (MW)
-
P_req = (E_corr · Q) / η

Бөөрөнцөгт тээрмийн хүчин чадлыг Бондын аргаар автоматаар тооцох нь

Bond Ball Mill Capacity (Rowland EF) — Web Version

Capacity Q is calculated using Rowland form with ζ = product(EF). Units: D,L (m), ρb (t/m³), J (fraction), φc (fraction), Wi (kWh/t), F80,P80 (µm).
Basic inputs
Operating conditions
Result
Capacity Q = ?
Q is t/h (metric tonnes per hour)
Rowland Efficiency Factors (Ball Mill)
EF1 (dry grinding)
-
EF2 (open circuit)
-
EF3 (mill diameter)
-
EF4 (oversize feed)
-
EF5 (fine product)
-
EF7 (low reduction ratio)
-
ζ = EF1·EF2·EF3·EF4·EF5·EF7
-
Bond specific energy (F80 → P80)
Base W (no EF)
-
Actual W (with ζ)
-
Debug
Run a calculation to view details.

Sunday, January 25, 2026

БӨӨРӨНЦӨГТ ТЭЭРМИЙН ЧАДЛЫН ҮНЭЛГЭЭ

Доор бөөрөнцөгт тээрмийн суульлагдсан чадлыг регрессийн аргаар үнэлэх тооцоог Python -ыг хэрхэн хэрэглэх талаар авч үзэв. Энэ нь өгөгдлийг боловсруулах хамгийн энгийн жишээ юм.


Цаашид Python хэлээ улам сайн сураад инженерийн тооцоог гүйцэтгэдэг программыг GUI (Graphic User Interface) байдлаар бэлэн болгож болно.
Дараах зурагт бөөрөнцөгт тээрмийн хүчиэн чадлыг олдог программын GUI хэлбэрээр боловсруулсныг харуулав.







Friday, January 23, 2026

ХАГАС ӨӨРӨӨ НУНТАГЛАЛТЫН ТЭЭРМИЙН (SAG) ЧАДАЛ СОНГОХ ТООЦОО



ЭНЭХҮҮ ПАЙТОН КОД НЬ ХҮДРИЙН ХАТУУЛГЫН ИНДЕКС A*b АШИГЛАН (JKSIMMET) ХӨН-ЫН ТЭЭРМИЙН ЧАДЛЫГ ТООЦНО.
ПРОГРАММЫН ӨГӨГДӨЛ:
 		
 A*b = 42.5
 Wi = 17.8 kWh/t
 F80 = 304000 micron (304 mm)
 T80 = 1700 micron (1.7 mm)
 Q = 1812 tph
 
#-------------------------------------------------------------------------
# SAG тээрмийн чадлын тооцоог хатуулгын A*b индекс ашиглан тооцох программ
#-------------------------------------------------------------------------

import math
from dataclasses import dataclass

# ----------------- Өгөгдлийн бүтэц ----------------- #

@dataclass
class SagOreData:
    ab: float       # JK A*b
    wi: float       # Bond ball mill Wi, kWh/t
    f80_micron: float  # SAG feed F80, micron
    t80_micron: float  # SAG product T80 (BM feed), micron
    q_tph: float       # Fresh feed rate, t/h


@dataclass
class SagCalcParams:
    ab_ref: float = 40.0    # Reference A*b for "medium" ore
    gamma: float = 0.7      # Exponent in C_Ab = (Ab_ref / Ab)^gamma
    c_oper: float = 1.3     # Operating condition factor (fill, speed, etc.)
    eta_drive: float = 0.97 # Drive efficiency
    eta_motor: float = 0.97 # Motor efficiency
    sf: float = 1.10        # Safety factor for installed power


@dataclass
class SagResult:
    e_bond_sag: float   # Bond reference energy F80->T80, kWh/t
    c_ab: float         # Hardness factor from A*b
    c_oper: float       # Operating factor
    e_sag: float        # Final SAG specific energy, kWh/t
    p_net_kw: float     # Net SAG power, kW
    p_inst_kw: float    # Installed SAG power, kW


# ----------------- Туслах функцууд ----------------- #

def bond_energy_f_to_t(wi: float, f80_micron: float, t80_micron: float) -> float:
    """
    Bond equation for size reduction F80 -> T80.
    E (kWh/t) = 10 * Wi * (1/sqrt(T80) - 1/sqrt(F80))
    F80, T80 in micron.
    """
    f80 = max(f80_micron, 1.0)
    t80 = max(t80_micron, 1.0)

    term = (1.0 / math.sqrt(t80)) - (1.0 / math.sqrt(f80))
    e_bond = 10.0 * wi * term
    return max(e_bond, 0.0)


def hardness_factor_ab(ab: float, ab_ref: float, gamma: float) -> float:
    """
    C_Ab = (Ab_ref / Ab)^gamma
    - Ab < Ab_ref -> C_Ab > 1 (hard ore, more energy)
    - Ab > Ab_ref -> C_Ab < 1 (soft ore, less energy)
    """
    ab_eff = max(ab, 1e-6)
    return (ab_ref / ab_eff) ** gamma


def sag_power_from_ab(ore: SagOreData, params: SagCalcParams) -> SagResult:
    # 1) Bond reference energy for coarse grinding: F80 -> T80
    e_bond_sag = bond_energy_f_to_t(
        wi=ore.wi,
        f80_micron=ore.f80_micron,
        t80_micron=ore.t80_micron
    )

    # 2) Hardness factor from A*b
    c_ab = hardness_factor_ab(
        ab=ore.ab,
        ab_ref=params.ab_ref,
        gamma=params.gamma
    )

    # 3) Final SAG specific energy with operating factor
    e_sag = e_bond_sag * c_ab * params.c_oper  # kWh/t

    # 4) Net power: P_net (kW) = E_sag (kWh/t) * Q (t/h)
    p_net_kw = e_sag * ore.q_tph

    # 5) Installed power (mechanical + electrical losses, safety factor)
    p_inst_kw = p_net_kw / (params.eta_drive * params.eta_motor) * params.sf

    return SagResult(
        e_bond_sag=e_bond_sag,
        c_ab=c_ab,
        c_oper=params.c_oper,
        e_sag=e_sag,
        p_net_kw=p_net_kw,
        p_inst_kw=p_inst_kw
    )


# ----------------- ЖИШЭЭ: Эрдэнэттэй төстэй өгөгдөл ----------------- #

if __name__ == "__main__":
    # Таны өгсөн өгөгдөл:
    # A*b = 42.5, Wi = 17.8 kWh/t,
    # F80 = 304000 micron (304 mm),
    # T80 = 1700 micron (1.7 mm),
    # Q = 1812 tph
    ore_data = SagOreData(
        ab=42.5,
        wi=18,
        f80_micron=304000.0,
        t80_micron=1700.0,
        q_tph=1812
    )

    # Тооцооны параметр (эхний таамаг):
    calc_params = SagCalcParams(
        ab_ref=40.0,   # "дунд" хүдэр
        gamma=0.7,     # A*b-ийн нөлөөний зэргийн үзүүлэлт
        c_oper=1.3,    # ажиллагааны нөхцөл (fill, speed, etc.)
        eta_drive=0.97,
        eta_motor=0.97,
        sf=1.10
    )

    result = sag_power_from_ab(ore_data, calc_params)

    print("======= SAG ТЭЭРМИЙН ЧАДЛЫН ТООЦОО (A*b ашигласан) =======")
    print(f"Бондын томьёогоор (F80->T80): {result.e_bond_sag:6.3f} кВт ц/т")
    print(f"Хатуулгын фактор C_Ab       : {result.c_ab:6.3f} (-)")
    print(f"Vйл ажиллагааны фактор      : {result.c_oper:6.3f} (-)")
    print(f"SAG тээрмийн хувийн энерги  : {result.e_sag:6.3f} кВт ц/т")
    print(f"SAG тээрмийн цэвэр чадал    : {result.p_net_kw/1000:6.2f} МВт")
    print(f"Суулрьлагдсан чадал         : {result.p_inst_kw/1000:6.2f} МВт")
    
    

ПОЛИНОМ РЕГРЕСС (МАШИН СУРГАЛТ)




Машин сургалт ба өгөгдлийн шинжилгээнд регрессийн шинжилгээ нь гол үүрэгтэй.  Python -ы NUMPY сангийн ploy1d функцийг ашиглан полином регрессийн шигжилгээг амархан гүйцэтгэж болно.
Уг программаар полиномын зэргийг гараар өгч тухайн олон гишүүнт загварыг өөрийн хүссэнээр тооцоолно:


import matplotlib.pyplot as plt
import numpy as np

# туршилтын vр дvн
x = [-100, -75, -50, -25, 0, 25, 50, 75, 100]
y = [4.06, 6.78, 9.49, 16.27, 40.67, 97.62, 146.63, 151.85, 162.70]
X = np.linspace(-100, 100, 100)
# NUMPY сангийн полином регрессийн коэффициентуудыг vнэлэх
while True:
    try:
        m = eval(input("\n Полиномын зэрэг ==> "))
        mymodel = np.poly1d(np.polyfit(x, y, m))
        print(mymodel)
        plt.title('Полином регресс , n=' + str(m));
        plt.xlabel('x');
        plt.ylabel('y')
        plt.grid(True)
        plt.scatter(x, y)
        plt.plot(X, mymodel(X))
        plt.show()
    except SyntaxError:
        break
input("Боллоо, дурын товч дарна уу?")

ФЛОРТАЦИЙН МАШИНЫ ТООЦОО (PYTHON)



Энэхүү программ нь флотацийн машин сонгох тооцоолол гүйцэтгэх ба хэрэглэгч бага зэрэг өөрчлөн өөрийн төслийн тооцоог хялбар гүйцэтгэж болно.
Нөгөө талаас 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} мин")