说实话,这两年新能源占比一高,电网频率调节的仿真需求明显变多了。我接触最多的就是用Matlab/Simulink搭风光火储联合调频模型,从一次调频到AGC二次调频,从风机、储能到电动汽车聚合,整套链路跑通的人不少,但能把模型搭得既符合物理又方便调参的人真不多。这篇博文我就把这两个模型从架构到参数、从初始化到调参的完整思路写出来,主要是给做电力系统频率稳定研究的同学和刚接触多能源调频仿真的工程师一个可以直接参考的路线。
1. 一次调频和二次调频在模型层面到底差在哪:搭模型前必须想清楚的事
很多人一上来就把所有机组、所有控制环节塞进一个大模型里,结果仿出来的波形要么发散,要么看不出是谁在起作用。我的建议是先想清楚一次调频和二次调频在模型里是两种完全不同性质的东西,然后再动手。
1.1 时间尺度决定模型深度
一次调频是本地自动响应,电网频率一旦偏移,各机组通过调速器、逆变器控制直接动作,反应时间在秒级以内。二次调频则是调度中心基于AGC(自动发电控制)的集中指令调整,目标是消除稳态频率偏差和区域间交换功率偏差,动作时间从几十秒到几分钟。
这意味着在Simulink里,一次调频模型重点关注扰动发生后10到30秒的动态过程,而二次调频仿真至少要看300秒甚至更长的变化趋势。时间尺度不同,模型里的惯性环节参数、控制器采样周期、积分时间常数都完全不同,混在一起必然互相干扰。
1.2 信号源和控制链路不一样
这是很多人容易忽略的地方。一次调频的输入信号是机端本地频率,控制回路是“频率偏差→调速器/逆变器→功率指令”,全程不需要通信。AGC二次调频的信号链路则长得多:先由调度端计算区域控制偏差ACE,再经PI控制器生成区域调节需求,再按分配系数下发给各机组,机组收到指令后跟踪执行。
所以我的做法是分两套模型来搭:先搭好一次调频的“机组+本地控制”模型,验证每台机组的响应特性正确;再在此基础上叠加AGC二次调频外环,把通信延时、指令分配这些逻辑加进去。这样做的好处是,仿真出问题时你能立刻定位是哪个环节引起的,而不是在一堆交错的信号线里大海捞针。
2. 风光火储一次调频的Simulink建模:机组响应特性与附加控制
一次调频仿真的核心在于各类电源的响应特性差异。火电有原动机惯性,风机因为变流器解耦原本不响应频率,光伏要靠降载运行预留功率,储能则可以做到毫秒级出力。下面我按每类电源拆开讲。
2.1 火电机组调速器:系统调频的“压舱石”
火电调速器是一次调频里最基础的环节。在Simulink里常用的简化结构是:频率偏差信号先经过调差系数R形成功率增量指令,再经过一阶惯性环节模拟调速器和汽轮机的响应过程,最后加上出力限幅。
调差系数R的典型取值在0.03到0.05之间(标幺值),它决定了同样频率偏差下机组出多少力。R越小,同频率偏差下出力越多,稳态频率偏差就越小;但R太小容易引起系统振荡。汽轮机环节的时间常数一般取0.2到0.5秒,我这里常见取0.3秒左右。机械功率限幅是很多人容易漏掉的环节,火电出力有上下限,特别是锅炉侧还有爬坡速率限制,这些在第一次仿真时最好都加上,不然后期叠加AGC时会出现“指令给了,实际出力跟不上”的问题。
2.2 风机一次调频:变流器解耦下的虚拟惯量与下垂
风电的一次调频建模是最容易出问题的地方。由于风机通过变流器并网,转子转速与电网频率已经完全解耦,风机对频率变化天然没有响应。这跟火电完全不同,火电是“频率降了,转速跟着降,调速器自然甩出力”,风机被变流器隔开了,必须人为加附加控制。
常用的附加控制有两路:一路是虚拟惯量控制,即频率变化率乘以一个增益系数形成功率增量;另一路是下垂控制,即频率偏差乘以一个下垂增益形成稳态功率增量。在Simulink里就是把这两个信号叠加到风机功率指令上,再加一个一阶惯性环节模拟变流器响应。
需要特别注意的是,虚拟惯量控制只在频率变化过程中起作用,频率恢复稳定后它会归零,也就是说它只能抑制频率变化率,不能让频率恢复。所以真正兜底的是下垂控制那一路。风机转速过低时机械功率受限,附加指令再大风力机也拿不出功率来,模型里要加转速保护逻辑,不然低频事件时仿真结果会特别乐观。
2.3 光伏的降载运行与储能的快速下垂
光伏要参与一次调频,前提是有备用容量。正常运行在MPPT最大功率点附近的光伏,频率跌落时是没有任何增发能力的。所以建模时要让光伏降载运行,比如运行在最大功率点以下20%的功率水平,这样频率降低时可以增发,频率升高时可以减少出力。在Simulink里通常用光伏出力参考值乘以一个降载系数,再根据频率偏差反向调整功率参考值。
储能是风光火储里响应最快的一环,PCS逆变器的时间常数只有几十毫秒。我做储能一次调频控制时一般用下垂控制加SOC管理:下垂给出的功率指令必须跟当前SOC联动,SOC过低或过高时逐步限功率。具体做法是给SOC设置一个上下限区间,在区间内正常下垂,越界后按比例削减功率指令。这个问题在下一章AGC建模时还会放大,因为二次调频是分钟级持续出力,SOC耗尽导致储能退出的情况非常容易出现。
3. 二次调频AGC仿真链路:从ACE计算到多机组指令分配
AGC二次调频与一次调频的本质区别在于它的控制目标是消除稳态偏差,因此必须有积分作用,必须有全局信号,必须处理多机组之间的指令分配。这一整条链路在Simulink里其实不复杂,但每个环节都有容易忽略的细节。
3.1 ACE与区域控制偏差的Simulink实现
ACC(这里应为AGC)的输入信号是区域控制偏差ACE,定义是:
ACE = ΔPtie + B × Δf
其中ΔPtie是联络线交换功率偏差,Δf是频率偏差,B是区域频率偏差系数,单位是MW/0.1Hz。这个式子里的B要跟系统规模匹配,通常取区域自然频率特性的估算值,比如一个100MW等值负荷的区域,B大概在10 MW/0.1Hz这个量级。
在Simulink里实现ACE计算就是两个求和放大环节:频率偏差信号乘B,联络线偏差信号直接相加。这里特别要注意单位换算,频率偏差如果以Hz为单位而B以MW/0.1Hz为单位,必须把频率偏差乘10。这个换算错误我见过很多人栽跟头,表现就是AGC增益明明很大,频率稳态误差却迟迟降不下去。
3.2 AGC控制器与机组分配策略
AGC控制器在工程上通常是一个离散PI控制器。由于AGC指令的刷新周期一般4到8秒一次,Simulink里要用零阶保持器模拟这个采样过程,然后接离散PI控制器。积分环节是AGC的核心,没有积分作用就无法消除稳态频率偏差。
AGC的PI参数整定跟普通闭环控制不太一样。比例增益产生即时调节分量,过大会导致机组频繁往复调节;积分增益决定稳态误差消除速度,过大会引起频率振荡。我的经验是先设一个较小积分增益(比如0.05),仿真观察300秒内的频率恢复情况,再逐步加大,找到振荡临界点后回退到临界点的三分之一左右。
PID调节后的区域控制需求还要分配到各机组。分配策略我一般按机组类型分三档:水电和储能响应快,分到快速调节分量;火电爬坡慢,分到缓慢的基荷调节分量;电动汽车聚合体响应极快但容量有限,作为短时功率替补。Simulink里通过一组分配系数和各机组的调节功率上限来限制指令量,机组跟踪环节则是一次调频模型的复用——指令增量加到各机组的功率参考上。
3.3 电动汽车V2G聚合模型:一个容易被低估的活性组分
电动汽车参与二次调频是近年比较火的方向,它的特点就一个字:快。单辆车的充放电切换在百毫秒级,比水电的秒级响应还要快一个数量级,但单体容量小,必须聚合建模。
聚合电动汽车模型在Simulink里可以简化成一个等效储能池:总可调容量由参与V2G的车辆数量和平均剩余电量决定,充放电功率受聚合后SOC上下限限制,同时加上一个通信和指令执行的纯延时环节。很多论文里直接用一个一阶惯性环节加SOC限幅代替,工程上做前期研究足够了。
这个模型的坑在于SOC一致性。所有车辆同时充电时,聚合SOC快速上升,到达上限后整个聚合体的放电能力会被限制。实际车辆是随机接入和离开的,等效SOC变化比单一池模型平滑得多。如果仿真运行时间超过15分钟又不考虑车辆随机性,聚合池会提前到达SOC边界,频率恢复效果比实际偏悲观。合理做法是给等效SOC加一个随机波动项,或者把可调度容量设得保守一些。
4. Simulink里搭多能源调频模型的架构配置:基准值、求解器与初始化
模型搭到一定程度你会意识到,真正决定仿真成败的往往不是控制逻辑本身,而是Simulink工程的架构配置。基准值不统一、求解器选错、初始化姿势不对,这三个问题几乎能解释九成以上离奇的仿真现象。
4.1 功频小信号模型 vs 电磁暂态模型:选型要看研究目标
很多新手习惯一上来就用SimPowerSystems搭建完整电气模型,包括三相变压器、IGBT换流器、PWM调制,仿真步长不得不放到微秒级,一个300秒的AGC仿真要跑好几小时。实际上,研究一次调频和AGC二次调频时,频率动态属于机电暂态范畴,完全可以用功频小信号模型代替电磁暂态模型。
功频模型的思路是:不考虑电压波形、忽略换流器开关过程,只保留功率平衡方程和转子运动方程。同步发电机用摇摆方程(2Hdω/dt = Tm - Te)表示,逆变器用一阶惯性加限幅表示,负荷用静态频率特性表示。这样整个系统在Simulink里就是一堆传递函数连线,仿真步长可以放到0.001秒级别,效率高出几个数量级,而且频率响应的本质特征一点不少。
4.2 标幺值与惯性常数的折算细节
多能源系统建模最大的统一难题是基准值。各机组额定容量不一样,如果不统一折算到同一个系统基准值下,调差系数和惯性常数会失真。
折算公式很简单:设原机组额定容量为S1,基准惯性常数为H1,系统基准容量为S_base,那么折算后的H = H1 × (S1 / S_base)。单台30MW风机以自身容量为基准时H可能取2秒,折算到100MVA系统基准后变成0.6秒,对系统频率变化率的贡献明显小了一截。调差系数R同理,必须乘上容量比折算到系统基准。Simulink里的每个增益都要写清楚是以哪个基准计算的,我在模型中习惯把折算公式直接写在Gain模块注释里,避免后面调参时被自己绕晕。
4.3 求解器设置与初始化
多能源模型的数学特性是刚性的,因为储能时间常数很小(0.05秒量级),而水电调节时间相对较长。变步长求解器里我推荐ode23tb,相对误差设1e-3或1e-4,仿真100秒不会出现明显的数值阻尼。固定步长求解器除非确有必要(比如和外部硬件交互),否则不推荐,因为频繁调小步长会把仿真效率拖到不可接受。
初始化问题比很多初学者想的严重得多。直接在零初始条件下跑,系统一开始就有巨大的功率不平衡,频率会快速跌到保护动作范围,然后整条曲线都变得没有物理意义。正确做法是先算稳态运行点:负荷总功率、各机组出力和频率都设为额定值,让模型在扰动前就处于平衡状态。对储能还要设置合理的初始SOC(一般50%左右而不是100%,留出充和放双向空间),这样扰动后的响应才真实。
5. 仿真调参实录:什么参数真正决定调频效果
模型能跑起来之后,真正的技术活开始了:调参。我这里说说最影响调频效果的几组参数,以及我实际调整时的“手感”。注意,下面参数基于一个100MVA基准、包含30MW风机、20MW储能、50MW火电和10MW水电的小型等值系统,具体数值会因系统规模不同而变,但规律是通用的。
5.1 惯性常数与频率变化率
频率变化率RoCoF直接由系统等效惯性决定。单机频率响应的小信号方程是2H_sys × df/dt = ΔP,频率初始变化率等于功率缺额除以二倍系统惯性。新能源渗透率越高,系统等效惯性越小,同样负荷突变下频率跌落越快。
在Simulink里检验这个关系的办法很直接:保持功率缺额不变,把系统等效惯性常数设为6秒和3秒各跑一次,观察扰动后第一秒内的频率斜率,后者约是前者的一倍。风电虚拟惯量控制本质上就是给系统“补惯性”,所以它的增益大小直接影响频率最低点出现的早晚和深度。我调试时先调这个参数,因为它决定频率最低点会不会触碰低频减载门槛。
5.2 调差系数与下垂系数怎么定
一次调频后的稳态频率偏差由所有参与一次调频机组的等效下垂决定。火电R取0.04,储能的P-f下垂按自身容量标幺也取3%-5%,如果全部机组都按自身容量5%调差,则系统稳态频率偏差是一个可直接计算的量:Δf_ss = -ΔP × R_eq × f0,其中R_eq是容量加权后的等效调差系数。
有一类现象特别值得注意:储能下垂增益调得过大时,储能会在一次调频阶段短时间超发,随后因SOC过快下降而在二次调频阶段提前退场,表现为“先撑住、再垮掉”的频率二次跌落。这不是控制逻辑问题,而是下垂系数与储能容量不匹配。解决方式是把储能下垂系数放在火电调差系数的2到3倍(等效响应更快),但配合SOC限幅把持续出力时间控制在30秒以内。
5.3 AGC积分增益的整定手感
AGC积分增益的整定是二次调频仿真的核心体验。我还记得第一次把积分增益从0.05调大到0.2时,300秒仿真里的频率不再平缓恢复,而是出现了周期约40秒的明显振荡。原因在于积分增益太大,补偿信号在火电爬坡还没跟上时就反向调整,等火电上来后形成过调——典型的“超调-回落-再超调”循环。
我的整定流程分三步:第一,固定比例增益,把所有机组的AGC分配系数设成同样快速响应的暂态参数;第二,从积分增益0.02起跑,逐步翻倍,观察频率稳态误差消除速度和超调量;第三,找到振荡临界增益后,取临界值的三分之一作为工作点,通常能兼顾响应速度和稳定性。如果第二、三档机组(火电、EV)响应差异太大,需要在分配环节加一个惯性平滑,给快速机组分到的指令设一个变化率上限。
下表是我在同一系统下改不同参数得到的大致结果,供大家感受变化趋势:
| 参数调整 | 频率最低点 | 稳态恢复时间 | 现象备注 |
|---|---|---|---|
| H_sys 从6s降到3s | 更低、更早 | 基本不变 | RoCoF明显增大 |
| R从0.05降到0.03 | 略有抬高 | 缩短 | 一次调频出力增大 |
| 储能下垂增益加倍 | 明显抬高 | 视SOC而定 | 可能引发二次跌落 |
| AGC积分增益0.05→0.2 | 影响不大 | 缩短但超调大 | 系统出现周期性振荡 |
6. 我踩过的坑:这些报错和现象最容易让新手怀疑人生
多能源调频模型涉及的环节多,报错和“假正常”的情况比单机模型多得多。下面几个坑我前后都踩过,写出来给大家省时间。
6.1 储能SOC限制引发的“二次跌落”
这是我见过最多的一种隐蔽问题。我最早调试AGC模型时,储能初始SOC设了100%(想着电量充足能多出力),一次调频阶段储能按指令放电,频率恢复得还行。可是一进入二次调频阶段,储能因SOC低于下限被切除,AGC分配给储能的指令全部落空,频率在恢复途中又下滑,形成“一次调频管用、二次调频失效”的悖论现象。
排查这种问题的第一步不是改控制逻辑,而是把储能SOC曲线和出力曲线画在同一张图里,看切除时刻是否与SOC越界时刻对齐。模型中必须把SOC饱和判断放在功率指令之前,做一个带滞回的逻辑:低于下限时闭锁放电、只允许充电;高于上限时闭锁充电、只允许放电。初始SOC设在50%到70%之间,给双向调节都留足空间。
6.2 多机组基准值不统一的数据陷阱
有一次我搭好模型,仿真曲线看着非常正常:负荷突增,频率下降到最低点后恢复,各机组出力都有响应。但后来我核对数值时发现,火电的惯性常数写的是5没错,风机却写成了2——问题是风机的2是按自身30MW容量取的,而全系统基准是100MVA,实际折算后应该是0.6。这个错误没有让波形发散,因为所有控制增益都是按比例放大或缩小的,曲线形状相似,但物理意义上系统的频率变化率被系统性地低估了。
这种错误最坑人的地方就是“看起来完全正常”。我的办法是在模型里写一张参数表,每个机组都注明额定容量、系统基准、原始参数、折算参数四列,折算后的数值放进去。另有一个快速校验方法:单独让每个机组投切一个固定功率缺额,记录频率稳态偏差,用下垂关系反算等效R,跟理论值对不上就有问题。
6.3 锅炉限幅与爬坡约束导致的AGC过调
AGC分配策略如果忽略火电的爬坡能力,二次调频的响应会出现周期性过调。我用过一个系统:火电自动发电控制分配了20MW调节指令,但火电爬坡能力只有每分钟8MW,实际出力习惯性地跟不上,积分器却一直在累积偏差,等到火电终于爬到目标附近时,频率已经超调,积分器再反向调节,形成了缓慢的振荡。
解决这个问题的思路不是调小积分增益,而是让分配器“知道”机组的爬坡上限。在Simulink里我是把爬坡限幅前置到分配环节,即先把各机组AGC指令按各自爬坡能力归一化,超过能力的分量自动转到储能和电动汽车两个快速通道。这样火电指令始终在物理可达范围内,积分器也不会因为指令“够不到”而持续累积。火电锅炉响应再慢一点的话,还可以给锅炉侧单独加一个Rate Limiter,配合调速器模型一起整定。
我个人在实际建模和仿真中感受最深的一件事是:多能源调频模型的问题几乎很少出在控制理论层面,绝大多数是基准值、限幅、SOC状态、爬坡约束这些“工程杂项”在捣乱。你把每一处限幅和状态约束都当成真实现场来对待,模型就离“可信”不远了。这篇博文里所有参数和流程都是在100MVA等值系统上验证过的通用做法,大家拿到自己的系统里记得按容量折算后再用。后续如果有兴趣,我还可以写写如何把这份Simulink模型和实际AGC系统对接,以及调频性能评估指标(如CPS1、CPS2)的仿真实现,那又是一个新话题了。