# -*- coding: utf-8 -*- """ Лаба 6. Расчёт параметров буровзрывных работ (разработка на полное сечение). Расчёт по формулам (6.1)-(6.17) методички. Замечание: числовой пример методички содержит арифметические погрешности (например, w0 = 0,63 м вместо 0,93 м по формуле), поэтому проверка ниже сходится с примером только по схеме расчёта, но не по всем округлениям. Длины в м, массы в кг. """ from math import sqrt, ceil, floor # ---------------------------------------------------------------- справочные данные # Табл. 6.3 + 6.4 + 6.5 + 6.9: патронированные ВВ по диапазону крепости. # ВВ: (название, e, rho_вв диапазон кг/м3, d патрона м, длина патрона м, масса патрона кг) VV_BY_F = ( ((10, 20), ("Аммонит №1 скальный", 0.81, (1450, 1580), 0.036, 0.175, 0.250)), ((7, 10), ("Аммонал", 0.91, (950, 1150), 0.032, 0.250, 0.250)), ((4, 7), ("Аммонит №6ЖВ", 1.00, (1000, 1200), 0.032, 0.250, 0.200)), ((2, 4), ("Динафталит", 1.08, (1000, 1150), 0.032, 0.250, 0.200)), ((1, 2), ("Аммонит ПЖВ-20", 1.20, (1050, 1200), 0.036, 0.175, 0.200)), ) # Табл. 6.6: коэффициент влияния плотности заряжания PSI_PATRON = 1.10 # обычные патроны PSI_ROSSYP = 1.00 # россыпные ВВ # Табл. 6.7: (f_min, f_max, omega_min, omega_max) — снизу вверх по крепости OMEGA_ROWS = ( (2, 4, 0.6, 0.8), (4, 6, 0.8, 1.0), (6, 8, 1.0, 1.4), (8, 10, 1.4, 1.6), (10, 14, 1.6, 1.8), (14, 18, 1.8, 1.9), (18, 20, 1.9, 2.0), ) # Табл. 6.8: коэффициент зажима по площади сечения def k_z(S): if S < 20: return 0.7 if S <= 50: return 0.8 return 0.9 # Табл. 6.10: расчётная плотность породы по крепости (снизу вверх) RHO_ROWS = ( (2, 3, 2100), (4, 6, 2500), (7, 9, 2750), (10, 14, 2900), (15, 10**9, 3000), ) # Табл. 6.11: расстояния отбойных/подошвенных шпуров в долях л.н.с. w0 A_OTB = (0.90, 0.95) # между шпурами в ряду (и рядами — принимаем одинаковыми) A_POD = (0.70, 0.90) # Табл. 6.12: расстояние между контурными шпурами, м; строки по f, колонки по трещиноватости A_K_ROWS = ( (2, 3, 0.6, 0.7, 0.6), (4, 6, 0.5, 0.6, 0.7), (7, 9, 0.4, 0.5, 0.6), (10, 12, 0.3, 0.4, 0.5), ) # Табл. 6.13: коэффициент сближения контурных зарядов M_ROWS = ((2, 3, 1.0), (4, 6, 0.9), (7, 9, 0.8), (10, 14, 0.7), (15, 20, 0.6)) # Табл. 6.14: коэффициент заполнения шпура (снизу вверх) KZAP_ROWS = ( (2, 3, 0.50, 0.55), (4, 6, 0.60, 0.65), (7, 9, 0.65, 0.70), (10, 14, 0.70, 0.75), (15, 20, 0.75, 0.80), ) # Табл. 6.15: коэффициент концентрации контурных зарядов, кг/м KK_ROWS = ((2, 3, 0.25), (4, 6, 0.30), (7, 9, 0.35), (10, 14, 0.40), (15, 20, 0.45)) # Табл. 6.1: вертикальный клиновой вруб (f_min, f_max, N_вр диапазон) — снизу вверх VRUB_ROWS = ( (2, 6, 4, 6), (6, 8, 4, 6), (8, 10, 6, 8), (10, 15, 6, 8), (15, 20, 6, 8), ) def rup(x, n=2): """Математическое округление (половина — вверх), в отличие от round().""" p = 10 ** n return floor(x * p + 0.5) / p def pick(rows, f): """Первая строка (снизу вверх), в диапазон f которой попадает f.""" for row in rows: if row[0] <= f <= row[1]: return row return rows[-1] def pick_vv(f): for (fmin, fmax), vv in VV_BY_F: if fmin <= f <= fmax: return vv return VV_BY_F[0][1] # Варианты исходных данных: (f, S, В, Р, l_k, l_зах) VARIANTS = { 1: (5, 16.56, 4.60, 14.51, 2.7, 2.5), 2: (9, 19.20, 5.05, 15.56, 3.5, 3.0), 3: (10, 21.90, 5.81, 17.19, 4.0, 3.5), 4: (13, 6.40, 2.17, 7.05, 4.1, 4.0), 5: (6, 7.92, 2.77, 1.20, 3.0, 2.5), 6: (8, 14.17, 4.53, 12.55, 3.5, 3.0), 7: (4, 24.46, 5.81, 17.53, 2.7, 2.5), 8: (7, 5.60, 2.00, 8.26, 0.0, 3.0), 9: (8, 14.09, 4.20, 13.56, 3.5, 3.0), 10: (11, 20.40, 5.29, 15.60, 4.2, 4.0), 11: (5, 104.94, 10.60, 33.80, 3.5, 3.0), 12: (7, 106.44, 11.36, 34.00, 3.8, 3.5), 13: (3, 24.46, 5.81, 17.53, 2.5, 2.0), 14: (8, 19.20, 5.05, 15.56, 3.7, 3.5), 15: (5, 23.40, 5.10, 19.40, 3.5, 3.0), 16: (12, 21.18, 5.87, 17.20, 4.2, 4.0), 17: (4, 22.26, 5.30, 16.44, 2.7, 2.5), 18: (7, 14.40, 3.70, 11.68, 3.5, 3.0), 19: (5, 44.54, 6.30, 40.20, 3.5, 3.0), 20: (10, 16.56, 4.60, 14.60, 4.0, 3.5), } # ---------------------------------------------------------------- расчёт def compute(f, S, B, P, l_k, l_zah, crack_col=1, n_vr=None, S_vr=None, psi=PSI_PATRON, vv=None, rho_vv=None, omega=None, a_o=None, a_p=None, a_k=None, k_zap=None, round_patrons=True): """Формулы (6.1)-(6.17). Неизвестные коэффициенты подбираются из таблиц: диапазоны берутся со средним значением, k_зап и N_вр — с верхним. crack_col: 0 монолитные, 1 слаботрещиноватые, 2 сильнотрещиноватые.""" out = {} # --- выбор ВВ и коэффициентов if vv is None: vv = pick_vv(f) name, e, rho_range, d, l_pat, m_pat = vv if rho_vv is None: rho_vv = sum(rho_range) / 2 if omega is None: _, _, w_min, w_max = pick(OMEGA_ROWS, f) omega = (w_min + w_max) / 2 rho = pick(RHO_ROWS, f)[2] m = pick(M_ROWS, f)[2] k_k = pick(KK_ROWS, f)[2] if k_zap is None: k_zap = pick(KZAP_ROWS, f)[3] # верх диапазона k_y = 1.0 # патронированные ВВ if a_k is None: a_k = pick(A_K_ROWS, f)[2 + crack_col] if n_vr is None: n_vr = pick(VRUB_ROWS, f)[3] # верх диапазона числа шпуров if S_vr is None: S_vr = 0.19 * n_vr # по схеме вруба (8 шпуров ~ 1,5 м2) # --- 1) средний удельный расход ВВ, формула (6.1) q_c = rup((0.3 * sqrt(f) + 2 / sqrt(S)) * e * psi * omega) # --- 2) л.н.с. отбойных шпуров, формула (6.2) w0 = rup(52 * k_z(S) * d * sqrt(rho_vv / (rho * e * omega))) # --- 3) расстояния между шпурами if a_o is None: a_o = rup(A_OTB[0] * w0) # ~0,9 w0 if a_p is None: a_p = rup(0.8 * w0) # ~0,8 w0 из диапазона 0,7...0,9 # --- 4) количество шпуров N_k = floor(P / a_k + 1 + 0.5) # округление до ближайшего W_k = rup(a_k / m) S_k = rup((N_k - 1) * a_k * W_k) N_p = floor(B / a_p + 1 + 0.5) S_p = rup(w0 * B) S_o = rup(S - (S_k + S_p + S_vr)) N_o = ceil(1.27 * q_c * S_o / (d**2 * k_zap * rho_vv * k_y)) # вверх N = N_k + N_p + N_o + n_vr # --- 5) к.и.ш. и глубина шпуров eta = l_zah / l_k if l_k else None l_vr = 1.1 * l_k # --- 6) расход ВВ на цикл, формулы (6.10)-(6.17) Q = rup(q_c * S * l_zah) q_k = l_k * k_k if round_patrons: q_k = floor(q_k / m_pat + 0.5) * m_pat # целое число патронов Q_k = q_k * N_k q_vr = 1.2 * (Q - Q_k) / (N - N_k) if round_patrons: q_vr = floor(q_vr / m_pat + 0.5) * m_pat Q_vr = q_vr * n_vr q_op = (Q - (Q_k + Q_vr)) / (N - (N_k + n_vr)) if round_patrons: q_op = floor(q_op / m_pat + 0.5) * m_pat Q_op = q_op * (N_o + N_p) Q_vv = Q_k + Q_op + Q_vr out["ВВ"] = f"{name} (e={e}, ρвв={rho_vv:.0f})" out.update({ "коэф.": f"ψ={psi}, ω={omega:g}, ρ={rho}, m={m:g}, kк={k_k:g}, kзап={k_zap:g}", "1) qc": round(q_c, 3), "2) w0": round(w0, 3), "3) ао": a_o, "3) ап": a_p, "3) ак": a_k, "4) Nк": N_k, "4) Wк": round(W_k, 3), "4) Sк": round(S_k, 2), "4) Nп": N_p, "4) Sп": round(S_p, 2), "4) Nвр": n_vr, "4) Sвр": round(S_vr, 2), "4) Sо": round(S_o, 2), "4) Nо": N_o, "4) N": N, "5) η": "—" if eta is None else round(eta, 3), "5) lвр": round(l_vr, 2), "6) Q": round(Q, 2), "6) qк": round(q_k, 3), "6) Qк": round(Q_k, 2), "6) qвр": round(q_vr, 3), "6) Qвр": round(Q_vr, 2), "6) qоп": round(q_op, 3), "6) Qоп": round(Q_op, 2), "6) Qвв": round(Q_vv, 2), "патр.": f"по {round(q_k/m_pat)}-{round(q_vr/m_pat)}-{round(q_op/m_pat)} шт · {m_pat*1000:.0f} г", }) return out def report(title, res): print(f"\n=== {title} ===") for k, val in res.items(): print(f" {k:10} = {val}") if __name__ == "__main__": import sys if len(sys.argv) > 1 and sys.argv[1].isdigit(): n = int(sys.argv[1]) f, S, B, P, l_k, l_zah = VARIANTS[n] res = compute(f, S, B, P, l_k, l_zah) if n == 6: # принятые в отчёте решения: слаботрещиноватые породы, # усиленный вруб 8 шпуров (верх диапазона 8...10), Sвр = 1,5 м2, # округлённые расстояния ао = 0,6 м, ап = 0,55 м, ак = 0,5 м res = compute(f, S, B, P, l_k, l_zah, n_vr=8, S_vr=1.5, a_o=0.60, a_p=0.55) report(f"Вариант {n}: f={f}, S={S}, В={B}, Р={P}, lк={l_k}, lзах={l_zah}", res) elif len(sys.argv) > 1 and sys.argv[1] == "all": cols = ["1) qc", "2) w0", "4) Nк", "4) Nп", "4) Nо", "4) Nвр", "4) N", "6) Qвв"] hdr = "N " + " ".join(f"{c.split(') ')[1]:>8}" for c in cols) print(hdr) for n, (f, S, B, P, l_k, l_zah) in VARIANTS.items(): res = compute(f, S, B, P, l_k, l_zah) print(f"{n:<3}" + " ".join(f"{res[c]:>8}" for c in cols)) else: # Пример методички: f=5, S=23,4, В=5,1, Р=19,4, lк=3,5, lзах=3 # (аммонит 6ЖВ, e=1, ρвв=1100, ω=0,9; Nвр=8, Sвр=1,5 по условию примера) report("Пример методички (по формулам)", compute( 5, 23.4, 5.1, 19.4, 3.5, 3.0, n_vr=8, S_vr=1.5, a_o=0.8, a_p=0.7, a_k=0.6, omega=0.9))