华北电力大学潮流上机课程设计报告.docx
- 文档编号:8354751
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:14
- 大小:53.49KB
华北电力大学潮流上机课程设计报告.docx
《华北电力大学潮流上机课程设计报告.docx》由会员分享,可在线阅读,更多相关《华北电力大学潮流上机课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
华北电力大学潮流上机课程设计报告
课程设计报告
(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.设计中遇到的问题和解决的办法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华北 电力大学 潮流 上机 课程设计 报告