Перейти к содержанию

Наклонные сечения (СП 63.13330, пп. 8.1.32–8.1.35)

Задачи shear_inclined и shear_inclined_batch проверяют прочность бетонной полосы, наклонного сечения на поперечную силу и наклонного сечения на момент — для сечения произвольной формы, с хомутами произвольной формы, по одной строке усилий или по всему набору усилий сразу. Реализация — CScore/Sp63Shear/.

Проверяются все три группы условий раздела 8.1.32–8.1.35, формулы (8.55)–(8.65):

  • полоса между наклонными сечениями — (8.55), ограничение по бетону сжатой полосы (ShearFormulas.StripCapacity);
  • наклонное сечение на поперечную силу — (8.56) с составляющими Qb (8.57) и Qsw (8.58), плюс упрощённое условие (8.60) с приопорными поправками (8.61)/(8.62);
  • наклонное сечение на момент — (8.63) с Ms (8.64) и Msw (8.65), и упрощённый вариант при C = 2·h0.

Обе плоскости сдвига, ShearPlane.Vy и ShearPlane.Vx, считаются в одной задаче независимо друг от друга.

Расчётная ширина b — минимальная сумма хорд

Расчётная ширина как минимальная сумма хорд

Величина b в формулах (8.55)–(8.65) — это ширина бетона в пределах рабочей высоты, и для реального сечения она не константа: у тавра, двутавра, кольца или сечения с отверстием минимум приходится не на грань, а куда-то внутрь тела.

ChordWidthScanner определяет b как минимальную суммарную длину хорд бетона на диапазоне уровней от сжатой грани до центра тяжести растянутой арматуры (InclinedSectionGeometry.ResolveForTensionSide вызывает MinWidth(concrete, plane, compressedEdge, compressedEdge ± h0)). Хорда на уровне — это сумма длин отрезков пересечения горизонтальной (или вертикальной, для Vx) прямой с полигоном бетона; отверстия вычитаются, несколько бетонных областей суммируются.

Длина хорды между вершинами контура — кусочно-линейная функция уровня, поэтому минимум ищется точно, без сканирования по равномерной сетке:

  1. собираются уровни всех вершин контуров (CollectLevels), попадающие в открытый диапазон (from; to);
  2. пробы берутся на серединах подынтервалов между соседними уровнями и вплотную у самих уровней (level ± 1e-9) — но никогда в узловом уровне;
  3. по всем пробам берётся минимум ChordLengthAt.

Проба никогда не ставится точно на уровень вершины из-за отдельного вырождения: пересечения считаются по полуоткрытому правилу level < max, поэтому на самой верхней границе тела хорда обращается в ноль. Без сдвига внутрь этот ноль стал бы «минимальной шириной» на любом сечении.

Хомуты любой формы приводятся к qsw

Поперечное армирование в OpenCS — это замкнутые контуры и открытые срезы с реальной геометрией центровой линии (StirrupElement.CenterlineContour), а не «число ветвей заданного диаметра». StirrupResolver.BranchArea определяет, какая площадь ветви работает в данной плоскости сдвига, по общему правилу:

\[ A_{sw,\text{эфф}} = A_{\varnothing} \sum_i \frac{\left|\Delta_i\right|}{\ell_i}, \]

где Δᵢ — проекция участка центровой линии на направление поперечной силы (Δy для Vy, Δx для Vx), а ℓᵢ — его полная длина. Вертикальные участки полностью работают на Vy, горизонтальные — на Vx, наклонные дают вклад в обе плоскости пропорционально своему наклону — без ручного подсчёта «числа ветвей».

Погонное усилие в хомутах:

\[ q_{sw} = \frac{R_{sw} \cdot A_{sw,\text{эфф}}}{s_w}. \]

Rsw берётся по табл. 6.15 (170/280/300 МПа для классов A240/A400/A500 — StirrupResolver.ResolveRsw) и в любом случае ограничивается MaxRsw = 300 МПа; при ручном вводе с превышением в отчёт добавляется оговорка.

Перебор: стоянки × проекция C

Перебор стоянок и проекции C

