目录
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