我第一次意识到尾流效应是个要命的东西,是在某沿海风电场做并网调测的时候。场里装了 25 台 2MW 风机,单机满发功率正好 2MW,理论装机容量 50MW。可实际跑起来,整个场站的日发电量折算下来长期只有理论值的八成出头。最初我以为是变流器效率、叶片结冰或者电网限电的问题,后来把每台风机的运行数据一项项拉出来,才发现问题主要出在一个看不见摸不着的东西——风本身被前排风机"截胡"了。正是这个看起来人人都懂、实际却极少有人认真对待的现象,最终催生了我手头的这个项目,代号就叫 WindRunnerMax。
这个项目做的是什么,一句话说清楚:通过场群级的偏航协同控制,把风电场的尾流损失降到最低,让整个场子的发电量朝着"系统最优"而不是"单机最优"靠拢。它不是硬件改造,不换叶片,不动塔筒,所有逻辑都跑在现有的监控系统和风机主控之上,属于典型的软优化路线。如果你正在做风电场运维、整场技改方案,或者研究风资源评估与控制策略,这篇文章里从原理到算法再到落地踩坑的过程,应该能给你省不少弯路。
1. 发电量缺口从哪来:尾流效应是风电场的隐形亏损源
1.1 一个纸上算得清、现场对不上的发电量
做风电的人都有这种经历:项目可研报告里的等效发电小时数写得漂漂亮亮,实际运营一年发现根本跑不到。差距来自很多方面,但其中占比最稳定、最可预测的一项,就是尾流损失。
发电机原理课上讲过,风机从风中吸收动能转化为电能,这是没问题。但风经过叶轮之后,速度会掉下来,湍流强度会增加,这个"被用过"的风就是尾流。在大型风电场里,风从第一排扫过去,到第二排的时候已经变弱了,第三排更弱。研究机构基于大量已运营场站统计过,平原和海上风电场由于盛行风方向比较集中,尾流损失普遍在 8% 到 15% 之间,个别布局逼仄的场子甚至接近 20%。也就是说,一百台风机装在那里,平时就有差不多十台在"白转"。
1.2 尾流的本质:风被前排"吃干榨净"了
要说透尾流,先得提一个经典概念——贝兹极限。叶片从风中捕获能量的比例理论上最高只有 59.3%,剩下的能量必然留在风里。问题在于,这部分残余能量分布在叶轮后方的很长一段空间里,形成低速、高湍流的尾流区。下游风机如果正好落在尾流区里,来流速度远低于自然风速,发电量自然断崖式下降。
更麻烦的是,尾流不是一条笔直的细线,而是像手电筒打出的光柱一样,在向下游扩散的同时逐渐变宽变淡。一台 2MW 风机在满发工况下,后方 3 到 5 倍风轮直径处的尾流直径能扩展到 1.5 到 2 个叶轮直径,中心风速损失可以达到来流风速的 30% 到 40%。这就是为什么风电场的排布必须讲究——间距、错列、主导风向,每一样都直接影响收益。
1.3 工程上常用的尾流模型:从简化公式到工程修正
做尾流场级优化,第一步得先把尾流算准。工程上最常用的入门模型是 Jensen 模型,也叫单线性尾流模型,原理非常朴素:假设尾流区截面上的风速是均匀的,只按中心线风速衰减来计算。
简化写法是这样的:
v = v0 * (1 - (1 - sqrt(1 - Ct)) * (D / (D + 2 * k * x))^2)这个模型的好处是好实现、参数少,现场校准也方便。缺点是它不考虑尾流截面内风速的横向分布,算出来偏保守。后来工业界慢慢转向高斯尾流模型,它假设尾流区风速亏损在横向上呈高斯分布,中心亏损最大,越靠边缘恢复越快,更接近实测结果。
在我实际做 WindRunnerMax 的时候,仿真层用高斯模型做离线推演,现场在线控制层反而用 Jensen 模型打底。原因很简单:在线控制对计算时延要求高,Jensen 模型在嵌入式控制器上的开销几乎可以忽略,而离线仿真的有时间跑精细模型。这种"精细模型做设计、简化模型做控制"的组合,是我向不少同行验证过、确实可行的路子。
2. WindRunnerMax 的破局点:不再让每台风机"各自为战"
2.1 单机最优与场群最优的天然冲突
传统风机的控制逻辑是"自顾自"的。每台风机只盯着自己机舱风速仪测到的风速,想办法让自己的发电量最大化。听起来没什么不对,但在一个场群里,这种策略反而可能造成整体损失。
原因在于,上游风机如果总是对着主风向满功率迎风,它制造的尾流最强,下游风机吃到的风最弱。如果让上游风机稍微偏转一个角度,让它自己的发电量让出一部分,但尾流向侧向偏转,下游几台风机就能吃到更完整的自然风,整排机组的总电量反而更高。这就是风电场控制领域常说的"贪心陷阱"——每个人都拼命抢资源,结果所有人一起吃亏。
2.2 偏航协同的核心原理:用"让利"换整体收益
偏航协同控制的本质并不玄妙,就是主动改变风轮面与主风向的夹角。风机正常发电时偏航系统会尽量让机舱对正风向,以获得最大风能。协同控制则允许机舱偏离主风向一个角度,这个角度通常控制在 5 度到 20 度之间。
偏航之后,上游风机自己承受的轴向推力减小了,风轮捕获的功率会有一段小幅下降,但更重要的是尾流的轨迹会向侧向甩出去,不再直勾勾地拍在正下游风机脸上。
这是整个项目的核心杠杆点:用上游风机百分之几的发电损失,换取下游风机百分之十几的发电增益。只要整排或者整个子区域的净收益为正,这个操作就值得做。
2.3 技术选型:为什么选偏航协同而不是降载或停机
方案论证期间,团队里有人提过更直接的做法:让上游风机降载运行甚至间歇停机,同样能减小尾流影响。这个思路不是不行,但我没选,原因有三个。
第一,降载会让变桨机构频繁动作,叶片轴承和变桨轴承的磨损速度明显加快,一个维护周期下来,换轴承的成本可能把发电增益全部吃回去。第二,偏航控制改变的是机舱朝向,桨距角保持不变,对机械结构的影响要小得多。第三,降载意味着主动弃风,有些地区在考核发电量时并不认可这种主动弃风策略,而偏航协同始终保有机组处于发电状态,更符合调度要求。
所以最终的技术路线定为:全场基于风向概率分布做静态寻优给出偏航偏置表,再叠加动态尾流识别做局部修正。静态打底,动态微调,两层配合。
3. 核心算法与工程实现:偏航协同寻优的全链条
3.1 总体控制流程:从数据采集到指令下发
WindRunnerMax 的控制链路大致分成四步:
- 收集全场每台风机的实时风速、风向、功率、偏航角、桨距角。
- 根据风向和上下游位置关系,实时构建当前尾流影响矩阵。
- 对受尾流影响的关键机组组合执行寻优算法,计算每个机组的推荐偏航角。
- 通过场站监控系统下发偏航命令,并等待机组执行到位。
整个闭环运行周期控制在 1 到 3 分钟。风况变化不剧烈时,偏置角可以长时间保持;风向突变超过 15 度时,强制触发新一轮寻优,确保控制策略跟得上天气变化。
3.2 尾流影响矩阵:把场站抽象成一个"互相拉扯"的网络
要定量判断谁影响了谁,我会把风电场看作一张有向图。节点是风机,有向边的含义从"上游风机 A 的尾流对下游风机 B 的影响程度"到"影响程度取决于两台风机连线与当前风向的夹角、距离和上游风机的推力系数"。
这里给出简化计算的关键代码:
def wake_effect(ws_ub, dist_x, dist_y, D, Ct, k=0.04): # 下游距离:风沿主轴方向的距离 x = dist_x * cos(wind_dir) + dist_y * sin(wind_dir) # 横向偏移:决定机组是否落在尾流区内 y = -dist_x * sin(wind_dir) + dist_y * cos(wind_dir) # Jensen 模型尾流半径 wake_r = D / 2 + k * x # 机组轮毂位置是否进入尾流区 if abs(y) > wake_r: return 0.0 deficit = (1 - sqrt(1 - Ct)) / (1 + 2 * k * x / D) ** 2 # 横向高斯权重,越靠近尾流中心影响越大 lateral_weight = exp(-0.5 * (y / (wake_r / 2)) ** 2) return deficit * lateral_weight这段代码的思路是:先判断下游风机是否在尾流影响锥内,再按距离衰减和横向分布计算风速亏损比例。实际工程中,Ct 系数要从风机厂家提供的推力曲线上插值获取,风向则取全场中多个测风塔和机舱风速仪综合后的结果。
3.3 寻优算法:粒子群为主,贪心启动
有了影响矩阵,下一步就是求解全场最优偏航角组合。这是个典型的高维非线性优化问题,几十台风机的偏航角互为耦合,穷举所有组合在计算上不现实。我选的方案是粒子群优化算法(PSO)加贪心启动。
贪心启动的含义是:在上游风机中选择对全场贡献潜力最大的几台,先按单步试算确定大致偏航区间,然后用这个区间作为粒子群的初始种群范围。这样做的好处是显著减少粒子群的前期探索时间,避免在完全随机初始值上浪费计算资源。
目标函数并不是单纯的总发电量最大化,我把它改写成带软惩罚的形式:
J = sum(P_i) - lambda * sum(|delta_yaw_i| / max_yaw)后面那部分是偏航角变化量的汇总惩罚项,用来防止算法频繁折腾偏航系统。lambda 取一个较小的值,比如 0.05,保证优化主要目标还是电量,但也不至于让偏航机构像抽风一样来回摆动。
3.4 约束处理与安全红线
任何优化算法跑到现场都必须加约束,这一条我在做原型阶段就吃过亏。WindRunnerMax 的约束主要分三类:
- 偏航角边界:单次偏航偏置不超过 15 度,防止偏离过大导致载荷异常。
- 变桨速率限制:算法不直接下发桨距角,只建议偏航角,所有桨距操作仍由机组主控独立执行。
- 紧急工况接管:当风速超过切出风速、机组报故障或电网频率异常时,优化输出自动旁路,回到常规单机控制模式。
安全逻辑很简单,一句话:优化系统只能在常规运行工况里"提建议",一旦触及安全边界,立刻把控制权交还给机组自身的主控系统。
4. 现场实测的结果账本:电量提升与代价的量化对比
4.1 测试方案设计:用 A/B 组对比把变量降到最低
理论说得再好,也要现场数据说话。为了评估 WindRunnerMax 的实际效果,我选了某丘陵风电场相邻的两排风机作为对照。这两排风机型号相同、高度相同、间距布局一致,唯一区别是主导风向上前排机组是否启用偏航协同。
测试持续两个月,其中前两周只做数据基线采集,风机全部按照标准的单机最大功率追踪模式运行。之后两周对其中一排启用协同偏航,另一排保持原有策略。每隔一周轮换一次,用重复测量的方式抵消季节性风况波动带来的偏差。
每组对比周期内,我都记录了排平均风速、排平均功率、单机偏航角的平均绝对偏差,以及机舱风速仪与场级测风塔风速的比值。目的是确认功率变化到底是尾流控制带来的,还是单纯因为来流风速本身变了。
4.2 关键数据对比:损失换来的是更大收益
两组排级平均数据对比如下:
| 指标 | 基准组(不偏航) | 协同组(启用偏航) | 变化幅度 |
|---|---|---|---|
| 上游机组平均功率 | 1785 kW | 1712 kW | -4.1% |
| 下游机组平均功率 | 1231 kW | 1398 kW | +13.6% |
| 整排机组平均功率 | 1508 kW | 1555 kW | +3.1% |
| 平均偏航角偏差 | 2.1 度 | 9.4 度 | +7.3 度 |
| 机组可利用率 | 99.2% | 99.1% | -0.1% |
从表格能看得很清楚:上游机组确实让出了一部分电量,但下游机组吃到的增益远大于上游的损失,整排净收益约为 3.1%。可利用率基本持平,说明偏航角度增加并没有造成实质性的故障率上升。
3.1% 看起来不算夸张,但考虑到偏航协同不需要任何硬件投资,直接落在年度发电量里,这个数字已经足够有吸引力。对一座年发电量 3 亿度的风电场来说,3.1% 就是接近 1000 万度的增量电。
4.3 不同风况下的表现差异:弱风收益最大
把两个月的测试数据按风速区间拆开之后,我发现了一个规律:风速越低,偏航协同的收益越明显。
风速在切入风速(约 3 m/s)到 5 m/s 之间时,整排净收益能到 6% 到 8%。因为低风速下风机本身发电功率很小,上游稍稍偏航所损失的电量绝对值很低,但下游风机从尾流释放中获得的风速增量比例却很高,杠杆效应最强。
风速在 8 m/s 以上时,收益反而回落到 1.5% 左右。这个阶段上游风机满发,偏航带来的自身损失绝对值更大,而下游风机本身已经接近满发,风速增加对功率的边际贡献变小了。这说明偏航协同策略的收益不是恒定的,要想长期吃满红利,必须按实时风况动态调整偏置幅度,而不是拍一个固定值用到底。
5. 从仿真到落地:那些技术文档不会写的坑
5.1 机舱风速仪的"参照系误差"差点让我误判效果
项目上线头一周,我注意到有些风机的偏航角显示值与实际机舱朝向对不上,然后发现这是机舱风速仪和风向仪的安装位置造成的误差。机舱顶部的风速仪处在叶片扫掠面的正后方,叶片旋转本身会在附近制造扰动,导致测到的风向和风速与真实来流存在系统性偏差。如果直接拿机舱风速仪的风向数据参与尾流方向计算,偏航优化指令就像看着一面哈哈镜在指挥交通。
解决办法是在每台风机上加一个基于功率曲线的风向补偿系数。具体做法是:用机舱风速和实际功率反推出当前叶轮捕获的有效风速,再用这个风速和机舱风向仪读数建立回归关系,得到修正后的风向。整个过程跑了两周数据就稳定了,但如果没有这一步,后面所有优化都建立在不真实的前提出上。
5.2 通信时延把"实时控制"变成了"滞后控制"
场站监控系统下发偏航指令到风机主控执行,中间要经过环网交换机、协议转换器、主控 PLC,整条链路的实际时延通常在 3 到 10 秒之间。如果风向处于快速变化阶段,比如阵风来的时候风向十几秒内转了二十度,等命令执行到位时,风向已经又变了,此时这个偏航角反而成了负优化。
针对这个问题,我在算法里加了一个风速和风向变化率的触发门限:当风向变化率超过每秒 0.5 度时,直接暂停新指令下发,保留上一轮的偏航角不动。因为这时候现场的风场本身就处于不稳定状态,与其追着风跑,不如稳一稳,等气流平复再重新寻优。别小看这个看似"退步"的设计,它把偏航机构的动作次数降了将近三分之二,执行寿命也保住了。
5.3 反直觉结论:让上游风机"偷懒"反而是最负责的行为
我刚开始设计目标函数时,总下意识地希望每台风机都尽量多发点电,所以在优化器里给所有机组设了同等的权重。结果发现算法根本找不到明显的增益空间。
后来我把思路反过来了:把下游受尾流影响的机组权重提高,允许上游机组在目标函数里适度"牺牲"。效果立刻不一样了。这背后是一个很朴素的道理——在全场总电量面前,某台单机的电量和别人的电量不是平等的,必须把整体收益放在个体收益前面。这个理念看起来简单,但真正接受它并把它写进算法,还是花了不少心理建设。
5.4 工程可靠性的最后一道锁:多级降级策略
经过两个月的测试,我把 WindRunnerMax 的运行模式分成了三级:
第一级是正常优化模式,全场协同寻优,偏航偏置角范围 0 到 15 度。第二级是限制模式,当数据质量不佳或者部分风机通信中断时,只对上游第一排风机启用偏航协同,后面的机组全部保持常规控制。第三级是退出模式,任何安全报警或核心传感器失效时,系统自动恢复为常规单机控制。
这套降级策略是项目落地过程中最重要的安全兜底。因为现场环境太复杂,信号干扰、传感器温漂、网络抖动随时可能出现,一个不能优雅降级的优化系统,上线第一天就会被运维团队拔掉网线。
最后再分享一点个人体会。做完 WindRunnerMax 之后,我最大的感触是:风电场的能量管理从来不是某台机器单打独斗的问题,而是一个系统层面的博弈问题。让利、协同、整体最优这些词,在控制算法里体现为数学表达式,在运维层面却需要从观念上转个弯。如果你也想在自家场站试验类似的偏航协同控制,我的建议是从上游第一排风机开始,先用最小范围验证收益,再逐步扩大协同区域。这个项目的完整代码和数据处理脚本,我后续会整理出来单独发一篇,到时候可以对照着看。