# -*- coding: utf-8 -*- """ Лаба 8. Расчет временной крепи тоннеля: анкерная крепь и набрызг-бетон. Формулы методички; проверка на её числовых примерах. Замечания к примерам методички: - объём набрызг-бетона в примере V_нб = 20,2·3,0·12,6 = 763,56 «м3» получен без перевода толщины из см в м; корректно 7,64 м3 (в примере, видимо, литры); - диаметр стержня по формуле d = 2*sqrt(10*P/(pi*R_a)) считается при P в кН и R_a в МПа, результат в см. """ from math import pi, sqrt, ceil, floor def rup(x, n=2): p = 10 ** n return floor(x * p + 0.5) / p # ---------------------------------------------------------------- анкерная крепь def anchor(f, k_t, B, rho, l_zah, l_z=0.30, d_st=0.018, tau=45e5, l_k=0.10, R_a=225, L_a=None): """Анкерная крепь. Возвращает словарь параметров.""" out = {} l_p = rup(0.75 * B * k_t / f, 2) # рабочая длина, м l_a = rup(l_p + l_z + l_k, 2) # общая длина, м N = rup(1e-3 * pi * l_z * d_st * tau, 1) # прочность замка, кН a_n = rup(sqrt(N / (15 * rho * l_p)), 2) # предельное расстояние, м cond = a_n <= l_p # корректировка по методичке: a кратно длине заходки l_зах — # на длине заходки укладывается целое число пролётов a = l_зах / n a_max = min(a_n, l_p) n_span = ceil(l_zah / a_max) a = round(l_zah / n_span, 2) P = rup(15 * rho * a ** 2 * l_p, 1) # нагрузка на анкер, кН d = rup(2 * sqrt(10 * P / (pi * R_a)), 2) # диаметр стержня, см if L_a is None: L_a = rup(pi * B / 2, 1) # периметр свода, м n_a = round(L_a * l_zah / a ** 2) # анкеров на заходку out.update({ "l_p": l_p, "l_a": l_a, "N": N, "a_n": a_n, "a_n<=l_p": cond, "a": rup(a, 2), "P": P, "d_см": d, "L_a": L_a, "n_a": n_a, }) return out # ---------------------------------------------------------------- набрызг-бетон def shotcrete(f, gamma, a, klass="В30", arm=True, glin=True, tresh="трещиноватые", sochet="анкерами", l_sv=20.2, l_zah=3.0, q_p=None): """Набрызг-бетон в сочетании с анкерами или арками.""" out = {} m1 = 0.7 if glin else 1.0 m2 = 0.7 if tresh == "слаботрещиноватые" else 0.5 m = rup(m1 + m2, 1) R_bt = {("В25", True): 1.2, ("В30", True): 1.4, ("В40", True): 1.6, ("В25", False): 1.0, ("В30", False): 1.2, ("В40", False): 1.4}[(klass, arm)] n1 = 0.6 if sochet == "анкерами" else 0.7 n2 = 0.37 if sochet == "анкерами" else 0.25 # k_2 по таблице (расстояние между анкерами/арками 0,5/1,0/1,5/2,0) k2_table = ( (2, (0.3, 0.2, 0.2, 0.1)), (3, (0.5, 0.4, 0.3, 0.2)), (4, (1.0, 0.9, 0.8, 0.6)), (10, (1.0, 1.0, 0.9, 0.8)), ) col = min(range(4), key=lambda i: abs([0.5, 1.0, 1.5, 2.0][i] - a)) k2 = next(v for fmax, v in k2_table if f <= fmax)[col] q_pr = rup(n2 * gamma * a, 1) # нагрузка от вывала, кН/м2 h = rup(10 * n1 * a * sqrt(q_pr / (m * k2 * R_bt)), 1) # толщина, см V_nb = rup(l_sv * l_zah * h / 100, 2) # объем на цикл, м3 out.update({"m": m, "R_bt": R_bt, "k2": k2, "q_p'": q_pr, "h_см": h, "V_нб": V_nb}) return out VARIANTS = { # n: (f, степень трещиноватости, выветриваемость, обводненность, тип крепи) 1: (8, "слаботрещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с анкерами"), 2: (4, "трещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с арками"), 3: (6, "нетрещиноватые", "невыветриваемые", "капеж и течи", "набрызг-бетон с анкерами"), 4: (6, "слаботрещиноватые", "склонные к выветриванию", "сухие и влажные", "анкер"), 5: (8, "нетрещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с арками"), 6: (6, "трещиноватые", "склонные к выветриванию", "капеж и течи", "анкер"), 7: (3, "трещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с анкерами"), 8: (8, "слаботрещиноватые", "склонные к выветриванию", "сухие и влажные", "анкер"), 9: (2, "сильнотрещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с арками"), 10: (5, "нетрещиноватые", "невыветриваемые", "сухие и влажные", "анкер"), 11: (8, "нетрещиноватые", "склонные к выветриванию", "сухие и влажные", "анкер"), 12: (4, "слаботрещиноватые", "невыветриваемые", "капеж и течи", "набрызг-бетон с арками"), 13: (2, "раздробленные", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с арками"), 14: (6, "слаботрещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с анкерами"), 15: (7, "слаботрещиноватые", "невыветриваемые", "сухие и влажные", "анкер"), 16: (5, "трещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с арками"), 17: (6, "нетрещиноватые", "невыветриваемые", "сухие и влажные", "набрызг-бетон с арками"), 18: (8, "нетрещиноватые", "склонные к выветриванию", "капеж и течи", "набрызг-бетон с анкерами"), 19: (10, "нетрещиноватые", "склонные к выветриванию", "сухие и влажные", "анкер"), 20: (6, "нетрещиноватые", "склонные к выветриванию", "сухие и влажные", "анкер"), } K_T = {"нетрещиноватые": 1.0, "слаботрещиноватые": 1.5, "трещиноватые": 2.0, "сильнотрещиноватые": 2.5, "раздробленные": 3.0} if __name__ == "__main__": import sys if len(sys.argv) > 1 and sys.argv[1] == "ex": print("=== Пример методички: анкеры (f=6, слаботрещиноватые, B=10, rho=2.0, l_зах=3) ===") r = anchor(6, 1.5, 10, 2.0, 3.0, l_z=0.42, L_a=17.0) for k, v in r.items(): print(f" {k:10} = {v}") print("=== Пример методички: набрызг-бетон с анкерами (f=6, a=1.0, gamma=20, глинозем., трещин.) ===") r = shotcrete(6, 20, 1.0) for k, v in r.items(): print(f" {k:10} = {v}") else: n = int(sys.argv[1]) if len(sys.argv) > 1 and sys.argv[1].isdigit() else 6 f, tr, *_ = VARIANTS[n] # параметры выработки — из лабы №6 (вариант 6): B=4,53 м; l_зах=3,0 м; # rho=2,1 т/м3 — по табл. 1.1 методички лабы №8 для III категории (1,9–2,5 т/м3) print(f"=== Вариант {n}: f={f}, {tr}, крепь: {VARIANTS[n][4]} ===") print("Выработка: B = 4,53 м; l_зах = 3,0 м; rho = 2,1 т/м3 (III категория, табл. 1.1)") if VARIANTS[n][4] == "анкер": r = anchor(f, K_T[tr], 4.53, 2.1, 3.0) else: soch = "анкерами" if "анкерами" in VARIANTS[n][4] else "арками" r = shotcrete(f, 21, 1.0, sochet=soch, l_sv=9.1, l_zah=3.0) for k, v in r.items(): print(f" {k:10} = {v}")