
说实话这两年新能源占比一高电网频率调节的仿真需求明显变多了。我接触最多的就是用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的仿真实现那又是一个新话题了。