点击上方蓝字关注“公众号”

MATLAB的两机五节点潮流计算程序
现代电力系统潮流计算的方法主要:高斯法、牛顿法、快速解耦法。

用高斯法对实际电力系统进行潮流计算,需要用到busdata和linedata两个文件。
程序设计为输入负荷和发电机的有功MW和无功Mvar,以及节点电压标幺值和相角的角度值。根据所选复功率为基准值将负荷和发电机的功率转换为标幺值。
对于PV节点,如发电机节点,要提供一个无功功率限定值。当给定电压过高或过低时,无功功率可能超出功率限定值。
在几次迭代之后(高斯-塞德尔迭代为10次),需要检查一次发电机节点的无功出力,如果接近限定值,电压幅值进行上下5%的调整,使得无功保持在限定值内。


壹
节点数据busdata
节点数据文件busdata:节点信息输入格式为单行输入,输入的数据形成一个矩阵,叫做busdata矩阵。
第一列为节点号;
第二列为节点类型;
第三列和第四列分别为节点电压幅值(标幺值)和相角(单位为度);
第五列和第六列分别为负荷的有功功率和无功功率;
第七列到十列分别为发电机的有功功率、无功功率、最小无功出力和最大无功出力;
最后一列为并联电容器注入无功功率。
01
第二列的编码用0、1、2来区分PQ节点、平衡节点和PV节点:
0表示PQ节点,输入正的有功功率(MW)和无功功率(Mvar),并且要设定节点电压初始估计值,一般幅值和相角分别设为1和0,若已经给定初始值,则用其给定值来代替1和0。
1表示平衡节点,且已知该节点的电压幅值和相角。
2表示PV节点,要设定该节点的节点电压幅值和发电机的有功功率(MW),并设定发电机的无功最小出力和最大出力(Mvar)。

02
线路数据linedata
线路数据文件linedata线路数据用节点对的方法来确定,数据包含在称为linedata的矩阵中。
第一列和第二列为节点号码,
第三列到第五列为线路电阻、电抗及该线路电纳值的一半,以标幺值表示。
最后一列为变压器分接头设定值,对线路来说,需要输入1。
线路输入为无输入顺序,对变压器来说,左侧的节点号设为分接头端。