Норма говорит о «наиболее опасном наклонном сечении» — это не одна расчётная точка, а двойной перебор (InclinedSectionModel, ShearInclinedChecker):

  1. стоянки вдоль элемента — сечения, в которых проверяется продольная и поперечная арматура (Station);
  2. проекция C в каждой стоянке — от h0 до 2·h0, с ограничением по фактическому расстоянию до опоры.

Наклонное сечение откладывается от стоянки в сторону опоры на длину C; Point0 = Station + sign(Direction) · C — конец сечения, противоположный проверяемой арматуре. Для каждой пары (стоянка, C) считается своя несущая способность, и в итог идёт худшее сочетание. По поперечной силе и по моменту критическая проекция может оказаться разной — они хранятся раздельно.

Поперечная сила в наклонном сечении — точный максимум |Q| между стоянкой и точкой 0 (InclinedSectionModel.AppliedShearIForceProfile.MaxAbsQ), а не значение в стоянке и не выборка по сетке: это прямое требование нормы, вынесенное в контракт профиля усилий — каждая реализация IForceProfile обязана возвращать точный максимум.

Если до опоры остаётся меньше h0, наклонное сечение построить не из чего: условие (8.56) для такой стоянки не проверяется, работают (8.55) и приопорное условие (8.60) — MinConcreteShear/MinStirrupShear с поправками (8.61)/(8.62) на малое расстояние до опоры. Отчёт говорит об этом явно, а не молча пропускает стоянку.

Момент меняет знак — меняется всё

При переходе через нулевой момент растянутой становится другая грань. Вместе с ней меняются рабочая высота h0, усилие в растянутой арматуре Ns и расчётная ширина b — почти все входные величины.

InclinedSectionGeometryPair.Resolve вычисляет геометрию сечения сразу для обеих сторон (TensionPositive/TensionNegative), а For(moment) в каждой стоянке подставляет ту, что отвечает знаку момента именно там:

public InclinedSectionGeometry For(double moment)
{
    if (moment > MomentEpsilon) return TensionPositive;
    if (moment < -MomentEpsilon) return TensionNegative;
    return TensionPositive.H0 <= TensionNegative.H0 ? TensionPositive : TensionNegative;
}

При нулевом моменте берётся сторона с меньшей рабочей высотой — в запас. Ручные переопределения b, h0 или Ns при этом не затираются: если они заданы вручную, они остаются такими во всех стоянках.

Три источника усилий

IForceProfile абстрагирует источник усилий вдоль элемента:

  • ConstantProfile — одна строка набора (или введённые вручную усилия), принятая неизменной на длине наклонного сечения, плюс расстояние до опоры;
  • UniformLoadProfile — аналитический профиль равномерной нагрузки, Q(s) = Q₀ − q·s, M(s) = M₀ + Q₀·s − q·s²/2, с указанием, какой из концов участка действительно опора;
  • SampledProfile — эпюра усилий конструктивного стержня из результата расчёта схемы OpenSees (fem_profile).

В табличном профиле (SampledProfile) поперечная и продольная силы интерполируются линейно, а момент — эрмитовым кубическим полиномом с Q в качестве производной (M′ = Q). Это воспроизводит параболу момента под равномерной нагрузкой между узлами вместо линейной аппроксимации; согласованность M′ = Q дополнительно проверяется по интервалам, и там, где она нарушена, интерполяция понижается до линейной.

Пакетный режим (shear_inclined_batch) прогоняет все строки набора усилий и собирает сводку с худшим коэффициентом использования и виновной формулой по каждой строке.

Честные допущения вместо тихих

Три места, где расчёт намеренно не делает вид, что знает больше, чем знает:

Конструктивные требования 10.3 не проверяются по геометрии

П. 8.1.33 разрешает учитывать хомуты только при соблюдении конструктивных требований 10.3. Проверить это по геометрии сечения нельзя, поэтому пока пользователь не подтвердил требования отдельным параметром задачи, поперечная арматура в расчёт не включается (qsw = 0, расчёт идёт по одному бетону). Подтверждение фиксируется в оговорках результата.

Шаг хомутов ограничен по факту, а не занижён

