3. 锚杆测力计荷载-时间曲线基线漂移识别
为什么锚杆测力计的“荷载上升”不一定是真荷载
锚杆测力计(测力锚杆/锚杆测力环)长期监测时,输出的是振弦频率或电阻应变换算出的荷载值。真实荷载增长来自围岩变形对锚杆的拉伸;而基线漂移来自传感器本身:振弦式测力计受温度影响频率基准偏移,应变式测力计受零点漂移、桥路温漂和电缆电阻变化影响。两者在曲线上都表现为“荷载缓慢上升”,仅看单条曲线无法区分,必须引入温度同步记录与无荷载参考段做对照。
本节采用“双通道对照 + 分段斜率”的判读方法:把测力计荷载曲线与同断面温度曲线放在同一时间轴上,比较两者的相关性与斜率比;再用安装初期(围岩尚未明显变形、温度已稳定循环)的数据段估计温漂系数,从而把观测荷载拆成“温度相关分量”和“残余荷载分量”。
判读逻辑:从原始曲线到修正荷载
用一段示例数据走完判读
假设某测力锚杆安装于运输巷顶板,量程 200 kN,采样间隔 1 h,取日均值。安装后 0–14 d 围岩尚未明显变形,作为参考段;第 15–60 d 为观测段。示例数据如下(均为教学假设值,非实测):
| 时段 | P_obs 均值 (kN) | T 均值 (℃) | 说明 |
|---|---|---|---|
| 0–14 d(参考段) | 52.4,σ0 = 0.9 | 18.5 | 无荷载段,含完整日温循环 |
| 15–30 d | 54.1 | 21.0 | 温度上升,荷载同步缓升 |
| 31–45 d | 55.0 | 22.4 | 温度继续上升,荷载继续缓升 |
| 46–60 d | 55.6 | 23.1 | 温度趋稳,荷载仍略升 |
计算分段斜率:15–30 d 段 k_P ≈ (54.1−52.4)/15 ≈ 0.113 kN/d,k_T ≈ (21.0−18.5)/15 ≈ 0.167 ℃/d,β ≈ 0.68 kN/℃;31–45 d 段 β ≈ (55.0−54.1)/(22.4−21.0) ≈ 0.64 kN/℃;46–60 d 段 β ≈ (55.6−55.0)/(23.1−22.4) ≈ 0.86 kN/℃。三段 β 在 0.64–0.86 kN/℃ 之间,量级一致,且 ΔP 与 ΔT 同向,相关系数 r 约为 0.93(示例值),说明荷载上升主要由温度驱动。
用参考段回归得到 β ≈ 0.66 kN/℃、T_ref = 18.5 ℃,则第 60 d 修正荷载:P_corr = 55.6 − 0.66×(23.1−18.5) ≈ 55.6 − 3.04 ≈ 52.6 kN。与参考段均值 52.4 kN 相比仅差 0.2 kN,小于 3σ0 = 2.7 kN,因此判定为温漂主导,无有效荷载增长。
可执行的判读脚本(Python)
下面脚本读取两列 CSV(t_day, P_obs, T),完成参考段统计、分段 β、相关系数与修正荷载计算,并输出判读结论。数据为示例,可直接替换为现场导出文件。
import numpy as np
import pandas as pd
# 读取日均值:列名 t_day, P_obs, T
df = pd.read_csv("anchor_load_daily.csv").sort_values("t_day").reset_index(drop=True)
REF_END = 14.0 # 参考段截止日
SEG = 15.0 # 分段长度(天)
SIGMA_K = 3.0 # 有效变化门槛倍数
ref = df[df.t_day <= REF_END]
P0, T_ref = ref.P_obs.mean(), ref.T.mean()
sigma0 = ref.P_obs.std(ddof=1)
# 参考段温漂系数:对 (T - T_ref) 回归 P_obs
beta_ref = np.polyfit(ref.T - T_ref, ref.P_obs, 1)[0]
# 分段斜率比
rows = []
start = REF_END
while start + SEG <= df.t_day.max():
seg = df[(df.t_day > start) & (df.t_day <= start + SEG)]
if len(seg) >= 3:
kP = np.polyfit(seg.t_day, seg.P_obs, 1)[0]
kT = np.polyfit(seg.t_day, seg.T, 1)[0]
beta = kP / kT if abs(kT) > 1e-6 else np.nan
rows.append((start, start + SEG, kP, kT, beta))
start += SEG
seg_df = pd.DataFrame(rows, columns=["t0", "t1", "kP", "kT", "beta"])
# 观测段相关系数与修正荷载
obs = df[df.t_day > REF_END]
r = np.corrcoef(obs.P_obs, obs.T)[0, 1]
P_corr = df.P_obs - beta_ref * (df.T - T_ref)
last = P_corr.iloc[-1]
delta = last - P0
print(f"P0={P0:.2f} kN, sigma0={sigma0:.2f} kN, T_ref={T_ref:.2f} C")
print(f"beta_ref={beta_ref:.3f} kN/C, r={r:.3f}")
print(seg_df.round(3).to_string(index=False))
print(f"P_corr(last)={last:.2f} kN, delta={delta:.2f} kN, 3sigma0={SIGMA_K*sigma0:.2f} kN")
if abs(r) >= 0.7 and seg_df.beta.std() < 0.15 and abs(delta) < SIGMA_K * sigma0:
print("结论:温漂/零点漂移主导,无有效荷载增长")
elif abs(delta) >= SIGMA_K * sigma0 and seg_df.beta.std() >= 0.15:
print("结论:存在真实荷载增长,建议加密监测并核对位移")
else:
print("结论:证据不足,需补充温度记录或检查传感器")
运行后应看到 beta_ref 与各段 beta 量级接近、r 接近 1、delta 小于 3σ0,脚本输出“温漂/零点漂移主导”。若把示例数据中第 46–60 d 的 P_obs 改为 62 kN(模拟真实荷载增长),则 delta 会明显超过 3σ0,且该段 β 显著偏离参考段,脚本转为“存在真实荷载增长”。