ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【电力系统】电-气-热综合能源系统耦合调度、优化调度附Matlab代码

【电力系统】电-气-热综合能源系统耦合调度、优化调度附Matlab代码 ✅作者简介热爱科研的Matlab仿真开发者擅长数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 往期回顾关注个人主页Matlab科研工作室 关注我领取海量matlab电子书和数学建模资料个人信条格物致知,完整Matlab代码获取及仿真咨询内容私信。 内容介绍一、研究背景与核心价值随着高比例风电、光伏等可再生能源大规模接入区域能源系统传统电力、天然气、热力子系统独立调度的运行模式已无法适配多能流互补协同的发展需求普遍存在能源利用效率偏低、风光弃电率偏高、跨系统灵活调节资源难以统筹利用等突出问题。电-气-热综合能源系统通过热电联产、电转气、电锅炉等耦合设备打破不同能源子系统之间的物理壁垒实现多能流的协同优化调度可显著提升系统整体运行经济性、降低碳排放水平同时增强高比例新能源消纳能力是当前能源互联网领域的核心研究方向。本研究面向典型工业园区级电-气-热综合能源系统构建多能流协同优化调度模型统筹考虑电力子系统、天然气子系统、热力子系统的运行约束以系统总运行成本最小化为优化目标实现源侧多能源互补、荷侧多负荷协同、储侧多类型储能联动的全局最优调度为工业园区综合能源项目的落地运行提供可直接复用的调度方案。二、综合能源系统拓扑与核心组件建模本次研究选取的工业园区综合能源系统覆盖电、气、热三类能源网络各子系统通过核心耦合设备实现双向能量交互所有设备模型均采用工程实测效率参数标定电力子系统接入50MW风电、30MW光伏分布式新能源机组配置10MW/20MWh锂电池储能上级电网通过10kV母线与园区相连可实现与外部电网的双向购售电交互同时接入园区工业、居民两类电力负荷典型日最大电负荷为65MW。天然气子系统由外部市政天然气气源供气园区内配置2个储气罐实现燃气调峰天然气管网采用稳态管流模型考虑管道传输延时与管存效应典型日最大气负荷为12万标准立方米。热力子系统覆盖园区集中供热管网采用二次网回水温度调节模式配置2个储热罐实现热能跨时段转移典型日最大热负荷为40MW。多能耦合核心设备热电联产CHP机组额定发电功率25MW热电比1.2发电效率0.4供热效率0.35燃烧天然气同时产出电能与热能是电-气-热三系统的核心枢纽设备。电转气P2G设备额定功率10MW电转气能量转换效率0.6可在新能源大发时段将弃电转化为天然气注入燃气管网实现电能向天然气的跨时段长时储能。电锅炉与空气源热泵作为辅助供热设备可在热负荷高峰时段补充供热平抑CHP机组的供热压力同时为电力系统提供灵活的可调负荷资源。三、协同优化调度模型构建本研究以24小时日前调度为时间尺度将调度时间分辨率设定为1小时构建混合整数线性规划优化模型统筹兼顾经济性、安全性与低碳性多重目标。3.1 目标函数设计优化目标为系统总运行成本最小化核心组成部分包括外部能源采购成本包含分时电价下的外部电网购电成本、天然气气源采购成本设备运行维护成本覆盖风电、光伏、CHP机组、储能、储热等所有设备的单位功率运维成本新能源弃能惩罚成本对风电、光伏的弃电量设置阶梯惩罚项倒逼系统提升新能源消纳率碳排放惩罚成本引入碳交易机制将天然气燃烧、外部电网购电对应的碳排放折算为运行成本引导系统低碳运行。3.2 全维度约束体系完整覆盖三类能源子系统的运行物理约束避免出现单系统独立调度引发的跨维度运行矛盾电力系统约束包含电功率实时平衡约束、储能充放电SOC上下限与爬坡约束、联络线交互功率上下限约束、新能源出力波动约束天然气系统约束包含天然气管网流量平衡约束、储气罐充放气约束、节点气压上下限约束、管道管存动态平衡约束热力系统约束包含热力功率实时平衡约束、储热罐充放热约束、供热管网温度上下限约束、热用户最低供热品质约束耦合设备运行约束包含CHP机组电热出力可行域约束、P2G设备转换效率约束、电锅炉电热转换约束同时引入设备启停二元整数变量配置机组最小启停时间约束避免设备频繁启停造成的寿命损耗。⛳️ 运行结果 部分代码function [Ybus, Yf, Yt] makeYbus(baseMVA, bus, branch)%MAKEYBUS Builds the bus admittance matrix and branch admittance matrices.% [Ybus, Yf, Yt] makeYbus(baseMVA, bus, branch) returns the full% bus admittance matrix (i.e. for all buses) and the matrices Yf and Yt% which, when multiplied by a complex voltage vector, yield the vector% currents injected into each line from the from and to buses% respectively of each line. Does appropriate conversions to p.u.% MATPOWER Version 2.0% by Ray Zimmerman, PSERC Cornell 12/19/97% Copyright (c) 1996, 1997 by Power System Engineering Research Center (PSERC)% See http://www.pserc.cornell.edu/ for more info.%% constantsj sqrt(-1);nb size(bus, 1); %% number of busesnl size(branch, 1); %% number of lines%% ----- define named indices into bus, branch matricesPQ1; PV2; REF3; NONE4; BUS_I1; BUS_TYPE2; PD3; QD4; GS5; BS6; BUS_AREA7;VM8; VA9; BASE_KV10; ZONE11; VMAX12; VMIN13; LAM_P14; LAM_Q15; MU_VMAX16; MU_VMIN17;F_BUS1; T_BUS2; BR_R3; BR_X4; BR_B5; RATE_A6; RATE_B7; RATE_C8;% standard notation (in input)TAP9; SHIFT10; BR_STATUS11; BR_angmin12; BR_angmax13;% standard notation (in input)PF12; QF13; PT14; QT15; MU_SF16; MU_ST17; % MU_SF: idx of MU on MVA lim at f bus (in opf)%% ----- check that bus numbers are equal to indices to bus (one set of bus numbers)if any(bus(:, BUS_I) ~ [1:nb])error(buses must appear in order by bus number)end%% for each branch, compute the elements of the branch admittance matrix where%%%% | If | | Yff Yft | | Vf |;%% | | | | * | |;%% | It | | Ytf Ytt | | Vt |;%%stat branch(:, BR_STATUS); %% ones at in-service branchesYs stat ./ (branch(:, BR_R) j * branch(:, BR_X)); %% series admittanceBc stat .* branch(:, BR_B); %% line charging susceptancetap ones(nl, 1); %% default tap ratio 1i find(branch(:, TAP)); %% indices of non-zero tap ratiostap(i) branch(i, TAP); %% assign non-zero tap ratiostap tap .* exp(j*pi/180 * branch(:, SHIFT)); %% add phase shiftersYtt Ys j*Bc/2;Yff Ytt ./ (tap .* conj(tap));Yft - Ys ./ conj(tap);Ytf - Ys ./ tap;%% compute shunt admittance%% if Ps is the real power consumed by the shunt at V 1.0 p.u.%% and Qs is the reactive power injected by the shunt at V 1.0 p.u.%% then Ps - j Qs V * conj(Ys * V) conj(Ys) Gs - j Bs,%% i.e. Ys Ps j Qs, so ...Ys (bus(:, GS) j * bus(:, BS)) / baseMVA; %% vector of shunt admittances%% build Ybusf branch(:, F_BUS); %% list of from busest branch(:, T_BUS); %% list of to busesCf sparse(f, 1:nl, ones(nl, 1), nb, nl); %% connection matrix for line from busesCt sparse(t, 1:nl, ones(nl, 1), nb, nl); %% connection matrix for line to busesYbus spdiags(Ys, 0, nb, nb) ... %% shunt admittanceCf * spdiags(Yff, 0, nl, nl) * Cf ... %% Yff term of branch admittanceCf * spdiags(Yft, 0, nl, nl) * Ct ... %% Yft term of branch admittanceCt * spdiags(Ytf, 0, nl, nl) * Cf ... %% Ytf term of branch admittanceCt * spdiags(Ytt, 0, nl, nl) * Ct; %% Ytt term of branch admittance%% Build Yf and Yt such that Yf * V is the vector of complex branch currents injected%% at each branchs from bus, and Yt is the same for the to bus endif nargout 1i [[1:nl]; [1:nl]]; %% double set of row indicesYf sparse(i, [f; t], [Yff; Yft]);Yt sparse(i, [f; t], [Ytf; Ytt]);endreturn; 参考文献往期回顾扫扫下方二维码
返回列表