| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- # -*- 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 принимают округленным вниз
- # до 0,1 м от предельного, но не более l_p
- a = floor(min(a_n, l_p) * 10) / 10
- 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 = ceil(rup(L_a * l_zah / a ** 2, 1)) # анкеров на заходку
- 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
- print(f"=== Вариант {n}: f={f}, {tr}, крепь: {VARIANTS[n][4]} ===")
- print("Выработка: B = 4,53 м; l_зах = 3,0 м; rho = 2,1 т/м3 (из лаб. №6)")
- 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}")
|