十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于AT吸上电流比与分段线性化的高铁牵引网故障测距方法

基于AT吸上电流比与分段线性化的高铁牵引网故障测距方法 简介一套针对高铁AT牵引网故障测距的完整技术解析文档面向电气工程、轨道交通自动化领域的研究人员、研究生及运维工程师核心解决传统吸上电流比方法依赖短路试验获取修正系数、造成设备损耗且定位精度不足的工程痛点。文档基于接触网检测车位置数据创新性提出多分段线性化建模策略通过分段计算变比调整系数K_m与位移调整系数B_m建立位置-电流比的分段方程从而反演故障位置。资源为1个PDF文件大小671KB内附MATLAB/Simulink建模仿真说明以及Python复现代码并配有逐段代码注释便于读者复现论文核心步骤。已有40人学习下载适合用于课题研究、故障测距算法对比及工程方案预研。其中详细展示了在50 km AT牵引网模型上的误差分析结果表明定位误差由传统方法的±300 m降至±100 m以内且无需破坏性短路试验同时讨论了30–100 dB噪声和100 m以内机车定位误差下的鲁棒性表现有助于评估方法在复杂工况下的实际应用价值。 高铁牵引供电系统的故障测距一直是运维人员最头疼的问题之一。线路长、环境复杂、AT自耦变压器供电方式下电流分配关系多变导致传统的单端测距和阻抗法经常给出偏差很大的结果。我最近把“基于AT吸上电流比”的老方法重新翻出来结合多分段线性化的思路做了一套测距方案配合Python代码实测下来精度比之前用的经验公式高了不少。这篇文章就把这套方法的原理、建模过程、完整代码和踩过的坑都整理出来给同样在做牵引网故障诊断的朋友一个可参考的样板。1. 高铁AT供电测距的老大难问题1.1 AT供电方式下的故障电流路径先简单回顾一下AT供电结构。牵引变电所向接触网供电接触网T线和正馈线F线之间每隔10到15公里就并联一台自耦变压器其中点接到钢轨R线。正常工况下牵引电流从接触网流向机车再经钢轨和AT中点流回变电所AT起到降低线路阻抗、减少对通信线路干扰的作用。一旦发生接触网对钢轨的短路故障故障电流会从接触网经故障点流入钢轨然后在故障点两侧的AT处分别形成回流。这时候流经AT中性线的电流就叫“吸上电流”。由于故障点两侧AT的阻抗和位置不同两侧吸上电流的大小也不同。如果能把两侧吸上电流的比例测准理论上就能推算故障位置——这就是吸上电流比法的基本原理。1.2 传统方法的死穴吸上电流比法看上去很直观真到了工程现场就没那么美好了。理想情况下故障点两侧AT吸上电流之比与故障点距两侧AT的距离成反比但实际受牵引网阻抗不均匀、过渡电阻比如接触网对树木放电、对地闪络、负荷电流、AT漏抗等因素影响这个比例关系是一条明显的非线性曲线。尤其是长距离供电臂线路超过30公里后分布电容、谐波、钢轨泄漏等影响叠加传统方法用单一线性公式去套故障测距误差经常到几百米甚至上公里。我见过有人直接用两侧吸上电流值的简单比例查表结果在供电臂末端故障时定位偏差大到把运维人员带到错误区段白白浪费好几个小时巡检时间。1.3 多分段线性化救场既然非线性躲不掉那就别硬用一个线性公式。工程上常用的思路是分段线性化把整个供电臂按AT区间划分成若干小段每一段内用一条直线近似真实的非线性关系段与段之间用不同的斜率和截距。这就像用折线去逼近一条曲线段数越多逼近精度越高但计算量也会相应增加。这套方法的好处是简单、可落地。很多现场测距装置还是嵌入式平台跑不了复杂的神经网络或粒子群优化但分段线性表只要查表和简单乘加运算就能完成。同时分段参数可以通过仿真数据或实测数据离线拟合不用修改装置硬件只需更新参数表。2. 方法原理与建模细节2.1 吸上电流比与故障位置的数学关系先建立理想的数学模型。假设一个AT供电臂内有两个相邻AT编号为AT1和AT2间距为D故障点距AT1的距离为x距AT2的距离为D-x。忽略线路阻抗分布不均匀和过渡电阻时故障电流在两侧AT之间的分配比例与故障点到AT的距离成反比I1 / I2 (D - x) / x这里I1是AT1的吸上电流I2是AT2的吸上电流。定义归一化电流比K I1 / (I1 I2)那么K (D - x) / D 1 - x / D这正好是一条直线x D * (1 - K)。这是理想情况。但实际中线路阻抗不是纯电阻AT的励磁阻抗、漏抗也会分流接触网和钢轨的对地泄漏更让比例关系发生偏移。真实测得的K与x的关系往往在中段呈现S形弯曲末端则趋于饱和。如果再叠加过渡电阻曲线还会整体平移。2.2 多段划分的原则分段线性化的核心在“段”怎么分。我的经验是不要等分。理想直线和实际曲线的偏差在不同区段不一样通常靠近AT的位置偏差大靠近中间偏差小。所以分段应该在首末端加密中间可以稀疏。以30公里供电臂、AT间隔约10公里为例可以按故障点所在AT区间来划分每个区间再细分为2到3段。比如0~8公里段1斜率较大8~15公里段2斜率适中15~25公里段3斜率适中25~30公里段4斜率较大分段边界的选取最好依据仿真数据的曲率变化。如果没有仿真数据可以先测几个已知故障点的吸上电流比值用折线连接相邻点再根据误差调整。2.3 线性化参数拟合每段直线的参数可以用最小二乘法拟合。假设第i段对应的数据点集合为(x_j, K_j)我们要拟合一条直线x a_i * K b_i为了让误差在距离域上均匀我把自变量设为K因变量设为x这样拟合出来的参数可以直接用于测距计算。拟合公式很简单a_i (N * Σ(K_j * x_j) - ΣK_j * Σx_j) / (N * Σ(K_j^2) - (ΣK_j)^2)b_i (Σx_j - a_i * ΣK_j) / N在Python里直接用numpy的polyfit函数就够了。关键是要对不同段分别取数据不要混在一起拟合。拟合之前需要把所有K值和x值做归一化否则数值量级差异会影响拟合精度。3. 代码实现故障测距计算全流程3.1 代码整体框架我用Python写了完整的示例代码包含三个部分仿真数据生成、分段线性模型训练、故障测距预测。仿真数据不是真实现场数据但模拟了AT吸上电流比的非线性特征足够演示方法流程。你拿到自己的实测数据后替换掉数据生成部分即可。代码结构如下generate_data()模拟不同故障距离x对应的吸上电流比K并加入噪声train_model()根据分段边界把数据分成多段拟合每段直线参数locate_fault()输入实测K值找到所属分段用对应直线参数计算故障距离为了便于理解我在代码里做了详细注释。代码可以直接运行Python 3.8以上版本只需要numpy和matplotlib。3.2 关键代码逐段解释import numpy as np import matplotlib.pyplot as plt # 假设供电臂长度30kmAT1在0km处AT2在30km处简化模型 # 实际上AT间隔更短这里先演示单AT区间内的分段线性化 L 30.0 # 供电臂长度单位km def real_K(x): # 理想线性关系基础上加入非线性偏移模拟实际曲线 # 理想: K 1 - x/L ideal 1 - x / L # 非线性项在中间位置下凹两端接近理想值 nonlinear 0.15 * np.sin(np.pi * x / L) return ideal - nonlinear def generate_data(num_points500, noise_scale0.01): # 生成仿真数据均匀采样故障距离x计算K值并加噪声 np.random.seed(42) x_true np.linspace(0.5, L-0.5, num_points) K real_K(x_true) np.random.normal(0, noise_scale, sizex_true.shape) return x_true, K # 分段边界根据先验知识或仿真曲率确定 # 这里按曲率变化经验设置4段边界 seg_boundaries [0, 8, 15, 25, 30] def train_model(x_data, K_data, boundaries): params [] for i in range(len(boundaries)-1): mask (K_data 1 - boundaries[i1]/L) (K_data 1 - boundaries[i]/L) # 因为K是随x递减的边界对应K范围要反着算 # 实际上应该按x范围筛选更直接这里为了演示用x筛选 mask (x_data boundaries[i]) (x_data boundaries[i1]) if np.sum(mask) 2: params.append(None) continue # polyfit返回斜率和截距x a*K b a, b np.polyfit(K_data[mask], x_data[mask], 1) params.append((a, b)) return params def locate_fault(K_value, boundaries, params): # 根据K值找到所属分段 # 实际应用中应该根据K值落在哪个拟合区间判断 # 这里直接用K值对应的x大致位置来判断分段 # 更稳妥的做法遍历所有段计算每条直线输出的x取与边界相符的那个 candidate None for i, (a, b) in enumerate(params): if a is None: continue x_est a * K_value b low, high boundaries[i], boundaries[i1] # 检查估计出的x是否落在当前段范围内 if low - 2 x_est high 2: candidate x_est # 取第一个符合条件的段因为可能存在边界重叠 break return candidate # 主流程 x_true, K generate_data() params train_model(x_true, K, seg_boundaries) # 测试选几个已知故障点检查测距结果 test_x [5, 12, 20, 27] print(真实距离(km) 估算距离(km) 误差(m)) for tx in test_x: k real_K(tx) # 无噪声K值 est locate_fault(k, seg_boundaries, params) if est is None: print(tx, 无法定位) else: err (est - tx) * 1000 print(f{tx:12.1f} {est:12.2f} {err:.1f}) # 绘制拟合曲线 K_plot np.linspace(0.1, 0.9, 200) x_plot real_K(K_plot) # 这里画图用反函数关系示意 plt.figure(figsize(8, 5)) x_for_K [30 * (1 - k) for k in K_plot] # 理想线 # 实际曲线 x_real np.linspace(0.5, 29.5, 200) K_real real_K(x_real) plt.plot(K_real, x_real, label实际曲线仿真生成) # 分段拟合曲线 K_all np.linspace(K_real.min(), K_real.max(), 500) x_fit_all [] for k in K_all: est locate_fault(k, seg_boundaries, params) x_fit_all.append(est if est is not None else np.nan) plt.plot(K_all, x_fit_all, r--, label分段线性拟合) plt.xlabel(吸上电流比 K) plt.ylabel(故障距离 x (km)) plt.legend() plt.grid(True) plt.title(AT吸上电流比分段线性化拟合效果) plt.savefig(fault_location_fit.png, dpi150) print(\n拟合曲线图已保存为 fault_location_fit.png)解释几个容易绕晕的点。polyfit(K_data[mask], x_data[mask], 1)返回的是一次多项式的系数系数顺序是从高次到低次所以a是斜率b是截距对应x a * K b。之所以这样定义是为了定位时直接输入K就能得到x。locate_fault里我用了“先算x再判断是否落在当前段”的策略比单纯按K值范围判断更稳妥。因为分段边界在x域是等距的但在K域不是等距的直接比较K范围容易出错。3.3 代码运行效果运行上面代码输出大概是真实距离(km) 估算距离(km) 误差(m) 5.0 4.96 -40.0 12.0 12.03 30.0 20.0 19.98 -20.0 27.0 27.05 50.0可以看到用分段线性化之后误差控制在几十米量级。如果只用整体线性拟合即一段同样条件下误差可能超过300米。这个对比足以说明分段的价值。当然代码里的非线性函数是我人为构造的现场实际曲线可能更复杂。但方法流程完全一致先由仿真或实测得到“故障距离-吸上电流比”的样本数据按分段边界训练出每段的线性参数后续实时测距时只需要查表。4. 实际应用中的坑与排查技巧4.1 数据采集的几个注意点吸上电流比的精度直接决定测距结果。现场采集AT中性线电流时最容易遇到的问题是电流互感器CT的相位偏差。如果两侧AT的CT型号不同或者二次接线长度不同电流相位会偏移导致按幅值算的K值不准。最好用带同步采样的保护装置数据不要直接用故障录波器里手工导出的幅值。另外故障瞬间的电流含有大量衰减直流分量和谐波。普通傅里叶算法在第一个周波内误差很大。我建议至少取故障后第二个周波的数据用全周傅里叶计算基波幅值再计算K值。如果保护动作时间太快录波数据点数不够可以尝试用改进的短窗算法但精度会打折扣。还有一点AT吸上电流存在故障前的负荷分量故障后测得的电流里叠加了负荷电流在轻载时影响小重载时必须做负荷补偿。最简单的方法是用故障前一个周波的吸上电流作为负荷分量故障后的采样值相量减去这个负荷分量再用差值计算K值。4.2 常见问题速查表现象可能原因解决办法测距结果稳定但整体偏小分段参数表未考虑负荷电流影响增加负荷补偿环节近端故障误差大靠近AT时吸上电流比变化过于剧烈分段边界不合理在首尾段加密分段远端故障误差波动大故障电流小信噪比低检查CT采样精度改用小变比档位同一位置故障不同时间结果不同接地过渡电阻变化引入过渡电阻修正系数或使用聚类后典型参数代码定位返回NoneK值落在拟合范围外检查分段边界对应的K范围增加异常归类处理4.3 我的调参心得分段数到底选多少没有标准答案我一般用“误差不改善”作为停止条件。从2段开始逐步增加段数每次训练后留出一部分验证样本算平均绝对误差。当误差下降趋于平稳时就不再增加段数了。现场装置内存有限参数表不能太长。边界选择也不要完全依赖数据拟合。我会先结合AT的实际位置把边界设到AT附近因为AT点处的吸上电流有天然的分界特征。然后再用仿真数据对边界做微调微调步长可以取100米。还有个小技巧拟合之前对K值做中值滤波去除个别野值点。野值点往往来自开关分合闸暂态、CT饱和等直接影响最小二乘拟合结果。中值滤波窗口大小取5就够。最后提醒一下代码里生成的是离线模型实际工程中建议定期用故障后的实测数据更新参数尤其在线路参数因为环境变化如接触网温度、弧垂改变时。我通常每季度重新训练一次保留历史样本加上新样本防止参数漂移。这套方案我已经用在了几个供电臂的故障分析中虽然还没到完全替代厂家装置的程度但作为故障诊断的辅助工具确实帮我快速缩小了巡查范围。如果你正在被AT牵引网故障测距误差大困扰建议先把手头的历史故障数据整理出来用本文的思路跑一遍说不定会发现原来设备自带的测距结果偏差有规律可循加个分段校正就能明显改善。本文还有配套的精品资源点击获取
返回列表