Ограничение sw,max = Rbt·b·h0²/Q (ShearFormulas.MaxStirrupSpacing) проверяется в каждой стоянке отдельно. Если фактический шаг больше — хомуты не учитываются вовсе, с указанием конкретного предельного значения в оговорке, а не с молчаливым занижением несущей способности.

Два коэффициента использования

Упрощённые условия (8.60) и (8.63′) дают нижнюю оценку несущей способности и нередко оказываются жёстче точных проверок. Итоговый вердикт берётся по худшему из всех — в запас, но рядом показывается коэффициент только по точным проверкам (8.55), (8.56), (8.63), чтобы сразу было видно, чем определён вердикт.

Анкеровка по 10.3.21–10.3.28 не проверяется: коэффициент включения продольной арматуры k (ShearInclinedInput.AnchorageFactor) задаёт пользователь, и об этом тоже сказано в оговорках.

Коэффициент φn (п. 8.1.34)

PhiNCalculator.Compute учитывает влияние продольной силы N на прочность по наклонным сечениям:

  • для изгибаемого элемента без предварительного напряжения (ElementKind.BendingUnstressed) или при N ≈ 0: φn = 1;
  • при сжатии: φn = min(1 + σcp/Rb, 2,25) — применяется только к условию (8.55) по бетонной полосе (AppliesToStrip = true);
  • при растяжении: φn = 1 − σtp/Rbt — к условию (8.55) не применяется.

Это тот нюанс нормы, который легко потерять при реализации «одним множителем по месту»: AppliesToStrip вынесен в отдельное поле результата, а не подмешан в саму формулу.

Что видно в результате

  • сводка проверок, сгруппированная по пунктам нормы, с коэффициентом использования и цветовой отметкой по каждой формуле;
  • таблица стоянок вдоль элемента: s, N, φn, растянутая грань, Q, критическая проекция C, Qb, Qsw и η — отдельно по поперечной силе и по моменту;
  • график коэффициента использования по длине элемента;
  • диаграмма несущей способности по длине проекции C — кривые Qb, Qsw, их суммы и действующей Q в выбранной стоянке, для обеих плоскостей;
  • список оговорок: неоднородный бетон, отсутствие поперечной арматуры, смена знака момента, стоянки у опоры, ручные переопределения.

Шаги перебора (стоянок и проекции) вынесены в общие настройки расчёта, но их можно переопределить в задаче.

Контроль

Приёмочный пример — балка 300×600, бетон B25, хомуты ⌀8 A240 с шагом 150 мм, Q = 150 кН:

Величина Значение
полоса (8.55) 717,8 кН
Qb при C = 2·h0 129,9 кН
Qsw при C = 2·h0 95,2 кН
Qb + Qsw 225,1 кН → η = 0,666

Значения сверены с ручным расчётом. Отдельные наборы тестов покрывают: формулы (8.55)–(8.65), φn, профили усилий, приведение хомутов к qsw, определение ширины по хордам (ChordWidthScannerTests) и перебор стоянок целиком.

Диагностика

  • если продольный расчёт НДС (rc-section) не видит хомуты — это ожидаемо: AreaCategory.Stirrups исключается через MaterialArea.IsCalcActive, проверка поперечного армирования запускается отдельной задачей shear_inclined;
  • нулевой qsw при заданных хомутах почти всегда означает не отсутствие арматуры, а неподтверждённые конструктивные требования 10.3 или превышенный шаг — проверяйте оговорки, а не считайте это багом;
  • разный η по поперечной силе и по моменту в одной стоянке — норма: критическая проекция C для них ищется независимо;
  • проверяйте знак момента и то, какая грань считается растянутой (TensionOnPositiveSide) — при смене знака момента вдоль элемента расчёт фактически сам разбивается на участки.

Что дальше

Своего расчётного обоснования у наклонных сечений пока нет: документатор отчётов (OpenCS.Reporting) охватывает НДС, предельные усилия, трещины и кривизну, а IReportProvider для shear_inclined ещё не написан. Архитектура отчётов к этому готова — нужен только провайдер, рендереры и картинки уже общие.

Из содержательного в очереди: автоматическая проверка конструктивных требований 10.3 по геометрии армирования и учёт анкеровки вместо ручного коэффициента k.