10kV配电网络简单潮流计算程序——电力系统分析课设2018(matlab
10kV配电网络简单潮流计算程序——电力系统分析课设2018(matlab)
10kV配电网络简单潮流计算程序——电力系统分析课设2018
主程序文件说明
% 适用于考虑变压器,已知根节点电压与叶节点负荷,多节点,节点数目不确定,树状网络的潮流计算,输入文件的第一个节点必须是根节点
ldt=dlmread(‘network.txt’);%读输入文件
network.txt,将支路数据读入ldt矩阵
nf=ldt(:,1);%存放支路的首节点
nt=ldt(:,2);%存放支路的末节点
r=ldt(:,3);%存放支路的电阻
x=ldt(:,4);%存放支路的电抗
k=ldt(:,5);%存放支路理想变压器的变比
z=r+1jx;% 将网络参数读入各数组,忽略线路导纳
branchnum=length(nf);%存放支路数目
busnum=max([nf’,nt’]);%存放节点数目
bnm=busnum;%存放节点数目
% 计算支路数与节点数
sgl=setxor(nf,nt);%存放包含根节点与叶子节点的单节点
sglnum=length(sgl);%存放单节点数
leaf=[sgl(2:sglnum,1)]’;% 存放叶子节点
leafnum=length(leaf);%存放叶子节点数
% 找出叶子节点并计算叶子节点数
bdt=dlmread(‘Bus.txt’);%读输入文件Bus.txt,将支路数据读入bdt矩阵
bus=bdt(:,1);%存放全网节点
p=bdt(:,2);%存放节点有功负荷
q=bdt(:,3);%存放节点无功负荷
U=bdt(:,4);%存放节点电压
SD=p+1jq;%存放节点复负荷
SDD=SD;%存放节点复负荷,为每一次迭代时的节点负荷赋初值
% 将节点参数读入各数组
Node=zeros(busnum,2);%存放节点输出信息的输出矩阵
Node(:,1)=bus’;Node(:,2)=U’;%节点参数输出矩阵,记录节点电压
Brch=zeros(branchnum,9);%存放支路输出信息的输出矩阵
Brch(:,1)=nf’;Brch(:,2)=nt’;% 支路参数输出矩阵,记录支路损耗与电压降落以及支路首末端功率,列具体含义见输入文件
s=zeros(branchnum,1);%存放各支路损耗的数组
c=zeros(leafnum,1);%记录各叶节点的父节点
circle=0;%存放迭代次数
US=[U(2),U(2)+1]%存放每次迭代前后的第二节点电压值,为迭代收敛判据使用
%赋初值使循环开始
while(abs(US(2)-US(1))>=0.003)%以第二点电压两次迭代中计算结果之差小于0.003做迭代收敛判据US(2)=US(1);
while(isequal(leafnum,0)==0)%判断是否还存在叶节点,存在则执行循环
for m=1:1:leafnum
for n=1:1:branchnum
if(nt(n)==leaf(m))
s(n)=powerloss(SD(leaf(m)),U(leaf(m))k(n),z(n))%考虑变压器计算各支路电压损耗
Brch(n,3)=real(SD(leaf(m))+s(n))
Brch(n,4)=imag(SD(leaf(m))+s(n)) %记录叶节点相关支路首端有功与无功
Brch(n,7)=real(s(n))
Brch(n,8)=imag(s(n)) %记录叶节点相关支路有功与无功损耗
Brch(n,5)=p(leaf(m))
Brch(n,6)=q(leaf(m))
c(m)=nf(n)
end;
end;
end;%计算与叶节点相关的支路参数
g=unique©;%g中存放与叶节点相连的待剪叶的父节点
gnum=length(g);%g中存放的与叶节点相连的待剪叶父节点数目
t=zeros(gnum+1,1);%t数组中存放新的可能的叶节点
for m=1:1:gnum
for n=1:1:branchnum
if(nf(n)==g(m))
if(isempty(intersect(leaf,nt(n))))
t(m)=g(m);%t数组中存放新的可能的叶节点
break;
else SD(g(m))=SD(g(m))+Brch(n,3)+1jBrch(n,4); %计算各节点处负荷
end
end
end
end%剪叶预处理,计算各父节点处去掉叶节点后的负荷
clear sgl;
clear c;
clear leaf;%清除叶节点相关的变量
sgl=setxor(t,g);
sglnum=length(sgl);
leaf=[sgl(2:sglnum,1)]’;%剪叶得到新的叶节点
leafnum=length(leaf);%新的叶节点数
c=zeros(leafnum,1);%找出新的叶节点
endS=Brch(:,3)+1j*Brch(:,4);%存放各支路首端功率
u=zeros(branchnum,1);%存放各支路电压降落
for m=1:1:branchnum
for n=1:1:busnum
if(bus(n)nf(m))
u(m)=voltagesags(S(m),Node(n,2),z(m));%计算各支路损耗
Brch(m,9)=u(m);%刷新输出矩阵支路损耗
U(nt(m))=(U(nf(m))-u(m))/k(m);%逆推刷新各节点电压
Node(nt(m),2)=U(nt(m));%刷新输出矩阵Node中的节点电压
end
end
end%通过首端功率与电压逆推线路各节点电压
SD=SDD;%为下一次迭代做准备
US(1)=U(2);
circle=circle+1;%迭代次数加1
end
Umin=min([U’]);%存放全网最低电压
for n=1:1:busnum
if(U(n)Umin)
N=n;%全网电压最低点
end;
end;
PF=Brch(1,3);%总电源有功
QF=Brch(1,4);%总电源无功
fid=fopen(‘Branchresult.txt’,‘wt’);%写入文件路径
[m,n]=size(Brch);
for i=1:1:m
for j=1:1:n
if jn
fprintf(fid,’%g\n’,Brch(i,j));
else
fprintf(fid,’%g\t’,Brch(i,j));
end
end
end
fclose(fid);%将潮流计算支路计算结果输出到Branchresult.txt
fid=fopen(‘Noderesult.txt’,‘wt’);%写入文件路径
[m,n]=size(Node);
for i=1:1:m
for j=1:1:n
if jn
fprintf(fid,’%g\n’,Node(i,j));
else
fprintf(fid,’%g\t’,Node(i,j));
end
end
end
fclose(fid); %将节点潮流计算结果输出到Noderesult.txt
fid=fopen(‘result.txt’,‘wt’);%写入文件路径
fprintf(fid,‘迭代次数%g\n’,circle);
fprintf(fid,‘最低电压%6.3fkv\n’,Umin);
fprintf(fid,‘最低电压点%g\n’,N);
fprintf(fid,‘总电源有功%6.3fMW\n’,PF);
fprintf(fid,‘总电源无功%6.3fMvar\n’,QF);
fclose(fid); %将潮流计算全网信息结果输出到result.txt
电压降落计算子程序文件说明
function u=voltagesags(S,U,z)% 本程序求解各支路的电压降落,忽略横分量
% 用演示MATLAB函数帮助的实现方法
r=real(z);
x=imag(z);
p=real(S);
q=imag(S);% 将传递参数虚实部分解
u=(pr+qx)/U;
end
功率损耗计算子程序文件说明
function s=powerloss(S,U,z)%本程序求解各支路的功率损耗
% 用演示MATLAB函数帮助的实现方法R=(real(S)2+imag(S)2)*real(z)/(U2);I=(real(S)2+imag(S)2)*imag(z)/(U2);
s=complex(R,I);
end
10kV配电网络简单潮流计算程序——电力系统分析课设2018(matlab相关教程