电力系统短路故障分析的MATLAB辅助程序设计短路计算程序.docx
- 文档编号:25127967
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:44
- 大小:109.50KB
电力系统短路故障分析的MATLAB辅助程序设计短路计算程序.docx
《电力系统短路故障分析的MATLAB辅助程序设计短路计算程序.docx》由会员分享,可在线阅读,更多相关《电力系统短路故障分析的MATLAB辅助程序设计短路计算程序.docx(44页珍藏版)》请在冰豆网上搜索。
电力系统短路故障分析的MATLAB辅助程序设计短路计算程序
电力系统短路故障分析的MATLAB辅助程序设计
电力系统短路故障可分为三相对称短路故障(three-phasebalancedfaults)和不对称短路故障(unbalancedfaults)。
不对称短路故障又分为单相接地短路故障(singleline-to-groundfault)、两相短路故障(line-to-linefault)以及两相接地短路故障(doubleline-to-groundfault)。
根据故障分析结果可以对继电保护装置、自动装置进行整定计算,我们可以建立算法来形成节点阻抗矩阵,利用节点阻抗矩阵来计算短路故障情况下的节点电压和线路电流。
一、三相对称短路故障
进行三相短路计算需要两个程序:
zbuild/zbuildpi和symfault程序,zbuild、zbuildpi用来在MATLAB中形成节点阻抗矩阵,symfault用来计算三相对称故障。
Zbus=zbuild(zdata)这里的参数zdata是一个(e×4)阶矩阵,e是拓扑图的总支路数目。
第一列和第二列为元素两端的节点编号,第三列和第四列分别是线路的电阻、电抗的标幺值。
连接在0节点和发电机节点之间的发电机阻抗可能是次暂态电抗、暂态电抗或同步电抗,而且这个矩阵中还包含并联电抗器和负荷阻抗。
Zbus=zbuildpi(linedata,gendata,yload)这个函数与潮流计算程序是相容的,第一个参数linedata与潮流计算程序中的文件是一致的。
第一列和第二列为节点编号;第三列到第五列分别是线路的电阻、电抗以及1/2线路电纳值,这三项都为在统一基准容量下的标幺值;最后一列是变压器分接头位置,对线路来说,必须输入1;线路无输入顺序。
发电机参数不包含在Linedata参数中,而是包含在第二个参数gendata中,gendata是一个g×4阶矩阵,g是发电机总数。
第一列和第二列为0节点、发电机节点编号,第三列和第四列为发电机的暂态电阻和暂态电抗。
最后一个参数yload是可选择的,这个矩阵有两列,第一列为节点编号,第二列为复数导纳值,yload可以由潮流程序lfguss,lfnewton或者decouple自动生成。
Zbuild和zbuildpi两个函数可以通过建立算法求出节点阻抗矩阵。
首先添加所有与参考节点相连的树支,然后添加其余的树支,最后添加共轭连支。
程序symfault(zdata,Zbus,V)用来计算三相对称故障,程序要求输入zdata和Zbus两个矩阵,第三个参数V是可选的。
如果V不存在,程序将默认故障前所有的节点电压标幺值为1.0,如果变量V存在,那么V包括节点编号和复数电压值。
电压向量V也可以由潮流计算程序自动生成。
当symfault程序运行时,用户要输入故障节点编号和故障阻抗,运行可得到总的故障电流,节点电压幅值以及故障情况下的线路电流。
在三相短路计算中,zbuild和symfault程序,zbuildpi和symfault程序都可以进行计算,下面是三相短路计算使用的程序代码:
(1)Zbuild.m程序代码:
function[Zbus]=zbuild(linedata)
nl=linedata(:
1);nr=linedata(:
2);R=linedata(:
3);
X=linedata(:
4);
nbr=length(linedata(:
1));nbus=max(max(nl),max(nr));
fork=1:
nbr
ifR(k)==inf|X(k)==inf
R(k)=999999999;X(k)=999999999;%无穷
else,end
end
ZB=R+j*X;
Zbus=zeros(nbus,nbus);
tree=0;
%从参考总线0上添加一个分支
forI=1:
nbr
ntree(I)=1;
ifnl(I)==0|nr(I)==0
ifnl(I)==0n=nr(I);
elseifnr(I)==0n=nl(I);
end
ifabs(Zbus(n,n))==0Zbus(n,n)=ZB(I);tree=tree+1;%%new
elseZbus(n,n)=Zbus(n,n)*ZB(I)/(Zbus(n,n)+ZB(I));
end
ntree(I)=2;
else,end
end
%添加一个新总线分支到现有总线上
whiletree forn=1: nbus nadd=1; ifabs(Zbus(n,n))==0 forI=1: nbr ifnadd==1; ifnl(I)==n|nr(I)==n ifnl(I)==nk=nr(I); elseifnr(I)==nk=nl(I); end ifabs(Zbus(k,k))~=0 form=1: nbus ifm~=n Zbus(m,n)=Zbus(m,k); Zbus(n,m)=Zbus(m,k); else,end end Zbus(n,n)=Zbus(k,k)+ZB(I);tree=tree+1; nadd=2;ntree(I)=2; else,end else,end else,end end else,end end end %增加两个原有总线间的支路阻抗 forn=1: nbus forI=1: nbr ifntree(I)==1 ifnl(I)==n|nr(I)==n ifnl(I)==nk=nr(I); elseifnr(I)==nk=nl(I); end DM=Zbus(n,n)+Zbus(k,k)+ZB(I)-2*Zbus(n,k); forjj=1: nbus AP=Zbus(jj,n)-Zbus(jj,k); forkk=1: nbus AT=Zbus(n,kk)-Zbus(k,kk); DELZ(jj,kk)=AP*AT/DM; end end Zbus=Zbus-DELZ; ntree(I)=2; else,end else,end end end (2)Zbuildpi.m程序代码: %Thisprogramformsthecomplexbusimpedancematrixbythemethod %ofbuildingalgorithm.Buszeroistakenasreference. %Thisprogramiscompatiblewithpowerflowdata. function[Zbus,linedata]=zbuildpi(linedata,gendata,yload) ng=length(gendata(: 1)); nlg=gendata(: 1); nrg=gendata(: 2); zg=gendata(: 2)+j*gendata(: 3); nl=linedata(: 1);nr=linedata(: 2);R=linedata(: 3); X=linedata(: 4); nbr=length(linedata(: 1));nbus=max(max(nl),max(nr)); nc=length(linedata(1,: )); fork=1: nbr ifR(k)==inf|X(k)==inf R(k)=99999999;X(k)=99999999; else,end end ifnc>4 BC=linedata(: 5); forn=1: nbus yc(n)=0; nlc(n)=0;nrc(n)=n; fork=1: nbr ifnl(k)==n|nr(k)==n yc(n)=yc(n)+j*BC(k); else,end end end elseifnc==4yc=zeros(1,nbr);end nlc=nlc';nrc=nrc';yc=yc.'; ZB=R+j*X; ifexist('yload')==1 yload=yload.'; yc=yc+yload; else,end m=0; forn=1: nbus ifabs(yc(n))~=0 m=m+1; nlcc(m)=nlc(n); nrcc(m)=nrc(n); zc(m)=1/yc(n); else,end end nlcc=nlcc';nrcc=nrcc';zc=zc.'; nl=[nlg;nlcc;nl];nr=[nrg;nrcc;nr];ZB=[zg;zc;ZB]; linedata=[nlnrreal(ZB)imag(ZB)]; nbr=length(nl); Zbus=zeros(nbus,nbus); tree=0; %%从参考总线0上添加一个分支 forI=1: nbr ntree(I)=1; ifnl(I)==0|nr(I)==0 ifnl(I)==0n=nr(I); elseifnr(I)==0n=nl(I); end ifabs(Zbus(n,n))==0Zbus(n,n)=ZB(I); tree=tree+1; elseZbus(n,n)=Zbus(n,n)*ZB(I)/(Zbus(n,n)+ZB(I)); end ntree(I)=2; else,end end %%添加一个新总线分支到现有总线上 whiletree forn=1: nbus nadd=1; ifabs(Zbus(n,n))==0 forI=1: nbr ifnadd==1 ifnl(I)==n|nr(I)==n ifnl(I)==nk=nr(I); elseifnr(I)==nk=nl(I); end ifabs(Zbus(k,k))~=0 form=1: nbus ifm~=n Zbus(m,n)=Zbus(m,k); Zbus(n,m)=Zbus(m,k); else,end end Zbus(n,n)=Zbus(k,k)+ZB(I);tree=tree+1; nadd=2;ntree(I)=2; else,end else,end else,end end else,end end end %增加两个原有总线间的支路阻抗 forn=1: nbus forI=1: nbr ifntree(I)==1 ifnl(I)==n|nr(I)==n ifnl(I)==nk=nr(I); elseifnr(I)==nk=nl(I); end DM=Zbus(n,n)+Zbus(k,k)+ZB(I)-2*Zbus(n,k); forjj=1: nbus AP=Zbus(jj,n)-Zbus(jj,k); forkk=1: nbus AT=Zbus(n,kk)-Zbus(k,kk); DELZ(jj,kk)=AP*AT/DM; end end Zbus=Zbus-DELZ; ntree(I)=2; else,end else,end end end (3)symfault.m程序代码: %此程序用来计算电网的三相对称故障 %计算前需要用户生成节点阻抗矩阵 %节点阻抗矩阵可由函数Zbus=zbuild(zdata)生成 %此程序需要用户按提示输入短路节点编号和过度电阻Zf %向量V是可选参数,包含节点编号和复数电压 %V可由潮流程序lfgauss,lfnewton,decouple自动生成. %如果V不存在,程序将默认故障前所有的节点电压标幺值为1.0 %程序可得到总的故障电流,节点电压幅值及输电线路的电流 functionsymfaul(zdata,Zbus,V) nl=zdata(: 1);nr=zdata(: 2);R=zdata(: 3); X=zdata(: 4); nc=length(zdata(1,: )); ifnc>4 BC=zdata(: 5); elseifnc==4,BC=zeros(length(zdata(: 1)),1); end ZB=R+j*X; nbr=length(zdata(: 1));nbus=max(max(nl),max(nr)); ifexist('V')==1 iflength(V)==nbus V0=V; else,end else,V0=ones(nbus,1)+j*zeros(nbus,1); end fprintf('\Three-phasebalancedfaultanalysis\n') ff=999; whileff>0 nf=input('EnterFaultedBusNo.->'); rtn=isempty(nf); ifrtn==1;nf=-1;end whilenf<=0|nf>nbus fprintf('FaultedbusNo.mustbebetween1&%g\n',nbus) nf=input('EnterFaultedBusNo.->'); rtn=isempty(nf); ifrtn==1;nf=-1;end end rtz=1; whilertz==1 fprintf('\nEnterFaultImpedanceZf=R+j*Xin') Zf=input('complexform(forboltedfaultenter0).Zf='); rtz=isempty(Zf); end fprintf('\n') fprintf('Balancedthree-phasefaultatbusNo.%g\n',nf) If=V0(nf)/(Zf+Zbus(nf,nf)); Ifm=abs(If);Ifmang=angle(If)*180/pi; fprintf('Totalfaultcurrent=%8.4fperunit\n\n',Ifm) %fprintf('p.u.\n\n',Ifm) fprintf('BusVoltagesduringfaultinperunit\n\n') fprintf('BusVoltageAngle\n') fprintf('No.Magnitudedegrees\n') forn=1: nbus ifn==nf Vf(nf)=V0(nf)*Zf/(Zf+Zbus(nf,nf));Vfm=abs(Vf(nf));angv=angle(Vf(nf))*180/pi; else,Vf(n)=V0(n)-V0(n)*Zbus(n,nf)/(Zf+Zbus(nf,nf)); Vfm=abs(Vf(n));angv=angle(Vf(n))*180/pi; end fprintf('%4g',n),fprintf('%13.4f',Vfm),fprintf('%13.4f\n',angv) end fprintf('\n') fprintf('LinecurrentsforfaultatbusNo.%g\n\n',nf) fprintf('FromToCurrentAngle\n') fprintf('BusBusMagnitudedegrees\n') forn=1: nbus forI=1: nbr ifnl(I)==n|nr(I)==n ifnl(I)==nk=nr(I); elseifnr(I)==nk=nl(I); end ifk==0 Ink=(V0(n)-Vf(n))/ZB(I); Inkm=abs(Ink);th=angle(Ink); ifreal(Ink)>0 fprintf('G'),fprintf('%7g',n),fprintf('%12.4f',Inkm) fprintf('%12.4f\n',th*180/pi) elseifreal(Ink)==0&imag(Ink)<0 fprintf('G'),fprintf('%7g',n),fprintf('%12.4f',Inkm) fprintf('%12.4f\n',th*180/pi) else,end Ign=Ink; elseifk~=0 Ink=(Vf(n)-Vf(k))/ZB(I)+BC(I)*Vf(n); Inkm=abs(Ink);th=angle(Ink); ifreal(Ink)>0 fprintf('%7g',n),fprintf('%10g',k), fprintf('%12.4f',Inkm),fprintf('%12.4f\n',th*180/pi) elseifreal(Ink)==0&imag(Ink)<0 fprintf('%7g',n),fprintf('%10g',k), fprintf('%12.4f',Inkm),fprintf('%12.4f\n',th*180/pi) else,end else,end else,end end ifn==nf fprintf('%7g',n),fprintf('F'),fprintf('%12.4f',Ifm) fprintf('%12.4f\n',Ifmang) else,end end resp=0; whilestrcmp(resp,'n')~=1&strcmp(resp,'N')~=1&strcmp(resp,'y')~=1&strcmp(resp,'Y')~=1 resp=input('Anotherfaultlocation? Enter''y''or''n''withinsinglequote->'); ifstrcmp(resp,'n')~=1&strcmp(resp,'N')~=1&strcmp(resp,'y')~=1&strcmp(resp,'Y')~=1 fprintf('\nIncorrectreply,tryagain\n\n'),end end ifresp=='y'|resp=='Y' nf=999; elseff=0;end end 二、不对称短路故障 不对称故障包括单相接地短路(singleline-to-groundfault),两相短路(line-to-linefault),和两相接地短路(doubleline-to-groundfault)。 这里介绍三个程序来分析不对称短路故障: 单相接地lgfault(zdata0,zbus0,zdata1,zbus1,zdata2,zbus2,V) 两相短路llfault(zdata1,zbus1,zdata2,zbus2,V) 两相接地短路dlgfault(zdata0,zbus0,zdata1,zbus1,zdata2,zbus2,V) 对于lgfault和dlgfault需要输入正序、零序、负序节点阻抗矩阵Zbus1、Zbus0和Zbus2,而llfault只需输入正序和负序节点阻抗矩阵Zbus1、Zbus2,最后参数V是可以选择的。 如果用户未输入V,程序则默认所有故障前的电压为1.0pu。 如果用户输入参数V,则需要输入节点编号以及节点电压的复数值。 变量V可由潮流计算程序获得。 零序网络和正序网络的节点阻抗矩阵分别通过函数Zbus0=zbuild(zdata0)和Zbus1=zbuild(zdata1)获得。 参数zdata1包含正序网络阻抗,参数zdata0包含零序网络阻抗。 参数zdata1、zdata2、zdata0均为e×4阶矩阵,e为元件的个数。 第一列和第二列是节点编号,第三列和第四列分别是线路电阻和电抗(均为标幺值)。 节点0为参考节点,发电机节点到节点0的阻抗为发电机阻抗,可以是发电机的次暂态电抗、暂态电抗或者同步电抗,而且矩阵还包括并联电容和负荷阻抗等。 负序网络和正序网络有同样的拓扑结构。 线路和变压器的负序阻抗等于正序阻抗,而发电机的负序阻抗不等于正序阻抗,但在大型电力系统故障分析中通常按相等来计算。 零序网络的拓扑结构不同于正序网络,零序网络的构建取决于变压器的绕组连接方式,除了两侧中性点都接地的Y-Y连接的变压器,对于其他连接方式的变压器,一次侧和二次侧的零序网络都是隔离开的。 在这样的连接方式的零序网络中,,用inf填写对应的电阻和电抗列。 对于Y-△(中性点接地)连接的变压器,Y侧的阻抗到节点0的数据需要填写。 当中性点接地阻抗为Xn时,需要填写为3Xn。 在不对称故障计算时,还需要一个函数用来求节点阻抗矩阵,Zbus=zbuildpi(linedata,gendata,yload),函数与潮流计算程序是相容的。 第一个参数linedata与潮流程序所需要的数据相同。 第一列和第二列是节点编号;第三列到第五列分别是线路的电阻、电抗、1/2线路电纳(均为标幺值,以指定的MVA为基准功率);最后一列为变压器分接头位置,对于线路,在这一列中必须填写1。 在潮流计算程序中,发电机电抗不包含在参数linedata中,而是包含在参数gendata中。 参数ge
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电力系统 短路 故障 分析 MATLAB 辅助 程序设计 计算 程序