ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

风储联合调频仿真实战:从虚拟惯量到SOC约束的完整攻略

风储联合调频仿真实战:从虚拟惯量到SOC约束的完整攻略 前几天整理并网测试用的仿真资料翻到一组曲线同一台负荷扰动纯风电接入时频率跌落斜率几乎能到0.35Hz/s最低点逼近49.3Hz把储能调频策略叠上去之后跌落斜率变缓最低点也抬高了0.2Hz。很多刚接触风储联合调频的朋友看到这类对比第一反应是那就在风场旁边堆电池就行了。但真正做过仿真和现场验证的人知道事情远没有这么简单风机和储能一个想干活但响应太慢一个响应快但电量有限两者在频率恢复的几十秒里互相牵制、互相补偿这本质上就是一场关于功率、惯量和时间的数字博弈。这篇文章我想把这场博弈拆开来讲——从电网为什么需要调频到风储如何配合再到仿真模型、参数整定和踩坑经验尽量把我知道的都写出来。内容不限于干巴巴的公式更适合正在做风储联合调频方案、储能配置论证或者并网测试准备的朋友参考。1. 被风电稀释的系统惯量频率波动为什么会变难看1.1 传统电力系统靠什么压住频率要理解风储为什么必须联合参与调频得先从传统同步发电机说起。在火电、水电为主的系统里每一台同期运行的发电机都带有一个巨大的转子转子在额定转速下储存着大量旋转动能。当系统里突然出现有功缺额——比如某台机组跳闸或者负荷猛增——频率开始下降转子会因为转速降低而释放一部分动能暂时填补功率缺口。这个现象就是惯量响应或者叫惯性响应它不需要任何控制指令物理上天然就有。描述这个过程的经典方程是转子运动方程简单写下来就是dΔf/dt (ΔPm - ΔPe - DΔf) / (2H)其中ΔPm是机械功率增量ΔPe是电磁功率增量D是负荷阻尼系数H是系统等效惯性常数。H越大同样的有功扰动造成的频率变化率RoCoF就越小频率曲线的膝盖也就越平缓。你可以把H想象成一辆很重的车同样的刹车力度重车减速一定比轻车慢。传统系统里同步机的H通常在3到6秒按各自容量归算整体系统惯量充足频率稳定性也比较好。1.2 风机为什么天然不配合调频风电的问题在于它并不是靠同步发电机直接并网的。风轮带动发电机发出的电先通过背靠背变频器或者变流器整流、逆变再送入电网。电力电子变流器把风机和电网频率几乎完全解耦了风机的转速由风速决定电网的频率由系统的功率平衡决定两者之间没有直接的机电耦合。换句话说当电网频率跌落时风机并不会像同步机那样自动释放转子动能去支撑频率甚至还可能因为变频器的控制策略而察觉不到频率变化继续按最大功率跟踪MPPT方式运行。这里还有三个不配合叠加在一起一是变流器解耦风机转速变化无法响应电网频率二是MPPT控制下风机始终在榨取最大功率没有预留备用容量频率下降了也没有余力多出力三是桨距角调节虽然能减出力或者限制出力但液压/伺服系统的动作时间在几百毫秒到数秒之间对一次调频这种秒级甚至毫秒级需求来说太慢了。再加上风速本身随机波动风机输出功率天然就在抖指望它独立扛起系统频率确实不现实。1.3 系统等效惯量到底掉了多少我在某个风储仿真实例里做过一组对比计算这里把过程分享出来。假设某个区域电网的负荷水平是2000MW原本全是同步机供电等值为一台大机组Hn3.5s。然后风电大规模接入风电出力占负荷的35%左右即700MW。按功率加权估算系统新的等效惯量大约是Heq Hn × (1 - 风电渗透率) 3.5 × 0.65 ≈ 2.3s如果此时系统突然失去100MW有功功率约占负荷的5%按转子运动方程粗略估算初始频率变化率会从-0.36Hz/s左右恶化到-0.54Hz/s左右也就是频率跌落速度几乎快了一半。这不是危言耸听而是很多高风电渗透率电网实际发生的现象。频率变化率变大一方面会让低频减载装置更容易误动作另一方面也给调频机组争取了更短的反应窗口。这时候储能的价值就体现出来了——它是唯一能在毫秒级时间尺度上吐出功率的设备正好补上变流器那部分丢失的惯量支撑。2. 风储这场博弈怎么玩一次调频、虚拟惯量和SOC底牌2.1 一次调频用功率换频率的秒级竞速在风储联合场站里通常把风电场和储能电站作为一个整体对外呈现调频能力。一次调频的核心逻辑很简单检测系统频率偏差偏差超过死区就动作频率低就多发功率频率高就减发功率响应时间越短越好。这个动作对应到控制曲线上就是下垂特性本质上是说频率每偏差0.1Hz我就要额外补上多少兆瓦。传统机组靠调速器调节汽门/水门从检测到出力变化往往需要数百毫秒到几秒储能PCS的功率跟踪则快得多一般能做到几十毫秒甚至更短。但这里有一个容易被忽略的现实风机的一次调频能力需要提前准备。如果风机一直满发在MPPT曲线上频率跌了它没有多余的出力可用唯一的办法是让桨距角改变或者超速运行把运行点拉到次优状态留出例如10%的功率备用。这10%的备用平时就是损失掉的发电收益所以很多风场其实不愿意做这个事。相比之下给储能预留充放电空间初期投资虽然高一点但不用牺牲正常发电量工程上更容易接受。2.2 虚拟惯量给储能加一个电子飞轮一次调频响应的是频率偏差量Δf而虚拟惯量响应的是频率变化率dΔf/dt。两者在时间上互补频率变化率在最开始扰动瞬间最大随后逐渐减小频率偏差则随着扰动时间推移逐渐增大。所以虚拟惯量控制的典型表达式是ΔP_vir -Kd × dΔf/dtKd就是虚拟惯量系数相当于人为给储能加了一个电子转子。频率快速下跌时这个通道会在极短时间内输出一个较大的功率尖峰先顶住频率下落的势头但尖峰持续时间很短因为它的作用只是减速而不是抬升。如果控制里只有虚拟惯量而没有下垂控制频率虽然会跌得慢却会一直跌到很低的稳态值。反过来如果只有下垂控制初始跌落斜率虽然没改善但稳态频率能拉回来。两者必须配合使用这也是风储调频策略最基础和最重要的一组组合。2.3 SOC约束博弈里的弹药上限储能参与调频有一个天然的天花板——荷电状态SOC。电池不是容量无限的发电机在高功率放电十几分钟后SOC可能就跌破下限PCS会强制停止放电。这就带来一个很现实的问题一次调频和虚拟惯量可以快但能不能持久答案通常是不能。所以在设计调频策略时SOC不是简单的限制变化范围而是整个策略的一个动态约束。我在实际调试中习惯把储能SOC运行窗口设置为20%~80%而不是0%~100%。为什么因为预留上下边界的目的是保证两个方向的调节能力都存在如果系统频率过高储能需要充电吸纳多余功率如果SOC已经100%充电能力被卡死反之也一样。另外SOC在40%~60%之间时策略要趁早安排充电或者放电避免出现频率波动连续发生时电池恰恰在边界上没电可用的尴尬局面。这就是我标题里说的底牌——调频策略再花哨最后都绕不开SOC这张底牌。2.4 从一次到二次调频的时序配合再往大了说风储联合调频的完整链路不止一次调频。一次调频是局部的、自动的、秒级到十几秒的响应二次调频则由电网调度侧的自动发电控制AGC下发指令调整场站有功功率设定值时间尺度是分钟级。储能参与一次调频时那个功率不能在90秒后还一直扛着否则SOC消耗太快所以需要一个退出逻辑——在系统一次调频机组出力上来、频率稳定后储能应逐步把功率转移出去自己回到SOC管理状态。这个时序配合在数字仿真里很容易做只要用时间表或者状态机建模就行但工程上很多团队会忽略一个细节储能退出时如果速率太快会造成频率二次波动。所以在工程里的做法是给储能功率设定爬坡率限制常见的整定范围是0.1~0.3倍额定功率/秒。简单说20MW储能爬坡限制设为4MW/s就是大约30秒内平稳退出一半功率。这一段做好频率曲线才不会出现二次跌落。3. 把风储场站搬进仿真环境数字实验台搭建的完整过程3.1 选择仿真层级全电磁暂态还是机电暂态混合做风储调频仿真第一步要想清楚用哪一类仿真工具。全电磁暂态仿真能精细描述变流器开关过程、PCS内部电路精度很高但模型复杂、步长要走到微秒甚至更小4000多步场景跑下来单机经常要跑一晚上。而系统级调频问题关心的是秒到分钟级的频率响应核心变量是功率平衡和频率动态并不需要高频开关细节。所以我通常的做法是分层解耦风储场站内部用电磁暂态级模型做PCS控制逻辑的精确验证系统频率特性用机电暂态级的等值模型跑批量场景。两层模型之间只交换功率指令和频率信号把设备级精度和系统级速度分开。这个思路在仿真里非常重要否则你很难在合理时间内做完灵敏度分析和参数扫描。3.2 风电场的等效模型聚合一台虚拟风机真实风场可能有几十台甚至上百台风机如果全部建模计算量会爆炸。常规做法是做机群聚合把同一风速区、同一型号的风机等值成一台大风机额定功率等于所有风机之和惯性常数取单机折算后的加权值。聚合模型的关键参数包括额定功率本次算例取100MW约33台3MW风机聚合切入/额定/切出风速3m/s、11.5m/s、25m/s风功率特性曲线采用标准二次方近似关系桨距角控制时间常数约0.3s减载备用比例10%即正常运行在90MW出力点聚合成一台大风机后输入的风速也不是恒定值而是用一个时间序列叠加湍流脉动。我在算例里用平均风速12m/s加10%湍流强度既让风机有波动特性又不至于把调频曲线抖得太难看。减载运行通过把桨距角预置到一定角度或者把功率指令限制在90%来实现这部分在控制逻辑里是一个下拉式的功率限幅环节。3.3 储能单元建模SOC积分、PCS限幅和死区储能电站模型相对简单但细节不能丢。电池侧我用一阶内阻等效电路容量40MWh额定功率20MWSOC初值取60%。PCS模型不建内侧IGBT开关而是用一个一阶惯性环节等效功率跟踪能力时间常数一般取20ms。但有两个环节必须具体建模一是SOC积分模块SOC每时每刻都在变化公式是SOC_new SOC_old - (P_bat × Δt) / E_bat注意充电时P_bat取负值。二是功率指令限幅模块包括最大功率限制和爬坡率限制。很多初学者把这两个环节省略仿真结果会乐观得离谱。我实际用的储能单元参数表如下算例基准容量取风储联合容量120MW参数名称数值说明储能额定功率20 MW占联合场站容量约16.7%储能额定容量40 MWh满足2小时持续出力SOC初始值60%运行窗口内偏中位SOC上限/下限80% / 20%预留双向调节裕度PCS一阶惯性时间常数0.02 s模拟变流器跟踪速度最大充放电功率±20 MW超过即限幅功率爬坡率限制0.15 pu/s即18MW/s限制冲击调频死区和滤波在PCS前端处理。频率信号进入控制前先经过一个0.5Hz截止频率的低通滤波再用准稳态频率值去判断死区。这个看似小的一环在实际仿真中能滤掉大量由数值噪声引起的误动作。3.4 电网侧扰动事件一次可复现的频率冲击仿真环境里还要有扰动源否则调频策略没有用武之地。我这次算例按如下时间序列设置时间事件效果0~10s稳态运行系统功率平衡频率50Hz10.0s一台200MW同步机组跳闸系统有功缺额相当于等值200MW中的30MW由调节机组承担频率开始下跌10~90s调频过程风储联合场站响应同步机组一次调频参与90s后二次调频接管观察储能退出逻辑与SOC复位扰动大小我特意取了30MW约占系统负荷2000MW的1.5%。这个幅度不算大但在渗透率35%的等值系统里已经能让频率最低点逼近49.3Hz左右足够观察策略差异。如果你想做更严苛的验证可以把扰动调到50MW但要注意储能SOC消耗速度和PCS限幅会先后触发控制参数可能需要同步调整。仿真中还有一个容易被忽略的要素同步机组的一次调频也要建模否则系统频率永远不会恢复。我在算例里给同步机组加了调速器模型调差系数约0.05响应延迟0.5s这样储能退出时系统能接得住。4. 参数整定与仿真结果把控制目标落成具体数值4.1 下垂系数与虚拟惯量系数从哪里起步很多人卡在参数整定这一步因为不知道Kf和Kd应该取多少。我的建议是先做归一化再根据物理边界估算初值最后通过仿真修正。先说下垂系数Kf。以联合场站额定容量120MW为基准当频率偏差0.5Hz标幺值0.01pu时我们希望储能输出达到其额定功率20MW在联合基准上就是0.167pu。于是Kf 0.167 / 0.01 16.7单位联合容量基准下的pu功率 / pu频率。如果把储能容量本身当基准下垂系数会更大但控制里最好统一用场站总容量做基准方便调度理解和对接。再说虚拟惯量系数Kd。想达到的效果是频率变化率为0.3Hz/s标幺值0.006/s时储能也接近满功率输出。于是Kd 0.167 / 0.006 ≈ 27.8。这个初值跑出来会发现功率尖峰顶得太猛PCS一直限幅所以我最后把Kd调到了8左右再配合前面加的低通滤波器效果更好。说明虚拟惯量系数的大致边界就在5~30之间具体值取决于系统允许的最大频率变化率和储能容量占比。4.2 控制逻辑的数字化实现下面这段是我在仿真里实际使用的风储联合调频控制逻辑伪代码形式可以直接翻译成你熟悉仿真平台的脚本每个控制周期执行: 采样系统频率 f 计算频差 df f - 50 计算频率变化率 ddf/dt 若 df 0.033Hz 或 df -0.033Hz: 下垂通道: P_droop Kf * df 否则: P_droop 0 滤波后的 ddf/dt_hat 低通滤波(ddf/dt, 0.5Hz) 若 abs(ddf/dt_hat) 0.02Hz/s: 虚拟惯量通道: P_vir Kd * ddf/dt_hat 否则: P_vir 0 功率指令 P_ref P_droop P_vir 限制幅值: P_ref clamp(P_ref, -20MW, 20MW) 限制爬坡: P_ref rate_limit(P_ref, 18MW/s) 叠加到储能SOC积分: SOC SOC - (P_ref * dt) / 40MWh SOC保护: 若 SOC 0.20 且 P_ref 0: P_ref 0 # 禁止持续放电 若 SOC 0.80 且 P_ref 0: P_ref 0 # 禁止持续充电这个逻辑里有几个关键顺序先分别计算两条通道再合并限幅再做SOC保护。如果把SOC保护放在限幅前面可能造成功率指令越限的情况下SOC被错误积分。另外死区和低通滤波器必须在虚拟惯量计算之前加否则任何数值噪声都会被微分放大仿真曲线抖成筛子。4.3 三轮调试过程先分环后联合我自己做参数调试时从不一上来就同时开两个通道而是先分环验证再联合调试。第一轮只开虚拟惯量通道Kd8不加下垂。此时频率跌落斜率明显改善RoCoF从-0.36Hz/s左右改善到-0.22Hz/s左右但稳态频率维持在49.4Hz附近不回来说明仅靠虚拟惯量确实只能刹车不能爬坡。第二轮只开下垂通道Kf16.7频率最低点回落得比第一轮深但稳态频率能恢复到49.8Hz附近说明它负责的正是抬频。第三轮两个通道同时开再把SOC窗口和爬坡限制接进去最终频率最低点、稳态偏差和SOC变化都达到协调。三轮下来的典型对比结果如下场景频率最低点最大RoCoF稳态频率SOC变化范围纯风电不调频49.28Hz-0.36Hz/s49.40Hz不适用只加虚拟惯量49.38Hz-0.22Hz/s49.42Hz重叠消耗只加下垂控制49.43Hz-0.34Hz/s49.79Hz有节奏消耗虚拟惯量下垂49.52Hz-0.20Hz/s49.81Hz58%~62%最后一列还有个小发现虚拟惯量通道虽然输出时间短但因为功率峰值大SOC消耗并不比下垂通道少太多。所以SOC窗口是否够用不能只看下垂控制那条曲线必须把虚拟惯量的尖峰放电也考虑进去。4.4 从曲线看博弈效果把四条曲线叠在一起看最直观的体会是虚拟惯量负责把频率下降的第一段坡度削平下垂控制负责把频率最终拉回水平面储能SOC则决定了这两个动作能持续到什么程度。在这个算例里储能容量40MWh、功率20MW的组合应对30MW扰动SOC从60%变化到约58%窗口余量很充足。如果你想进一步缩小储能配置比如降到20MWh或15MW就必须要么接受更深的频率最低点要么把风机减载备用比例从10%提到15%甚至20%。这就是数字仿真的价值它能在真正花钱买电池之前先把不同容量组合的边界试一遍。5. 仿真踩坑实录发散、高频振荡与SOC越限的完整排查5.1 数值发散积分步长与控制周期打架仿真过程里最让人抓狂的问题是跑着跑着频率变成NaN。我在一次参数扫描时遇到过一个典型情况当Kd从27.8往下调的过程中某个区间内仿真总是发散频率曲线在0.5s内剧烈振荡然后直接变成非法数值。我的排查过程是这样逐步推进的第一步检查积分步长。从10ms一路降到2ms发散时间点只往后推迟了一点问题没有根治说明不是简单步长不够。第二步检查代数环。把控制周期时长从5ms改成10ms发散点完全变了开始怀疑控制周期和物理步长之间的耦合有问题。第三步把控制逻辑里的功率指令打点输出。发现发散前最后一拍P_ref从上限20MW瞬间跳到下限-20MW中间没有经历任何过渡点。问题找到了——爬坡限制环节的离散实现写错了只在检测到限幅时才触发爬坡计算导致限幅与爬坡互相冲突功率指令在临界限幅处发生了跳崖式翻转。修复方法很简单把爬坡限制改成无条件执行即每个周期都按爬坡率约束更新P_ref再叠加限幅判断。同时给P_ref加了一个0.08s的一阶滤波避免指令阶跃。修复后即使积分步长回到10ms仿真也稳定了。这个坑提醒我一句话调频仿真里所有瞬时翻转量都值得怀疑它是不是数值假象。5.2 高频振荡两个控制通道抢着出力另一个常见问题是频率接近稳态时储能输出功率开始以0.8Hz左右的频率高频抖动而且幅度始终无法收敛。第一次看到曲线上那条毛刺带我还以为是电网侧有什么谐波电源后来排查发现根源在控制参数。单通道验证法在这里很有效先只保留下垂通道毛刺消失再只保留虚拟惯量通道毛刺立刻出现。问题指向虚拟惯量通道的dΔf/dt计算。频率值本身在稳态也不是绝对平滑的包含同步机调速器响应留下的小幅波动经过微分之后噪声被大幅放大再加上Kd增益微小噪声就变成了功率振荡。解决办法是在微分前加低通滤波器截止频率取0.5Hz同时加入动作阈值——频率变化率绝对值超过0.02Hz/s才启动虚拟惯量通道。这样虚拟惯量只在真正的频率快速变化事件中发挥作用稳态时自然归零。改动之后输出功率曲线平滑了很多频率曲线也不再有高频抖动。这套滤波死区阈值组合是处理微分类控制的标配建议所有做虚拟惯量控制的朋友都直接抄进去。5.3 SOC越限之后策略消失频率二次跌落第三个坑是我认为最坑的也是实际工程中真实发生过的逻辑漏洞储能SOC越限后策略直接禁止放电导致频率在那个瞬间发生二次跌落。我遇到的场景是这样的一场大扰动后储能持续放电SOC从60%一路掉到18%低于下限20%PCS保护逻辑直接切断了放电。此时系统一次调频机组出力虽然已经上升但还不能完全覆盖缺额缺口仍然靠储能在顶储能一撤频率本来已经恢复的走势突然又掉下去曲线出现一个明显的二次膝盖。排查时我先检查是不是SOC计算错误——把SOC积分和PCS实际功率对账发现没问题保护确实该触发。问题在于策略缺少预防性动作在SOC到达下限之前就应该提前开始退出。说白了这不是硬件问题是控制策略不够聪明。修复方案做了三件事第一把SOC运行窗口从20%~80%调整为25%~75%给保护动作留出缓冲第二增加一个提前退出逻辑——SOC低于35%时储能放电功率按比例线性减小到了25%时降到零而不是等到20%保护突然切断第三在SOC低于50%时允许储能利用风机减载备用和系统功率富余进行低功率充电把SOC拉回安全区间。改完重跑频率曲线不再出现二次跌落SOC也始终没有越限。这个坑的关键教训是SOC保护不能只做硬开关式限幅而要做软降级式策略。6. 从数字博弈回到工程现场我的一点实践经验仿真做了很多轮之后我越来越觉得风储联合调频本质上是带约束的实时优化问题。储能功率和电量有限风机响应有延迟系统又要求频率偏差和频率变化率同时收窄三者放在一个时间轴上博弈最终解出来的一定不是某个单一参数的最优值而是一组参数的可行域组合。一个比较实用的经验是不要迷信仿真里的单一最优解。仿真环境里风速是已知的、负荷扰动是设定的、系统参数是固定的你可以反复扫描找到最优Kf和Kd但真实电网里风速不可预知扰动可能连续发生SOC初值也千变万化。更稳妥的做法是跑扰动幅度、风速湍流强度、SOC初值的联合灵敏度分析找到在多个场景下都不翻车的参数区间而不是在某个曲线最漂亮的那组参数上梭哈。第二个经验是给控制策略留足模式切换空间。调频策略不是写了一组Kf/Kd就一劳永逸现实工程里往往需要几套预设模式正常运行模式、频率紧急支撑模式、SOC恢复充电模式、故障退出模式。模式之间还要有滞回逻辑避免频繁切换导致功率振荡。这部分逻辑虽然不影响稳态性能但它在异常场景里决定了你是平稳过渡还是二次冲击价值一点都不小。最后说一点个人体会做风储调频仿真最忌只看最终曲线好看就收工。我在几次项目里养成的习惯是每组参数都要额外追问三个问题频率最低点为什么出现在那个时刻SOC曲线为什么是那个形状如果扰动提前或退后2秒结果还一样吗多问几次仿真模型里隐藏的bug、控制逻辑里的边缘漏洞就都浮出来了。数字博弈的意义不就在于把真实电网可能遇到的那些极端情况先在虚拟系统里输个明白吗
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进