当前位置:文档之家› 电力系统通用潮流计算C语言程序

电力系统通用潮流计算C语言程序

电力系统通用潮流计算C语言程序<fstream>#include<iomanip>#include<math、h>using namespace std; //节点号类型负荷有功负荷无功母线数据(类型1=PV节点,2=PQ节点,3=平衡节点)struct BUS {int busno;int type;float Pd;float Qd;};//发电机数据节点号有功发电电压幅值struct Generator{int busno;float Pg;float Vg;};//支路信息节点I 节点J R X B/2 kstruct Line{int busi;int busj;float R;float X;float B;float k;};//deltaP deltaQ deltaV^2//void fun1(double YG[][50],doubleYB[][50],double e[],double f[],int type[],int N,doubleW[],double P[],double Q[],double V[]){doubledP=0,dQ=0,dV=0;int i,j;for(i=0;i<N-1;i++){doubleA=0,B=0;for(j=0;j<N;j++){A+=YG[i][j]*e[j]-YB[i][j]*f[j]; B+=YG[i][j]*f[j]+YB[i][j]*e[j]; } dV=V[i]*V[i]-e[i]*e[i]-f[i]*f[i]; dP=P[i]-e[i]*A-f[i]*B; W[2*i]=dP; dQ=Q[i]-f[i]*A+e[i]*B; if(type[i]==1)W[2*i+1]=dQ;else W[2*i+1]=dV;}}//Jacobi矩阵//void Jacobi(double YG[][50],double YB[][50],doublee[50],double f[50],int type[50],int N ,doubleJa[100][101]){ int i,j;for(i=0;i<N;i++){ for(j=0;j<N;j++){ if(i!=j){ if(type[i]==1){ Ja[2*i][2*j]=-(YG[i][j]*e[i]+YB[i][j]*f[i]);Ja[2*i][2*j+1]=YB[i][j]*e[i]-YG[i][j]*f[i];Ja[2*i+1][2*j]=Ja[2*i][2*j+1]; Ja[2*i+1][2*j+1]=-Ja[2*i][2*j]; } else { Ja[2*i][2*j]=-YG[i][j]*e[i]+YB[i][j]*f[i];Ja[2*i][2*j+1]=YB[i][j]*e[i]-YG[i][j]*f[i];Ja[2*i+1][2*j+1]=Ja[2*i+1][2*j]=0; } } else { doublea[50]={0},b[50]={0}; for(intk=0;k<N;k++){ a[i]+=(YG[i][k]*e[k]-YB[i][k]*f[k]);b[i]+=(YG[i][k]*f[k]+YB[i][k]*e[k]); Ja[2*i][2*j]=-a[i]-YG[i][i]*e[i]-YB[i][i]*f[i]; Ja[2*i][2*j+1]=-b[i]+YB[i][i]*e[i]-YG[i][i]*f[i];if(type[i]==1){ Ja[2*i+1][2*j]=b[i]+YB[i][i]*e[i]-YG[i][i]*f[i]; Ja[2*i+1][2*j+1]=-a[i]+YG[i][i]*e[i]+YB[i][i]*f[i]; } else{ Ja[2*i+1][2*j]=-2*e[i]; Ja[2*i+1][2*j+1]=-2*f[i]; } } } } }}//高斯消元法解方程组函数//voidgauss(double a[][101],int n){ int i,j,k;double c; for(k=0;k<n-1;k++){ c=a[k][k]; for(j=k;j<=n;j++)a[k][j]/=c; for(i=k+1;i<n;i++){ c=a[i][k]; for(j=k;j<=n;j++)a[i][j]-=c*a[k][j]; } } a[n-1][n]/=a[n-1][n-1];for(k=n-2;k>=0;k--)for(j=k+1;j<n;j++)a[k][n]-=a[k][j]*a[j][n]; } void main(){ifstream fin;int N=0,GS=0,LD=0,ZLs=0; //节点数发电机数负荷数支路数//BUS *B; Generator *G;Line *L;//从文本中读入原始数据到数组中//fin、open("C:\\data、txt");if(!fin){ cout<<"输入数据文件不存在!"<<endl;getchar();} int m1[50]={0},m2[50]={0};floatm3[50],m4[50],m5[50],m6[50];inti,j,l;for(i=0;;i++){fin>>m1[i];if(m1[i]==0)break;fin>>m2[ i]>>m3[i]>>m4[i];N++;}B =new BUS[N];for(i=0;i<N;i++){B[i]、busno=m1[i];B[i]、type=m2[i];B[i]、Pd=m3[i];B[i]、Qd=m4[i];}for(i=0;;i++){fin>>m1[i];if(m1[i]==0)break;fin>>m4[i]>>m3 [i];GS++;}G =new Generator[GS];for (i=0;i<GS;i++){G[i]、busno=m1[i];G[i]、Pg=m4[i];G[i]、Vg=m3[i];}for(i=0;;i++){fin>>m1[i];if(m1[i]==0)break;fin> >m2[i]>>m3[i]>>m4[i]>>m5[i]>>m6[i];ZLs++;}L =newLine[ZLs];for (i=0;i<ZLs;i++){L[i]、busi=m1[i];L[i]、busj=m2[i];L[i]、R=m3[i];L[i]、X=m4[i];L[i]、B=m5[i];L[i]、k=m6[i]; }LD=N-GS;fin、close();//节点导纳矩阵形成//doubleYB[50][50],YG[50][50],BB[50][50],K[50][50];for(i=0;i<N;i+ +){for(j=0;j<N;j++){YB[i][j]=0;YG[i][j]=0;BB[i][j]=0;K[i] [j]=1;}}for (l=0;l<ZLs;l++){i=L[l]、busi-1;j=L[l]、busj-1;K[i][j]=L[l]、k;BB[i][j]=BB[j][i]=L[l]、B;YG[i][j]=YG[j][i]=L[l]、R/(L[l]、R*L[l]、R+L[l]、X*L[l]、X);YB[i][j]=YB[j][i]=-L[l]、X/(L[l]、R*L[l]、R+L[l]、X*L[l]、X);}for(i=0;i<N;i++){for(j=i;j<N;j++) {K[i][j]=K[j][i];K[j][i]=1;}for(j=0;j<N;j++){if(i!=j) {YG[i][i]=YG[i][i]+(YG[i][j]*K[i][j]*K[i][j]);YB[i][i]=YB [i][i]+(YB[i][j]*K[i][j]*K[i][j]+BB[i][j]);}}}//修正后//for (l=0;l<ZLs;l++){i=L[l]、busi-1;j=L[l]、busj-1;K[i][j]=L[l]、k;YG[i][j]=-YG[i][j]*K[i][j];YG[j][i]=YG[i][j];YB[i][j]=-YB[i][j]*K[i][j];YB[j][i]=YB[i][j];}inttype[50]={0};for(i=0;i<N;i++){type[i]=B[i]、type;}//PQV的获得//doubleP[50],Q[50],V[50];for(i=0;i<N;i++){P[i]=0;Q[i]=0;V[i]=0;P [i]=-B[i]、Pd;Q[i]=-B[i]、Qd;}for (i=0;i<GS;i++){P[G[i]、busno-1]=G[i]、Pg;V[G[i]、busno-1]=G[i]、Vg;}// 求A=e+f//double e[50]={0},f[50]={0};doubleC[100]={0},D[100]={0};for(i=0;i<N;i++){if(V[i]==0){C[2*i]=1;}else C[2*i]=V[i];}doubleW[100]={0},Ja[100][101]={0};//调用Jacobi函数和高斯函数//for(int t=1;t<10;t++){for(i=0;i<2*N-2;i++){e[i]=C[2*i];f[i]=C[2*i+1];}fun1(YG,YB,e,f,type,N,W ,P,Q,V);double it=fabs(W[0]);for(i=1;i<2*N-2;i++){if(it<fabs(W[i])){it=fabs(W[i]);j=i;}}//中间迭代过程//cout<<setw(10)<<"迭代次数"<<setw(20)<<"最大的功率误差"<<setw(8)<<"节点号"<<endl;cout<<setw(10)<<t<<setw(20)<<it<<setw(8)<<j/2+1<< endl;if (it<0、00001)break; Jacobi(YG,YB,e,f,type,N,Ja);for(i=0;i<2*N-2;i++){Ja[i][2*N-2]=W[i];} //高斯消元法解方程//gauss(Ja,2*N-2); for(i=0;i<2*N-2;i++){D[i]=-Ja[i][2*(N-1)];C[i]+=D[i];}}//平衡节点//for(i=0;i<N;i++){doublea=0,b=0;for(int j=0;j<N;j++){a+=(YG[i][j]*e[j]-YB[i][j]*f[j]);b+=(YB[i][j]*e[j]+YG[i][j]*f[j]);}P[i]=e[i ]*a+f[i]*b;Q[i]=f[i]*a-e[i]*b; }//支路//doublePZL[100][101]={0},QZL[100][101]={0},pr[100][101]={0},qx[1 00][101]={0};double x1=0,x2=0,y1=0,y2=0,I2=0;for(intk=0;k<ZLs;k++){ i=L[k]、busi-1;j=L[k]、busj-1;x1=e[i]/L[k]、k-e[j];y1=f[i]/L[k]、k-f[j];x2=-e[i]*YG[i][j]-f[i]*YB[i][j];y2=-f[i]*YG[i][j]+e[i]*YB[i][j];QZL[i][j]=(x1*y2-x2*y1);PZL[i][j]=(x1*x2+y1*y2);I2=(PZL[i][j]*PZL[i][j]+QZ L[i][j]*QZL[i][j])/(e[i]*e[i]+f[i]*f[i]);pr[i][j]=I2*L[k]、R;qx[i][j]=I2*L[k]、X-(e[i]*e[i]+f[i]*f[i]+e[j]*e[j]+f[j]*f[j])*L[k]、B;QZL[i][j]+=(e[i]*e[i]+f[i]*f[i])*(-L[k]、B);x1=e[j]*L[k]、k-e[i];y1=f[j]*L[k]、k-f[i];x2=-e[j]*YG[j][i]-f[j]*YB[j][i];y2=-f[j]*YG[j][i]+e[j]*YB[j][i];QZL[j][i]=(x1*y2-x2*y1);PZL[j][i]=(x1*x2+y1*y2);I2=(PZL[j][i]*PZL[j][i]+QZ L[j][i]*QZL[j][i])/(e[j]*e[j]+f[j]*f[j]);pr[j][i]=I2*L[k]、R;qx[j][i]=I2*L[k]、X-(e[i]*e[i]+f[i]*f[i]+e[j]*e[j]+f[j]*f[j])*L[k]、B;QZL[j][i]+=(e[j]*e[j]+f[j]*f[j])*(-L[k]、B);} //全网数据//int high=1,low=1; doublePG=0,PL=0,Prr=0,Vh=sqrt(e[0]*e[0]+f[0]*f[0]),Vl=sqrt(e[0] *e[0]+f[0]*f[0]);for(k=0;k<N;k++){Prr+=P[k];if(B[k]、type==1)PL+=B[k]、Pd;elsePG+=P[k];if(sqrt(e[k]*e[k]+f[k]*f[k])>Vh){Vh=sqrt(e[k]*e[ k]+f[k]*f[k]);high=k+1;}if(sqrt(e[k]*e[k]+f[k]*f[k])<Vl){Vl=sqrt(e[k]*e[k]+f[k]*f[k]);low=k+1;}} //输出数据到文件databak、txt//ofstream fout;fout、open("C:\\databak、txt");fout<<"节点"<<endl; fout<<setw(8)<<"节点号"<<setw(16)<<"V"<<setw(16)<<"弧度"<<setw(16)<<"发电P"<<setw(16)<<"发电Q"<<setw(16)<<"负荷P"<<setw(16)<<"负荷Q"<<endl;for(i=0;i<LD;i++){ fout<<setw(8)<<i+1<<setw(16)< <sqrt(e[i]*e[i]+f[i]*f[i])<<setw(16)<<atan2(f[i],e[i])*18 0/3、14159<<setw(16)<<0<<setw(16)<<0<<setw(16)<<B[i]、Pd<<setw(16)<<B[i]、Qd<<endl;}for(j=0;j<GS;j++){ i=G[j]、busno-1;fout<<setw(8)<<i+1<<setw(16)<<V[i]<<setw(16)<<atan2(f[i], e[i])*180/3、14159<<setw(16)<<P[i]<<setw(16)<<Q[i]<<setw(16)<<0<<setw( 16)<<0<<endl;} fout<<"支路 "<<endl;fout<<setw(4)<<"i"<<setw(4)<<"j"<<setw(10)<<"i_j有功"<<setw(10)<<"i_j无功"<<setw(10)<<"j_i有功"<<setw(12)<<"j_i无功"<<setw(12)<<"有功损耗"<<setw(12)<<"无功损耗"<<endl; for (k=0;k<ZLs;k++){ i=L[k]、busi-1;j=L[k]、busj-1; fout<<setw(4)<<L[k]、busi<<setw(4)<<L[k]、busj <<setw(10)<<PZL[i][j]<<setw(10)<<QZL[i][j]<<setw(10)<< PZL[j][i]<<setw(12)<<QZL[j][i]<<setw(12)<<pr[i][j]<<setw(12)<<qx[i ][j]<<endl; } fout<<"全网数据"<<endl; fout<<setw(14)<<"发电有功"<<setw(14)<<"负荷有功"<<setw(14)<<"有功损耗"<<setw(14)<<"最高电压"<<setw(14)<<"节点号"<<setw(14)<<"最低电压"<<setw(14)<<"节点号"<<endl;fout<<setw(14)<<PG<<setw(14)<<PL<<setw(14)<<Prr<<setw(14) <<Vh<<setw(14)<<high<<setw(14)<<Vl<<setw(14)<<low<<endl; fout、close();}。

相关主题