laba8.py 8.7 KB

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