华北电力大学潮流上机课程设计报告.docx

上传人:b****6 文档编号:8354751 上传时间:2023-01-30 格式:DOCX 页数:14 大小:53.49KB
下载 相关 举报
华北电力大学潮流上机课程设计报告.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

华北电力大学潮流上机课程设计报告

课程设计报告

(2014—2015年度第一学期)

名称:

电力系统潮流上机

院系:

电气与电子工程学院

班级:

电气1215

学号:

学生姓名:

指导教师:

王莉丽

设计周数:

两周

成绩:

日期:

2015年1月4日

一、课程设计的目的与要求

培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识

二、设计正文(详细内容见附录)

1.手算

2.计算机计算

3.思考题

三、课程设计总结或结论

四、参考文献

1.《电力系统分析基础》,李庚银,机械工业出版社,2011年,第一版;

2.《电力系统稳态分析》,陈珩,中国电力出版社,2007年,第三版;

附录(包括:

1.手算过程及结果;2.计算机计算流程图、表格、数据;3.思考题答案)

附录

1.手算过程及结果

2.

计算机计算流程图

3.完整的潮流程序

头文件(定义变量):

#defineBus_Num9

#defineLine_Num9

#definePrecision1e-5

structBus

{

intNo;

floatVoltage,Phase,GenP,GenQ,LoadP,LoadQ;

intType;

}gBus[Bus_Num];

structLine

{

intNo,No_I,No_J;

floatR,X,B,k;

}gLine[Line_Num];

floatgY_G[Bus_Num][Bus_Num],gY_B[Bus_Num][Bus_Num];

floatgDelta_P[Bus_Num-1],gDelta_Q[Bus_Num-1],gDelta_PQ[2*(Bus_Num-1)];

floatgJaccobi[2*(Bus_Num-1)][2*(Bus_Num-1)];

floatgDelta_f[Bus_Num-1],gDelta_e[Bus_Num-1],gDelta_fe[2*(Bus_Num-1)];

floatgf[Bus_Num],ge[Bus_Num];

主程序:

//flow.cpp:

主项目文件

#include"stdafx.h"

#include"NEquation.h"

#include"math.h"

#include"stdio.h"

#include"config.h"

usingnamespaceSystem;

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)=4;

ob1.Value

(1)=6;

ob1.Run();

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

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

(1));

}

voidGetData()//Readthedata

{

FILE*fp;

inti;

fp=fopen("E:

\\1121960726\\flow\\data\\data.txt","r");

if(fp==NULL)

{

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

return;

}

for(i=0;i<=Bus_Num-1;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<=Line_Num-1;i++)

{

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

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

}

fclose(fp);

}

voidGetYMatrix()

{

inti,j,bus1,bus2;

floatr,x,d,g,b,g1,b1,g2,b2,g3,b3;

FILE*fp;

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++)

{

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

{

bus1=gLine[i].No_I-1;

bus2=gLine[i].No_J-1;

r=gLine[i].R;

x=gLine[i].X;

d=r*r+x*x;

g=r/d;

b=-x/d;

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+gLine[i].B;

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

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

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

else

{

bus1=gLine[i].No_I-1;

bus2=gLine[i].No_J-1;

x=gLine[i].X;

d=r*r+x*x;

g=r/d;

b=-x/d;

g1=g/gLine[i].k;

b1=b/gLine[i].k;

g2=g*(1-gLine[i].k)/(gLine[i].k*gLine[i].k);

b2=b*(1-gLine[i].k)/(gLine[i].k*gLine[i].k);

g3=g*(gLine[i].k-1)/gLine[i].k;

b3=b*(gLine[i].k-1)/gLine[i].k;

gY_G[bus1][bus1]=gY_G[bus1][bus1]+g1+g2;

gY_G[bus2][bus2]=gY_G[bus2][bus2]+g1+g3;

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

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

gY_B[bus1][bus1]=gY_B[bus1][bus1]+b1+b2;

gY_B[bus2][bus2]=gY_B[bus2][bus2]+b1+b3;

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

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

}

}

//outputtheYmatrix

fp=fopen("E:

\\1121960726\\flow\\data\\ymatrix.txt","w");

if(fp==NULL)

{

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

return;

}

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

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

{

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

{

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

}

}

fclose(fp);

}

voidSetInitial()

{

inti;

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

{

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

{

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()

{

inti,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节¨2点ì?

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

else

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

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

{

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节¨2点ì?

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]);

}

}

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

并?

é

{

gDelta_PQ[2*i]=gDelta_P[i];

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

}

fp=fopen("E:

\\1121960726\\flow\\data\\unbalance.txt","w");

if(fp==NULL)

{

printf("无法打开文件:

”'unbalance.txt'\n");

return;

}

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

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

{

fprintf(fp,"Unbalance[%d]=%10.5f\n",i+1,gDelta_PQ[i]);

}

fclose(fp);

}

voidGetJaccobi()

{

inti,j;

floatga[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++)

{

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节¨2点ì?

{

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节¨2点ì?

{

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];

}

}

}

}

fp=fopen(,"w");

if(fp==NULL)

{

printf("无法打开文件:

”'jaccobi.txt'\n");

return;

}

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

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

{

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

{

fprintf(fp,"jaccobi(%d,%d)=%10.5f\n",i+1,j+1,gJaccobi[i][j]);

}

}

fclose(fp);

}

voidGetRevised()

{

inti,j;

FILE*fp;

NEquationob1;//解矩阵方程

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];

}

fp=fopen("E:

\\1121960726\\flow\\data\\revised.txt","w");

if(fp==NULL)

{

printf("无法打开文件:

”'revised.txt'\n");

return;

}

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

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

{

fprintf(fp,"revised[%d]=%10.5f\n",i+1,gDelta_fe[i]);

}

fclose(fp);

}

voidGetNewValue()

{

inti;

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];

}

fp=fopen("E:

\\1121960726\\flow\\data\\newvalue.txt","w");

if(fp==NULL)

{

printf("无法打开文件:

”'newvalue.txt'\n");

return;

}

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

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

{

fprintf(fp,"f(%d)=%10.5f,e(%d)=%10.5f\n",i+1,gf[i+1],i+1,ge[i+1]);}

fclose(fp);

}

intmain(array

:

String^>^args)

{

inti,Count_Num;

floatmaxValue;

//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(maxValue

{

break;

}

}

printf("%d\n",Count_Num);

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

{

printf("%10.5f\n",sqrt(ge[i]*ge[i]+gf[i]*gf[i]));

}

while(true)

{

}

return0;

}

计算结果:

(1)原始数据:

(2)节点导纳矩阵:

(3)Jacobi矩阵:

(4)NewVoltageValue:

(5)不平衡量:

(6)修正量:

(6)结果:

3.回答思考题

1.潮流计算的方法有哪些?

各有何特点?

2.如果交给你一个任务,请你用已有的潮流计算软件计算北京城市电网的潮流,你应该做哪些工作?

(收集哪些数据,如何整理,计算结果如何分析)

3.设计中遇到的问题和解决的办法。

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

当前位置:首页 > 高等教育 > 经济学

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

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