尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于Simulink的风光火储联合调频仿真:从一次调频到AGC建模

基于Simulink的风光火储联合调频仿真:从一次调频到AGC建模 做电力系统频率控制仿真这些年Simulink一直是我工作台上的主力工具。最近刚把手头的风光火储联合调频项目收尾把风电、光伏、火电、储能、水电、电动汽车全塞进同一个仿真框架一次调频和二次调频AGC都做了闭环。这个项目解决了我之前反复踩坑的老大难问题不同类型电源的响应速度差太多单靠某一种调频手段根本稳不住频率必须让不同电源按各自的时间尺度协同出力。这篇文章把整个建模思路、模块拆解、参数整定和调试经验完整记录下来适合正在搭建电力系统频率控制模型、或者需要复现风光火储联合调频仿真的同学参考。1. 先把整体架构想清楚一次调频和二次调频为什么必须分开建模1.1 时间尺度决定建模粒度第一次搭这种联合调频模型的人最容易犯的毛病是把所有电源丢到同一个大回路里以为接上母线就完事了。实际上一次调频和二次调频的时间尺度差了一个数量级——一次调频是秒级响应靠的是调速器和下垂控制二次调频是分钟级靠AGC信号和机组爬坡。时间尺度不同对模型的简化要求也完全不同。比如做一次调频仿真风机的桨距角动态可以简化成滞后环节储能只需关注下垂系数和功率限幅但做二次调频AGC还得考虑机组爬坡率、电量约束、SOC状态、调度上下限这些在一次调频里根本用不上。所以建模第一步不是打开Simulink拖模块而是先画一张时间尺度表哪些动态是0.1秒级的哪些是1秒级哪些是几十秒甚至几分钟。把每个电源的响应时间分成三档——惯性响应、一次调频、二次调频——再决定每个环节用什么模型精度。我习惯把一次调频和二次调频做成两个独立子系统共享同一套母线频率和负荷数据但控制逻辑各自独立。这样调试时能单独看某条通道的响应出结果图也方便。很多人图省事把AGC的PI控制器直接叠加在一次调频下垂控制上结果频率振荡、机组出力打架本质就是没把两个尺度分开。1.2 系统拓扑一条母线六类电源这套模型的拓扑不复杂就是典型的单区域孤立电力系统一条交流母线上并联6类电源和一个可变负荷。火电、水电作为传统同步电源提供系统惯量和一次调频备量风电和光伏按最大功率跟踪方式运行并预留部分调频能力储能和电动汽车则是快响应调节资源兼顾一次和二次调频。选择单母线拓扑而不是多节点网络是因为调频研究的核心是频率—功率平衡关系不是潮流分布。多节点模型会把问题复杂化电磁暂态仿真步长小、耗时长调试起来也麻烦。做频率稳定性分析机电暂态的集中参数模型完全够用母线频率作为全局统一变量是合理简化。等调频逻辑验证完再往多节点模型迁移也不迟。1.3 一次和二次调频的配合逻辑这里值得多说一句。一次调频是比例控制系统惯量H决定了频率变化率下垂系数K决定了频率偏差的稳态大小。但比例控制必然有差所以负荷变化后频率会稳定在某个低于50Hz的值上比如49.9Hz。二次调频AGC是积分控制通过改变机组出力设定值把频率偏差慢慢拉回到零。这就是为什么AGC必须存在——没有它一次调频只能顶住不能恢复。所以整个模型的控制目标分两层第一层扰动发生后10秒内抑制频率跌落速度最低点频率不低于49.5Hz按国家标准通常要求不低于49.5Hz;第二层扰动发生后1分钟左右让频率恢复到50±0.05Hz以内。一次调频负责第一层AGC负责第二层。这两层之间通过频率反馈形成闭环但控制器参数绝对不能混用。2. 一次调频建模把每个电源的“本能反应”做出来2.1 火电机组调速器加汽轮机加同步机火电是整套模型的惯量基石。同步发电机直接提供机械惯量频率变化时转子动能自动释放或者吸收这是物理上的本能反应。Simulink里我用Simscape Electrical Specialized Power Systems库的同步电机模块配合Steam Turbine Governor模块搭火电单元。调速器本质是个比例控制器把实际转速和额定转速的偏差放大成调门开度指令再经过汽轮机各级蒸汽容积的惯性滞后最终变成机械功率变化。典型参数是调差率4%也就是频率变化4%时调门开度变化100%。对应的增益K1/0.0425倍。汽轮机用一个三阶传递函数表示高压、中压、低压缸的蒸汽容积时间常数大致是T10.3s、T20.5s、T31.5s左右的组合。这种简化不是偷懒而是频率稳定分析的标准做法。如果关心的是热应力、锅炉燃烧动态那得加锅炉模型但做调频汽轮机调速系统到机械功率输出的响应就够用了。火电有个天生劣势爬坡慢受到锅炉热惯性和金属热应力限制工程上一般每分钟只能调节2%到5%额定功率。这个约束我在二次调频部分用Rate Limiter模块体现。2.2 风电机组虚拟惯量与桨距角控制风电和光伏没有转动惯量直接耦合到系统频率上这是新能源调频的先天短板。风机的转子虽然有动能但通过电力电子变换器隔离频率变化时它看不见系统频率自然也不会自动释放动能。所以风机参与一次调频需要额外加控制虚拟惯量控制和桨距角控制。虚拟惯量控制的核心是给变流器有功指令叠加一个与频率变化率df/dt成比例的附加功率P_extra K_v * df/dt。频率快速下降时这个附加功率会把风轮的一部分旋转动能挤出来拖住频率跌落。Simulink里实现起来就是对一个频率信号做微分乘上系数再经过限幅叠加到有功指令上。注意微分环节容易放大噪声我习惯在微分前加一个一阶低通滤波器时间常数取0.1秒左右。桨距角控制则是更慢的调节手段。风机正常运行时桨距角在0度附近采用最大功率追踪MPPT要参与调频就得让桨距角向90度方向调节牺牲部分有功出力留出备用容量。实际做法是让风机运行在减载状态比如降额到90%出力留10%备用。一旦频率跌落通过桨距角调节把备用功率全部发出去。这里有个特别关键的点虚拟惯量是瞬时借钱借的是转子动能频率跌落初期有效但动能释放完就没了。桨距角是长期储蓄能持续提供额外有功但响应慢滞后好几秒。两种手段必须配合使用前者管初期的df/dt后者管稳态的出力抬升。只做其中任意一个仿真结果都会偏离实际。2.3 储能系统一阶惯性加下垂控制储能是这套系统里响应最快的资源功率指令到实际出力之间的延迟可以控制在几十毫秒到一两百毫秒。建模时我用一阶惯性环节近似PCS的响应P_out (1 / (T_s 1)) * P_refT取0.02秒。储能参与一次调频最经典的方式是P-f下垂控制和同步机的调速器本质一样f下降储能多放电f上升储能多充电。下垂系数怎么定假设储能额定功率100MW允许频率偏差0.5Hz对应满功率变化那么下垂系数K 100MW / 0.5Hz 200MW/Hz。如果系统等值调差率按5%算那在1000MW的基准下0.05Hz偏差对应50MW调频功率储能只需要分配合适的比例就行。特别需要注意的是储能SOC约束。荷电状态接近上限时无法再充电接近下限时无法再放电。我在储能模型里加了一个SOC计算模块基于初始SOC和功率积分并设置了10%到90%的运行区间。一旦SOC越界不管下垂控制怎么要求出力都被限幅拉回来。这个细节不做仿真长时间运行后储能功率会一直维持在极限明显不符合实际。2.4 水电机组水锤效应带来的反调特性水电调频和火电有个显著差异水锤效应。开大导叶后水流的惯性导致水轮机功率先朝反方向变化一下然后才真正上升。这个反调现象如果建模时忽略仿真结果会过于乐观。Simulink里水电用Hydraulic Turbine and Governor模块关键参数是水启动时间常数T_w通常在0.5到2秒之间T_w越大反调越明显。调速器是PID结构含有暂态下降系数b_p和缓冲时间常数T_d这些参数用来保证调节过程的稳定性。水电机组响应速度比火电快爬坡率一般可到每秒10%额定功率左右所以水电在AGC中也承担较快的调节分量。我调试时遇到过一个问题水轮机调速器参数按手册默认设置结果负荷突增后系统频率振荡持续了二三十秒才衰减。后来把暂态下降系数从0.3调到0.5缓冲时间常数从5s调到8s振荡才压下来。T_w大、调节系统增益高、缓冲环节作用时间短三者叠加就容易产生频率振荡这个组合务必留意。2.5 一次调频的配合效果把火电、风电、储能、水电都接到同一母线上后我给负荷加了一个20MW的突增阶跃。结果是这样的头2秒储能出力快速上升扛住了最陡的频率跌落风机依靠虚拟惯量也释放了一部分动能出力短暂上抬火电调速器在1秒左右开始动作出力爬升较慢要到5秒后才明显起来水电在反调一下之后出力也逐渐跟上。整个频率最低点出现在第3.5秒大概是49.68Hz满足49.5Hz的约束。这个结果表明了不同类型电源的一次调频配合逻辑储能负责秒级响应风机虚拟惯量负责早期支撑火电水电负责后续的持续出力。缺了任何一环要么频率跌落过深触发低频减载要么频率恢复时间拖得太长。3. 二次调频AGC建模让频率精确回到50Hz3.1 AGC信号从哪来ACE计算二次调频的基础是区域控制偏差ACEArea Control Error。孤立系统的ACE计算很简单ACE B * ΔfB是频率偏差系数单位MW/0.1Hz典型值取系统当前发电总量的1%到2%左右。比如系统总装机2000MWB取系统负荷的1%大约是20MW/0.1Hz转换成每Hz就是200MW/Hz。说明频率偏差0.1Hz系统认为有20MW的功率缺额需要弥补。对互联系统还要加上联络线功率偏差项ΔP_tie但单区域系统不需要。Simulink里ACE计算就是一个减法器加一个比例模块频率基准50Hz测量值和基准值相减得到Δf乘上B就得到ACE。之后ACE进PI控制器积分环节是关键只有它才能消除稳态偏差。PI输出就是区域的调节指令ARRArea Regulation Request单位是MW。3.2 控制器与指令分配策略AGC控制器我采用PI结构比例系数Kp取2左右积分系数Ki取0.1左右。这两个参数决定了AGC的响应速度和稳定性。Kp太大会导致指令震荡Ki太大会引起频率过冲太小则恢复太慢。实际整定时我先给Kp一个较小值比如1Ki从0.05开始试逐步加大到系统出现轻微振荡然后回退20%留出稳定裕度。PI控制器产生的ARR是总的调节需求需要分配到各台机组。分配策略我做了两种可以切换的方案第一种是等比例分配按各机组可用调节容量占比分配ARR第二种是按调节速度排序分配储能和EV优先承担快速分量火电水电承担慢速分量。对比下来第二种更贴近工程实际因为火电根本跟不上快速波动的AGC指令。分配逻辑用MATLAB Function模块实现。输入是ARR和各机组状态输出是各个机组的功率指令增量。模块里核心就一段代码先把ARR按优先级分配给储能和EV剩余部分再分给水电最后剩下的给火电。这里特别要注意单位换算ACC指令内部统一用MW转成标幺值时再除以各自的基准容量。3.3 风电与储能参与AGC的特殊性风电参与AGC有两种模式。第一种是功率备用模式风场降额运行留出备用容量AGC指令直接叠加在减载后的出力上相当于让风机当可调电源用。第二种是限功率模式正常满发不参与调节只有系统频率越限才响应。由于我们这个模型本来就让风机预留了10%的减载空间所以直接采用第一种模式AGC指令在减载点基础上叠加。储能在AGC里是调节的尖兵。我们把储能AGC通道的响应时间常数设为0.1秒限幅为正负50MWSOC约束照常生效。仿真里能清楚看到储能功率曲线频繁上下波动始终追踪ARR指令的快速变化部分。但要注意储能持续输出功率的时间有限不能让AGC积分一直把储能压到SOC边界。我在AGC分配逻辑里对储能指令做了SOC加权SOC越接近50%中间值分配越多接近边界分配越少。电动汽车EV聚合模型本质就是一堆电池的集合。建模时我用了一个等效聚合电池总容量设为200MWh最大充放电功率正负50MW参与AGC时响应时间常数0.5秒。EV和储能的区别在于EV的可用容量受用户行为影响但做稳态频率分析时先忽略这种随机性把它当成一个带SOC约束的快速储能资源就行。3.4 火电水电的爬坡率限制AGC指令虽然是连续的但火电和水电执行时都有物理限制。火电爬坡率取每分钟2%额定功率600MW机组就是12MW/min换算成秒大概是0.2MW/s。水电爬坡快取每秒1%额定功率。Simulink里Rate Limiter模块就能实现爬坡限制上升限速和下降限速分开设置。这里有个容易踩的坑Rate Limiter的限速单位是信号值每秒的变化量如果AGC信号是标幺值限速也得转成标幺值每秒而不是直接用MW/s。很多新手在这里搞混导致仿真里火电出力变化快得离谱完全违背物理规律。添加爬坡限制后AGC的整体响应慢了不少但更真实。我跑了一个60MW负荷突增的算例AGC在20秒后开始明显动作储能EV先出力水电在30秒内跟上火电到快60秒才完全到位。系统频率经历一次调频后的49.62Hz在90秒左右回到49.95Hz以上120秒稳定到50Hz附近。这个时间尺度和工程实际很吻合。4. 实操细节参数初始化与仿真配置4.1 全局参数如何初始化Simulink模型里的参数我全部放在一个MATLAB初始化脚本里模型中的模块参数通过变量名引用。这样改参数不用打开每个模块的对话框改一行脚本就行。脚本开头是系统基准值%% 系统基准 S_base 1000e6; % 基准容量 1000MVA f_base 50; % 额定频率 Hz H_sys 5.0; % 系统等效惯量常数 s %% 火电参数 S_T 600e6; % 额定容量 H_T 5.0; % 惯量常数 R_T 0.04; % 调差率 4% K_T 1/R_T; % 调速器增益 T_g 0.2; % 调速器时间常数 T_t [0.3 0.5 1.5]; % 汽轮机三缸时间常数 %% 水电参数 S_H 300e6; H_H 3.0; T_w 1.2; % 水启动时间 b_p 0.4; % 暂态下降系数 T_d 6.0; % 缓冲时间常数 %% 储能参数 S_B 100e6; % 额定功率 K_B 200; % 下垂系数 MW/Hz T_B 0.02; % PCS响应时间常数 SOC_0 0.5; % 初始SOC SOC_min 0.1; SOC_max 0.9; %% 风电参数 S_W 400e6; % 额定容量 reserve 0.1; % 减载备用比例 10% K_v 400; % 虚拟惯量系数 T_lp 0.1; % 微分滤波时间常数 %% EV聚合参数 S_EV 100e6; % 总容量100MW E_EV 200e6/3600; % 200MWh换算成Ws P_EV_max 50e6; % 最大功率50MW SOC_EV_0 0.5;参数设置有个总原则所有电源的下垂特性必须换算到同一个系统基准下比较。火电600MW、调差率4%对应的一次调频增益在系统基准1000MW下是600/1000/0.0415倍标幺增益。储能100MW、0.5Hz仓位对应200MW/Hz换算到系统基准是0.2标幺/Hz。只有统一基准控制器参数才有可比性。4.2 解算器与仿真时间设置调频仿真跨秒级到分钟级Simulink里我用变步长求解器类型选odel5最大步长设0.01秒相对容差默认1e-3。Simscape Electrical的特殊电力系统模块如果使用了电气元件实体模型需要采用基于相位的求解器或者phased solution。但我的模型把电气部分全用传递函数和受控源代替所以用普通ode45就能跑。仿真时长设180秒足够看完整过程前20秒观察一次调频动态中间20到100秒看AGC恢复过程最后留余量看稳态。虚拟惯量微分环节对步长敏感如果出现数值噪声把最大步长降到0.005秒基本能解决。Simscape Electrical的同步电机模块是电磁暂态模型仿真步长建议固定步长否则电机方程容易报错。如果采用电气模块解算器选ode23tb或者用离散求解器步长50微秒但这样180秒仿真会非常漫长。我建议的折中方案是验证同步电机特性用电气模型验证系统频率控制策略用简化模型二者分开建。4.3 场景设计三组扰动算例为了全面验证调频能力我一共设计了三个仿真场景。场景一负荷突增30MW持续运行。这个场景主要看一次调频的最低频率和AGC恢复时间。预期结果最低频率不低于49.6Hz120秒内频率恢复至50±0.02Hz。场景二风电出力波动模拟风速变化带来的功率随机波动。我给风电加上一个叠加了随机分量的功率序列波动范围正负40MW周期从几秒到几十秒不等。此时重点观察储能EV能否平滑波动AGC是否频繁动作。如果储能SOC合理火电爬坡次数会显著降低。场景三最大扰动场景负荷突增60MW同时风电出力因低风速下降30MW相当于总扰动90MW。这个场景同时考验一次调频深度和AGC的调节速度。频率最低点预期49.4Hz附近AGC恢复时间可能超2分钟但只要最终恢复稳定就算通过。每个场景跑完后我把频率、各电源出力、SOC、ACE等关键信号用To Workspace模块记录下来统一画在一张图上对比。5. 调试过程中踩过的坑与排查技巧5.1 仿真发散先查代数环和单位Simulink调频模型发散最常见三个原因代数环、单位不一致、控制器参数过大。代数环常见于把测量频率信号直接反馈给控制器的路径中间没有任何动态环节。解决方法是往反馈通道里塞一个很小的惯性环节比如1/(0.001s1)打断代数环时间常数小到不影响结果。单位不一致的问题更隐蔽。我在AGC模块里所有信号用MW到机组侧转标幺值一个不小心把火电的额定值600MW写成1000MW控制增益就变了1.67倍整个响应完全走样。排查方法很简单给每个信号接一个Display模块或者Scope关键支路标注单位和基准值。控制器参数过大导致的发散通常表现为高频等幅振荡或者指数发散。我把AGC的PI参数设置规范写成了一个迭代流程先设Kp0.5Ki0.02跑一遍看频率曲线是衰减振荡还是过阻尼再逐步增加Ki每次翻倍直到出现等幅振荡然后退回当前值的70%做安全裕度。5.2 频率恢复太慢问题往往在分配策略有一次仿真结果频率在90秒后还在49.9Hz徘徊没有继续恢复的意思。查了ACE信号发现PI输出正常问题出在分配策略上ARR主要分配给了火电而火电爬坡率限制太严导致AGC指令一直被限幅吃掉了。对策是把AGC指令做一个前馈分配把ARR分成低频分量和高频分量。低频分量给火电水电高频分量给储能EV。实现方式很简单ARR经过一个截止频率0.05Hz的低通滤波器输出给慢速机组原信号减去低通分量得到高频分量分配给快速资源。这样火电只管平滑的趋势储能EV去跟随波动部分整体恢复速度明显提升。5.3 数据记录技巧命中事件窗口180秒仿真全速记录数据会生成大量点Scope里挤成一团没法看。我习惯用Simulink的Data Inspector并设置多个数据点标记扰动发生时刻、频率最低点时刻、频率恢复稳定时刻。操作上我直接把Step模块的触发信号接一个Event模块输出到事件日志里。这样画图时可以明确标出关键瞬间写报告时不用手动去找时间轴。另外各电源的出力曲线、频率曲线、ACE曲线我全部分开存储分别命名f_sys、P_T、P_W、P_B、P_H、P_EV、ACE、AGC_cmd。到工作空间之后用一行代码统一画图figure; subplot(3,1,1); plot(t, f_sys); ylabel(Frequency (Hz)); subplot(3,1,2); plot(t, [P_T P_H P_W P_B P_EV]/1e6); legend(火电,水电,风电,储能,EV); ylabel(Power (MW)); subplot(3,1,3); plot(t, ACE/1e6); ylabel(ACE (MW));这样一次仿真三个子图频率、各电源出力、ACE趋势一目了然。5.4 模型加速与批处理仿真模型里最耗时的部分是同步电机电磁暂态模型。如果只是调频率控制参数可以把同步电机换成简化二阶模型用经典的摆动方程表示2H * dω/dt Pm - Pe。Simulink里用积分器搭一个单机等值模型跑起来飞快参数整定效率高很多。等整定完毕再换回完整模型做验证。批处理也很有用。我把要扫的参数写成数组用for循环跑多个仿真每次仿真前用set_param把不同参数写入模型跑完收集结果。比如扫描储能的K下垂系数从100扫到300步长50一共5组仿真看哪组频率恢复特性最好。这个流程跑一遍比手动改参数一个个试节约大量时间。写在最后这套模型从框架设计到最终验证前后花了将近三周中间踩过无数坑。最大的体会是调频仿真模型的价值不在于用了多先进的模块而在于建模的人对时间尺度、控制逻辑和物理约束的理解。储能快但容量小火电慢但容量大风电有能量但受桨距角限制水电有反调还得防振荡——这些特性全部吃透模型自然就立起来了。如果后续想继续扩展我建议往两个方向走一是接上多区域互联结构引入联络线功率偏差把单区域AGC升级成多区域AGC;二是加入风机更详细的机械载荷约束看虚拟惯量控制对塔筒载荷的影响。这两个方向都是目前工程上特别关注的点。最后分享一个小技巧任何调频模型先把纯火电系统的频率响应跑准确再逐步添加新能源和储能出了问题最容易定位。这个顺序我一直用到今天省掉了大量排查时间。
返回列表