电力系统稳态潮流上机完整可运行程序.docx

上传人:b****4 文档编号:4914575 上传时间:2022-12-11 格式:DOCX 页数:14 大小:18.36KB
下载 相关 举报
电力系统稳态潮流上机完整可运行程序.docx_第1页
第1页 / 共14页
电力系统稳态潮流上机完整可运行程序.docx_第2页
第2页 / 共14页
电力系统稳态潮流上机完整可运行程序.docx_第3页
第3页 / 共14页
电力系统稳态潮流上机完整可运行程序.docx_第4页
第4页 / 共14页
电力系统稳态潮流上机完整可运行程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

电力系统稳态潮流上机完整可运行程序.docx

《电力系统稳态潮流上机完整可运行程序.docx》由会员分享,可在线阅读,更多相关《电力系统稳态潮流上机完整可运行程序.docx(14页珍藏版)》请在冰豆网上搜索。

电力系统稳态潮流上机完整可运行程序.docx

电力系统稳态潮流上机完整可运行程序

//flow.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

#include

#include

#include"NEquation.h"

#include"math.h"

#include"config.h"

voidtest()

{

NEquationob1;

ob1.SetSize

(2);

ob1.Data(0,0)=1;

ob1.Data(0,1)=2;

ob1.Data(1,0)=2;

ob1.Data(1,1)=1;

ob1.Value(0)=5;

ob1.Value

(1)=4;

ob1.Run();

printf("x1=%f\n",ob1.Value(0));

printf("x2=%f\n",ob1.Value

(1));

}

voidGetData(int&nBus,int&nBranch)//Readthedata

