第一次把优化调度算法接到Simulink的光储模型上,我最大的感受是:Simulink本身不难,难在“你以为你建的是物理系统,优化算法面对的却是数字决策变量”这两者之间的对接。很多人包括我自己,一开始容易陷入一个误区——想用一个巨无霸模型把PWM开关、MPPT、电池、并网逆变器和24小时调度全部塞进去,结果仿真慢得像放幻灯片,还三天两头不收敛。
这篇文章就以一个基础光伏储能场景为主线,把“光储系统多目标优化控制仿真”这件事拆开讲清楚。内容适合两类人:一是刚入门Simulink、想拿真实场景练手的同学;二是已经会搭电气模型,但一直没想明白“优化算法怎么和Simulink模型联动”的工程师。我会把光伏、储能、变流器、优化调度、调试排错这几块分别讲透,并给出实际可复现的搭建思路。
1. 光储仿真到底在仿什么
1.1 先看清物理对象:光伏板、电池、变流器、电网,一个都不能漏
我们要仿真的对象是一个典型的光储并网系统:光伏阵列发出直流电,经过DC/DC变换器送到直流母线;储能电池通过双向DC/DC也挂在直流母线上;直流母线再接一台DC/AC逆变器,最终与电网相连,同时也直接给本地负荷供电。再往上一层,还有一个能量管理系统EMS,它负责计算出“什么时候充、什么时候放、从电网买多少电”这些指令。
在你动手搭模型之前,我强烈建议先用一张表把对象和模型粒度梳理清楚,否则建模过程中很容易画着画着就乱套。
| 物理组件 | 建模重点 | Simulink里最常用的替代方式 |
|---|---|---|
| 光伏阵列 | 辐照度、温度到直流功率的映射 | PV Array模块,或受控电流源+查表 |
| 储能电池 | SOC估算、充放电效率、功率边界 | Battery模块,或自定义SOC积分模型 |
| DC/DC变换器 | 升压、降压、恒流/恒功率控制 | 平均化模型,受控电流源/受控电压源 |
| DC/AC逆变器 | 并网电流控制、有功/无功分配 | 三相两电平VSC,或简化的功率平衡模型 |
| 电网与负荷 | 电压、频率、功率交换 | Three-Phase Source/三相RL串联负荷 |
1.2 两种仿真粒度不能混在一起用
这是新手最容易栽跟头的地方。光伏储能系统的仿真,其实有两种完全不同的时间粒度。
第一种是“电磁暂态级”,要看IGBT的开通关断、电流纹波、谐波,步长通常在微秒到毫秒级,仿真几秒钟可能就要跑很久。第二种是“能量管理级”,要看一天24小时里光伏出力、负荷、电价、SOC怎么变化,步长通常是分钟甚至小时级。
“多目标优化控制”关心的是后者,它的决策变量是“这个15分钟光伏发多少、电池放多少、电网买多少”,而不是“下一个微秒IGBT怎么开关”。所以你应该把底层变换器的细节做粗,把能量调度的逻辑做细。我自己的习惯是:变换器一律用平均化模型,电池用SOC积分模型,逆变器用功率平衡模型,仿真主体时间尺度放在秒到分钟级。这样既能保住优化控制的真实性,又不会让仿真时间失控。
1.3 仿真要先回答“这个模型给谁用”
同样是光储模型,给电气设计人员看,和给运营调度人员看,完全不是一回事。面向设计人员,需要波形、纹波、损耗、效率曲线;面向运营调度,需要的是全天功率曲线、SOC轨迹、购电成本。你这次既然做的是“多目标优化控制”,重点就一定放在功率分配和能量轨迹上,所以模型可以更偏向能量管理。
这一步想清楚,后面做多少细节全都有了判断标准。如果发现自己在为某个PI参数调了整整一天,但它在能量管理层面根本无足轻重,那就说明你又走回“巨无霸模型”的老路了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 多目标优化控制的目标拆解与数学表达
2.1 三个核心目标:经济性、平滑性、电池寿命
多目标优化里的“多目标”,在不同文章里说法不一样,但落到光储场景,无非就是三个方向:省钱、稳、耐用。
经济性目标最直接,就是系统一天的运行成本最低。假设电网电价分时计价,光伏发电优先自用,多余的电可以卖给电网,那么目标函数可以写成:
[
J_1 = \sum_{t=1}^{T} \left[ c_{\text{buy}}(t)\cdot P_{\text{grid,buy}}(t) - c_{\text{sell}}(t)\cdot P_{\text{grid,sell}}(t) \right] \Delta t
]
简单地理解就是“从电网买的电费减去卖给电网的收入”,整个值越小越好。这个目标决定了储能系统能不能通过谷时充电、峰时放电赚到价差。
平滑性目标针对的是并网功率的波动。光伏出力受云层遮挡影响会突然大幅下降或回升,储能的一个重要作用就是补偿这个波动。常见的写法是让并网功率的相邻时段变化量尽量小:
[
J_2 = \sum_{t=2}^{T} \left| P_{\text{grid}}(t) - P_{\text{grid}}(t-1) \right|
]
如果你更关注电压稳定性,也可以改成并网功率的方差,作用和这个类似。
电池寿命目标是最容易被忽略的。很多优化算法为了让经济性好看,会让电池频繁深度充放电,但现实里锂电池循环寿命和放电深度直接相关,把SOC从100%放到0%的次数越多,电池老化越快。为简化建模,常用电池的全天能量吞吐量来近似:
[
J_3 = \sum_{t=1}^{T} \left| P_{\text{bat}}(t) \right| \Delta t
]
同样的收益下,吞吐量越小,说明电池用得越“省”。严格一点还可以把DoD惩罚项加进去,但在教学和工程初版里,吞吐量已经足够反映控制策略的洁癖程度了。
2.2 必须满足的约束条件
优化不能只定目标,还得有约束。光储调度的基本约束有四个:
- 功率平衡:光伏出力(扣掉弃光)加上电池出力加上电网交换功率,必须等于负荷功率。
- 电池SOC上下限:一般锂电取10%~90%或20%~95%,避免过充过放。
- 电池功率上下限:受PCS变流器容量限制,充放电功率不能超过额定值。
- 电网交换功率上下限:受变压器容量或并网协议限制,不能反送太多,也不能取用太多。
把这些写成数学约束就是一组不等式,在Simulink里做约束处理时不一定每次都用数学规划求解器,很多场景直接用规则判断也能满足,但你必须明确这些边界存在,并且让控制逻辑在边界附近自动收敛。
2.3 多个目标怎么合成一个可优化的值
工程上最常用的做法是加权求和。因为三个目标量纲完全不同,电费是“元”,波动是“kW”,吞吐量也是“kW·h”,直接相加没有意义。所以必须先用基准值归一化:
[
J = \alpha_1 \frac{J_1}{J_{1,\text{base}}} + \alpha_2 \frac{J_2}{J_{2,\text{base}}} + \alpha_3 \frac{J_3}{J_{3,\text{base}}}
]
J1_base、J2_base、J3_base一般取“无优化、无储能”或“恒功率控制”时的指标值。权重alpha按项目需求调,比如峰谷价差很大,就想让经济性权重较高;如果并网协议对波动惩罚很重,就要把平滑性权重抬起来。
这个调整过程在Simulink里非常方便,把alpha设成模型里的外部参数,跑一次仿真改一下权重,对比结果就行。用自己的话讲,就是“用参数旋钮找平衡点”。
3. 光伏侧建模:从Simscape模块到MPPT完整链路
3.1 用Simulink自带的PV Array模块,别自己抄公式
光伏阵列建模最简单可靠的路径,是直接用Simulink库里的PV Array模块。在库浏览器里搜索“PV Array”,或者到Simscape→Electrical→Renewable Energy路径下也能找到,不同版本路径稍有差异,直接搜索最快。
为什么要用它而不是自己写等效电路公式?因为PV Array模块内部已经实现了完整的单二极管模型,并且能根据你填的组件参数自动计算I-V曲线、P-V曲线。在实际项目中验证过的参数,仿真结果和现场数据对齐度很高。自己做固然能加深理解,但调试成本和时间成本都很高。
PV Array模块的关键参数配置分几层:
| 参数层 | 典型值 | 说明 |
|---|---|---|
| 组件型号 | 例如SunPower SPR-315E-WHT-D | 模块库自带很多厂家组件型号 |
| 最大功率Pmax | 315W | 决定每块板出力上限 |
| 开路电压Voc | 约64.6V | 影响MPPT电压范围 |
| 短路电流Isc | 约5.9A | 影响阵列电流设计 |
| 串联组件数Nseries | 比如20 | 决定直流母线电压等级 |
| 并联组串数Nparallel | 比如10 | 决定阵列总功率 |
如果你想做一个100kW的阵列,可以用315W的组件,串联20块得到约600V的组件串电压,再并联10串,总功率大约是63kW,再适当增加组串数凑到目标值。具体参数要结合你直流母线的电压等级来定,母线如果是800V,串联数太少会导致MPPT电压够不到;串联数太多又会超压击穿。这块别硬凑,按“Voc×串联数×温度系数<母线最大耐压”去校核。
3.2 辐照度和温度怎么给进去
PV Array模块有三个输入:辐照度、温度、另外还有一个使能或者说工作点相关的输入。你既可以直接接Signal Builder或From Workspace给它喂时间序列,也可以把几个输入合并成向量。
我在做日仿真时,会用一个数组存放一天中每小时的辐照度数据,例如早上6点100W/m²,中午12点1000W/m²,下午6点又掉到100W/m²。用From Workspace模块把这段序列读进去,仿真的每一步都会自动插值。温度则常用一个恒定值(如25°C)先跑通,再考虑一天早晚温差。
这里有一个非常容易踩的坑:辐照度单位是W/m²,温度单位是℃,但很多人从Excel导入数据时把单位写错,结果光伏出力要么大到离谱,要么永远接近零。跑出来的曲线不对,第一件事查单位,不要先怀疑模块坏了。
3.3 MPPT实现:先用最经典的扰动观察法
MPPT算法有很多选择,最常用的还是扰动观察法P&O。它的逻辑很朴素:先让光伏工作电压朝某个方向加一个小扰动,如果功率变大了,就继续往这个方向扰动;如果功率变小了,就反向扰动。
在Simulink里实现P&O,我推荐用一个MATLAB Function模块,核心代码类似下面这样:
matlab复制function Vref = mppt_po(Vpv, Ipv, Vref_prev, P_prev, deltaV)
% 简单扰动观察法示例
Ppv = Vpv * Ipv;
if Ppv > P_prev
Vref = Vref_prev + deltaV;
else
Vref = Vref_prev - deltaV;
end
当然,实际使用时要加上persistent变量保存上一时刻的功率和电压参考值,还要限制Vref在合理范围内。仿真步长设10ms对MPPT足够,不用更快。曾有人把MPPT采样时间设成和PWM一样,结果仿真慢到怀疑人生,其实完全没必要。
3.4 MPPT和外层优化怎么分工
要理解多目标优化控制,必须清楚MPPT和优化调度是两层东西。MPPT管的是“光伏当前最大能出多少电”,这是内层控制,响应速度是毫秒级到秒级;而多目标优化管的是“要不要让光伏满发,还是主动弃掉一部分电,用电池顶上”。搞清楚这两层,后面看模型结构就不会乱。
在仿真里,我一般保留光伏的MPPT控制,同时把MPPT计算出的最大功率作为信息送到优化模块;优化模块给出“允许光伏出力上限”,两者取小得到最终光伏出力。这就像一个人是“能挣多少”,另一个人是“允许花多少”,两件事得分开算。
4. 储能侧与并网变流器:不容易踩坑的搭建顺序
4.1 电池模块先把SOC口径定清楚
储能电池在Simulink里同样有现成模块。库浏览器里搜索Battery,一般是Simscape Electrical下面的Battery模块。建模时需要注意三个指标:额定容量、初始SOC、充放电效率。
电池容量单位是Ah,假设系统是100kW/200kWh,直流母线电压800V,那么容量就是200000Wh / 800V = 250Ah。初始SOC一般设为50%或按调度开始时刻的实际状态给。如果你要做全天优化,千万别把初始SOC设成100%,否则充放电空间不对称,结果没有参考意义。
关于SOC的计算,Battery模块内部会自己做安时积分,你只需要把SOC输出信号引出来给控制器用。如果你自己搭SOC模型,公式就是:
[
SOC(t)=SOC(t_0) - \frac{1}{Q_{\text{nom}}}\int_{t_0}^{t} I_{\text{bat}}(\tau),d\tau
]
注意放电时电流方向取正还是负,每个模块库的习惯不一样,接反了SOC曲线会很诡异——变成越充电SOC越往下掉。我头一回就吃过这个亏,排错排了半天。
4.2 双向DC/DC变换器:建议用平均化模型
完整的双向DC/DC模型需要IGBT、二极管、电感、电容,再配上PWM触发,这部分适合研究电力电子本身。但如果你主要研究的是能量管理,建议用一个受控电流源加上一个简单的等效阻抗来模拟电池侧变换器。
原因是:平均化模型只关注“能量从一个端口流向另一个端口”的宏观行为,仿真速度快且数值稳定。具体做法是,用控制信号作为“电池功率指令”,除以当前电池电压得到电流参考值,再施加到受控电流源上。这样就建立了一个“指令到功率”的闭环,完全能反映储能系统对调度指令的响应。
如果你非要做开关级模型,也行,但仿真时间会几何级增加。我一般只在单独做变流器实验时才开开关级,和优化控制放在一起时一律平均化。
4.3 并网逆变器:能量管理视角下能省则省
并网逆变器的常规建模方法是三相VSC加PWM调制加dq轴电流双闭环控制。这套东西很经典,但不是所有场合都需要。在能量管理级仿真里,完全可以把逆变器看成一台“功率平衡器”:直流侧吸收多少功率,交流侧就注入多少功率,中间只考虑一个效率系数。
你在做多目标优化仿真时,最关心的是并网点功率曲线和SOC曲线,而不是母线电压波形。所以第一版模型可以用一个简单的三相受控电流源,电流幅值和相位根据功率指令算出来。等整个优化逻辑跑通后,如果想验证电能质量,再单独搭逆变器细节模型不迟。
4.4 为什么第一次搭建就用“平均化+功率平衡”更稳
最直接的理由是“不收敛的烦恼少一半”。Simulink仿真不收敛,绝大多数发生在含有高频开关和强非线性元件的电路里。你把高频细节去掉以后,剩下的模型是连续、平滑、时间尺度统一的,数值稳定性天然就好。这也是为什么很多做电网调度的工程师,最终交付的模型看起来“不够电气”,但它就是能稳稳跑完24小时。
5. 最优控制模型怎样与Simulink模型衔接
5.1 双层时间尺度:日前调度+实时控制
多目标优化控制落到Simulink里,通常分成两层。
第一层叫日前调度,基于预测的光伏出力和负荷曲线,以15分钟或1小时为粒度,求解未来24小时的功率分配方案。这一层可以用MATLAB脚本写优化算法,比如粒子群、遗传算法,最传统也能用线性规划,求解完成后生成一组功率指令序列。
第二层叫实时控制,在整个仿真过程中执行。它把日前调度给出的指令当作参考值,再根据实际的辐照度、SOC、并网功率随机误差进行修正。修正逻辑可以很简单,例如“SOC低于20%时即使调度让电池放电,也不执行,改为从电网取电”。这一层直接在Simulink里用逻辑判断或PI控制器实现即可。
5.2 把优化参数从MATLAB工作区导入模型
这是我见人问得最多的问题:外部算法算出来的曲线,怎么进到模型里去?三种方式最常用:
第一种,把调度结果存成工作区变量,用From Workspace模块读取。例如你在MATLAB里生成了两个数组t_out和P_bat_ref,From Workspace模块参数填simin,只要simin定义成一个两列矩阵,第一列是时间,第二列是变量值,仿真时就会自动按时间插值输入。
第二种,用Data Dictionary数据字典统一管理参数。团队协同开发时推荐这种方式,参数集中、可追溯,但配置复杂度也更高。
第三种,直接改模型回调函数。在模型属性里的InitFcn中写初始化脚本,每次仿真开始前自动从工作区加载参数。对于个人学习项目,这种方式最省事。
matlab复制% 模型初始化回调示例
load_system('pv_bess_optimization.slx');
P_bat_ref = load('dispatch_result.mat', 'P_bat_ref').P_bat_ref;
t_out = load('dispatch_result.mat', 't_out').t_out;
simin = [t_out, P_bat_ref];
5.3 控制逻辑用MATLAB Function还是S-Function
优化控制逻辑在Simulink里有几种承载方式:
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 普通逻辑模块 | 可视化强 | 复杂算法难实现 | 规则式控制 |
| MATLAB Function | 语法灵活、开发快 | 循环效率一般 | 公式计算和逻辑判断 |
| S-Function | 执行效率高、可集成C | 编写难度大 | 需要与硬件代码复用 |
| 外部.m脚本每次算 | 复用现成优化器 | 频繁调用开销大 | 日前调度离线计算 |
我的建议是:实时控制用MATLAB Function,离线优化用脚本。想要代码跑得快,先把算法里的大循环向量化,而不是一上来就写S-Function。坦白讲,在能量管理这个尺度里,MATLAB Function的耗时几乎可以忽略,真正的瓶颈都在Simulink的步长和模型刚性上。
6. 从空白工程开始:完整搭建顺序与参数基线
6.1 按“源-变换-控制-调度”四步搭
如果你是从空白模型开始,不要乱点,按下面顺序搭:
- 新建模型,先放PV Array模块和Battery模块,确定直流母线电压等级。
- 加入DC/DC变换器平均化模型、逆变器平均化模型和电网模块。
- 加MPPT控制模块,把光照、温度转换成光伏实际出力。
- 加电池功率分配模块,输入是调度参考和SOC反馈,输出是电池电流指令。
- 加最外层调度模块,也就是从工作区读取日前调度指令的模块。
- 加Scope和To Workspace模块,把关键信号记录下来。
搭完第一版,先别急着跑结果,先检查所有信号的数据类型和维度是否匹配。Simulink里很多诡异报错都源于“我以为它是标量,其实是1×1矩阵”。
6.2 求解器与步长怎么设置
这一步非常影响仿真体验。我的建议是:
- 如果模型里没有高频PWM,用变步长求解器,选ode23tb或ode15s,对电池、光伏这类有刚性的模型比较稳。
- Max Step Size设成10ms左右,不要默认自动。没有限制时,某些快速状态变化会产生巨大的内部步长,导致突变时刻数据失真。
- 仿真停止时间设成你需要的真实时间,比如3600秒做1小时场景,或86400秒做24小时场景。
如果你发现跑24小时实在太慢,一个可行的办法是把模型时间尺度做归一化,比如“1仿真秒代表1分钟”,然后把所有控制器采样时间成倍缩小。这种方式在学术论文里常见,但你要清楚它牺牲了对真实时钟的精确映射,所以工程交付时我一般还是老实按真实时间跑。
6.3 第一版模型常见的三个初级报错
新手跑首版模型时,报错主要集中在三处:
一是缺Powergui模块。在Simscape电气仿真里,如果看不到Powergui,很多电气模块会报“Powergui is required”。从Simscape库拖一个Powergui放进模型即可,不用接线。
二是导线没有真正连上。Simulink里两条线看似相连,实际上可能还差一个微小间距,放大后能看到一个红点。尤其是从画布上快速拖线时,很容易出现悬空连接。
三是Scope里什么也没有。先看是不是仿真时间太短还没到第一个数据点,再看是不是信号没有被记录。如果你用To Workspace记录,确认变量名有没有填对,别在命令行查一个不存在的变量。
7. 我在调试中遇到的高频故障:数据字典、不收敛、生成代码
7.1 模型报“找不到数据字典'can.sldd''hwa.sldd'”怎么办
这个问题我见过太多次,而且第一次见的时候完全摸不着头脑。错误信息一般是:
text复制找不到数据字典 'can.sldd'。 找不到数据字典 'hwa.sldd'。 组件:Simulink | 类别:Model 错误
原因基本是:这个模型最初是从某个项目模板拷贝来的,模板关联了公司内部的数据字典文件,但拷贝到你的电脑后,字典文件路径失效或没有一起拷过来。数据字典里存储了CAN报文、硬件参数这类信息,所以模型启动时会强制找它。
处理方法分几步:
- 菜单栏点“模型属性”→Model Properties→Data Dictionary,看模型绑定了几个字典。
- 检查字典文件是否在当前工程路径下,如果在其他目录,把路径加进MATLAB Path里。
- 如果你根本用不到CAN、HWA这些外部接口,就直接取消字典关联,改为使用基础工作区参数。操作方式是把Data Dictionary栏位清空,然后重新把模型里用到的参数在初始化脚本里定义好。
- 如果模型来自同事,最好让对方把字典也一并提交,否则别人拿过去必然报这个错。
这个“错误被消除”的过程,其实也在倒逼你把参数管理方式想清楚:宁可全部用基础工作区变量,也不要留一堆弄不清来源的字典依赖。
7.2 仿真不收敛,八成错在这几个地方
说到不收敛,最常见的不是数学问题,而是模型设置问题。
第一种,光伏阵列电压超出了母线允许范围。例如阵列开路电压接近900V,但DC/DC升压后母线设定只有600V,两者不匹配,导致求解器反复迭代失败。解决办法是重新计算串联数和母线电压的匹配关系。
第二种,电池功率指令太激进。比如SOC已经到5%,控制器还在命令它放电,这时功率指令会引起电流极度非线性,仿真步长被迫缩到极小,最后报“Singularity”。解决办法是在控制器输出端加饱和限幅模块,把功率指令限制在电池SOC允许的边界内。
第三种,PI控制器积分饱和。很多人在变流器控制里用PI,但又没有加积分限幅,误差一积累,控制器输出飘到十万八千里。解决办法是给PI输出加约束,并使用带积分限幅的PID Control模块。
如果这些都没问题,试一下把Max Step Size改小一两个量级,或者换成ode23t,很多时候就通了。在调试初期,牺牲一点速度换取仿真通过,是完全值得的。
7.3 模型生成C代码,什么时候做才合适
Simulink模型生成C代码是一个很大的主题,很多朋友一看到“代码生成”功能就兴奋,想把整个模型全转成嵌入式代码。结果发现不是报编译错误,就是生成的代码没法用。
我的经验是:不要在算法还在频繁调参的阶段生成代码。你应该先在Simulink里把多目标优化逻辑、控制逻辑、参数调好,确认仿真结果满足要求,再考虑代码生成。因为每次改动参数之后,代码生成和编译验证都要重新走一遍,时间成本极高。
在光伏储能项目里,真正需要生成代码的通常是实时控制器部分:MPPT算法、功率分配算法、保护逻辑。而日前调度这类“每天算一次”的算法,完全可以用上位机MATLAB脚本运行,再把结果下发给控制器。分清楚哪些要生成代码、哪些不用,是嵌入式模型设计的基本功。
7.4 Simulink外部模式:实时调参和硬件联调
如果你把模型部署到外部仿真目标或硬件上,Simulink的External Mode可以让你在程序运行过程中通过Host界面实时修改参数。过去调一个PI参数必须停下来改再重新编译,外部模式下可以直接拉一个Slider旋钮,一边跑一边看曲线变化。
对光储优化控制来说,外部模式的典型场景是硬件在环调试:电池BMS、PCS控制器实物的信号实时和仿真模型交互,你把优化权重alpha、SOC上下限、调度曲线当作可调参数,不断刷新,观察实际控制器是否按预期响应。这套流程在实验室验证阶段非常有用。
8. 怎么证明你的多目标优化控制确实有效
8.1 没有对照组的仿真报告没有说服力
很多初学者做完仿真,直接放一张“并网功率曲线优化后更好”的图就完事。但多目标优化控制有没有效果,必须通过对比才能说明。
至少要做三组对比:
- 方案A:光伏直接并网,储能不参与调节。
- 方案B:储能采用固定策略,比如低充高放。
- 方案C:储能采用多目标优化控制。
三组用相同的光照、温度、负荷、电价输入,比较成本、波动、SOC位置等指标。如果方案C每一项都优于方案A,至少说明储能确实发挥了作用;如果方案C相对方案B的优势不明显,那就要重新审视优化目标权重设置是否合理。
8.2 三个指标怎么算,一张表讲清楚
| 指标 | 计算方式 | 优化方向 |
|---|---|---|
| 日运行成本 | 购电费用减去售电收入 | 越小越好 |
| 并网功率波动 | 各时段并网功率方差或相邻时段差绝对值之和 | 越小越好 |
| 电池吞吐量 | 全天功率绝对值对时间积分 | 在同等收益下越小越好 |
在Simulink里,这些指标可以在仿真结束后从To Workspace记录的数据用MATLAB脚本算,也可以直接用“Simulation Multi-Parameter Sweep”对不同权重参数做批处理,把结果导成表格。这样你不仅能知道“这套权重好不好”,还能看出“哪套权重最适合当前电价结构”。
8.3 Simulation Data Inspector是验证利器
Simulink自带的数据检查器Simulation Data Inspector非常推荐你用起来。它可以一次性查看多组仿真的曲线,也可以做Run Comparison,直接把两组结果的差异以曲线叠加的方式展示。我在调权重时,就是靠它同时打开四五组仿真结果,一眼看出哪种策略在峰时放电更积极、谷时充电更充足。
用的时候有两点小提醒:在模型配置里把“数据记录”选项打开,正确勾选你要记录的总线信号;对比时先确保横轴时间范围和采样点数一致,否则差异曲线没有意义。
回到这篇文章最开始的问题:Simulink做光储多目标优化控制仿真,难的不是Simulink,而是你愿不愿意先把系统拆到合适粒度,再把优化和物理模型衔接好。我自己在多个项目里都走过弯路,最后沉淀下来的方法就是:物理对象用平均化模型抓住能量主线,优化调度用MATLAB脚本做好离线计算,Simulink专注执行和验证,然后反复调权重逼近项目真正想要的平衡。这套思路既能让你快速跑通第一个光储仿真,也为后续换成模型预测控制、接入实时数据预留了清晰的位置。你按这个顺序搭一遍,大概率会比直接从开关级模型开始轻松得多。