贰
根据自己实际的五节点两机图,结合上面的理论知识,编写busdata。01
根据自己实际的五节点两机图,结合上面的理论知识,编写linedata。
02
高斯-赛德尔法潮流程序编写:
clear;clc;
fivebus
bus1 = busdata(:,1);
bus2 = busdata(:,2);
bus3 = busdata(:,3);
% Theta = busdata(:,4)*pi/180;
Theta = busdata(:,4);
PL = busdata(:,5);
QL = busdata(:,6);
PG = busdata(:,7);
QG = busdata(:,8);
Nbus = length(bus1);
v=zeros(Nbus,2);
v(:,1)=bus3;
v(:,2)=Theta;
Br1 = linedata(:,1);
Br2 = linedata(:,2);
LR = linedata(:,3);
LX = linedata(:,4);
LB = linedata(:,5);
Tap = linedata(:,6);
Nline= length(Br1);
%------------形成导纳矩阵Y----------------
Y = zeros(Nbus,Nbus);
%---------导纳矩阵的对角线元素---------
for ii = 1:Nbus
for jj = 1:Nline
if Br1(jj) == ii
Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)*(1/Tap(jj)^2)+1i*LB(jj);
elseif Br2(jj) == ii
Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)+1i*LB(jj);
end
end
end
%---------导纳矩阵的非对角线元素--------
for ii = 1:Nline
Y(Br1(ii),Br2(ii)) = Y(Br1(ii),Br2(ii))-1/(LR(ii)+LX(ii)*1i)*(1/Tap(ii));
Y(Br2(ii),Br1(ii)) = Y(Br1(ii),Br2(ii));
end
%------------导纳矩阵Y-end----------------
G = real(Y);
B = imag(Y);
U=bus3;
D=Theta;
UU=zeros(Nbus,1);
for i=1:Nbus
UU(i)=U(i)*(cos(D(i))+1i*sin(D(i)));%UU为复数
end
DD=D;
P=PG-PL;
Q=QG-QL;
k=0;%迭代次数
e=0.00001;%迭代精度
UU_former=zeros(Nbus,1);
delta_e=UU-UU_former;
tic;
while max(abs(delta_e))>e && k<2000
UU_former=UU;
for i=1:Nbus
if bus2(i)==1
continue;
else if bus2(i)==2
UU(i)=U(i)*(cos(angle(UU(i)))+1i*sin(angle(UU(i)))); %重设PV节点的电压幅值
T1_Q=0; %计算PV节点的无功Q
for j=1:Nbus
T1_Q=T1_Q+conj(Y(i,j))*conj(UU(j));
end
Q(i)=imag(UU(i)*T1_Q);
T1_U=0;
for j=1:Nbus %进行电压迭代
if(j~=i)
T1_U=T1_U+Y(i,j)*UU(j);
end
end
UU(i)= (1/Y(i,i))*((P(i)-1i*Q(i))/conj(UU(i))-T1_U);
else
T1_U=0;
for j=1:Nbus %进行电压迭代
if(j~=i)
T1_U=T1_U+Y(i,j)*UU(j);
end
end
UU(i)=(1/Y(i,i))*((P(i)-1i*Q(i))/conj(UU(i))-T1_U);
end
end
end
k=k+1;
delta_e=UU-UU_former;
end
toc;
U_amp=abs(UU);
V=abs(U_amp)*230; %幅值
U_ang=angle(UU);
U_deg=U_ang*180/pi;
03
牛顿-拉弗逊算法程序编写:
clear;clc;
fivebus
bus1 = busdata(:,1);
bus2 = busdata(:,2);
bus3 = busdata(:,3);
Theta = busdata(:,4)*pi/180;
PL = busdata(:,5);
QL = busdata(:,6);
PG = busdata(:,7);
QG = busdata(:,8);
Nbus = length(bus1);
v=zeros(Nbus,2);
v(:,1)=bus3;
v(:,2)=[0 0 0 0 0]';
Br1 = linedata(:,1);
Br2 = linedata(:,2);
LR = linedata(:,3);
LX = linedata(:,4);
LB = linedata(:,5);
Tap = linedata(:,6);
Nline= length(Br1);
%------------形成导纳矩阵Y----------------
Y = zeros(Nbus,Nbus);
%---------导纳矩阵的对角线元素---------
for ii = 1:Nbus
for jj = 1:Nline
if Br1(jj) == ii
Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)*(1/Tap(jj)^2)+1i*LB(jj);
elseif Br2(jj) == ii
Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)+1i*LB(jj);
end
end
end
%---------导纳矩阵的非对角线元素--------
for ii = 1:Nline
Y(Br1(ii),Br2(ii)) = Y(Br1(ii),Br2(ii))-1/(LR(ii)+LX(ii)*1i)*(1/Tap(ii));
Y(Br2(ii),Br1(ii)) = Y(Br1(ii),Br2(ii));
end
%------------导纳矩阵Y-end----------------
G = real(Y);
B = imag(Y);
e = v(:,1);
f = v(:,2);
%-----------利用直角坐标求解潮流------------
P=zeros(Nbus,1);
Q=zeros(Nbus,1);
U2=zeros(Nbus,1);%PV节点电压的平方
for ii=1:Nbus
if bus2(ii)==2
U2(ii)=bus3(ii)^2;
end
end
delta_e=ones(Nbus,1);
delta_f=ones(Nbus,1);
delta_e(5)=0;
delta_f(5)=0;
Delta_PQ=zeros(2*Nbus,1);
delta_P=PG-PL;
delta_Q=QG-QL;
Miter=100; %迭代次数限制
k=0;
tic;
while k=0.0001 && max(abs(delta_f))>=0.0001
k=k+1;
U3=zeros(Nbus,1);%PV节点电压的平方
T1_P=zeros(Nbus,1);
T2_P=zeros(Nbus,1);
T1=zeros(Nbus,1);
T2=zeros(Nbus,1);
for ii=1:Nbus
if bus2(ii)==0
for jj=1:Nbus
T1_P(ii)=T1_P(ii)+G(ii,jj)*e(jj)-B(ii,jj)*f(jj);
T2_P(ii)=T2_P(ii)+G(ii,jj)*f(jj)+B(ii,jj)*e(jj);
end
P(ii)=T1_P(ii)*e(ii)+T2_P(ii)*f(ii);
Q(ii)=T1_P(ii)*f(ii)-T2_P(ii)*e(ii);
elseif bus2(ii)==2
for jj=1:Nbus
T1_P(ii)=T1_P(ii)+G(ii,jj)*e(jj)-B(ii,jj)*f(jj);
T2_P(ii)=T2_P(ii)+G(ii,jj)*f(jj)+B(ii,jj)*e(jj);
end
P(ii)=T1_P(ii)*e(ii)+T2_P(ii)*f(ii);
U3(ii)=e(ii)^2+f(ii)^2;
end
end
for ii=1:Nbus
if bus2(ii)==0
Delta_PQ(2*ii-1)=delta_P(ii)-P(ii);
Delta_PQ(2*ii)=delta_Q(ii)-Q(ii);
elseif bus2(ii)==2
Delta_PQ(2*ii-1)=delta_P(ii)-P(ii);
Delta_PQ(2*ii)=U2(ii)-U3(ii);
end
end
%-----------形成雅克比矩阵JJ-----------
J=zeros(2*Nbus,2*Nbus);
for ii=1:Nbus
if bus2(ii)==0
for jj=1:Nbus
if ii~=jj
J(2*ii-1,2*jj-1)=-B(ii,jj)*e(ii)+G(ii,jj)*f(ii);
J(2*ii-1,2*jj)=G(ii,jj)*e(ii)+B(ii,jj)*f(ii);
J(2*ii,2*jj-1)=-J(2*ii-1,2*jj);
J(2*ii,2*jj)=J(2*ii-1,2*jj-1);
elseif ii==jj
for kk=1:Nbus
T1(jj)=T1(jj)+G(jj,kk)*f(kk)+B(jj,kk)*e(kk);%T1=b
T2(jj)=T2(jj)+G(jj,kk)*e(kk)-B(jj,kk)*f(kk);%T2=a
end
J(2*ii-1,2*ii-1)=-B(ii,ii)*e(ii)+G(ii,ii)*f(ii)+T1(ii);
J(2*ii-1,2*ii)=G(ii,ii)*e(ii)+B(ii,ii)*f(ii)+T2(ii);
J(2*ii,2*ii-1)=-G(ii,ii)*e(ii)-B(ii,ii)*f(ii)+T2(ii);
J(2*ii,2*ii)=-B(ii,ii)*e(ii)+G(ii,ii)*f(ii)-T1(ii);
end
end
elseif bus2(ii)==2
for jj=1:Nbus
if ii~=jj
J(2*ii-1,2*jj-1)=-B(ii,jj)*e(ii)+G(ii,jj)*f(ii);
J(2*ii-1,2*jj)=G(ii,jj)*e(ii)+B(ii,jj)*f(ii);
J(2*ii,2*jj-1)=0;
J(2*ii,2*jj)=0;
elseif ii==jj
for kk=1:Nbus
T1(jj)=T1(jj)+G(jj,kk)*f(kk)+B(jj,kk)*e(kk);%T1=b
T2(jj)=T2(jj)+G(jj,kk)*e(kk)-B(jj,kk)*f(kk);%T2=a
end
J(2*ii-1,2*ii-1)=-B(ii,ii)*e(ii)+G(ii,ii)*f(ii)+T1(ii);
J(2*ii-1,2*ii)=G(ii,ii)*e(ii)+B(ii,ii)*f(ii)+T2(ii);
J(2*ii,2*ii-1)=2*f(ii);
J(2*ii,2*ii)=2*e(ii);
end
end
end
end
Delta_S=Delta_PQ(1:(2*Nbus-2));
JJ=J(1:(2*Nbus-2),1:(2*Nbus-2));
%-----------形成雅克比矩阵JJ--end---------
Delta_u=JJ\Delta_S;
for ii=1:(Nbus-1)
delta_e(ii)=Delta_u(2*ii);
delta_f(ii)=Delta_u(2*ii-1);
end
e=delta_e+e;
f=delta_f+f;
end
u=e+1i*f;U=abs(u);
V=abs(u)*230;
theta=180*imag(log(u))/pi;%节点母线电压相角
04
PQ潮流法程序编写:
clear;
clc;
fivebus
bus1 = busdata(:,1);
bus2 = busdata(:,2);
bus3 = busdata(:,3);
% Theta = busdata(:,4)*pi/180;
Theta = busdata(:,4);
PL = busdata(:,5);
QL = busdata(:,6);
PG = busdata(:,7);
QG = busdata(:,8);
Nbus = length(bus1);
v=zeros(Nbus,2);
v(:,1)=bus3;
v(:,2)=Theta;
Br1 = linedata(:,1);
Br2 = linedata(:,2);
LR = linedata(:,3);
LX = linedata(:,4);
LB = linedata(:,5);
Tap = linedata(:,6);
Nline= length(Br1);
%------------形成导纳矩阵Y----------------
Y = zeros(Nbus,Nbus);
%---------导纳矩阵的对角线元素---------
for ii = 1:Nbus
for jj = 1:Nline
if Br1(jj) == ii
Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)*(1/Tap(jj)^2)+1i*LB(jj);
elseif Br2(jj) == ii
Y(ii,ii) = Y(ii,ii)+1/(LR(jj)+LX(jj)*1i)+1i*LB(jj);
end
end
end
%---------导纳矩阵的非对角线元素--------
for ii = 1:Nline
Y(Br1(ii),Br2(ii)) = Y(Br1(ii),Br2(ii))-1/(LR(ii)+LX(ii)*1i)*(1/Tap(ii));
Y(Br2(ii),Br1(ii)) = Y(Br1(ii),Br2(ii));
end
%------------导纳矩阵Y-end----------------
G = real(Y);
B = imag(Y);
B1=B(1:(Nbus-1),1:(Nbus-1));
B2=B(1:(Nbus-2),1:(Nbus-2));
U = v(:,1); %电压幅值
D = v(:,2); %电压相角
%-----------利用极坐标求解潮流------------
P=PG-PL;
Q=QG-QL;
k=0; %k为迭代次数
kp=0; %计算P不平衡量deltaPi的收敛标志(0表示不收敛,1表示收敛)
kq=0; %计算U不平衡量deltaQi的收敛标志(0表示不收敛,1表示收敛)
deltaPi=zeros(Nbus-1,1);%deltaPi为4阶矩阵
deltaQi=zeros(Nbus-2,1);%deltaQi为pqnum*1阶矩阵
e=0.00001;
tic;
while((kq==0)||(kp==0))&&(k<1000) %效果一样
% while((~kq|~kp)&(k<100))
k=k+1;
%-------------------------P--------------------------
for ii=1:(Nbus-1)
T1_P=0;
for jj=1:Nbus
DD=D(ii)-D(jj);
T1_P=T1_P+U(ii)*U(jj)*(G(ii,jj)*cos(DD)+B(ii,jj)*sin(DD));
end
deltaPi(ii)=P(ii)-T1_P;
end
Up=U(1:(Nbus-1));
B11=inv(B1);
deltaD=(-B11*(deltaPi./Up))./Up;%求相角a的不平衡量(参考书上式4-59a)
for ii=1:(Nbus-1)%求相角D的新迭代值矩阵
D(ii)=D(ii)+deltaD(ii);
end
max1=max(abs(deltaPi./Up));%求deltaP/U绝对值的最大值
if max1<=e %如果最大值满足要求,则kp置为"1",表示收敛
kp=1;
end
%---------------------P END---------------------
%-----------------------Q----------------------
for ii=1:(Nbus-2) %书上式4-45(b)求deltaQi
T1_Q=0;
for jj=1:Nbus
DD=D(ii)-D(jj);
T1_Q=T1_Q+U(ii)*U(jj)*(G(ii,jj)*sin(DD)-B(ii,jj)*cos(DD));
end
deltaQi(ii)=Q(ii)-T1_Q;
end
Uq=U(1:(Nbus-2));
B22=inv(B2);
deltaU=-B22*(deltaQi./Uq); %求U的不平衡量deltaU
for ii=1:(Nbus-2)%求幅值U的新迭代值矩阵
U(ii)=U(ii)+deltaU(ii);
end
max2=max(abs(deltaQi./Uq)); %求deltaQ/U绝对值的最大值
if max2<=e %如果最大值满足要求,则kp置为"1",表示收敛
kq=1;
end
%------------------------------Q END----------------------------
end
V=abs(U)*230; %幅值
theta=D*180/pi;

以上各种潮流算法的获取,在公众号内回复【潮流计算】即可获得。
未完待续扫码关注
不迷路