配电网故障重构/孤岛划分/故障恢复

目录

1 主要内容

1.1 背景

1.2 流程图

2 代码

3 程序结果

4 程序链接


主要内容

程序主要复现《基于GA_BFGS算法的配电网故障恢复性重构研究_郑海广》,采用matlab编程软件实现,依据网络结构和DG供电方式对配电网进行孤岛划分,将含有 DG 的配电网拓扑结构看成一个树,搭建成连通图模型,使得将孤岛的划分变成了求取最小生成树,以网损和开关开断次数作为目标,采用 IEEE33 节点配电网为算例,通过遗传算法寻优计算,从而得到最佳的重构方案。

1.1 背景

当配电网系统发生系统故障由正常的运行状态进入故障状态运行时,一般的恢复性重构的做法是控制一些开关的通断来将故障线路断开,并将非故障线路重新恢复供电,当配电网中含有 DG 并网运行时,这种做法有可能会导致 DG被迫断开停止供电或者转为孤岛运行,只有等到电力系统的故障排除恢复正常后DG 才能重新接入电网运行,这种做法使得 DG 的利用率和供电能力大大降低,使得 DG 无法充分利用。所以当系统发生故障时,如何使 DG 能够充分的参与到网络的恢复性重构,而不是中断供电,对于提高 DG 的利用率和供电可靠性、降低系统中线路的有功损耗、提高系统的电能质量。

恢复重构目标:当配电系统发生系统故障时,具有独立供电能力的 DG 划为孤岛,使得失电负荷量尽可能最小;孤岛外的配电网可以通过控制开关的通断实现故障后的恢复。对孤岛外的配电网进行恢复性重构的过程中,需要检测岛外是否还有失电负荷,若有,则需要利用联络开关将其接入剩余的配电网中,若存在能够和主网相连接且不具有独立供电能力的 DG,将其接入主网,进行配电网重构。

1.2 流程图

代码

clear,clc,close all
currentFolder = pwd;
​
addpath(genpath(currentFolder));% 将matpower加入搜索路径
dgData.dgBus = [6 13 24 31]+1;
dgData.bFlag = [0 1 1 1];% 是否具有独立供电能力
dgData.sFlag = [1 1 0 1];% 故障后能够与主网保持连接
dgData.cFlag = [1 1 1 1];% 是否具有控制调度中心保持通信的能力
dgData.factor = [0.85 0.9 0.8 0.9];
dgData.power = [700 500 1000 650];
netData = case33bw;
disp('****************划分孤岛******************');
island = SetIsland(dgData,netData);% 设置孤岛
falutBranch  = [28];
% falutBranch = [9 22];% 故障支路
disp('****************发生故障******************');
netData = RunIsland(netData,dgData,island,falutBranch);%根据故障确定实际孤岛
disp('****************恢复重构******************');
netData = Reconfig(netData);% 恢复重构
rmpath(genpath(currentFolder));
  if nargin<1
    dgBus = [6 13 24 31]+1;
    bFlag = [0 1 1 1];% 是否具有独立供电能力
    sFlag = [0 0 1 0];% 故障后能够与主网保持连接
    cFlag = [1 1 1 1];% 是否具有控制调度中心保持通信的能力
​
    dgPower = [700 500 1000 650];
    netData = case33bw;
  else
    dgBus = dgData.dgBus;
    bFlag = dgData.bFlag;% 是否具有独立供电能力
    sFlag = dgData.sFlag;% 故障后能够与主网保持连接
    cFlag = dgData.cFlag;% 是否具有控制调度中心保持通信的能力
​
    dgPower = dgData.power;
  end
  bus = netData.bus;
  busPower = bus(:,3)'*1e3;% 有功功率
  busQower = bus(:,4)'*1e3;% 无功功率
  branch = netData.branch;
  branch(branch(:,11)==0,:) = [];% 删除联络开关
  busNum = length(netData.bus(:,1));% 节点数量
  island = zeros(1,busNum);
  w = zeros(1,busNum);
  w([5 6 12 13 23 24 29 31]+1) = 100;% 一类负荷
  w([7 11 15 22 26 30 32]+1) = 10;% 二类负荷
  w([1 2 3 4 8 9 10 14 16 17 18 19 20 21 25 27 28]+1) = 1;% 三类负荷
  M1 = sparse(branch(:,1),branch(:,2),branch(:,3),busNum,busNum);
  % tril returns the lower triangular part of the matrix.
  islandPower = zeros(1,length(dgBus));
  M2 = tril(M1+M1');
  for idg = 1:length(dgBus)
    
    if bFlag(idg)==1% 是否具有独立供电能力
      island(dgBus(idg)) = idg;
      islandPower(idg) = busPower(dgBus(idg));
      flag = 1;
      while flag% 当flag=0跳出循环
        islandBus = find(island==idg);% 已纳入孤岛的节点
        willBus = [];
        willPower = [];
        willDis = [];
        for ibus = 1:busNum
          if island(ibus)==0% 节点ibus尚未纳入孤岛
            [dist,path] = graphshortestpath(M2,dgBus(idg),ibus,'Directed',false);
            path(end) = [];
            if all(ismember(path,islandBus))% 拟加入节点到DG的路径上的节点已经被纳入孤岛
              willPower = [willPower,busPower(ibus)*w(ibus)];
              willDis = [willDis,dist];
              willBus = [willBus,ibus];
            end
          end
        end
        [~,idx] = sort(willPower,'descend');% 排序
        % willPower = willPower(idx);
        % willDis = willDis(idx);
        willBus = willBus(idx);
        flag = 0;
        for ift = 1:length(willBus)
          if islandPower(idg)+busPower(willBus(ift))<=dgPower(idg)% 判断新纳入的节点容量是否超过DG容量
            island(willBus(ift)) = idg;
            islandPower(idg) = islandPower(idg)+busPower(willBus(ift));
            flag = 1;
            break;
          end
        end
      end
    end
  end
  for idg = 1:length(dgData.dgBus)
    fprintf('DG%d对应的孤岛\n',idg);
    disp(find(island==idg));
    fprintf('岛内负荷%d+j%d\n',sum(busPower(island==idg)),sum(busQower(island==idg)));
  end
end

程序结果

4 程序链接

这里是电力程序代码聚集地,点击直达!

你可能感兴趣的:(matlab,孤岛划分,故障重构,配电网,33节点系统)