目录
1 主要内容
2 程序难点及问题说明
3 部分程序
4 下载链接
1 主要内容
该程序分为两部分,日前优化部分——该程序首先根据《电力系统云储能研究框架与基础模型》上面方法,根据每个居民的实际需要得到响应储能充放电功率,优化得到整体的储能充放电功率情况。日内滚动mpc跟踪部分——采用《基于MPC的微电网并网优化调度》P31-36页相关内容,通过预测模型、滚动优化、反馈校正得到soc跟踪情况。

2 程序难点及问题说明
- 代码修正
for i=1:96
C=[C;
P_C1(i) == P_G1(i)+P_PV1(i);%储能功率=电网供电+光伏储能
P_PV1(i)<=P_C1(i)<=P_cap;%储能值约束
0<=P_G1(i)<=P_cap;%电网供电约束
E1(1)+sum(P_C1)*nc*t==E_cap;%soc约束,到储能结束soc=1
];
end
该程序含有这段代码,最后一句代码和i不相关,却重复循环96次,这句代码和下面的代码功能重复,在学习和修改代码的时候增加了复杂度。此外,还有几处类似问题已经修正。
原文献有储能充放电功率模型如下,该部分约束能够保证充放电功率不能同时不为0,但是在代码里面却存在这方面问题,已经进行了修正。

- 部分问题
代码原来的出图效果如下:

该部分是第一阶段优化结果,对于云储能用户,考虑最简单的调度策略,即根据电价详细分清楚每个时间段的充放电状态,所以soc曲线也较为规律(该图应该为5段,即充-放-充-放-充,但是考虑到前四段已经能够说明问题,就只分析前四段)。


得到两个阶段的soc跟踪效果图,但是为什么只是充电阶段的跟踪图呢?为什么第一个图效果那么好呢?第一个问题留给大家思考,第二个问题一会揭晓。
- 修正后的代码运行结果

修正代码实现了全过程的soc跟踪控制。

本模型的跟踪控制主要是由于光伏波动引起的,在不存在光伏波动的时间段就会出现soc完美的跟踪效果,也就回答了上面第二个问题。
3 部分程序
clc;clear all;
%% 数据准备
data = xlsread('预测数据.xlsx');
p_pv = data;%正值代表负荷。负值代表用户光伏发电量高于负荷的部分
p_pv(data<0) = 0; %用户的剩余光伏数据
prepv=sum(p_pv,2);
data_d = data;
data_d(data>0) = 0; %用户放电负荷数据
data_d = -1.*data_d;
preload=sum(data_d,2);
%% 参数设置
e_cap = xlsread('各用户租赁容量.xlsx'); %各用户租赁的能量容量
p_cap = 0.5.*e_cap; %各用户租赁的功率容量
E_cap = 175; %CES储能容量
P_cap = 90; %CES功率容量
e0 = 0.2.*e_cap; %各用户初始电量
E0 = 0.2*E_cap; %CES初始电量
emin = 0.1.*e_cap;
Emin = 0.1*E_cap;
nc = 0.96; %充电效率
nd = 0.96; %放电效率
r1 = 0.32; %低谷电价
r2 = 0.66; %平谷电价
r3 = 1.1; %高峰电价
r = zeros(288,1); %各时段电价
r(1:96) = r1;
r(97:144) = r3;
r(145:204) = r2;
r(205:252) = r3;
r(253:288) = r2;
t = 5/60; %时间间隔
%% 定义变量
E1 = sdpvar(96,1);%储能容量变量
E1(1) = E0;
P_PV1 = sum(p_pv(1:96,:),2);%充电时段0-8:00整体光伏出力
P_C1 = sdpvar(96,1);%储能出力变量
P_G1 = sdpvar(96,1);%电网供电变量
C=[];%初始化约束
for i=1:96
C=[C;
P_C1(i) == P_G1(i)+P_PV1(i);%储能功率=电网供电+光伏储能
P_PV1(i)<=P_C1(i)<=P_cap;%储能值约束
0<=P_G1(i)<=P_cap;%电网供电约束
% E1(1)+sum(P_C1)*nc*t==E_cap;%soc约束,到储能结束soc=1
];
end

















