ARTICLE DETAIL

资讯详情

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

风电场动态等值建模:机组分群、集电网络化简与PCC精度校验

风电场动态等值建模:机组分群、集电网络化简与PCC精度校验 简介「风电场动态等值建模研究」面向电力系统分析、风电并网方向的科研人员与研究生聚焦如何借助聚类分析把大规模风电场简化为少数代表性机组模型从而降低仿真计算量、提升稳定性分析与优化调度效率。文档围绕K-means聚类展开依次梳理数据收集、特征选择、聚类分组、等值模型建立、等值参数确定与模型验证的完整流程并详解初始化、分配、更新、迭代与轮廓系数评估等算法环节同时讨论非线性动力学、场站规模大、实时性要求高等难点以及并网稳定性分析、功率预测与故障响应模拟等应用场景。压缩包内为1个docx文档约11KB轻量便于快速通读与二次整理可用于课题入门、建模仿真参考或汇报提纲。目前已有100人学习适合需要厘清等值建模思路、补齐聚类建模步骤的读者查阅。1. 风电场动态等值建模在仿真链路里的真实位置拿一个 200MW 的陆上风电场做例子66 台 3MW 双馈机组机端各挂一台箱变35kV 集电线路走四回汇入升压站再经主变接到 220kV 电网。要在 PSCAD 或 MATLAB/Simulink 里跑一次三相短路下的低电压穿越过程若每台机组都按开关级详细模型搭光机侧变流器桥臂就上百个步长压到 20µs、仿真 10s单次跑几个小时工况扫描根本排不下。风电场动态等值建模要回答的就是能不能把电气距离近、动态行为相似的机组合并成一台等值机把集电网络折成一条等值阻抗让并网点PCC的电压、有功、无功轨迹尽量贴着详细模型走。做并网特性校核、低电压穿越评估、场级调频调压策略验证的人绕不开这一步。2. 风电机组分群特征向量怎么选才不丢动态2.1 全场一台等值机什么时候会失真尾流是第一个绕不过去的因素。一台 3MW 机组在 8m/s 来流下大概出力 1.6MW上风向首排机组可能已经跑到 9m/s、接近 2.1MW而第三排尾流区里的机组只有 6.5m/s、出力不足 1MW。这两种机组的转子转速、桨距角、机侧变流器占空比都不在一个工作点上硬捏成一台等值机聚合出来的风速约 7.5m/s转子动能既不像首排也不像末排故障期间转子转速的跌落轨迹就会明显偏。第二个因素是集电距离。35kV 集电线路末端机端电压可能比首端低 2%~3%稳态差别不大但故障期间差别被放大末端机端残压更低撬棒Crowbar投入更早、持续时间更长。把不同残压水平的机组放在同一个群里等值模型的撬棒动作时刻只能取一个折中值PCC 的无功支撑曲线就对不上。还有一种常见误判是把“同一型号”当成分群依据。同型号只说明本体参数相同不说明运行状态相同。分群的依据应该是状态相似不是铭牌一致。型号相同最多能让等值参数聚合的公式简单一点。2.2 分群特征向量的优先级和取舍实际工程里常用的特征量就那么几个优先级和适用场景差别很大。特征量物理含义适用场景局限风速 v决定运行点与出力水平稳态分群首选最直观尾流区空间相关强单点测风代表性差桨距角 β区分部分负荷与限功率区大风限功率工况必备小风速段区分度低转子转速 ω反映转子动能与变流器状态故障暂态分群关键需同步采样实测数据难拿机端电压 u反映电气距离与故障期降压深度低电压穿越场景稳态下几乎无区分度一个实用的取舍是做稳态并网校核用风速 桨距角两维就够做故障穿越校核必须把转子转速和机端电压加进去。四维特征做 K-means 之前一定要标准化否则风速的量纲m/s量级 10会把电压p.u.量级 1压死。提示风速数据最好取机舱风速仪 10 分钟均值再插值到仿真时刻直接用瞬时风速做聚类分群结果会在相邻时段来回跳。2.3 用肘部法和轮廓系数确定分群数分群数 K 靠拍脑袋定是误差的第一大来源。常见做法是先用肘部法定上界再用轮廓系数挑最终值。import numpy as np import pandas as pd from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler from sklearn.metrics import silhouette_score raw pd.read_csv(wt_states.csv) # 字段wt_id, v_wind, pitch_deg, rotor_rpm, u_pu, p_mw, s_mva # 四维特征风速、桨距角、转速、机端电压 feat raw[[v_wind, pitch_deg, rotor_rpm, u_pu]].values Xs StandardScaler().fit_transform(feat) # 标准化消除量纲差异 sse, sil {}, {} for k in range(1, 9): km KMeans(n_clustersk, n_init10, random_state0) labels km.fit_predict(Xs) sse[k] km.inertia_ # 簇内平方和画肘部曲线 if k 2: # 轮廓系数在 k1 时无定义 sil[k] silhouette_score(Xs, labels) print(SSE:, sse) print(Silhouette:, sil)n_init10表示换 10 组初始质心各跑一次取最优能躲开初值敏感导致的局部最优random_state固定后结果可复现做对比实验时别省这一项。看输出的方法很直接SSE 曲线拐点之后每增加一个簇下降幅度明显变缓的位置就是候选 K轮廓系数在 0.5 以上算结构清晰0.3~0.5 属于可以接受。2.4 分群结果除了指标还要看什么轮廓系数好看不代表分群可用。拿到标签之后至少再核三件事每个簇的容量占比别出现一个簇只有两台机、另一个簇塞了五十台每个簇内机端电压的极差超过 0.03p.u. 就该拆每个簇对应的集电馈线编号跨三回以上馈线的簇后面的网络化简误差会放大。我一般会先把分群结果按容量排个序容量占比低于 3% 的小簇要么并入最近的簇要么单独保留为详细模型。这两台机在 PCC 上贡献的功率很小但把它们塞进大簇会污染整个等值机的转速轨迹。3. 集电网络化简与等值参数聚合的可执行流程3.1 集电网络等值阻抗的折算口径集电网给等值带来的误差常被低估。四回 35kV 馈线、每回十几台机组树状结构要折成一个从 PCC 看出去的等值阻抗工程上常用的口径是“功率损耗不变”即让等值阻抗上的有功损耗等于原网络各支路损耗之和Z_eq Σ(S_i² · Z_i) / (Σ S_i)²其中 S_i 是流过第 i 段支路的功率Z_i 是这段支路的复阻抗。这个式子成立的前提是先把树状馈线近似成从 PCC 出发的多条独立辐射支路遇到环网或双回并列馈线得先做星三角变换或者把环打开成辐射状再套公式。import numpy as np def equiv_line_z(z_branch, s_branch): 按支路功率损耗不变折算集电网络等值阻抗。 z_branch: 各段支路复阻抗单位 ohm s_branch: 各段支路流过的复功率单位 MVA s_branch np.asarray(s_branch, dtypecomplex) z_branch np.asarray(z_branch, dtypecomplex) s_total np.sum(np.abs(s_branch)) return np.sum(np.abs(s_branch) ** 2 * z_branch) / s_total ** 2 # 例三段支路阻抗递增末段功率最小 z_seg [0.12 0.35j, 0.09 0.27j, 0.05 0.15j] s_seg [60, 40, 20] # MVA print(equiv_line_z(z_seg, s_seg))注意功率取模值再平方复功率直接平方会得到复数平方物理意义变了。折算出来的 Z_eq 通常明显小于首段阻抗因为它按功率加权功率最大的首段权重最高这正是我们希望等值阻抗“等效于主要损耗路径”的原因。箱变阻抗别漏掉型号相同时取 Z_T/n 与机组阻抗串起来一起折算。3.2 机组本体参数的聚合口径聚合对象聚合公式依据等值容量S_eq ΣS_i功率守恒定子/转子阻抗Z_eq 1/Σ(1/Z_i)并联须先归算到同一容量基准惯性时间常数H_eq Σ(H_i·S_i)/ΣS_i转子动能守恒轴系刚度与阻尼按容量加权归算到等值机容量机侧/网侧变流器 PI 参数容量加权近似小信号一致暂态需再校最容易出错的是第二行。不同容量机组的标幺阻抗基准不同直接套并联公式得到的是纯数学上的并联值物理上不成立。正确做法是先把每台机组的阻抗归算到各自的额定容量基准再按容量加权求等效最后再折算回等值机容量。变流器 PI 参数用容量加权是近似不是定理。多台机组的控制器并联之后等值控制器的带宽会变化如果原控制器带宽差异大这个近似在暂态过程里会带来几十毫秒量级的相位误差。3.3 分群与聚合的最小可跑流程import numpy as np import pandas as pd from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler raw pd.read_csv(wt_states.csv) # 字段wt_id, v_wind, pitch_deg, rotor_rpm, u_pu, s_mva, h_s, z_pu feat raw[[v_wind, pitch_deg, rotor_rpm, u_pu]].values Xs StandardScaler().fit_transform(feat) raw[grp] KMeans(n_clusters3, n_init10, random_state0).fit_predict(Xs) def aggregate(g): s_sum g[s_mva].sum() # 等值容量 h_eq (g[h_s] * g[s_mva]).sum() / s_sum # 容量加权惯性 z_base g[z_pu].values * g[s_mva].values / s_sum # 先归算到等值机基准 z_eq 1.0 / np.sum(1.0 / z_base) # 再按并联求等效 return pd.Series({n: len(g), s_eq: s_sum, h_eq: h_eq, z_eq: z_eq}) eq_params raw.groupby(grp).apply(aggregate) print(eq_params)z_base这一行是关键先做容量归算再做并联。顺序颠倒会得到偏小的等值阻抗故障期间等值机的短路电流偏大PCC 电压跌落偏浅误差会反着走。跑完打印的n列要顺手看一眼出现过大的簇说明 K 偏小。4. PCC 点轨迹校验等值模型精度怎么量化4.1 校验工况该怎么设计只在稳态潮流的电压和功率上对得上不能说明等值模型可用。常见的校核工况集至少包含三类三相短路含不同残压水平比如 0.2、0.5、0.8p.u.、阵风扰动风速从 6m/s 阶跃到 12m/s、以及频率支撑测试系统频率阶跃 0.2Hz。每一类工况都要记录 PCC 的有功 P、无功 Q、电压幅值 U必要时加上场站频率。采样时刻必须对齐详细模型和等值模型用同一组输出时间点别用各自的变步长输出直接相减。注意详细模型和等值模型的电气量测点要落在同一个节点上。等值模型里 PCC 就是并网点但详细模型里 PCC 可能是升压站高压侧母线中间差一台主变。测点错位会让所有误差指标都失真。4.2 归一化均方根误差的算法实现import numpy as np def nmrse(y_detail, y_equiv, base): 归一化均方根误差返回百分数。 base 取详细模型稳态值避免功率接近零时除零发散 y_detail np.asarray(y_detail, dtypefloat) y_equiv np.asarray(y_equiv, dtypefloat) if y_detail.shape ! y_equiv.shape: raise ValueError(两条轨迹采样点必须对齐) err y_equiv - y_detail return np.sqrt(np.mean((err / base) ** 2)) * 100.0 # 同一扰动下的两条曲线 e_p nmrse(p_detail, p_equiv, basep_detail.mean()) e_q nmrse(q_detail, q_equiv, baseabs(q_detail).mean() 1e-6) e_u nmrse(u_detail, u_equiv, base1.0) # 电压用 p.u.基准取 1.0 print(fP误差 {e_p:.2f}% Q误差 {e_q:.2f}% U误差 {e_u:.2f}%)有功基准取详细模型的稳态均值而不是额定容量是为了让误差指标反映“相对这一工况的相对偏差”。无功稳态值可能接近零所以加了 1e-6 的保护项。场级并网校核里比较常见的判据是 PCC 有功和无功轨迹的归一化均方根误差控制在 5% 以内、电压控制在 0.01p.u. 以内具体阈值要看接入系统的要求。4.3 误差超标时先查什么误差偏大先别急着加机群。按这个顺序排查命中率最高先查网络等值把集电网络的等值阻抗换成两段或三段等值看误差是否明显下降再查分群数K 从 3 加到 5看误差曲线的拐点最后才动控制器参数因为控制器聚合误差通常在暂态后半段才显现如果误差在故障发生瞬间就超了问题基本不在控制器上。把误差按时间段拆开看也很有用。故障发生到切除这段时间的误差主要由集电网络和分群决定切除后恢复段的误差更多来自转子动能也就是 H_eq和控制器带宽。两段分别定位比只看一个总数快得多。5. 多工况自适应等值等值参数随运行点漂移时的补偿做法一套等值参数只在标定工况附近可信。风速从 6m/s 涨到 12m/s桨距角从 0° 走到 15°变流器的等效带宽和转子等效惯性都会变等值参数跟着漂。要覆盖全工况常见做法是按风速区间标定多套等值参数运行时按当前风速插值。def blend(low, high, v, v_low, v_high): 在相邻两套标定参数之间做线性插值。 low/high: 两个风速区间的等值参数元组 (s_eq, h_eq, z_eq) if not (v_low v v_high): raise ValueError(运行点超出插值区间) w (v - v_low) / (v_high - v_low) return tuple((1 - w) * a w * b for a, b in zip(low, high)) # 6m/s 与 12m/s 两个标定点 p6 (200.0, 5.1, 0.018) p12 (200.0, 4.6, 0.021) print(blend(p6, p12, 9.0, 6.0, 12.0))插值区间不要拉太长。风速区间跨度超过 6m/s 时等值阻抗的非线性会吃掉插值精度这时候把区间切成三段更划算。另一个方向是轨迹灵敏度校正。把误差较大的参数挑出来逐个施加 ±5% 的扰动看 PCC 有功轨迹的灵敏度大小优先修正灵敏度高的参数。灵敏度低的参数怎么改都影响不大不值得花时间。场景推荐做法参数维护成本稳态并网校核单一等值参数仅在额定附近标定低全风速段扫描按 4m/s 一档切区间各档独立标定中故障穿越评估区间标定 轨迹灵敏度校正高实时仿真RTDS 等固定区间数用查找表避免在线插值开销中最后说一个容易忽略的验证技巧把详细模型在某工况下的 PCC 轨迹留出来不参与标定用标定好的等值参数去跑看误差是否落在标定工况的误差范围附近。如果验证工况的误差比标定工况高出两倍以上说明区间边界切错了位置把边界往误差峰值那边挪一档插值残差从 3.1% 降到 1.4% 的那个位置就是这套自适应参数该停下来的地方。本文还有配套的精品资源点击获取
返回列表