laba8.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. # -*- coding: utf-8 -*-
  2. """
  3. Лаба 8. Расчет временной крепи тоннеля: анкерная крепь и набрызг-бетон.
  4. Формулы методички; проверка на её числовых примерах.
  5. Замечания к примерам методички:
  6. - объём набрызг-бетона в примере V_нб = 20,2·3,0·12,6 = 763,56 «м3» получен
  7. без перевода толщины из см в м; корректно 7,64 м3 (в примере, видимо, литры);
  8. - диаметр стержня по формуле d = 2*sqrt(10*P/(pi*R_a)) считается при P в кН
  9. и R_a в МПа, результат в см.
  10. """
  11. from math import pi, sqrt, ceil, floor
  12. def rup(x, n=2):
  13. p = 10 ** n
  14. return floor(x * p + 0.5) / p
  15. # ---------------------------------------------------------------- анкерная крепь
  16. def anchor(f, k_t, B, rho, l_zah, l_z=0.30, d_st=0.018, tau=45e5,
  17. l_k=0.10, R_a=225, L_a=None):
  18. """Анкерная крепь. Возвращает словарь параметров."""
  19. out = {}
  20. l_p = rup(0.75 * B * k_t / f, 2) # рабочая длина, м
  21. l_a = rup(l_p + l_z + l_k, 2) # общая длина, м
  22. N = rup(1e-3 * pi * l_z * d_st * tau, 1) # прочность замка, кН
  23. a_n = rup(sqrt(N / (15 * rho * l_p)), 2) # предельное расстояние, м
  24. cond = a_n <= l_p
  25. # корректировка по методичке: a кратно длине заходки l_зах —
  26. # на длине заходки укладывается целое число пролётов a = l_зах / n
  27. a_max = min(a_n, l_p)
  28. n_span = ceil(l_zah / a_max)
  29. a = round(l_zah / n_span, 2)
  30. P = rup(15 * rho * a ** 2 * l_p, 1) # нагрузка на анкер, кН
  31. d = rup(2 * sqrt(10 * P / (pi * R_a)), 2) # диаметр стержня, см
  32. if L_a is None:
  33. L_a = rup(pi * B / 2, 1) # периметр свода, м
  34. n_a = round(L_a * l_zah / a ** 2) # анкеров на заходку
  35. out.update({
  36. "l_p": l_p, "l_a": l_a, "N": N, "a_n": a_n,
  37. "a_n<=l_p": cond, "a": rup(a, 2), "P": P, "d_см": d, "L_a": L_a, "n_a": n_a,
  38. })
  39. return out
  40. # ---------------------------------------------------------------- набрызг-бетон
  41. def shotcrete(f, gamma, a, klass="В30", arm=True, glin=True,
  42. tresh="трещиноватые", sochet="анкерами", l_sv=20.2, l_zah=3.0,
  43. q_p=None):
  44. """Набрызг-бетон в сочетании с анкерами или арками."""
  45. out = {}
  46. m1 = 0.7 if glin else 1.0
  47. m2 = 0.7 if tresh == "слаботрещиноватые" else 0.5
  48. m = rup(m1 + m2, 1)
  49. R_bt = {("В25", True): 1.2, ("В30", True): 1.4, ("В40", True): 1.6,
  50. ("В25", False): 1.0, ("В30", False): 1.2, ("В40", False): 1.4}[(klass, arm)]
  51. n1 = 0.6 if sochet == "анкерами" else 0.7
  52. n2 = 0.37 if sochet == "анкерами" else 0.25
  53. # k_2 по таблице (расстояние между анкерами/арками 0,5/1,0/1,5/2,0)
  54. k2_table = (
  55. (2, (0.3, 0.2, 0.2, 0.1)),
  56. (3, (0.5, 0.4, 0.3, 0.2)),
  57. (4, (1.0, 0.9, 0.8, 0.6)),
  58. (10, (1.0, 1.0, 0.9, 0.8)),
  59. )
  60. col = min(range(4), key=lambda i: abs([0.5, 1.0, 1.5, 2.0][i] - a))
  61. k2 = next(v for fmax, v in k2_table if f <= fmax)[col]
  62. q_pr = rup(n2 * gamma * a, 1) # нагрузка от вывала, кН/м2
  63. h = rup(10 * n1 * a * sqrt(q_pr / (m * k2 * R_bt)), 1) # толщина, см
  64. V_nb = rup(l_sv * l_zah * h / 100, 2) # объем на цикл, м3
  65. out.update({"m": m, "R_bt": R_bt, "k2": k2, "q_p'": q_pr, "h_см": h, "V_нб": V_nb})
  66. return out
  67. VARIANTS = {
  68. # n: (f, степень трещиноватости, выветриваемость, обводненность, тип крепи)
  69. 1: (8, "слаботрещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с анкерами"),
  70. 2: (4, "трещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с арками"),
  71. 3: (6, "нетрещиноватые", "невыветриваемые", "капеж и течи", "набрызг-бетон с анкерами"),
  72. 4: (6, "слаботрещиноватые", "склонные к выветриванию", "сухие и влажные", "анкер"),
  73. 5: (8, "нетрещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с арками"),
  74. 6: (6, "трещиноватые", "склонные к выветриванию", "капеж и течи", "анкер"),
  75. 7: (3, "трещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с анкерами"),
  76. 8: (8, "слаботрещиноватые", "склонные к выветриванию", "сухие и влажные", "анкер"),
  77. 9: (2, "сильнотрещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с арками"),
  78. 10: (5, "нетрещиноватые", "невыветриваемые", "сухие и влажные", "анкер"),
  79. 11: (8, "нетрещиноватые", "склонные к выветриванию", "сухие и влажные", "анкер"),
  80. 12: (4, "слаботрещиноватые", "невыветриваемые", "капеж и течи", "набрызг-бетон с арками"),
  81. 13: (2, "раздробленные", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с арками"),
  82. 14: (6, "слаботрещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с анкерами"),
  83. 15: (7, "слаботрещиноватые", "невыветриваемые", "сухие и влажные", "анкер"),
  84. 16: (5, "трещиноватые", "склонные к выветриванию", "сухие и влажные", "набрызг-бетон с арками"),
  85. 17: (6, "нетрещиноватые", "невыветриваемые", "сухие и влажные", "набрызг-бетон с арками"),
  86. 18: (8, "нетрещиноватые", "склонные к выветриванию", "капеж и течи", "набрызг-бетон с анкерами"),
  87. 19: (10, "нетрещиноватые", "склонные к выветриванию", "сухие и влажные", "анкер"),
  88. 20: (6, "нетрещиноватые", "склонные к выветриванию", "сухие и влажные", "анкер"),
  89. }
  90. K_T = {"нетрещиноватые": 1.0, "слаботрещиноватые": 1.5, "трещиноватые": 2.0,
  91. "сильнотрещиноватые": 2.5, "раздробленные": 3.0}
  92. if __name__ == "__main__":
  93. import sys
  94. if len(sys.argv) > 1 and sys.argv[1] == "ex":
  95. print("=== Пример методички: анкеры (f=6, слаботрещиноватые, B=10, rho=2.0, l_зах=3) ===")
  96. r = anchor(6, 1.5, 10, 2.0, 3.0, l_z=0.42, L_a=17.0)
  97. for k, v in r.items():
  98. print(f" {k:10} = {v}")
  99. print("=== Пример методички: набрызг-бетон с анкерами (f=6, a=1.0, gamma=20, глинозем., трещин.) ===")
  100. r = shotcrete(6, 20, 1.0)
  101. for k, v in r.items():
  102. print(f" {k:10} = {v}")
  103. else:
  104. n = int(sys.argv[1]) if len(sys.argv) > 1 and sys.argv[1].isdigit() else 6
  105. f, tr, *_ = VARIANTS[n]
  106. # параметры выработки — из лабы №6 (вариант 6): B=4,53 м; l_зах=3,0 м;
  107. # rho=2,1 т/м3 — по табл. 1.1 методички лабы №8 для III категории (1,9–2,5 т/м3)
  108. print(f"=== Вариант {n}: f={f}, {tr}, крепь: {VARIANTS[n][4]} ===")
  109. print("Выработка: B = 4,53 м; l_зах = 3,0 м; rho = 2,1 т/м3 (III категория, табл. 1.1)")
  110. if VARIANTS[n][4] == "анкер":
  111. r = anchor(f, K_T[tr], 4.53, 2.1, 3.0)
  112. else:
  113. soch = "анкерами" if "анкерами" in VARIANTS[n][4] else "арками"
  114. r = shotcrete(f, 21, 1.0, sochet=soch, l_sv=9.1, l_zah=3.0)
  115. for k, v in r.items():
  116. print(f" {k:10} = {v}")