多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

储能辅助火电二次调频:控制策略与容量优化配置仿真研究

储能辅助火电二次调频:控制策略与容量优化配置仿真研究 储能辅助火电机组二次调频控制策略及容量优化配置研究这个标题看起来很硬核但其实拆开来看是个非常典型的工程优化问题。做电力系统或者储能方向的人应该都清楚火电现在面临的调频压力有多大储能进来之后怎么跟火电配合、配多大容量直接决定了项目能不能落地、能不能赚钱。这篇就把整个研究从策略设计到容量配置再到仿真验证的过程完整梳理一遍代码和模型的核心逻辑也一并交代清楚。1. 研究整体拆解为什么是火电储能到底要解决什么问题先把背景捋清楚。二次调频在电力系统里干的事就是在一次调频把频率稳住之后通过AGC自动发电控制系统把频率和联络线功率恢复到这个额定值消除稳态偏差。传统上这是火电机组的活但火电的问题是天生的锅炉和汽轮机的惯性大从接到指令到实际出力变化中间隔着热工过程爬坡速率一般只有每分钟百分之几的额定出力而且调节方向换向的时候还有死区和回滞。储能这东西电化学电池的响应速度是毫秒级到秒级的功率吞吐能力远强于火电机组非常适合补火电在动态响应上的短板。但储能也不是万能的问题在于容量和成本功率配大了一次投资爆炸实际收益未必撑得起来配小了又起不到应有的调节效果AGC考核照样不达标。这套研究要解决的核心就是两件事控制策略储能跟火电之间怎么出力分配。谁先动、谁后动、谁动多、谁动少、按什么信号分配、怎么防止储能过充过放。容量配置在满足AGC性能考核指标比如调节速率、响应时间、调节精度的前提下储能配多大功率、多大容量能让综合经济性最优。这两个问题是一体的。容量配置必须基于控制策略来计算因为不同的分配逻辑下储能承担的出力分量不同对应的功率需求和能量需求就完全不同。反过来控制策略的设计也得考虑储能的实际容量约束不然算出来的指令储能根本执行不了。这套研究另外还隐含了一个面向工程落地的需求不能停留在理论推导上得有一套可以复现的仿真工具也就是标题里提到的Matlab代码和Simulink仿真模型。下面把整体技术路线梳理一下。2. 核心技术环节与控制策略设计要点2.1 储能辅助调频的系统结构与信号链路先看系统结构。储能跟火电耦合的方式有几种常见方案。学术界和工程上比较多的是在电厂高压侧母线上接入储能通过PCS储能变流器跟机组一起响应AGC指令。这种方案不改造机组本体储能当成一个独立的调节资源参与联合出力。信号链路大概是这样的调度下发AGC指令设定出力目标值给火电机组。火电机组的协调控制系统CCS接受指令后经过锅炉、汽轮机、发电机的动态过程产生实际出力。储能系统实时监测火电实发功率、AGC指令值和系统频率根据控制策略计算自身出力指令。PCS根据指令进行功率吞吐实现联合出力的快速调节。这套方案的关键在于储能反应的控制算法。常见的控制框架包括区域控制偏差ACE信号直接分配储能出力高频分量由储能处理低频分量由火电处理滤波器分解基于模糊控制或模型预测控制做动态分配。实际做仿真时频率偏差和ACE信号是直接相关的模型里通过发电机-负载的转子运动方程来体现。2.2 基于出力信号分解的控制策略逻辑这个项目里最核心的控制策略是做功率差额的频谱分解。思路是AGC指令和火电实际出力之间存在一个差这个差就是需要补偿的功率。这个功率差里面既有高频波动火电来不及响应也有低频持续分量火电可以自己跟上如果全部让储能扛储能能量很快就会耗尽。合理的做法是把这个功率差分解成两部分% 功率误差计算 P_err P_AGC_setpoint - P_thermal_actual; % 高通滤波器提取高频分量储能承担 P_storage_ref highpass(P_err, 0.05); % 截止频率可按需调整 % 低通分量火电继续跟随 P_thermal_comp P_err - P_storage_ref;实际用的是归一化的频率/时域分解或者直接利用小波分解但低配版本里一阶高通滤波器就足够。时间常数决定了储能和火电的分工时间常数越小储能承担的分量越少、时间越短对能量容量的需求越低时间常数越大储能更多参与持续性的功率补偿。这个策略的好处是火电的大部分稳态出力该怎么样还怎么样储能只在动态过程中顶上去容量需求可以控制在合理范围内。2.3 考虑储能荷电状态SOC的回滞控制只做功率分解还不够。储能不能一直充放电SOC到边界了就得停。不加约束的话系统一波动就给储能下指令SOC很快就会冲到上下限后续再有扰动储能就没法响应了。所以控制策略里必须加SOC修正环节。我见过比较靠谱的做法是SOC回滞控制SOC在[20%, 80%]区间内正常执行功率分配指令SOC接近上限比如85%时禁止储能充电指令适当增大放电指令SOC接近下限15%时禁止储能放电指令适当增大充电指令SOC到边界时储能停机火电单独扛AGC指令。这个逻辑在Matlab里可以用状态机或者查表实现。Simulink里用Stateflow做这个逻辑很方便也可以用MATLAB Function块写效果是一样的。2.4 容量优化配置的目标函数与约束容量配置本质上是个优化问题。目标函数一般写成最大化项目净收益或者最小化综合成本或者在满足AGC考核指标前提下的最小储能投资。我倾向于做成收益最大化的经济性模型因为实际项目决策最关心的就是投资回报。收益来源包括储能带来的AGC调节性能提升补偿。很多调频市场已经改了按调节里程和调节性能付费的规则性能越好单位补偿越高。减少火电因AGC考核不合格产生的罚款。电池生命周期内节省的煤耗成本如果储能替代了火电的部分频繁调节煤耗和机损也会下降。约束条件包括调节性能指标约束联合出力响应时间不超过AGC考核要求调节速率不低于某个值调节精度不超限。SOC约束运行周期内SOC始终处于安全范围。储能功率上下限约束。储能能量容量与功率容量的匹配关系比如持续放电时间不低于15分钟这是工程上很常见的配置口径。3. 仿真模型搭建与参数配置实录3.1 火电机组的动态模型简化完整的火电机组模型非常复杂涉及锅炉汽水系统、汽轮机多级做功、回热系统、协调控制系统。但做储能联合调频研究时很多时候不需要把这些全部搬进仿真只需要保留对二次调频有决定性影响的动态特性。工程上一般用简化的发电机-负荷模型加上火电的爬坡速率限制和惯性环节来描述。用一个一阶惯性环节描述机组的响应G(s) K / (T*s 1)其中T是等效时间常数比如取100秒左右。再串联一个速率限制器限制爬坡速率。有这两块火电的调频动态特性就大致齐了。精度要求更高的话可以把锅炉和汽轮机分开建模汽轮机响应快几秒锅炉响应慢几百秒中间加一个汽包压力动态反馈。仿真模型里我通常这么搭火电模型传递函数环节 速率限幅 出力限幅储能模型功率限幅 SOC积分计算 PCS的响应惯性时间常数很小0.02秒级电网/负荷模型转子运动方程计算频率动态3.2 Simulink模型结构分块说明把这个仿真模型拆成几块来看第一块是负荷扰动模块。二次调频的考核场景里负荷变化的典型曲线可以用阶跃、斜坡和随机波动叠加构成。更贴近实际的做法是采用典型日负荷曲线的实际数据但仿真中用构造信号更灵活便于逐工况对比。第二块是频率响应模块。这一块根据功率不平衡量发电出力-负荷需求-储能出力计算系统频率偏差公式是经典的转子运动方程2H * df/dt Pm - Pe - D * fH是发电机组的惯性时间常数D是负荷阻尼系数。这个方程在Simulink里用积分器搭出来就行。第三块是AGC控制模块。接收频率偏差信号经过PI控制器生成AGC调频指令ACE信号。这里PI参数需要整定不然AGC响应容易震荡。第四块是储能控制模块。接收AGC指令、火电实发功率、SOC反馈按照控制策略计算出储能出力指令。第五块是火电模块。接收AGC指令经过锅炉汽轮机动态和爬坡限制输出实际出力。第六块是数据记录模块。记录频率、功率、SOC、AGC性能指标等关键波形。Simulink里用Bus对象把信号组织起来可以避免线头太多导致模型乱七八糟。仿真步长建议设成固定步长比如0.01秒因为后续如果要做硬件在环或者实时仿真的话连续变步长就会有问题。3.3 Matlab初始化脚本的结构设计Matlab代码主要负责两部分一是仿真参数的初始化二是仿真结果的后处理。初始化脚本里把涉及的所有参数集中管理%% 基础参数 f_n 50; % 额定频率, Hz H 5; % 机组惯性时间常数, s D 1; % 负荷阻尼系数, %/Hz P_base 100; % 基准容量, MW %% 火电参数 T_boiler 120; % 锅炉时间常数, s T_turbine 10; % 汽轮机时间常数, s R_thermal 0.02; % 爬坡速率限制, p.u./min %% 储能参数 P_storage_max 20; % 储能最大功率, MW E_storage 10; % 储能容量, MWh SOC_init 0.5; % 初始SOC SOC_max 0.9; SOC_min 0.1; T_pcs 0.02; % PCS响应时间常数, s %% AGC控制器参数 Kp_agc 50; Ki_agc 5;脚本最后把它存成结构体work统一传给Simulink模型的变量空间。这样改参的时候只需要动脚本不用翻Simulink里几百个参数框。后处理代码用来算性能指标% 计算CPS1指标 cps1 calculate_cps1(f_deviation, ACE, t); % 计算调节速率 R_reg compute_regulation_rate(P_joint_output); % 计算储能SOC安全时间占比 soc_ok sum(soc SOC_min soc SOC_max) / length(soc);CPS1是控制性能标准北美NERC定的国内也常用来考核区域发电控制。它跟ACE和频率偏差的统计特性有关。3.4 容量优化配置的计算流程容量配置的优化流程实际做的时候是对几种设计方案做枚举寻优。因为储能功率和容量不是连续变量产品选型上都是离散的比如功率等级选5/10/20MW容量选10/20/40MWh离散枚举比连续优化更符合工程实际。具体做法是设定储能功率P和容量E的候选集合比如功率3档容量4档一共12种组合。对每种组合跑完整个AGC仿真工况提取性能指标和收益指标。用经济性模型计算每种组合的净现值NPV或投资回收期。筛掉不满足性能约束的组合在剩余组合里选最优。仿真工况的设计也很有讲究。不能只用一条负荷曲线典型做法是设计一个完整的测试序列包含在额定工况下突加/突减5%负荷考察大扰动下的响应能力持续1小时的AGC随机指令序列模拟正常运行时的跟踪效果连续升降负荷的斜坡工况考验储能SOC的可持续性。不同容量组合下同样的控制策略跑出来的结果差异会非常明显。储能配得太小SOC频繁到边界控制效果大打折扣储能配得太大性能很完美但投资回收期很长。4. 仿真工况设计与结果分析要点4.1 仿真场景的构建方法这部分直接决定研究结论是否可信。我见过不少论文里的仿真只加一个阶跃扰动然后就说储能能提升调频性能。这在工程上是站不住脚的因为阶跃只考验了瞬间响应能力完全没有触及到储能容量约束、SOC周期性、AGC连续跟踪这些更关键的问题。合理的仿真场景应该至少包括三个维度阶跃扰动工况验证联合调频的动态响应能力看频率最大偏差、稳态偏差、响应时间。连续AGC指令工况用一个较长时间的AGC指令序列可以来自实际系统的历史数据也可以按考核要求生成考察持续跟踪性能和SOC的变化范围。储能SOC压力工况设计持续的偏置性扰动比如长时间负荷偏高或偏低让储能始终朝一个方向动作看SOC会不会触边、触边之后系统怎么应对。4.2 控制策略对比的参照组设置为了说明储能辅助控制策略的好仿真里至少得有两个对照组对照组A无储能纯火电调频。这是基准方案反映现有火电的调频能力上限。对照组B储能固定出力分配储能按比例分担一定比例的AGC指令相当于一种朴素的控制策略。实验组C功率分解动态分配 SOC管理的完整策略。通过三组对比把不同策略下频率质量指标和储能SOC轨迹放在一起对比就能清楚看到动态分配策略的优越性。4.3 关键结果指标分析主要看这几个指标来评价策略和容量配置的效果频率性能指标。频率偏差的均方根值、最大偏差、波动幅度。储能接入后频率偏差的改善幅度通常在20%到40%之间具体数值取决于容量配比。如果火电机组的响应速度本身就极慢储能带来的改善会更明显。AGC考核指标。包括调节速率K1、响应时间K2、调节精度K3。储能并进来之后K1能大幅提升因为储能本身的爬坡速率远大于火电。储能SOC状态。整个仿真周期内SOC曲线应该被控制在合理范围内不能频繁触边。如果SOC曲线长时间顶格说明策略设计有问题容量配置也不合理。经济性指标。回收期多少年、净现值多少、单位调节里程成本多少。一般储能辅助调频项目的回收期做到5-7年是可接受的好的能做到4年左右具体看当地的调频补偿政策。5. 工程落地视角下的几个避坑经验5.1 纯代码跑数据和Simulink跑仿真的差异做这个项目最常见的问题是Matlab代码里算得好好的一接到Simulink仿真模型就不对了波形发散、储能指令异常。原因通常是代数环和采样时间不一致。Simulink里如果模型存在代数环仿真步长必须选得很小以保证稳定性否则计算结果就是震荡的。我建议在储能控制模块里都加上Unit Delay或者Memory块来断开代数环代价是多一个仿真步长的延迟。对调频研究来说一个步长的延迟可以接受。另外采样时间的坑也很大。AGC指令一般是调度周期信号比如4秒或8秒刷新一次国内有些区域是1秒刷新。但储能PCS电流环的响应时间常数是几十毫秒。如果全模型统一用小步长仿真速度慢到没法跑统一用大步长PCS的动态就丢了。正确做法是储能功率控制系统用较小的步长AGC控制层用较大的步长仿真模型本身固定步长取两者之间的合理值比如0.01秒。5.2 储能容量计算里最常见的误区容量配置最常踩的坑是只算功率需求不算能量需求。功率需求是瞬时量看的是最大功率缺额。但能量需求是积分量取决于储能持续出力的时间和SOC的初始位置。同一个功率下如果控制策略让储能承担持续性的功率补偿而不是瞬间补偿能量需求会成倍上升。所以容量配置必须跟控制策略的参数主要是滤波时间常数、SOC管理阈值联合优化不能分开定。先定一个控制策略再算容量容量约束反过来又影响策略参数这是一个循环迭代的过程。仿真里多跑几轮就清楚了。5.3 AGC性能考核指标计算必须用对定义国内不同区域的AGC考核规则不太一样有些按调节速率考核有些按调节里程和调节性能综合考核。计算补偿收益的时候必须用当地的考核规则来计算调节性能指标不然收益预测会跟实际差出好几倍。做仿真后处理时注意CPS1、CPS2、ACE统计指标这些概念虽然来源是NERC的体系但国内很多网省调在具体执行时做了本地化调整。写论文、做报告的时候性能指标的计算口径要写明不然评审直接打回。5.4 SOC的管理要从全生命周期看SOC控制策略在仿真里看短期没问题放到全生命周期比如10年之后问题就暴露了电池的循环次数、衰减率都跟SOC的运行范围直接相关。容量配置做经济性评估时如果不考虑SOC波动范围对电池寿命的影响投资回报率的计算就失真了。仿真脚本里建议加一个电池寿命估算模型根据仿真结果里SOC曲线计算等效循环次数再去修正经济性模型里的更换成本。这个细节看着不起眼但能把经济性分析的结论改掉不少。5.5 模型参数和数据来源要认真对待火电机组的模型参数对仿真结果影响很大尤其是锅炉时间常数和爬坡速率限制。做研究的时候如果拿到的是实际电厂的运行数据那就是最理想的标定素材实在没有用典型参数也可以但需要在报告里注明参数来源和假设条件免得结果被质疑。储能模型参数也一样。PCS的响应时间常数、充放电效率、SOC测量噪声都要有依据。我记得有次用恒定的充放电效率去算结果高估了储能的实际调节能力后面换上分段效率模型低SOC充电效率低高SOC放电效率低之后结果就合理了很多。6. 常见问题与排查技巧实录把实际调试模型的时候遇到过的一些典型问题整理一下方便直接对照排查。6.1 Simulink仿真发散现象模型跑几十毫秒就开始数值爆炸频率偏差疯狂增长。排查过程先查代数环。在诊断界面打开了代数环检测定位到储能控制模块的反馈通路加了Unit Delay解决。再查步长。模型里用了过大的固定步长火电的响应特性得不到正确体现减小步长后正常。最后查PI参数。AGC控制器积分增益过大产生振荡发散下调Ki之后稳定。经验是遇到发散不要先去怀疑模型结构先从步长、代数环、控制参数这三项入手九成问题出在这三个地方。6.2 储能SOC长时间不下降但也不上升现象仿真跑起来储能不停输出功率但是SOC纹丝不动。排查过程查SOC计算模块发现积分器的初始条件没设成SOC_init导致SOC始终从0开始累计。把积分器初始条件改成0.5对应50% SOC就正常了。另一个类似的坑是SOC的单位统一。储能能量单位是MWh功率单位是MW做积分的时候如果不除以基准功率SOC的变化量就会差好几个量级。6.3 AGC指令跟踪偏差偏大现象联合出力比AGC指令小很多系统频率长时间偏离额定值。排查过程检查储能出力的限幅是不是把正常出力削掉了发现储能功率限幅设太小0.1MW储能还没怎么干活就被砍了。把限幅放大到实际配置值后恢复正常。更隐蔽的问题在滤波环节。高通滤波器只能过滤直流分量如果AGC指令本身含有低频波动高通滤波后储能承担的分量还是很小火电的爬坡能力又跟不上跟踪误差就会持续存在。这种情况要调整滤波器截止频率或者改用带通滤波器让储能承担中间频段的分量。6.4 频率波动的短期震荡现象频率整体能恢复但恢复过程中叠加了明显的低频振荡。排查过程这个通常是储能和AGC控制器之间的交互引起的。储能响应太快AGC控制器还没反应过来储能已经把频差补偿掉了随后AGC又基于旧的频差计算指令继续给储能下出力指令就造成了出力过调。解决思路是加输出优先级和指令保持机制让储能只在AGC指令变化后的前几秒内主动响应后续由火电慢慢接管。说白了就是让储能干完快活就住手剩下的交给火电慢慢爬。6.5 容量配置结果与直觉不符现象最优结果既不是最大容量也不是最小容量而是一个中间偏小的配置。分析这个其实不是故障是正常的。因为储能边际收益递减初始容量带来的调频性能提升最明显容量进一步加大之后性能提升很少投资成本却直线上升。最优值必然在性价比拐点附近。如果算出来的最优容量偏大多半是单位投资成本假设偏低如果偏小多半是调频补偿单价假设偏高。做经济性分析时这些参数要做敏感性分析别只给一个点值。7. 代码片段与模型注释补充7.1 控制策略核心函数的Matlab写法给一个控制策略核心函数的框架方便照着改function P_storage storage_control_logic(P_agc, P_thermal, SOC, params) % STORAGE_CONTROL_LOGIC 储能辅助调频控制策略 % 输入AGC指令、火电实发功率、当前SOC、参数结构体 % 输出储能出力参考值 % 计算功率误差 P_err P_agc - P_thermal; % 高通滤波提取动态分量 persistent prev_err; if isempty(prev_err) prev_err 0; end alpha params.filter_alpha; P_high alpha * P_err (1 - alpha) * prev_err; prev_err P_high; % SOC修正因子 if SOC params.SOC_high_th soc_factor 0; % 禁止充电意图 elseif SOC params.SOC_low_th soc_factor 0; % 禁止放电意图 else soc_factor 1; end P_storage soc_factor * P_high; % 功率限幅 P_storage max(min(P_storage, params.P_storage_max), ... -params.P_storage_max); end这只是一个极简示意实际工程里要加滤波器的具体实现、SOC的预测修正、电池运行状态的切换逻辑但理解了框架就够往里面填细节了。7.2 Simulink模型里的关键设置求解器选固定步长、ode4四阶龙格库塔步长0.01秒。代数环检查打开模型设置 - 诊断 - 代数环改为错误。信号线尽量标名字后期处理波形的时候用signal名字索引比一条条找线头省时间得多。用Scope还是用To Workspace仿真时间长了Scope卡頓建议数据全部用To Workspace导出到Matlab工作区统一绘图。如果仿真时间很长一天的数据可以考虑给储能模块的采样时间调大一点比如0.1秒PCS的电磁暂态细节在这个研究尺度上可以不关心。7.3 后处理脚本中必须包含的几个输出后处理脚本至少输出这些图频率偏差对比曲线无储能、有储能、不同容量火电出力、储能出力、AGC指令的跟踪对比曲线SOC变化曲线调节性能指标条形图经济性指标汇总表这些图直接支撑论文或报告的核心结论留好原始数据文件和绘图脚本后面改图改数据会省很多事。8. 从研究到落地的全流程复盘这套研究做完之后真正最有价值的部分其实不是最终那一组最优容量数字而是把“控制策略”和“容量配置”两者耦合迭代的方法论落地成了可复用的仿真工具。策略参数一变容量结果跟着变容量变了策略参数又需要重新调优。脱离这个循环去看任何一个单一结果意义都是有限的。整套流程的核心价值在于它把储能辅助调频从一个定性的概念变成了一个可以量化评估的工程方案。对做实际项目的人来说这套仿真模型和代码可以在投标前快速测算不同储能配置下的性能提升和投资回收。对不同的人可能更关心里面的SOC管理回滞控制怎么写或者容量优化的约束条件怎么定——这些细节在这篇文章里基本都覆盖到了。我实际调试过程中最大的体会是储能跟火电的配合说到底是个“扬长避短”的问题。储能快但容量贵火电慢但容量便宜好的策略就是让储能只干它擅长的那一小段高频动态补偿剩下的长尾部分交给火电慢慢跟。这个分寸把握好了容量配置自然就合理了把握不好容量再大也白搭。后面如果要把这套模型扩展有两个方向可以考虑一是把电池的寿命衰减模型纳入仿真用跨时间尺度的联合仿真来优化全生命周期经济性二是把储能参与调峰、备用的多场景复用价值考虑进来做储能的多功能优化配置这样单看调频回收期不够好的项目放到综合价值评估里可能就合格了。
返回列表