{

FILE*fp;

inti;

if((fp=fopen("data\\data5.txt","r"))==NULL)

{

printf("Cannotopenthefilenamed'data.txt'\n");

return;

}

fscanf(fp,"%d,%d",&nBus,&nBranch);

for(i=0;i

{

fscanf(fp,"%d,%f,%f,%f,%f,%f,%f,%d",&gBus[i].No,&gBus[i].Voltage,&gBus[i].Phase,

&gBus[i].GenP,&gBus[i].GenQ,&gBus[i].LoadP,&gBus[i].LoadQ,&gBus[i].Type);

}

for(i=0;i

{

fscanf(fp,"%d,%d,%d,%f,%f,%f,%f",&gBranch[i].No,&gBranch[i].No_I,&gBranch[i].No_J,

&gBranch[i].R,&gBranch[i].X,&gBranch[i].B,&gBranch[i].k);

}/*半容纳*/

fclose(fp);

}

voidGetYMatrix(int&nBus,int&nBranch)

{

inti,j,bus1,bus2;

floatr,x,d,g,b;

FILE*fp;

for(i=0;i

{

for(j=0;j

{

gY_G[i][j]=0;

gY_B[i][j]=0;

}

}

for(i=0;i

{

if(gBranch[i].k==0)

{

bus1=gBranch[i].No_I-1;

bus2=gBranch[i].No_J-1;

r=gBranch[i].R;

x=gBranch[i].X;

d=r*r+x*x;

g=r/d;

b=-x/d;

if(bus1!

=bus2)

{

gY_G[bus1][bus1]=gY_G[bus1][bus1]+g;

gY_G[bus2][bus2]=gY_G[bus2][bus2]+g;

gY_G[bus1][bus2]=gY_G[bus1][bus2]-g;

gY_G[bus2][bus1]=gY_G[bus2][bus1]-g;

gY_B[bus1][bus1]=gY_B[bus1][bus1]+b+gBranch[i].B;/*hengzong*/

gY_B[bus2][bus2]=gY_B[bus2][bus2]+b+gBranch[i].B;

gY_B[bus1][bus2]=gY_B[bus1][bus2]-b;

gY_B[bus2][bus1]=gY_B[bus2][bus1]-b;

}

else

{

gY_B[bus1][bus1]=gY_B[bus1][bus1]+b;

//addyourcodes

}

}

else

{bus1=gBranch[i].No_I-1;

bus2=gBranch[i].No_J-1;

r=gBranch[i].R;

x=gBranch[i].X;

d=r*r+x*x;

g=r/d;

b=-x/d;

gY_G[bus1][bus1]=gY_G[bus1][bus1]+gBranch[i].k*gBranch[i].k*g;

gY_G[bus2][bus2]=gY_G[bus2][bus2]+g;

gY_G[bus1][bus2]=gY_G[bus1][bus2]-g*gBranch[i].k;

gY_G[bus2][bus1]=gY_G[bus2][bus1]-g*gBranch[i].k;

gY_B[bus1][bus1]=gY_B[bus1][bus1]+gBranch[i].k*gBranch[i].k*b;

gY_B[bus2][bus2]=gY_B[bus2][bus2]+b;

gY_B[bus1][bus2]=gY_B[bus1][bus2]-b*gBranch[i].k;

gY_B[bus2][bus1]=gY_B[bus2][bus1]-b*gBranch[i].k;

//addyourcodes

}

}

//outputtheYmatrixmk

if((fp=fopen("data\\ymatrix1.txt","w"))==NULL)

{

printf("Cannotopenthefilenamed'ymatrix.txt'\n");

return;

}

fprintf(fp,"---YMatrix---\n");

for(i=0;i

{

for(j=0;j

{

fprintf(fp,"Y(%d,%d)=(%10.6f,%10.6f)\n",i+1,j+1,gY_G[i][j],gY_B[i][j]);

}

}

fclose(fp);

}

voidSetInitial(int&nBus)

{

inti;

for(i=0;i

{

if(gBus[i].Type==2)

{

gf[i]=gBus[i].Voltage*sin(gBus[i].Phase);

ge[i]=gBus[i].Voltage*cos(gBus[i].Phase);

}

else

{

gf[i]=0;

ge[i]=1;

}

}

}

voidGetUnbalance(int&nBus)

{

inti;

intj;

for(i=0;i

if(gBus[i].Type!

=2)

{

gDelta_P[i]=0;

for(j=0;j

{gDelta_P[i]=gDelta_P[i]+ge[i]*(gY_G[i][j]*ge[j]-gY_B[i][j]*gf[j])+gf[i]*(gY_G[i][j]*gf[j]+gY_B[i][j]*ge[j]);

}

gDelta_P[i]=gBus[i].GenP-gBus[i].LoadP-gDelta_P[i];

}

for(i=0;i

{

if(gBus[i].Type==0)

{gDelta_Q[i]=0;

for(j=0;j

{gDelta_Q[i]=gDelta_Q[i]+gf[i]*(gY_G[i][j]*ge[j]-gY_B[i][j]*gf[j])-ge[i]*(gY_G[i][j]*gf[j]+gY_B[i][j]*ge[j]);

}

gDelta_Q[i]=gBus[i].GenQ-gBus[i].LoadQ-gDelta_Q[i];

}

elseif(gBus[i].Type==1)

gDelta_Q[i]=gBus[i].Voltage*gBus[i].Voltage-(ge[i]*ge[i]+gf[i]*gf[i]);

}

for(i=0;i

if(gBus[i].Type==2)

{

gDelta_Q[i]=0;gDelta_P[i]=0;

}

//addyourcodesgDelta_Q[i]

}

voidGetJaccobi(int&nBus)

{inti,j,a,b;

floatc=0,d=0;

for(i=0;i

for(j=0;j

{if((i!

=j)&&(gBus[i].Type!

=1))

{a=i*2;b=j*2;gJaccobi[a][b]=gY_G[i][j]*gf[i]-gY_B[i][j]*ge[i];b=b+1;

gJaccobi[a][b]=gY_G[i][j]*ge[i]+gY_B[i][j]*gf[i];a=a+1;gJaccobi[a][b]=gY_G[i][j]*gf[i]-gY_B[i][j]*ge[i];b=b-1;

gJaccobi[a][b]=0-gY_G[i][j]*ge[i]-gY_B[i][j]*gf[i];

}

elseif((i!

=j)&&(gBus[i].Type==1))

{a=i*2;b=j*2;gJaccobi[a][b]=gY_G[i][j]*gf[i]-gY_B[i][j]*ge[i];b=b+1;

gJaccobi[a][b]=gY_G[i][j]*ge[i]+gY_B[i][j]*gf[i];a=a+1;gJaccobi[a][b]=0;b=b-1;gJaccobi[a][b]=0;

}

}

for(i=0;i

{c=0,d=0;for(j=0;j

if(i!

=j)

{c=c+gY_G[i][j]*ge[j]-gY_B[i][j]*gf[j];d=d+gY_G[i][j]*gf[j]+gY_B[i][j]*ge[j];

}

c=c+gY_G[i][i]*ge[i]-gY_B[i][i]*gf[i];d=d+gY_G[i][i]*gf[i]+gY_B[i][i]*ge[i];

if(gBus[i].Type!

=1)

{a=i*2;b=i*2;gJaccobi[a][b]=gY_G[i][i]*gf[i]-gY_B[i][i]*ge[i]+d;b=b+1;gJaccobi[a][b]=gY_G[i][i]*ge[i]+gY_B[i][i]*gf[i]+c;

a=a+1;gJaccobi[a][b]=gY_G[i][i]*gf[i]-gY_B[i][i]*ge[i]-d;b=b-1;gJaccobi[a][b]=c-gY_G[i][i]*ge[i]-gY_B[i][i]*gf[i];

}

elseif(gBus[i].Type==1)

{a=i*2;b=i*2;gJaccobi[a][b]=gY_G[i][i]*gf[i]-gY_B[i][i]*ge[i]+d;b=b+1;gJaccobi[a][b]=gY_G[i][i]*ge[i]+gY_B[i][i]*gf[i]+c;

a=a+1;gJaccobi[a][b]=2*ge[i];b=b-1;gJaccobi[a][b]=2*gf[i];

}

}

for(i=0;i

for(j=0;j

{a=2*i;b=2*j;

if(gBus[i].Type==2)

{gJaccobi[a][b]=0;gJaccobi[a][b+1]=0;gJaccobi[a+1][b]=0;gJaccobi[a+1][b+1]=0;

gJaccobi[b][a]=0;gJaccobi[b+1][a]=0;gJaccobi[b][a+1]=0;gJaccobi[b+1][a+1]=0;

}

}

//addyourcodes

}

voidGetRevised(int&nBus)

{inti,j,a,b,c;

NEquationob1;

a=2*nBus-2;

ob1.SetSize(a);

for(i=0;i

if(gBus[i/2].Type==2)

{c=i;break;}

for(i=0;i

for(j=0;j

{if(j>=c&&i>=c)

ob1.Data(i,j)=gJaccobi[i+2][j+2];

if(j>=c&&i

ob1.Data(i,j)=gJaccobi[i][j+2];

if(j=c)

ob1.Data(i,j)=gJaccobi[i+2][j];

if(j

ob1.Data(i,j)=gJaccobi[i][j];

}

b=c/2;

for(i=0;i

{if(i

{ob1.Value(i*2)=gDelta_P[i];

ob1.Value(i*2+1)=gDelta_Q[i];

}

if(i>=b)

{ob1.Value(i*2)=gDelta_P[i+1];

ob1.Value(i*2+1)=gDelta_Q[i+1];

}

}

ob1.Run();

for(i=0;i

{if(i

gDelta_fe[i]=ob1.Value(i);

if(i>(c+1))

{gDelta_fe[i]=ob1.Value(i-2);

}

gDelta_fe[c]=0;

gDelta_fe[c+1]=0;

}

 

//addyourcodesgetit

}

voidGetNewValue(int&nBus)

{inti,a;

for(i=0;i

{

a=2*i;

gf[i]+=gDelta_fe[a];

a+=1;

ge[i]+=gDelta_fe[a];

}

//addyourcodes

}

intmain(intargc,char*argv[])

{

inti,Count_Num;

floatmaxValue;

intnBus,nBranch;

intj,a;

floatGss=0,Bss=0,z,c,d,x=0,y=0;

floatdels[Bus_Num][Bus_Num],p[Bus_Num][Bus_Num],q[Bus_Num][Bus_Num],delp[Bus_Num][Bus_Num],delq[Bus_Num][Bus_Num];

//test();

GetData(nBus,nBranch);

GetYMatrix(nBus,nBranch);

SetInitial(nBus);

for(Count_Num=0;Count_Num<=20;Count_Num++)

{

GetUnbalance(nBus);

GetJaccobi(nBus);

GetRevised(nBus);

GetNewValue(nBus);

maxValue=fabs(gDelta_fe[0]);

for(i=1;i<=2*(nBus-1)-1;i++)

{

if(maxValue

{

maxValue=fabs(gDelta_fe[i]);

}

}

if(maxValue

{

break;

}

}

printf("叠代次数:

%d\n",Count_Num);

for(i=0;i

{

printf("节点%d电压为:

%10.5f∠%f\n",i+1,sqrt(ge[i]*ge[i]+gf[i]*gf[i]),atan(gf[i]/ge[i])/3.14159*180);

}

//添加

for(i=0;i

for(j=0;j

{if(gY_B[i][j]<0)printf("Y(%d,%d)=%f%fj\n",i,j,gY_G[i][j],gY_B[i][j]);elseprintf("Y(%d,%d)=%f+%fj\n",i,j,gY_G[i][j],gY_B[i][j]);

}

for(i=0;i

if(gBus[i].Type==2)

{a=i;break;}

//qiubus2

for(i=0;i

{Gss+=ge[i]*gY_G[a][i]-gf[i]*gY_B[a][i];Bss+=0-gf[i]*gY_G[a][i]-ge[i]*gY_B[a][i];

}

z=Gss;Gss=Gss*ge[a]-Bss*gf[a];Bss=gf[a]*z+ge[a]*Bss;

printf("平衡节点功率:

%f+j%f\n",Gss,Bss);

//xiaqiuxianlugonglv

for(i=0;i

for(j=0;j

{p[i][j]=0;q[i][j]=0;

}

 

for(i=0;i

for(j=0;j

{x=0;

if(i!

=j)

{for(a=0;a

{if(gBranch[a].No_I-1==i&&gBranch[a].No_J-1==j){if(gBranch[a].k==0){y=0;x=gBranch[a].B;}else{y=(1-gBranch[a].k)*gY_G[i][j];x=(1-gBranch[a].k)*gY_B[i][j];}break;}

if(gBranch[a].No_I-1==j&&gBranch[a].No_J-1==i){if(gBranch[a].k==0){y=0;x=gBranch[a].B;}else{y=(1-1/gBranch[a].k)*gY_G[i][j];x=(1-1/gBranch[a].k)*gBranch[a].B;}break;}

}

c=y*ge[i]-ge[i]*gY_G[i][j]-x*gf[i]+gf[i]*gY_B[i][j]+ge[j]*gY_G[i][j]-gf[j]*gY_B[i][j];d=0-y*gf[i]-x*ge[i]+gY_B[i][j]*ge[i]+gf[i]*gY_G[i][j]-ge[j]*gY_B[i][j]-gf[j]*gY_G[i][j];

p[i][j]=ge[i]*c-gf[i]*d;q[i][j]=gf[i]*c+ge[i]*d;

}

if(i==j)

{

for(a=0;a

{

if((gBranch[a].No_I-1==i)&&(gBranch[a].No_J-1==i))

{x=(-1)/gBranch[a].X;break;

}

elsex=0;

}

p[i][j]=0;q[i][j]=(ge[i]*ge[i]+gf[i]*gf[i])*x*(-1);

}

}

for(i=0;i

{c=0;d=0;

{for(j=0;j

{c=c+p[i][j];d=d+q[i][j];}

printf("校验:

%f%f,%f%f\n",gBus[i].GenP-gBus[i].LoadP,c,gBus[i].GenQ-gBus[i].LoadQ,d);

}

}

for(i=0;i

for(j=0;j

{if(i!

=j){delp[i][j]=p[i][j]+p[j][i];delq[i][j]=q[i][j]+q[j][i];

}

else{delp[i][i]=p[i][i];delq[i][i]=q[i][i];}

}

printf("潮流值\n");

for(i=0;i

for(j=0;j

printf("线路潮流%d---%d%f+j%f\n",i+1,j+1,p[i][j],q[i][j]);

for(i=0;i

for(j=0;j

printf("线路损耗%d--%d%f+j%f\n",i+1,j+1,delp[j][i],delq[j][i]);

c=0;d=0;

for(i=0;i

for(j=i;j

{c+=2*delp[i][j];d+=2*delq[i][j];

}

printf("线路总损耗:

%f+j%f\n",c,d);

//addyourcodes

//gBus[i].VoltagegY_G[bus1][bus1]gY_B[bus1][bus2]bus1=gBranch[i].No_I-1;bus2=gBranch[i].No_J-1;

return0;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1