含储能微网双层能量管理:模型预测控制与工程实践
微电网能量管理这件事做过的朋友应该都有体会不是建模难不是求解器不行而是你辛辛苦苦算出来的调度计划到了现场往往不敢用。光伏出力说变就变负荷曲线和你预测的完全不是一回事储能SOC因为电芯温度漂移也和你模型里推的不一样。指令下发出去PCS执行不到位系统越限了调度员直接切回手动模式。我刚接触储能微网项目那阵子最常被问的一句话就是“你这些曲线挺漂亮但到底能不能追得上”后来我才慢慢想明白一个问题把一天96个时段的决策一次性算完本质上是开环的“计划”而现场需要的是带反馈的“控制”。所以现在做这类系统我基本都往“双层”方向走——上层做长周期的经济性规划下层用模型预测控制MPC做短周期滚动校正。这篇文章就把这套基于模型预测算法的含储能微网双层能量管理模型的探索过程、模型细节、以及实际落地时容易踩的坑系统性地梳理一遍。适合正在做微网EMS、储能系统设计、或者研究调度算法的工程师和研究生参考。1. 单层模型管不住微网的储能问题到底出在哪1.1 微网能量管理面对的四个不确定性先别急着聊双层模型要理解这个架构为什么存在得先看单层方案为什么不够用。含储能微网的能量管理本质上是一个多时间尺度的随机优化问题。随便拎一个工业园区微网出来你就要同时面对这么几类不确定的东西。第一类是光伏和风电的出力波动。云层飘过来光伏出力一分钟内可能掉40%这种波动只能靠储能和联络线去扛。第二类是负荷的随机性。生产线的启停、空调的群控响应都会让实际负荷和预测值出现偏差而且这个偏差通常在下午时段特别大。第三类是现货市场电价。虽然很多项目还是峰谷两部制但真正参与电力现货市场的微网日前价格和实时价格能差出一大截这会直接影响充放电策略。第四类更难办储能本身的状态不确定性。SOC估计误差、温度对可用容量的影响、电池衰减导致的容量下降都会让模型里的SOC和实际SOC越走越远。这四个不确定性放在一起意味着你不可能通过一次求解就得到一套能完美执行的计划。你真正需要的是一个能不断根据新信息修正决策的机制。1.2 单层优化为什么“算得到、跑不动”常见的单层优化模型长什么样呢把一天按15分钟分成96个时段决策变量包括储能的充放电功率、购售电功率、可调负荷的削减量目标函数是运行成本最小约束条件是功率平衡、储能SOC递推、联络线功率上下限。从数学上看这是一个标准的混合整数线性规划MILP用Gurobi或者Cplex在几秒钟之内就能求出全局最优解。问题不在于“算不出来”而在于“算出来之后没法用”。你想一下实际执行的时候会发生什么早上8点你按计划放电结果9点钟光伏突然暴跌按原计划放电撑着撑联络线就越限了。可调度员打开界面一看储能还在按计划放电可调负荷也没有动作因为控制指令是早上一次性下发的压根没有反馈回路。另一个被低估的问题是计划对SOC轨迹的约束。单层模型为了让第二天还能正常运行一般会加一个SOC首末相等约束比如说全天结束时SOC回到0.5。但光伏预测出现系统性偏差的时候模型为了保证末端SOC等于0.5可能会在某个时段做出非常不经济的充放电决策。我见过一个案例为了在预测时域末尾把SOC拉回0.5储能在电价高峰时段反而在充电这在运行逻辑上完全说不通。1.3 双层思路的起点把“计划”和“跟踪”分开所以问题的焦点就变成了既要保证经济性又要保证可执行性怎么办答案是把问题拆成两个层次让不同层次去处理不同时间尺度上的问题。这个想法其实不新鲜和电力系统的三级调度体系有点像长期计划管趋势短期自动发电控制AGC管偏差。微网里的双层能量管理模型也是这个逻辑。上层负责慢周期的经济性规划基于预测曲线算出一个全天最优的运行趋势具体包括储能SOC的参考轨迹、联络线功率的参考值、可调负荷的基线安排。下层负责快周期的跟踪控制用MPC滚动求解每隔几分钟重新算一次未来几个小时的控制序列但只执行一步不断根据实际量测修正。上下层之间不是孤立的下层在优化的时候会把上层给的参考轨迹作为一个软约束或者跟踪目标。这样上层保证了经济性的大方向下层保证了实际运行不跑偏。这个结构听起来简单但真正把模型搭起来、把参数调对中间还是有不少学问的。接下来我就把上下层的模型细节拆开讲。2. 上下层怎么分工日前计划定趋势日内MPC做修正2.1 上层模型慢周期、全时段、经济性优先上层模型解决的是“今天大致怎么运行才经济”的问题。它接收的输入是日前光伏预测、负荷预测、电价曲线输出是一组全时段的参考轨迹。我常用的上层模型是一个以15分钟为时段的日前经济调度模型目标函数包含三个部分向电网购电的费用、弃光惩罚光伏发了但没用上按损失的电量乘以一个惩罚系数、储能充放电造成的寿命折损成本。约束条件包括每个时段的功率平衡、联络线功率上下限、储能SOC递推关系、SOC上下限、以及SOC日首尾相等约束。模型里比较值得注意的一个细节是储能退化成本的建模。如果把储能当成一个可以无限次充放的理想设备优化结果往往是储能被过度使用一天之内SOC剧烈震荡虽然电费省了但电池寿命直线下降。所以我会在目标函数里加一个与储能吞吐量线性相关的退化成本项。举个例子一套500kW/1000kWh的磷酸铁锂储能系统假设总投资大约100万元循环寿命按6000次算那么每充满放一次对应的折损成本就是100万/6000 ≈ 167元折算到每kWh吞吐量大约是0.17元/kWh。把这个系数放进目标函数里储能就会在“省电费”和“损耗寿命”之间自动权衡不会为了省几块钱电费而把电池往死里用。上层模型求解完之后真正传递给下层的核心东西有两个一是储能SOC的参考轨迹也就是每个时段储能应该处在什么荷电状态二是联络线功率的参考值也就是微网和外部电网之间计划交换的功率。2.2 下层模型快周期、滚动求解、可执行性优先下层是整个框架里体现模型预测控制核心价值的地方。它解决的是“现在这一刻储能和可调负荷到底该怎么动作”的问题。和上层一次性求解96个时段不同下层是滚动进行的每个控制周期到来时读取系统当前状态获取未来一段时间的预测数据求解一个有限时域优化问题然后把第一步控制指令下发给储能PCS和可调负荷等到下一个控制周期再重复这个过程。下层模型的目标函数我一般设置为四项的加权和。第一项是未来预测时域内的运行成本包括购电成本和退化成本第二项是SOC对上层参考轨迹的跟踪偏差惩罚第三项是联络线功率对上层参考值的跟踪偏差惩罚第四项是储能出力变化率的惩罚这个项非常关键它防止储能指令在相邻两个控制周期之间剧烈跳变减少对PCS的冲击。约束条件和上层类似但多了两个实际执行层面的细节。一是联络线功率上限可以设成软约束即允许在最坏情况下短暂小幅越限但要付出惩罚代价。为什么要设软约束因为预测总有误差如果硬约束不留任何余地MPC可能因为找不到可行解而直接罢工这在工程上是不可接受的。二是储能充放电功率的变化速率要有限制PCS不是理想器件从0到额定功率通常需要一定的爬坡时间这个约束在快时间尺度控制里非常实用。从时间尺度上看我常用的配置是上层15分钟一个时段跑一天96个点下层控制周期5分钟预测时域4小时16步控制时域1小时4步。这样一个下层优化问题的决策变量大约是三四十个规模很小毫秒级就能解完完全不影响在线运行的实时性。2.3 上下层接口参考轨迹与SOC锚点的传递上下层之间的接口设计直接影响整个双层模型的运行效果。很多人做双层模型容易犯一个错误就是上层给下层传了指令但下层根本不把它当回事两个层的目标函数是割裂的。正确的做法是把上层生成的参考轨迹作为下层目标函数里的跟踪项用权重系数来调节两个层之间的“黏合度”。先说SOC参考轨迹的传递。上层算出来的SOC轨迹是一条随时间变化的曲线下层MPC在每一控制周期里会希望未来若干步的SOC尽量贴近这条曲线。但我在实际测试中发现一个关键问题如果上层轨迹和下层MPC起点使用的SOC之间存在系统性偏差比如上层用预测初始SOC0.85而实际BMS上报的SOC只有0.79那么下层无论如何跟踪都是徒劳的它会一直试图把SOC拉向一个错误的参考轨迹导致储能反复充放。解决这个问题有两个办法。一个是在每次MPC求解前对上层SOC参考轨迹做整体平移让参考轨迹的起点与当前实际SOC对齐。另一个是每隔几个控制周期就用下层最新的运行状态重新优化一次上层参考轨迹相当于在一个更慢的时间尺度上做滚动更新。这两种方法我都在项目里用过平移法简单有效重新优化法更严谨但计算量大一些需要根据实际算力情况取舍。再说联络线功率参考值的传递。这个值决定了微网和外部电网之间的交换功率大致在什么水平。下层MPC在优化时会把联络线功率拉向参考值同时允许短时的偏离以满足系统平衡需求。权重设置有个经验规律如果微网内部光伏装机容量较大联络线上的波动会比较大那么联络线跟踪权重可以适当降低避免储能为了硬跟电网功率而频繁动作如果微网内部可调资源少、必须依赖电网支撑那么跟踪权重就要高一些。2.4 两个层级的典型参数配置为了更直观地展示两层模型在实际系统中的配置差异我把我常用的参数整理成一个表供参考。这里不涉及具体项目的保密数据只是给一个通用的典型配置范围。参数项上层日前模型下层日内MPC时间粒度15分钟5分钟也可1分钟优化时域全天96个时段预测时域16步4小时决策变量储能充放电、购售电、可调负荷储能充放电、可调负荷、松弛变量目标函数日运行成本最小运行成本跟踪偏差控制变化率最小求解方式单次求解滚动求解只执行第一步使用数据日前预测曲线实时量测短时预测输出内容SOC参考轨迹、联络线功率参考值、可调负荷基线储能PCS功率指令、可调负荷调整指令求解频率一日一次或数小时一次每5分钟一次这套配置在我的实际项目中跑下来效果基本符合预期。上层的经济性保证了下层的可执行性也保证了两大层之间通过参考轨迹和跟踪权重进行衔接整体系统处于一个相对健康的工作状态。3. 储能模型里的脏活累活效率、寿命与整数变量的妥协谈完了双层的架构我想单独花一章聊储能模型。这个环节看似基础但往往决定整个算法能否真正落地。因为储能恰恰是双层模型里最容易把求解器逼疯、也最容易让结果脱离实际的部分。3.1 一个能用的储能线性模型长什么样先说最基础的线性模型这是绝大多数工程化能量管理系统的基石。假设储能额定容量为EkWh充放电功率上限为P_maxkW充电效率ηc、放电效率ηd通常在0.92~0.97之间SOC的递推关系可以写成SOC(k1) SOC(k) ηc * Pc(k) * Δt / E - Pd(k) * Δt / (ηd * E)其中Pc(k)和Pd(k)分别是第k个时段的充电功率和放电功率Δt是时段长度。这个式子看起来简单但它是整个储能约束体系的核心所有优化问题里的SOC耦合约束都建立在它之上。除了SOC递推还需要约束SOC的上下限。工程上一般不会把SOC范围设成0到1因为电池过充过放会显著加速容量衰减。我习惯把运行范围设在0.1到0.9之间给SOC留出安全边际。但要注意这个范围在MPC的短时域里可能会带来问题。如果预测时域只有4小时而储能当前SOC在0.5那么MPC完全可能为了让追踪效果更好而在末端把SOC压到0.9然后在下一个周期又没法处理。这个问题的根源在于短时域看不到全天的状态必须依靠上层提供的SOC参考轨迹来锚定这也是双层架构里的一个关键联动。3.2 同时充放电问题整数变量该不该留储能模型里最棘手的是防止系统同时充电和放电。物理上这当然不可能但如果在模型里不对Pc和Pd做约束优化器为了满足某些极端的约束条件完全可能给出一个同时存在正功率和负功率的解从而浪费能量。最严谨的做法是引入0-1整数变量。设zc为充电状态zd为放电状态zczd≤1然后加约束Pc(k) ≤ M * zc(k)Pd(k) ≤ M * zd(k)M是一个足够大的常数。这样模型就从线性规划变成了混合整数线性规划。对于上层模型来说因为它只在日前跑一次计算时间相对宽裕保留整数变量没太大问题。但对于下层MPC来说事情就不一样了。MPC每5分钟就要滚动求解一次如果每次都要解一个混合整数规划不仅求解时间拉长还可能因为整数变量的存在导致求解不稳定。而且随着预测时域增长整数变量数量线性增加求解速度会明显变慢。所以我在下层MPC里的处理方式是直接把整数变量拿掉不显式防止同时充放电。这时候可能有人会问那万一解出来真的同时充放电怎么办实际上这个风险在目标函数的设计里已经天然规避了。假如系统同时给储能充电和放电那么充电的能量经过效率损耗后被放出来这个过程会产生不必要的能量损失而目标函数里包含运行成本能量损失意味着成本增加。优化器为了最小化成本没有理由让储能自己和自己做无谓的能量交换。当然这是在成本系数设置合理的前提下。如果储能退化成本系数设得很低甚至为0那么确实可能出现轻微的数值噪声导致同时充放但实际操作中把一个很小的正系数加在吞吐量上这个问题就消失了。这个“用经济代价替代整数约束”的思路是我在做工程化MPC时非常依赖的技巧。它牺牲了一点模型精确度换来了求解速度和解的稳定性性价比很高。3.3 SOC初值偏差、热管理与循环寿命的工程约束接下来聊聊几个在教科书模型里很少提及但在现场调试中一定会遇到的工程细节。第一个是SOC初值偏差问题。MPC是一个闭环算法每一控制周期都需要知道当前精确的SOC值。但实际系统里SOC通常是通过电流积分估算的电流传感器的零点漂移、采样误差都会导致SOC估计值逐渐偏离真实值。更麻烦的是如果你在MPC里使用了一个偏高的SOC初值模型会以为储能还有余量从而给出过大的放电指令等发现实际SOC不够时已经晚了。解决这个问题一是在MPC目标函数里加入一个SOC偏差修正项让模型倾向于把SOC拉回一个安全的中间值二是定期从BMS读取开路电压校准值对SOC进行重标定三是在上层模型里给SOC上下限留出比实际运行范围更保守的余量比如实际允许0.1到0.9模型里就设0.2到0.8给估计误差留出缓冲。第二个是热管理约束。储能电池的充放电功率不是名义上的额定值而是受温度约束的动态值。电芯温度过高时BMS会主动限制充放电功率甚至直接截止。如果不把这个信息纳入MPC的约束条件那么算法可能计算出很大的充电功率指令结果BMS根本不执行整个闭环就断开了。我在项目里一般把BMS实时上报的最大允许充放电功率作为MPC的功率上限而不是用额定功率。这个参数是时变的MPC完全能处理这类时变约束。第三个是循环寿命的建模。前面提到过用吞吐量线性惩罚来近似寿命损耗这里补充一个更精细的做法。有些项目会把SOC运行区间对循环寿命的影响也建模进来比如SOC长期在高位运行正极材料的应力腐蚀会加快导致容量衰减加速。要想在能量管理模型里体现这一点可以在上层目标函数里加一个SOC偏离最优区间的惩罚项引导储能尽量在0.3到0.7这个温和区间运行。当然这只是一个经验性的做法具体的最优SOC区间需要结合电池厂商提供的测试数据和项目实际工况来标定。4. MPC滚动优化在系统里怎么跑从预测到执行的完整闭环双层架构讲清楚了储能模型也梳理完了现在终于可以走到最核心的工程环节——下层MPC在实际系统里究竟是怎么运行的。很多文章讲MPC只讲优化目标和约束不讲闭环流程这是远远不够的。MPC的价值恰恰在于它是一个带反馈的闭环控制器只有把预测、优化、执行、反馈这条链路完整打通它才真正有用。4.1 每个控制周期内的六步流程我用一段伪代码来说明MPC在每个控制周期内做的事情每个控制周期 t 到来时 1. 读取实时量测光伏实际出力P_pv(t)、负荷实际功率P_load(t)、储能SOC(t)、联络线功率P_grid(t) 2. 获取未来N步的预测序列光伏预测、负荷预测、电价预测 3. 读取上层生成的参考轨迹SOC_ref(1..N)、P_grid_ref(1..N) 4. 求解带跟踪项和约束的下层优化问题 5. 从求解结果中取第一步控制指令下发给储能PCS和可调负荷执行 6. 等待下一个控制周期重复1~6这个流程看起来简单但每一步都有讲究。第1步的实时量测质量直接决定MPC的反馈效果。如果光伏功率计和负荷功率计存在时间同步误差比如光伏数据到了而负荷数据还是3秒前的那么功率平衡约束就会被破坏。所以底层数据采集的时间戳对齐在MPC系统里不是小问题我见过太多因为采集不同步导致MPC控制效果凭空变差的项目。第2步的预测不需要很准。这一点可能出乎很多人的意料。MPC的滚动机制决定了即使预测存在较大误差只要误差不是系统性的都可以通过不断刷新预测来逐步修正。所以对于4小时以内的短时预测我用得最多的反而是最朴素的历史平均法或者持续性预测法也就是用当前时刻的出力水平外推未来。只有在预测误差存在明显系统偏差的情况下才会考虑引入更复杂的预测模型。与其把精力花在追求预测模型精度上不如花在保证MPC反馈回路的稳定性上。第3步和第4步是整个算法的核心。优化问题的具体形式前面已经说过这里我想强调一个容易被忽略的细节松弛变量的设置。联络线功率上限、SOC上限这些硬约束在遇到极端预测误差时可能导致MPC无解。为了不让无解情况发生我给这些约束都加了非负的松弛变量并在目标函数里赋予一个很大的惩罚系数。这样在正常情况下松弛变量为0约束严格满足在极端情况下优化器会选择以一个很小的代价临时越限保证问题始终有解系统不会因为无解而停止响应。4.2 预测时域、控制时域与跟踪权重的取值经验参数的选取在很大程度上决定了MPC的实际表现。我先说说预测时域N。N太小MPC看不了多远容易短视尤其在处理储能SOC这种带有明显时间耦合的变量时如果N只有1小时MPC可能在傍晚时候把SOC用光根本不管后面几个小时的晚高峰。N太大预测精度下降而且为了保持末端SOC在合理范围MPC会被远期约束绑住手脚灵活性降低。我实测下来对于15分钟级控制周期N取16步也就是4小时是个不错的折中。控制时域M相对简单一般取1到4步。M越小MPC的自由度越少求解越快控制越保守M越大控制器越激进可能给出一些变化幅度很大的控制序列。考虑到储能PCS对功率变化的平稳性要求我习惯取M4步也就是1小时内的控制自由度。跟踪权重的取值就没有那么客观了基本依赖调试经验。我遇到过很多次这种情况把SOC跟踪权重设得很大结果MPC为了追SOC参考轨迹在电价高峰期仍然充电把上层好不容易算出来的经济性优势全给吃掉了。所以我就引入了变权重的思路让跟踪权重随电价实时变化。电价高峰时段成本项的权重大跟踪项的权重小MPC更倾向于省钱电价平段和低谷时段成本项的压力小跟踪项的权重大MPC更积极地恢复SOC到上层参考轨迹。这个做法听起来很小但实际效果提升非常明显上层模型的全局经济性能够真正传导到下层MPC的局部决策中。4.3 软约束与松弛变量让MPC在预测不准时也别翻车关于软约束我想再多说几句。在做上层模型的时候因为没有必要追求过强的鲁棒性约束都是硬的违反了就直接不可行。但在下层MPC里软约束几乎是必须的因为现场的环境远比模型复杂硬约束在特殊工况下会让整个优化问题无解。拿联络线功率上限来举例。假设上级电网给微网分配的最大用电功率是800kW这个800kW是设备物理极限不能突破。但预测的负荷突然飙升MPC如果严格遵守800kW上限又要求储能SOC不低于0.2那么它可能找遍所有可行域也找不到解。一个务实的做法是把800kW设为软约束允许优化器在极端情况下给出一个805kW的临时越限方案同时对这个越限施加一个惩罚。这样系统至少还能给出一个可执行的控制指令而不是陷入无解的死循环。我把这个思路整理成一句话硬约束保证物理安全软约束保证算法可用。在工程层面一个能给出轻微越限方案的算法远比一个在关键时刻直接崩溃的算法有价值得多。4.4 求解器选型与计算开销最后聊聊求解器的选择。下层MPC每5分钟运行一次一次求解必须在秒级甚至毫秒级内完成。如果模型是连续变量的二次规划就是去掉整数变量后的形式那么开源求解器完全够用我用过的OSQP和HiGHS在几十个决策变量的规模下求解耗时都在毫秒级完全跑得动。如果模型保留了整数变量变成混合整数二次规划那就要小心了求解时间可能从几毫秒飙升到几百毫秒甚至秒级这在5分钟一个周期的场景下虽然也能接受但如果你想把控制周期缩短到1分钟就会感受到明显的压力。上层模型因为一天才更新一次计算时间无所谓用开源求解器也能轻松处理。但如果上层模型里包含大量整数变量和复杂约束Gurobi和Cplex这类商业求解器还是有明显优势的。不过说实话在大多数含储能微网项目里问题规模远没有大到非商业求解器不可的地步我在不少项目里全程使用免费求解器也没有遇到性能瓶颈。5. 算例对比1.2MW光伏500kW储能的园区微网到底省了多少前面讲了很多原理和模型设计这一章用一个构造的算例把整个双层模型串起来跑一遍。之所以说“构造”是因为这个算例的数据是我根据多个项目经验整理的示意性数据用于展示模型行为不代表任何特定项目。但参数设置和结果趋势是符合实际工程经验的。5.1 算例参数和三种策略假设一个工业园区微网光伏装机1.2MW负荷峰值1.5MW储能系统500kW/1000kWh和外部电网的联络线功率上限800kW。电价采用分时电价高峰时段1.2元/kWh平段0.7元/kWh低谷0.3元/kWh。光伏出力按典型晴天的形状设置午间12点到14点出力最高。在这个场景下我对比三种策略的表现策略A是传统规则调度。简单来说就是低谷充电、高峰放电光伏大发时如果负荷吃不下就由储能吸收没有对SOC的精细管理也没有反馈校正。策略B是单层日前优化。把全天96个时段作为一个整体一次求解得到最优充放电计划然后按计划开环执行不进行任何滚动修正。策略C是本文讨论的双层MPC模型。上层日前优化生成参考轨迹下层每5分钟滚动MPC跟踪执行。5.2 结果对比与解读三个策略在典型日内的仿真结果大致是这样的指标规则调度A单层日前优化B双层MPCC日运行成本元约6200约5480约5560弃光率2.8%1.5%0.9%SOC越限次数3次6次0次联络线功率越限次数8次12次1次平均单步求解耗时无需在线无需在线约30ms这里有几个点值得仔细分析。第一双层MPC的日运行成本并不是三种策略里最低的单层日前优化在成本上略胜一筹。这其实很好理解单层开环优化拿到的是理论上的全局最优但它没有考虑实际执行时的偏差和不确定性所以这个成本优势是建立在模型完美的假设上的现实中根本无法实现。双层MPC在跟踪参考轨迹的过程中做出了一些局部调整可能偏离了全局最优解但换来的是更好的可执行性和安全性。第二双层MPC在SOC越限和联络线越限两个指标上表现最好。这得益于MPC的滚动反馈机制每5分钟就重新看一眼系统状态发现SOC有越限趋势时提前调整而不是等到越限了才被动响应。单层优化虽然理论上也约束了SOC范围但它开环执行的特性决定了它对执行偏差完全没有矫正能力所以实际运行时SOC反而更容易越限。第三弃光率方面双层MPC最好。因为MPC能在光伏出力突然上升时迅速增加储能充电功率或者降低联络线功率吸收多余光伏而其他两种策略要么响应慢要么因为计划固定而无法及时调整。这个算例给我们的启示是在微网能量管理里“最优”不等于“最好”。一个可执行、能反馈、即使轻微偏离全局最优但始终安全的方案远比一个理论上最优却无法落实的方案更有工程价值。5.3 一个很有用的细节电价分时段的跟踪权重在调试这个算例的过程中我专门测试了变权重的效果。一开始我把SOC跟踪权重设成固定值发现结果不太理想。比如上午光伏大发上层模型规划的SOC参考轨迹是让储能从早上开始充电中午充满但MPC在固定权重下会把SOC拉向参考轨迹哪怕此时电价很高、充电并不划算。虽然从全天的角度看这个充电动作是合理的因为中午光伏多、电便宜但在局部时段MPC为了追轨迹可能会在电价次高的时段也固执地充电造成不必要的浪费。后来我把SOC跟踪权重改成电价的函数逻辑很简单电价高的时段跟踪权重降低MPC优先考虑经济性电价低的时段跟踪权重恢复MPC把SOC拉回参考轨迹。就这么一个小改动日运行成本在算例中下降大约2%而且储能动作更平滑。我发现这个细节在不少学术论文里几乎没有被提及但在工程调试里却是非常实用的经验。6. 从模型到系统EMS、PCS、热管理和多场景扩展算法模型跑通了只完成了整个能量管理系统的一半。真正让这堆公式产生价值的是把它们塞进一个运行稳定、通讯可靠、数据准确的系统里。这一章我想从更宽的视角聊聊模型落地时绕不开的那些现实问题。6.1 算法跑通不等于系统落地执行层的现实约束先说PCS储能变流器的执行问题。MPC算法算出一个储能充电功率指令比如300kW这个指令通过EMS下发到PCSPCS需要一定的时间才能把实际功率调整到位。不同厂家、不同型号的PCS响应特性差异很大有的能做到几百毫秒内响应有的可能需要好几秒。如果你的MPC控制周期是5分钟几秒钟的响应延迟问题不大但如果你把控制周期压缩到1分钟甚至更短PCS的响应延迟就不能忽略了。另一个实际问题是通讯链路。EMS和PCS之间通常走Modbus TCP或者IEC 104这些通讯协议存在固有的轮询周期和延迟。你算出一个MPC控制指令要等下一个通讯周期才能下发到位这个额外延迟在快时间尺度控制里会直接影响控制效果。所以我的经验是在做MPC控制器设计之前先搞清楚整个控制链路的延迟到底有多长然后把这个延迟作为MPC模型里的一个固定时延进行处理。热管理也是绕不开的话题。储能电池在高温环境下可用功率会下降BMS会主动限功率。MPC如果不知道这个限制就会给出一个偏大的功率指令而实际执行时被BMS截断这等于闭环反馈被打破。所以我在做EMS和MPC控制器的数据接口设计时一定会把BMS实时上报的最大允许充放电功率纳入MPC的功率上限约束而不是只用储能的额定功率。6.2 不同储能场景对双层模型的需求差异跟不同储能场景的同行聊下来我发现一个规律储能应用场景不同对能量管理模型的需求差异很大不能一套模型打天下。表前侧储能独立储能电站更关注电网辅助服务和现货交易它的能量管理模型除了充放电优化还要考虑调频、备用等辅助服务收益而且对日前计划和实时控制的衔接要求更高。最近不少做独立储能电站的朋友都在聊基于AI大模型的现货交易决策平台本质上就是在日前的场景下用更复杂的预测模型来提升收益预测精度这和本文讲的双层模型架构是可以共存的——上层模型的预测模块换成大模型输出MPC下层的滚动框架保持不变。工商业储能更关注需量管理和峰谷套利。这种场景下负荷预测的精度对策略效果的影响很大因为需量电费是按月最大需量计算的一个月的最大需量可能就由某一天的一个尖峰决定。双层模型在工商业储能里的应用我建议把上层的优化周期拉长到一个月让储能策略不只是考虑一天的峰谷套利还要为削峰、降低最大需量做预留。这本质上是一个更长时间尺度的上层规划问题。户储的情况更特殊。家用储能功率小、设备简单如果上一整套双层MPC模型不仅算法复杂度高硬件成本也不划算。我见过做得好的户储产品用的反而是基于规则加光伏预测的简化策略只在特殊场景下启用更复杂的优化。所以在户储场景里MPC更适合作为一个可选的高端策略而不是默认配置。6.3 向混合储能扩展功率分配与多时间尺度协同再聊聊一个我最近在关注的方向混合储能。电化学电池加上超级电容的组合电池负责能量型的慢波动平抑超级电容负责功率型的快波动抑制。这种混合储能在面对光伏秒级波动、负荷冲击性负载时能显著降低电池的循环次数延长电池寿命。混合储能的能量管理比单一储能复杂很多核心问题是功率分配一个总功率指令进来怎么切分成电池承担多少、超级电容承担多少常见的做法是用滤波算法把高频分量和低频分量分开低频给电池、高频给超级电容。更进阶一点可以用经验模态分解EMD或者GWO等优化算法来动态优化滤波时间常数甚至用模糊控制来根据电池SOC和超级电容SOC实时调整分配比例。这些功率分配策略和本文讲的双层MPC模型其实是天然互补的。在双层MPC框架里上层模型负责经济性规划下层MPC负责跟踪控制。在下层MPC里我可以把混合储能的功率分配策略作为一个额外的执行模块MPC给出总储能功率指令后由分配模块按照电池和超级电容的状态进行二次分配。这样一个层级化、多时间尺度的架构在理论上比单一的分配策略或者单一的能量管理模型都更完整。6.4 联调踩坑上下层SOC参考基准不一致引发的震荡最后分享一个我在联调阶段印象最深的坑。当时我们把上层模型和下层MPC都调通了各自单独测试都没有问题但一联起来跑储能功率曲线出现了一直持续的低频振荡约每半小时往复一次简直让人抓狂。排查了很久才发现问题出在SOC参考基准上。上层模型生成SOC参考轨迹时用的是日前预测数据初始SOC假设为0.85。但真正运行到当天早上BMS上报的实际SOC是0.78。这个0.07的偏差在单看SOC轨迹时根本不显眼但下层MPC的SOC跟踪项是按参考轨迹和实际SOC的差值计算惩罚的也就是说下层MPC从一开始就背着一个“SOC低了0.07”的惩罚在跑。上层参考轨迹在上午是缓慢上升的下层MPC为了追上参考值会持续加大充电功率导致SOC升得比计划快等SOC追上了参考值惩罚项变小MPC的充电功率又回落由惯性带出来的多余电量又让SOC比参考值高了一截于是MPC又开始放电。整个系统就这样陷入了追来追去的循环。解决的办法其实前面也提到过在每次MPC求解前把上层SOC参考轨迹整体平移让参考轨迹的起点等于当前实际SOC。就这么一个看起来很小的改动直接解决了整个系统的低频振荡问题。这个坑让我意识到双层模型在理论上的接口设计和工程上真正的联调接口之间存在很多需要细心打磨的细节。你在仿真环境里跑得再顺到了现场也会遇到各种预料之外的问题。所以做这类系统一定要留出足够的现场联调和参数整定时间把上下层之间的数据传递、基准对齐、权重标定这些工作当成正式的系统设计任务来对待而不是等到联调时才去临时解决。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →