您好,欢迎来到保捱科技网。
搜索
您的当前位置:首页潮流计算C语言编程

潮流计算C语言编程

来源:保捱科技网
// flow.cpp : Defines the entry point for the console application. //

#include \"stdafx.h\" #include #include #include \"NEquation.h\" #include \"math.h\" #include \"config.h\"

void test() { }

void GetData()//Read the data { FILE *fp;

int i;

if((fp=fopen(\"F:\\\\1061180523\\\\flow\\\\data\\\\data.txt\

fscanf(fp,\"%d,%f,%f,%f,%f,%f,%f,%d\oltage,&gBus[i].Phase, }

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

for(i=0;i<=Bus_Num-1;i++) {

{ printf(\"Can not open the file named 'data.txt' \\n\"); }

return; NEquation ob1;

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(1)=4; ob1.Run();

printf(\"x1=%f\\n\alue(0)); printf(\"x2=%f\\n\alue(1));

ob1.Value(0)=5;

}

for(i=0;i<=Line_Num-1;i++) { }

fscanf(fp,\"%d,%d,%d,%f,%f,%f,%f\ &gLine[i].R,&gLine[i].X,&gLine[i].B,&gLine[i].k);

fclose(fp);

void GetYMatrix() {

int i,j; FILE *fp;

// calculate the Y matrix int bus1,bus2;

float r,x,d,g,b;

for(i=0;i<=Bus_Num-1;i++) //导纳矩阵赋初值为零

{ }

for(j=0;j<=Bus_Num-1;j++)

{ }

gY_G[i][j]=0; gY_B[i][j]=0;

for(i=0; i<=Line_Num-1; i++) {

bus1=gLine[i].No_I-1; //线路一侧连接的节点号减1 bus2=gLine[i].No_J-1; //线路另一侧连接的节点号减1 r=gLine[i].R; x=gLine[i].X; d=r*r+x*x; g=r/d;

b=-x/d;

if(gLine[i].k==0) //没有变压器的情况 {

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

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

//gY_G[bus1][bus1]=g

//gY_G[bus2][bus2]=g gY_G[bus1][bus2]=gY_G[bus1][bus2]-g; //gY_G[bus1][bus2]=-g 矩阵是对称的

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

//gY_G[bus2][bus1]=-g gY_B[bus1][bus1]=gY_B[bus1][bus1]+b+gLine[i].B; //gY_B[bus1][bus1]=b+gLine[i].B gY_B[bus2][bus2]=gY_B[bus2][bus2]+b+gLine[i].B; //gY_B[bus2][bus2]=b+gLine[i].B

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

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

}

else //有变压器的情况 {

gY_G[bus1][bus1]=gY_G[bus1][bus1]+g/gLine[i].k+g*(1-gLine[i].k)/gLine[i].k/gLine[i].k;

// output the Y matrix

if((fp=fopen(\"F:\\\\1061180523\\\\flow\\\\data\\\\ymatrix.txt\ { }

fprintf(fp,\"---Y Matrix---\\n\");

for(i=0;i<=Bus_Num-1;i++) {

for(j=0;j<=Bus_Num-1;j++) {

printf(\"Can not open the file named 'ymatrix.txt' \\n\"); return ;

gY_B[bus1][bus1]=gY_B[bus1][bus1]+b/gLine[i].k+b*(1-gLine[i].k)/gLine[i].k/gLine[i].k; }

}

gY_B[bus2][bus2]=gY_B[bus2][bus2]+b/gLine[i].k+b*(gLine[i].k-1)/gLine[i].k; gY_B[bus1][bus2]=gY_B[bus1][bus2]-b/gLine[i].k; gY_B[bus2][bus1]=gY_B[bus2][bus1]-b/gLine[i].k;

gY_G[bus2][bus2]=gY_G[bus2][bus2]+g/gLine[i].k+g*(gLine[i].k-1)/gLine[i].k; gY_G[bus1][bus2]=gY_G[bus1][bus2]-g/gLine[i].k; gY_G[bus2][bus1]=gY_G[bus2][bus1]-g/gLine[i].k;

}

}

}

fprintf(fp,\"Y(%d,%d)=(%10.5f,%10.5f)\\n\

fclose(fp);

void SetInitial() { }

void GetUnbalance() { int i,j;

FILE *fp;

for(i=0;i<=Bus_Num-2;i++) {

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

if(gBus[i+1].Type==2) //PV节点

else gDelta_Q[i]=gBus[i+1].GenQ-gBus[i+1].LoadQ; for(j=0;j<=Bus_Num-1;j++) { int i;

for(i=0;i<=Bus_Num-1;i++) { }

if(gBus[i].Type==3) { } { }

gf[i]=0; ge[i]=1;

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

else

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

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

if(gBus[i+1].Type==1) //PQ节点

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

void GetJaccobi() { int i,j;

float ga[Bus_Num-1],gb[Bus_Num-1]; FILE *fp;

for(i=0;i<=Bus_Num-2;i++) //计算注入电流 {

ga[i]=0; gb[i]=0;

for(j=0;j<=Bus_Num-1;j++) { }

ga[i]=ga[i]+gY_G[i+1][j]*ge[j]-gY_B[i+1][j]*gf[j]; gb[i]=gb[i]+gY_G[i+1][j]*gf[j]+gY_B[i+1][j]*ge[j];

}

for(i=0;i<=Bus_Num-2;i++) //合并 {

gDelta_PQ[2*i]=gDelta_P[i]; gDelta_PQ[2*i+1]=gDelta_Q[i];

}

if((fp=fopen(\"F:\\\\1061180523\\\\flow\\\\data\\\ance.txt\{ }

printf(\"Can not open the file named 'unbalance.txt' \\n\"); return ;

fprintf(fp,\"---Unbalance---\\n\"); for(i=0;i<=2*Bus_Num-3;i++) {

fprintf(fp,\"Unbalance[%d]=%10.5f\\n\ }

fclose(fp);

}

for(i=0;i<=Bus_Num-2;i++) {

for(j=0;j<=Bus_Num-2;j++) {

if(i!=j) { gJaccobi[2*i][2*j]=-gY_B[i+1][j+1]*ge[i+1]+gY_G[i+1][j+1]*gf[i+1];

gJaccobi[2*i][2*j+1]=gY_G[i+1][j+1]*ge[i+1]+gY_B[i+1][j+1]*gf[i+1]; if(gBus[i+1].Type==2) //PV节点 {

gJaccobi[2*i+1][2*j]=0; gJaccobi[2*i+1][2*j+1]=0;

}

else //PQ { }

gJaccobi[2*i+1][2*j]=-gJaccobi[2*i][2*j+1]; gJaccobi[2*i+1][2*j+1]=gJaccobi[2*i][2*j];

}

else {

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

gJaccobi[2*i][2*j+1]=gY_G[i+1][j+1]*ge[i+1]+gY_B[i+1][j+1]*gf[i+1]+ga[i]; if(gBus[i+1].Type==2) //PV节点

{ }

gJaccobi[2*i+1][2*j]=2*gf[i+1]; gJaccobi[2*i+1][2*j+1]=2*ge[i+1];

else //PQ {

gJaccobi[2*i+1][2*j]=-gY_G[i+1][j+1]*ge[i+1]-gY_B[i+1][j+1]*gf[i+1]+ga[i]; gJaccobi[2*i+1][2*j+1]=-gY_B[i+1][j+1]*ge[i+1]+gY_G[i+1][j+1]*gf[i+1]-gb[i]; } }

if((fp=fopen(\"F:\\\\1061180523\\\\flow\\\\data\\\\jaccobi.txt\ {

printf(\"Can not open the file named 'jaccobi.txt' \\n\"); return ; }

}

}

fprintf(fp,\"---Jaccobi Matrix---\\n\"); for(i=0;i<=2*Bus_Num-3;i++)

}

{ } fclose(fp);

for(j=0;j<=2*Bus_Num-3;j++) { fprintf(fp,\"jaccobi(%d,%d)=%10.5f\\n\}

void GetRevised() {

int i,j;

FILE *fp;

NEquation ob1; //解矩阵方程 ob1.SetSize(2*(Bus_Num-1)); for(i=0;i<=2*Bus_Num-3;i++) for(j=0;j<=2*Bus_Num-3;j++) ob1.Data(i,j)=gJaccobi[i][j]; for(i=0;i<=2*Bus_Num-3;i++)

ob1.Value(i)=gDelta_PQ[i]; ob1.Run();

for(i=0;i<=Bus_Num-2;i++) { gDelta_f[i]=ob1.Value(2*i); gDelta_e[i]=ob1.Value(2*i+1);

gDelta_fe[2*i]=gDelta_f[i]; gDelta_fe[2*i+1]=gDelta_e[i];

}

if((fp=fopen(\"F:\\\\1061180523\\\\flow\\\\data\\\\revised.txt\ { }

fprintf(fp,\"---Revised---\\n\"); for(i=0;i<=2*Bus_Num-3;i++) { } fclose(fp);

fprintf(fp,\"revised[%d]=%10.5f\\n\

printf(\"Can not open the file named 'revised.txt' \\n\"); return ;

}

void GetNewValue()

{ }

int main(int argc, char* argv[]) { int i,Count_Num;

float maxValue;

int i;

FILE *fp;

for(i=0;i<=Bus_Num-2;i++) {

gf[i+1]=gf[i+1]+gDelta_f[i]; ge[i+1]=ge[i+1]+gDelta_e[i];

}

if((fp=fopen(\"F:\\\\1061180523\\\\flow\\\\data\\\\newvalue.txt\{ }

fprintf(fp,\"---New Value---\\n\");

for(i=0;i<=Bus_Num-2;i++) { }

fprintf(fp,\"f(%d)=%10.5f,e(%d)=%10.5f\\n\

printf(\"Can not open the file named 'newvalue.txt' \\n\"); return ;

fclose(fp);

test(); GetData(); GetYMatrix();

SetInitial();

for(Count_Num=0;Count_Num<=100;Count_Num++) {

GetUnbalance(); GetJaccobi(); GetRevised(); GetNewValue();

maxValue=fabs(gDelta_fe[0]); for(i=1;i<=2*(Bus_Num-1)-1;i++) {

if(maxValue}

}

maxValue=fabs(gDelta_fe[i]);

}

}

if(maxValuebreak;

printf(\"%d\\n\for(i=0;i<=Bus_Num-1;i++) { }

printf(\"%10.5f\\n\

return 0;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoaiwan.cn 版权所有 赣ICP备2024042794号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务