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

文章详情

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

基于Simulink的光储联合系统削峰填谷能量管理仿真实战解析

基于Simulink的光储联合系统削峰填谷能量管理仿真实战解析 做过光储联合系统仿真的人都知道这活儿看着是建模核心其实是把能量管理思路落进Simulink那一堆方框和连线里。最近我把一套基于Simulink的光储联合系统削峰填谷能量管理仿真完整跑了一遍从容量配置、策略设计到模型搭建、参数调优都过了一遍收获不少也踩了不少坑。这篇就围绕这个项目做一次详细的复盘把思路、做法、参数、报错处理都摊开讲希望能给正在做或者准备做类似仿真的朋友一点参考。先交代一下这个项目是干什么的。光储联合系统就是把光伏阵列和储能电池组合起来再加上并网逆变器和控制系统通过能量管理策略在电网负荷高峰时放电、低谷时充电达到削峰填谷的目的。用Simulink做这套系统的仿真可以验证控制逻辑、评估配置容量、观察SOC变化和并网功率曲线不需要搭真实设备成本低且迭代快。适合电力电子、新能源方向的研究生、工程师以及想入行微电网和储能调度的朋友参考。这是一篇纯实操经验分享我会从方案选型、容量计算、策略设计、建模步骤到问题排查逐步展开尽量给到可以直接用的参数和逻辑而不是空谈概念。1. 项目核心思路与方案选型1.1 为什么选光储联合而不是单纯储能削峰填谷这个需求本身不复杂储能系统在谷时充电、峰时放电就能完成。但实际项目里几乎没人只上储能原因很简单光伏和储能的功能是互补的。白天光伏出力高而负荷高峰往往在上午和傍晚到夜间光伏最高出力时段和负荷高峰有一定错位。单独上光伏中午的发电量用不完就要上网卖低价电傍晚高峰时又发不出电单独上储能充电来源全靠电网谷时买电存起来、峰时放电赚的是峰谷价差但没有自己的发电资产。把两者联合起来光伏余电先给储能充电不够再向电网买峰时段储能放电优先供给本地负荷光伏同时出力能够全面提高系统对负荷的支撑能力。在Simulink里做联合仿真还能直接观察光伏出力变化对储能充放电节奏的影响这是单一储能模型做不到的。1.2 为什么用Simulink做这套仿真做电力电子和电力系统仿真主流选择无非是Simulink/Simscape、PSCAD、DIgSILENT、Matlab脚本等。这个项目最终选了Simulink核心原因是三个方面。第一Simulink的Simscape Electrical库对光伏、电池、电力电子变换器、并网逆变器、电网端口的封装非常完整光伏阵列可以直接用PV Array模块电池有Battery模块逆变器、滤波器、变压器等都有现成模型不需要从零搭建微分方程。第二能量管理策略用MATLAB Function、Stateflow或者S-Function都能方便地嵌进模型里规则逻辑直接编写和连续系统仿真无缝耦合。这一点比纯PSCAD那种面向电磁暂态的软件更适合做长时间尺度的能量调度仿真。第三调试体验好。仿真过程中可以实时观察SOC、直流母线电压、并网功率等波形参数原地改了就能重跑不会像有些仿真平台改个参数要重新编译半天。1.3 方案选型时需要考虑的几个问题建这套模型之前我建议先想清楚几个前提条件否则很容易做了半天发现方向不对。仿真时间尺度要明确。削峰填谷关注的是小时级别的功率变化但光伏MPPT、并网逆变器控制又是毫秒级甚至微秒级的动态。如果全部按微秒级步长跑24小时除非你的机器性能极其强悍否则仿真时间无法接受。常见的处理是时间尺度缩放比如用1秒仿真时间代表1小时物理时间把电磁暂态部分适当简化只保留功能层面的特性。这个取舍后面建模章节会展开讲。控制层级要分层。底层是电力电子器件的驱动控制比如Boost的MPPT控制、双向DC/DC的恒流充放电控制、逆变器的dq电流内环控制上层是能量管理调度层负责根据时段、SOC、负荷情况发出储能功率指令。两层分开设计调试的时候可以逐层验证不然两个问题混在一起根本查不出原因。容量配置要在建模之前先粗算一遍。很多第一次做的人上来就搭模型然后随手设一个电池容量结果仿真完发现削峰填谷根本没有效果再回头改电池参数和策略参数非常浪费时间。正确的顺序是先根据负荷曲线和削峰目标算出储能功率和容量范围再搭模型验证。2. 系统架构与容量配置详细拆解2.1 光储联合系统的整体拓扑模型结构方面我采用的是目前工程上最常见的拓扑光伏侧经过Boost变换器接入直流母线储能电池经过双向DC/DC变换器接直流母线直流母线再经过三相电压源型逆变器VSC并网交流侧连接LCL滤波器、隔离变压器和电网/负荷模型。这套拓扑的好处在于解耦清晰。Boost只管把光伏的电压抬到直流母线电压并做MPPT双向DC/DC只管储能充放电电流方向和大小的控制逆变器只管直流母线和交流电网之间的功率传输。三个功率变换环节各自有独立控制环中间通过直流母线电压联系起来能量管理层的指令只下发到储能双向变换器和逆变器有功参考值上逻辑层次非常干净。直流母线电压我设为800V。光伏侧额定电压选了360V左右Boost升压比约2.2倍占空比大约0.55比较合理。储能电池额定电压选择600V通过双向Buck-Boost与800V母线连接充放电时变换器工作模式不同但控制目标都是电流闭环。2.2 负荷曲线与削峰填谷目标设定容量配置要有依据第一件事是拿到或者构造一条典型的日负荷曲线。我这次用了一条模拟的工业园区日负荷曲线夜间负荷大约200kW白天从8点开始上升午间到450kW左右下午略有回落傍晚18点到21点达到全天高峰约600kW之后逐步下降。峰谷差就是600减200等于400kW。如果目标是削峰率20%峰时需要削掉的功率就是600乘以20%等于120kW填谷率也按类似水平考虑储能额定功率至少要覆盖120kW工程上还要留裕量我最终取150kW。填谷侧的功率需求要结合谷时段时长和可充入电量来算。谷时段定义为23点到次日7点共8小时。假设谷时最低负荷200kW填到240kW填谷功率40kW。这样算下来充入电量的下限是40kW乘以8h等于320kWh。峰时段放电需求更关键如果把傍晚高峰的120kW支撑3个小时那么要求电池可放出的电量至少是360kWh。再考虑到不能过放到SOC下限我设为20%电池总可用容量应为360除以0.7约等于514kWh取整后配到600kWh比较稳妥。实际建模中Battery模块的容量参数是按Ah配的。直流侧额定电压600V600kWh对应容量就是600000Wh除以600V等于1000Ah。这样一个参数定下来后面的仿真就基本有底了。2.3 分时电价时段划分对策略设计的影响削峰填谷的收益模型依赖分时电价。我模拟了一套典型的工商业分时电价规则谷时段23点到7点电价较低平时段7点到10点、15点到18点、21点到23点峰时段10点到15点、18点到21点。有些地区还细分了尖峰时段比如19点到21点。时段划分直接影响能量管理策略的判断条件所以仿真模型里要做一个时间标志模块把当前仿真时间映射到对应时段编号1代表谷、2代表平、3代表峰。这个时段编号作为上层策略的主要输入之一。有一个细节值得注意时段切换的瞬间储能功率指令会发生跳变如果直接硬切换功率波形会出现尖刺甚至引起直流母线电压波动。我处理的方式是功率指令不直接突变而是接入一个速率限制器Rate Limiter让储能功率参考值在设定时间内斜坡过渡。实测下来这个斜坡时间取60秒左右比较合适既不会让SOC响应变慢也能有效避免并网功率曲线的毛刺。3. 能量管理策略设计从控制规则到Simulink算法实现3.1 能量管理策略的总体思路削峰填谷的能量管理策略核心是一套规则表。光伏优先满足本地负荷剩余功率优先给储能充电再多余就并网负荷大于光伏出力时储能按需放电补充再不够才从电网取电。这个逻辑看似简单但要落到Simulink里执行需要把它改写成明确的模式判断和功率指令计算流程。我定义的运行模式有5种。谷时段且SOC低于上限时储能按设定功率充电光伏出力全部供给本地负荷多余光伏功率可以并网送电谷时段但SOC已经充到上限附近储能停止充电维持待机。平时段系统以光伏跟踪负荷为主储能基本不动作除非SOC过低需要从电网补电维持底线或者光伏大发且负荷低刚好可以把多余光伏存进电池。峰时段且SOC高于下限时储能按设定功率放电配合光伏支撑负荷目标是把并网功率限制在削峰目标值附近峰时段但SOC已经放到下限储能退出系统转入电网直接供电模式。这里面最核心的一个原则就是储能不能同时充放电光伏功率优先本地消纳。这两个原则在代码里要变成优先级判断不然运行中会出现逻辑冲突。3.2 SOC边界管理与安全裕度设置SOC边界是能量管理策略里最不能含糊的地方。仿真里如果SOC越界Battery模块本身可能报错更重要的是策略需要保证在连续多天运行中SOC不会漂移。我设置的SOC工作范围是20%到90%上限不设到100%下限不设到0%都是为了给控制留出反应余量。上限90%的逻辑依据是如果SOC充到95%以上电池端电压升高恒流充电阶段结束后进入恒压充电阶段充电电流会自然减小如果策略还按恒功率指令充电实际电流跟不上指令值容易在该阶段产生振荡。下限20%的逻辑依据是电池接近空电时内阻增大、端电压跌落明显如果此时还大功率放电直流母线电压可能被拉低影响逆变器正常工作。在Simulink里实现边界管理我给充放电指令分别设置了滞回区间。充电停止阈值设为SOC大于等于88%重新允许充电的阈值是小于等于85%放电同理停止放电阈值设为SOC小于等于22%重新允许放电的阈值是大于等于25%。这个滞回区间就是专门防止SOC在边界附近来回抖动导致储能频繁启停。调试过程中我发现如果不加滞回SOC到90%后策略几乎每秒都在充电和待机之间切换波形难看得没法看加了5%左右的滞回区之后系统立刻稳定下来。3.3 功率指令分配的MATLAB Function实现能量管理策略我用MATLAB Function模块实现。模块输入包括当前时段标志、SOC、光伏实时功率、负荷实时功率输出储能功率参考值、并网功率参考值以及当前运行模式。代码如下function [P_sto_ref, P_grid_ref, mode] EMS(period, SOC, P_pv, P_load) % period: 1谷, 2平, 3峰 % SOC: 0-1 % P_pv: 光伏功率(kW, 正) % P_load: 负荷功率(kW, 正) % P_sto_ref: 储能功率(kW, 正为充电, 负为放电) % P_grid_ref: 并网功率(kW, 正为从电网吸收) P_sto_max 150; % 储能最大功率 kW SOC_high 0.90; % 充电上限 SOC_low 0.20; % 放电下限 P_grid_target 480; % 削峰目标功率 kW if period 1 % 谷时段: 储能充电 if SOC SOC_high P_sto_ref P_sto_max; else P_sto_ref 0; end P_grid_ref P_load - P_pv - P_sto_ref; mode 1; elseif period 2 % 平时段: 优先光伏消纳 if P_pv P_load SOC SOC_high P_sto_ref min(P_pv - P_load, P_sto_max); elseif P_pv P_load SOC SOC_low 0.05 P_sto_ref max(P_pv - P_load, -P_sto_max); else P_sto_ref 0; end P_grid_ref P_load - P_pv - P_sto_ref; mode 2; else % 峰时段: 储能放电削峰 if SOC SOC_low P_sto_ref min(P_pv - P_load (P_load - P_grid_target), 0); P_sto_ref max(P_sto_ref, -P_sto_max); else P_sto_ref 0; end P_grid_ref P_load - P_pv - P_sto_ref; mode 3; end % 功率指令限幅 P_sto_ref max(min(P_sto_ref, P_sto_max), -P_sto_max); if P_grid_ref 0 P_grid_ref 0; % 不考虑向电网倒送功率 end end这个策略里峰时段的放电指令算法值得解释一下。它的思路是先计算如果不削峰并网功率是多少也就是负荷减光伏然后看它比削峰目标480kW高出多少这部分差额就是要由储能填补的缺口。所以储能放电参考值就是原始缺额与负荷功率的差最终限制在最大放电功率以内。这里有个容易犯的错有些初学者直接写峰时段储能按最大功率放电结果负荷低谷时段也在全功率放电造成SOC快速耗尽后面真正需要削峰时反而没电了。正确的做法必须基于负荷缺额计算储能放电功率跟随实际缺口不能拍脑袋恒定满放。这段代码在实际运行中配合斜坡限制和滞回逻辑全天SOC曲线能从23点开始由20%逐步充到接近90%峰时段再逐步放回30%左右整体曲线平滑可控。3.4 模式切换时的滞回与斜坡限制前面提到滞回区间这里再展开讲一下具体配置方法。SOC滞回我用的是几个比较常量在MATLAB Function里定义。充电滞回当SOC从低往上升达到88%时停止充电但当SOC从高往下降降到85%以下才重新开始充电。放电滞回当SOC从高往下降降到22%时停止放电从低往上升超过25%才重新开始放电。这两个区间的设置多出3个百分点仿真中能明显看出对模式抖动次数的抑制效果。跑24小时仿真如果不加滞回模式切换次数可能达到几十次甚至上百次加了之后稳定在十几次以内基本都是时段切换带来的正常切换。斜坡限制我是在MATLAB Function的输出端加了一个Rate Limiter模块充电速率设为2kW/s放电速率也是2kW/s。这样最大150kW的功率变化需要75秒完成时间尺度上完全可控。实际运行中早晨7点谷转平时段储能从充电切到待机功率曲线是斜坡下降而不是跳变并网功率波形因此非常干净。4. Simulink建模仿真全流程实操4.1 光伏子系统建模与MPPT参数设置光伏系统建模我直接使用Simscape Electrical Specialized Power Systems库中的PV Array模块。参数配置上选用了额定功率100kW的光伏阵列。模块内部需要填并联串联数、每个组件参数、光照和温度输入等。光照我设了一个波形模拟一天中从0到1000W/m²再回落的曲线温度设为恒定25摄氏度。MPPT算法采用了扰动观察法PO在Simulink里用MATLAB Function实现采样时间设为0.01s扰动步长设为母线电压参考值的1%。Boost变换器电流内环用PI控制器电压外环跟踪MPPT给出的参考电压。PI参数我是先断开光伏侧在额定工作点用小信号扫频方法粗略整定的电流内环Kp为0.5Ki为20电压外环Kp为0.1Ki为5。Boost变换器的硬件参数我设为电感5mH直流侧电容2000μF开关频率10kHz。实际仿真中占空比在0.5到0.65之间波动对应光照从低到高的变化过程。需要特别提醒的是PV Array模块在光照剧烈变化时输出会有短时凹陷如果此时Boost控制参数不那么合理直流母线电压会产生10V左右的波动这个波动会传导到并网功率波形上需要在后续观察并网功率时留意区分到底是MPPT问题还是并网控制问题。4.2 储能电池与双向DC/DC变换器建模储能电池选用Simscape Electrical的Battery模块类型设为Lithium-Ion。额定电压600V额定容量1000Ah初始SOC设为50%响应时间参数设为30s。响应时间这个参数很多人不看但它在长时间仿真里影响较大它模拟了电池内阻和电化学响应设得太小会放大电流瞬变太大则SOC变化曲线显得迟滞。双向DC/DC变换器建模为理想开关构成的Buck-Boost电路。控制目标就是恒流充放电通过电流内环控制电池电流跟踪能量管理层给定的P_sto_ref除以电池端电压得到的电流参考值。充电模式时变换器工作在Buck模式放电模式工作在Boost模式模式切换由电流参考方向的符号决定。这里有个控制层面的坑电流PI的正负方向必须在切换时保持一致不能让比例积分项在充放电切换瞬间产生跳变。我的做法是在积分器输出加限幅并且限制范围正负对称同时电流环PI参数设为Kp为0.8Ki为15。实际测试中充放电切换瞬间电流过渡时间大约20ms直流母线电压最大波动约15V完全在可接受范围内。4.3 并网逆变器与LCL滤波器参数设计并网逆变器采用三相两电平VSC控制策略是电网电压定向的PQ控制。核心是dq坐标系下的电流内环和直流母线电压外环双闭环。PLL用来锁定电网相位参数配了带宽100Hz阻尼比0.707。电流内环的PI参数设计需要依据逆变器侧电感值。我用的LCL滤波器参数是逆变器侧电感L1为0.5mH网侧电感L2为0.3mH滤波电容Cf为40μF并在电容支路串联2Ω阻尼电阻。这些参数是参照典型100kW并网逆变器的工程设计选定的谐振频率算下来大约1.3kHz避开6倍频的PWM谐波和100Hz的基波控制带宽。电流内环Kp取5Ki取100直流母线电压外环Kp取0.4Ki取20。在这个配置下并网电流THD仿真结果大约在3%以内并网功率波形跟随能量管理层给的参考值过渡过程持续50ms左右没有明显的超调。4.4 仿真时长、步长与解算器选择时间尺度问题是整个仿真能不能跑起来的关键。前面说了用1秒代表1小时24小时就是86400秒的物理时间而仿真时间设为86400秒时如果按微秒级步长跑总步数达到百亿级别不可能跑完。所以做长时间尺度仿真必须调整对底层模型的简化程度。我的做法是分两步走。第一步做控制器参数验证用10微秒固定步长、仿真时长5秒观察并网逆变器和储能变换器的动态响应确认底层控制器正常。第二步做能量管理验证仿真时长直接设为86400秒把底层开关电路全部改用平均值模型替代比如Boost和双向DC/DC不再用理想开关加PWM发生器而是直接用受控电压源和受控电流源等效MPPT环节保留逻辑但不硬切PWM波形。解算器选择上长时间仿真我建议用ode23tb相对误差设为1e-3。这个组合在功率电子平均值模型加长时间尺度场景下比较稳既不会因为刚性方程组导致步长被压得极小也不会因为误差过大而出现数值发散。固定步长小步长验证阶段用ode3即可。如果不想做平均值模型替换还有一种折中思路是保持开关模型但把开关频率从10kHz压到1kHz仿真速度能提升不少代价是谐波特性失真。我用过一次不推荐长期这么做还是平均值模型更干净。5. 仿真结果分析方法与问题排查实录5.1 削峰填谷效果如何量化评判仿真跑完之后结果好坏不能靠肉眼觉得差不多就行要有量化指标。我用的最核心指标是削峰率和填谷率另外关注并网功率曲线、SOC曲线和运行模式切换次数。削峰率等于不削峰时的最大并网功率减去削峰后的最大并网功率除以不削峰的最大并网功率。我的仿真结果是不削峰时傍晚高峰从电网吸收功率约为610kW投入储能放电后电网侧最大吸收功率降到485kW削峰率约为20.5%与容量配置时的设定目标基本吻合。填谷率按类似算法谷时段电网最低功率从200kW抬升到252kW左右填谷率约26%。SOC曲线方面全天从初始50%出发谷时段充到89%峰时段放电到28%始终处于20%到90%的安全区间。模式切换次数全天一共13次基本对应时段切换说明滞回逻辑生效了。5.2 常见仿真发散、代数环与初始化问题仿真过程中我踩过不少坑挑几个典型的说。第一个是仿真发散。这个问题在刚开始调试时几乎必现尤其是把底层开关模型和能量管理策略放在一起跑长时间仿真时很容易在某个模式切换点突然发散。排查思路是先确认是哪个环节发散的通过分段仿真定位。我遇到的一次是Boost电流内环在低光照时出现负电流振荡原因是MPPT扰动步长太大0.01s采样周期内电压参考变化过快电流环来不及跟踪。把扰动步长从2%降到1%同时把电流环带宽提高一点问题就解决了。第二个是代数环。能量管理模块同时输出储能功率并网功率而这些功率又反过来影响SOC和直流母线电压Simulink在编译时会自动检测到代数环。如果直接用功率信号实时回读再参与计算大概率会报错或者出现无法初始化。我在功率反馈路径上加入了一个单位延迟Unit Delay模块或者Memory模块打破代数环。代价是策略对功率变化响应滞后一个调度周期对这个场景来说完全不影响精度因为调度本来就是秒级甚至分钟级决策滞后一个周期根本感知不到。第三个是初始化失败。常见触发点是PLL在启动瞬间相位不同步导致逆变器电流内环初始时刻出现巨大误差。解决办法是给PLL的积分器设置合理的初始角度或者仿真开始时让电网和逆变器先处于待机状态等PLL锁定后再投入功率。我一般设置一个15毫秒的软启动时间先让PLL同步再逐步放开电流参考值。5.3 功率波动、SOC越限等运行异常处理仿真过程中还遇到过一个比较隐蔽的问题平时段光伏大发、负荷较低时策略让储能充电吸收多余光伏此时光伏功率变化剧烈储能充电电流跟随波动直流母线电压出现周期性波动。查下来发现是光伏MPPT的采样时间和储能电流环的时间尺度差了两个数量级MPPT每0.01s改变一次参考电压储能电流环带宽跟不上这个扰动源。处理办法是把MPPT采样时间改成0.1s让光伏参考电压变化频率低于储能电流环能够抑制的范围直流母线电压波动立刻降下来。SOC越限的问题在初始版本也出现过。刚开始我把放电下限设为0.2但削峰目标功率取得太高峰时段放电需求大傍晚18到19点之间SOC降到了18%触发边界保护储能退出削峰效果出现了约15分钟的缺口。后来我把削峰目标从500kW放宽到480kW用运行结果反推修正问题解决。这里有个工程思路值得分享容量配置算出来的参数只是初值最终还要结合仿真结果迭代。削峰目标、储能初始SOC、最大功率这三者实际上是互相耦合的。建议不要一次性把所有参数全部固定而是先固定储能功率和容量跑一版结果统计实际削峰率然后微调削峰目标再跑一般两三轮就能收敛到一个稳定配置。5.4 控制器参数调试的实用经验参数整定过程我分三层进行。第一层先整定并网逆变器电流内环断开储能和光伏只让逆变器工作在整流或逆变状态用阶跃响应观察电流跟踪速度和超调。第二层整定Boost和双向DC/DC的电流环给固定功率参考观察直流母线电压保持能力。第三层是全系统闭环把能量管理策略投入运行重点看SOC曲线和模式切换是否正常。经验法则方面电流内环Kp先给一个相对小的值比如电感阻抗的2到3倍然后逐步增大到临界振荡点的一半积分时间常数取电流环带宽对应时间常数的5到10倍。电压外环带宽设置为电流内环带宽的十分之一以下确保内外环时间尺度分离不会出现相互激励。这套方法在我这次实践中一次通过没走太多弯路。6. 项目经验总结与后续扩展建议6.1 仿真结果到工程实际的差距提醒做完这套仿真我有一个很直观的体会Simulink里跑通的能量管理策略离真正能部署到工程系统还有不小的距离。仿真模型里没有测量噪声、通信延迟、开关损耗、温漂SOC也是理想估计值而实际系统里SOC误差、功率变送器延迟、遥控遥信时间都会对策略行为产生影响。如果在仿真的SOC边界管理上不留足裕量实际运行中很容易因为SOC估计偏差导致提前切出。另外仿真里光伏和负荷数据都是完全准确的实际项目里这些是预测值偏差不可避免。所以策略设计时最好预留新能源预测误差的余量比如削峰目标不要卡得太死留出5%到10%的功率调节空间。这一点在仿真阶段就要养成习惯不能只看理想工况下刚好达标的参数。6.2 后续可以扩展的方向模型搭完之后后续扩展方向很多。一个是加新能源预测模块把光伏预测功率作为能量管理模块的输入之一替换掉实时光伏功率测试预测误差对削峰效果的影响。另一个是加多目标优化把电池寿命衰减模型写入储能充放电约束削峰填谷的基础上兼顾循环寿命变成一个带约束的最优化问题。再有就是扩展成多储能或多微网协同场景将单套光储系统变成多Agent协同调度策略会更复杂但应用价值也更高。我个人实际做完这套仿真后的体会是Simulink仿真的价值不在于把模型做到多精细而在于把控制逻辑验证清楚。能量管理策略的代码逻辑、边界条件、模式切换才是这套系统的灵魂电力电子建模部分用平均值模型完全够用反而更能聚焦在调度算法本身。如果你正准备做类似项目建议先花时间把负荷特性摸清、容量配好再动手建模遇到问题也不要急着改大参数先用控制变量法锁定问题环节会比盲目调参高效很多。
返回列表