资源描述
电力系统分析课程设计
目录
1 课程设计说明 1
2 编程语言的选择及理由 1
3 程序设计 2
3。1 主体流程图 2
3。2 详细流程图 3
3。2。1 创建系统(create)流程图 3
3。2。2 加载系统函数(load)流程图 3
3.2。3 计算子函数(calculate)流程图 4
3.2.4 改变短路节点(change)流程图 4
3.3 数据及变量说明 5
3.4 程序代码及注释 6
3.5 测试算例 6
4 设计体会 13
参考文献 13
附录 13
i
1 课程设计说明
本课程设计根据电力系统分析课程中所讲的基于节点方程的三相短路计算的原理和方法。采用c语言编程 。实现了三相短路计算的计算机实现。本程序输入含有网络拓扑信息和电器元件的参数,输出三相短路的短路电流和短路后网络各节点的电压参数和各支路的电流参数.并以文件的形式保存,方便用户的读取,打印.实现了设计的要求。
三相短路在电力系统中虽然发生的概率很小,但一旦发生产生的影响非常严重,电力系统中设备的动稳定和热稳定校验都要以三相短路电流为依据,因此我选择做是电力系统三相短路的计算程序,觉得更有意义.
应用计算机进行电力系统计算,首先要建立电力系统相应的数学模型,如建立电力系统等效网络和节点方程;其次是运用合理的计算方法计算结果,如三角分解法,LDU分解法等;第三则是选择合适的计算机语言编制计算程序,实现程序的准确性,提高精确度.
本设计利用节点方程来实现电力系统三相短路计算。首先,根据给定的电力系统运行方式制定系统的一相等值网络,计算出各元器件的参数,其次根据网络方程利用变压器和线路参数形成不含发电机和负荷的节点导纳矩阵Y;然后,利用系统形成的节点导纳矩阵求解系统阻抗矩阵Z;第三则是应用节点阻抗矩阵计算短路电流。
电力系统短路电流的实际工程计算中,许多实际问题的解决并不需要十分精确的结果.因此采用近似计算法,在建立系统节点方程时,采用网络模型和参数做简化处理,等值电路的制定通常将发电机作为含源支路,表示为节点注入电流源和节点电抗的形式;系统中存在同步发电机时,按发电机支路处理;同时,忽略发电机、变压器和输电线路的电阻,不计线路的电容,略去变压器的励磁电流,负荷忽略不计;在标幺参数计算时,选取各级平均额定电压作为基准电压,忽略元件的额定电压和平均电压的差别,认为变压器变比的标幺值为1;此外,还假定所有的发电机的电势具有相同的相位,所有的元件仅用电抗表示,避免复数运算。三相对称短路为金属性短路.
本课程设计的关键部分是利用系统节点导纳矩阵形成节点阻抗矩阵,本程序采用LDU分解法,然后利用节点导纳矩阵和阻抗矩阵的乘积为单位矩阵列写方程,节点导纳矩阵经LDU分解后,回代求解系统阻抗矩阵.
利用节点阻抗矩阵进行短路计算,首先利用故障前的节点注入电流和系统节点阻抗矩阵求取故障前系统的各节点电压;然后,利用金属短路时短路点残压为0,对地电阻为0,计算短路点电流;最后,利用故障前节点电压、节点阻抗和短路点电流求得短路后各节点电压和各支路电流.
2 编程语言的选择及理由
能够实现程序编写的语言有多种,本课程设计中采用C语言进行电力系统对称短路计算程序的编写.个人对c语言和metlab相对较熟悉。之所以选择C语言编程,从主观上说,是因为我学过C语言课程,相对于其他的编程语言而言,C语言的应用更为熟悉和了解。
另外,从客观上说,C语言是目前世界上最为流行、使用最为广泛的高级程序设计语言.,C的效率MATLAB比高多了,MATLAB虽然语法简单,但执行效率不高.MATLAB是用于特定的方面的,比如说矩阵运算方面、DSP就很有优势,而C语言不同.很多软件的底层都是C编写的。MATLAB提供的是一种基于解释的语言,虽然也是一种高级语言,但是还是很简单的,它的目标在于用户方便,开发简单。而实际上这些方便也是有代价的,编译器承受了这些代价,程序执行效率方面也有损失。另一方面MATLAB这么做也是基于其专用于科学计算的目的来考虑的,无法应用于通用的程序设计。c语言这么做保持了其编译的速度,便于大型程序设计,执行效率也很高,因此我选择用c语言编写程序 。
3 程序设计
3.1 主体流程图
开始
欢迎使用
用户选择操作,按键
1
2
3
进入创建系统子函数(create)
进入加载系统子函数(load)
进入退出子函数
进入计算子函数(calculate)
改短路点子函数(change)
是否改路点?
结束
是
图3—1 主体流程图
3.2 详细流程图
3.2.1 创建系统(create)流程图
输入文件名
输入电抗支路参数
结束
输入节点数、支路数、故障节点
输入发电机支路参数
输入电容支路参数
图3-2 create函数流程图
3.2.2 加载系统函数(load)流程图
输入系统文件名
输出查看系统参数
选择进入下一个子函数
图3—3 节点导纳矩阵形成流程图
3.2.3 计算子函数(calculate)流程图
文件读入电路参数
求取LDU分解的因子表矩阵下三角
求取DUZj向量
求解完毕?
否
是
结束
求取节点阻抗矩阵列向量
根据支路参数建立节点导纳矩阵
求取短路点电流
求取节点电压
求取支路电流
建立文件存储计算结果
结束
图3—4 计算子函数流程图
3.2.4 改变短路节点(change)流程图
输入短路点
从新读取文件中的参数
选择进入下一个子函数计算
图3—5 change函数流程图
3.3 数据及变量说明
本程序中将电路的支路分为三类:电抗支路、电流支路、发电机直流,数据输入时分开输入格式如下:
电抗支路:支路数、节点首端好、节点末端好,支路电抗值.
发电机支路:发电机台数、发电机接入点,发电机电势、发电机之路电抗。
电容支路:支路数、电容节点号,电容支路电抗值.
程序中的变量定义如下:
FILE *fp; //文件指针
float If; //短路电流
float V0[10]; //节点电压初值
float In[10]; //注入电流
float V[10]; //节点电压
float I[10]; //支路电流
int count[2][10]; //数组用于储存支路号
float z[10][10]; //储存支路电抗值
float yjs[10][10]; //存放计算导纳矩阵中的中间值
float ye[10]; //储存发电机支路导纳
float Y[10][10]; //节点导纳矩阵
float Z[10][10]; //阻抗矩阵
float dk; //电抗值
int e1[10];
float yc[10]; //节点对地电抗
float ycjs[10];
int e[10]; //发电机接入点
float E[10];
float Ig[10];
float Emid[10];
float ze[10]; //储存发电机支路导纳
int m,n,a,f,i=0,j=0,sd,md,butn,times,timesc;/*n是节点数,a是支路数,f是短路点,i为行标,j为列标*/
1、文件读入程序如下:
printf("请输入系统的节点数,支路数,故障节点\n");
scanf(”%d%d%d",&n,&a,&f);
fp=fopen(name,”w+");
fprintf(fp,”系统参数如下所示:\n\n”);
fprintf(fp,"1.系统的节点数为%d\n2。系统的支路数为%d\n3。系统的短路点为%d\n\n",n,a,f);
fprintf(fp,”支路电抗参数如下\n");
2、计算主程序如下:
(1)、 If=V0[f-1]/Z[f-1][f—1];(短路电流计算)
for(i=0;i<n;i++)
V[i]=V0[i]-Z[i][f—1]*If;
(2)、for(i=0;i<n;i++)(导纳矩阵计算)
{
for(j=0;j<n;j++)
Y[i][i]=Y[i][i]—yjs[i][j];
Y[i][i]=Y[i][i]—ye[i]—ycjs[i];
}
for(i=0;i<n;i++)
for(j=i+1;j〈n;j++)
{
Y[i][j]=yjs[i][j];
Y[j][i]=yjs[i][j];
}
3.4 程序代码及注释
具体源程序代码及其注释见附录。
3.5 测试算例
【例6-3】在如图3—5所示的电力系统中分别在节点1和节点5接入发电机支路,其标幺值参数为:
。在节点3发生三相短路,计算短路电流及网络中的电流分布。线路的电阻和电容略去不计,变压器的标幺变比等于1。各元件参数的标幺值如下:
图3-6 电力系统等值网络图
图3—7 三相短路时的等值网络图
由以上网络图可得计算过程如下:
(1)、形成输入文件:
系统参数如下所示:
1。系统的节点数为5
2。系统的支路数为5
3。系统的短路点为3
支路电抗参数如下
z12=0.1050 z23=0。0650 z24=0.0800 z43=0.0500 z54=0.1840
发电机接入点及其电抗如下:共2台发电机进入系统
z1=0。1500 z5=0。2200
e1=1.0000 e5=1.0000
共0个节点有接地电容
(2)、计算后得到的输出文件:
计算结果如下:
1、节点导纳矩阵:
-16。1905 9.5238
9.5238 -37.4084 15.3846 12.5000
15。3846 -35.3846 20。0000
12。5000 20.0000 -37。9348 5.4348
5。4348 -9。9802
2、节点阻抗矩阵:
0.1181 0.0958 0.0902 0。0858 0.0467
0.0958 0.1629 0.1533 0.1459 0。0794
0。0902 0.1533 0.1860 0.1611 0.0877
0.0858 0。1459 0。1611 0。1729 0.0941
0.0467 0。0794 0.0877 0.0941 0。1515
3、短路节点是:3
4、短路电流:If=5.3767
5、各节点电压:
V1=0.5152 V2=0.1758 V3=0 V4=0。1336 V5=0.5282
6、发电机支路电流如下:
Ig[1][0]=-3。2321
Ig[5][0]=-2.1445
7、各支路电流:
I12=-3。2321 I23=-2。7046 I24=-0.5275 I43=—2。6720 I54=-2。1445
图3—8 对称短路计算结果
图3—8 改变短路点后计算结果
【习题6-10】如图3-9所示网络,略去负荷,试用节点阻抗矩阵法求节点5发生三相短路时,短路点的短路电流及线路L—2、L—3的电流。已知各元件参数如下:
发电机G—1: SN = 120 MVA, x”d = 0。23; G—2: SN = 60 MVA, x”d = 0。14
变压器T-1: SN = 120 MVA, Vs = 10。5%; T—2: SN = 60 MVA, Vs = 10。5%
线路参数 x1 = 0。4Ω/km, b1 = 2.8×10-6 S/km
线路长度 L—1: 120 km, L—2: 80 km, L—3: 70 km
取SB = 120 MVA, VB = Vav
G
G
G-1
G-2
T-1
T-2
L-1
L-2
L-3
1
2
3
4
5
图3-9 电力系统网络图
图3-10 三相短路时的等值网络图
(1)、形成输入文件:
系统参数如下所示:
1。系统的节点数为:5
2.系统的支路数为:5
3。系统的短路点为:5
支路电抗参数如下:
z3 5=0。29036 z4 5=0.25406 z3 4=0.43554 z1 3=0。1050 z2 4=0.2100
发电机接入点及其电抗如下:共2台发电机进入系统:
z1=0。2300 z2=0.2800
e1=1。0500 e2=1.0500
共3个节点有接地电容:
Y3=—32。372299 Y4=—34。077000 Y5=—43。185200
(2)、得到的输出文件:
计算结果如下:
1、节点导纳矩阵:
-13.8716 9。5238
—8.3333 4.7619
9.5238 —15.2329 2。2960 3.4440
4。7619 2.2960 -10。9646 3.9361
3。4440 3.9361 -7.3569
2、节点阻抗矩阵:
0。1819 0。0616 0。1600 0。1079 0。1326
0。0616 0。2078 0。0898 0.1536 0.1242
0。1600 0.0898 0.2330 0.1571 0。1932
0。1079 0。1536 0。1571 0.2689 0.2174
0。1326 0.1242 0.1932 0.2174 0。3427
3、短路节点是:5
4、短路电流:If=3.1263
5、各节点电压:
V1=0。6471 V2=0.6723 V3=0.4632 V4=0。3890 V5=0
6、发电机支路电流如下:
Ig[1][0]=—1。7516
Ig[2][0]=-1。3491
7、各支路电流:
I35=-1.5954 I45=—1.5310 I34=—0。1705 I13=-1。7516 I24=—1.3491
图3—11 对称短路计算结果
【习题6-11】电力系统等值电路如图3-13所示,支路阻抗的标幺值已注明图中.
(1)形成节点导纳矩阵(或节点阻抗矩阵),并用以计算节点3的三相短路电流.
(2)另选一种方法计算短路电流,并用以验证(1)的计算结果.
图3—12 电力系统等值电路图
图3—13 经Norton变换后的等值电路图
图3—13 最终计算等值电路图
由以上网络可得输入文件如下:
系统参数如下所示:
1.系统的节点数为:3
2。系统的支路数为:2
3。系统的短路点为:3
支路电抗参数如下:
z1 2=0.2000 z2 3=0。1000
发电机接入点及其电抗如下:共2台发电机进入系统:
z1=0.2000 z3=0.130435
e1=1.0500 e3=0。913043
共1个节点有接地电容:
Y2=—2.000000
(2)、得到的输出文件:
计算结果如下:
1、节点导纳矩阵:
-10。0000 5。0000
5。0000 —14.5000 10。0000
10.0000 —17。6667
2、节点阻抗矩阵:
0。1394 0.0789 0.0446
0.0789 0。1577 0.0893
0。0446 0.0893 0.1071
3、短路节点是:3
4、短路电流:If=9。1875
5、各节点电压:
V1=0。6344 V2=0。2188 V3=0
6、发电机支路电流如下:
Ig[1][0]=—2.0781
Ig[3][0]=-7。0000
7、各支路电流:
I12=-2。0781 I23=-2.1875
图3—15 对称短路计算结果
通过计算结果与算例答案的对比,计算结果与算例 标准答案一样,说明了程序计算方法和思路的准确性。说明本次课程设计基本达到了设计的要求。
4 设计体会
通过本次课程设计让自己学到了很多东西,包括电力系统分析、和c语言的很知识.通过做课程设计自己又仔细的将两门课程相关章节看了一遍,特别是c语言,几乎把整个课本都看了一遍,并自学了很多相关的知识,重新看书的时候才发现,虽然以前学过,但几年不用已经忘得差不多啦!当然,重新看书也发现了许多新的知识,学到不少的东西。本次做课程设计老师给我们留了充足的时间,让我们耐心去学习知识,而不像以前一样赶任务。通过这次课程设计,我更好的掌握了电力系统短路计算的方法。我想作为一个学电气的人这是非常关键的。在刚接到题目时,我感觉很迷茫,觉得很难,当我仔细准备的时候发现这也不是想象中的难,最终通过自己的努力和通过学的帮助完成了课程设计。
这次设计给我最大的收获并不仅仅是相关的专业知识,这是我第一次做这种要几门课结合的课程设计,我觉得这使自己应用知识的能力得到了锻炼,本次课程设计用c语言编程序实现了电力系统的三相短路计算。虽然程序能够计算,但我也知道还有很多的问题。还需要努力.第一次不自己学的知识结合在一起,觉得很有用,自己没白学。在答辩的过程老师对程序提出了修改意见,是自己的程序更加实用,在这里感谢老师的指导,让我受益匪浅。同时在做的过程中我也和很多的同学交流、讨论,大家交流自己的想法,觉得是很开心的一件事。
参考文献
[1] 何仰赞,温增银.电力系统分析(上册)(第三版).武汉:华中科技大学出版社,2002.
[2] 何仰赞,温增银.电力系统分析题解(上、下)(第三版).武汉:华中科技大学出版社,2002.
[3] 郑平安,曾大亮编.程序设计基础(C语言)第二版.北京:清华大学出版社,2006.
附录
主程序及注释(这里只给出主要计算程序):
#include 〈stdio。h〉
#include <conio.h〉
#include 〈windows.h〉
声明外部函数
extern void create();
extern void load();
extern void quit();
extern void change(char name[20]);
extern void calculate(char name[20])
{
FILE *fp; //文件指针
float If; //短路电流
float V0[10]; //节点电压初值
float In[10]; //注入电流
float V[10]; //节点电压
float I[10]; //支路电流
int count[2][10]; //数组用于储存支路号
float z[10][10]; //储存支路电抗值
float yjs[10][10]; //存放计算导纳矩阵中的中间值
float ye[10]; //储存发电机支路导纳
float Y[10][10]; //节点导纳矩阵
float Z[10][10]; //阻抗矩阵
float dk; //电抗值
int e1[10];
float yc[10]; //节点对地电抗
float ycjs[10];
int e[10]; //发电机接入点
float E[10];
float Ig[10];
float Emid[10];
float ze[10]; //储存发电机支路导纳
int m,n,a,f,g,i=0,j=0,sd,md,butn,times,timesc;/*n是节点数,a是支路数,f是短路点,i为行标,j为列标
for(i=0;i<10;i++)
{yc[i]=0;
ycjs[i]=0;
E[i]=0;
Emid[i]=0;}
for(i=0;i〈10;i++) //初始赋
{
V0[i]=0;
for(j=0;j<10;j++)
{
z[i][j]=0;
Y[i][j]=0;
}
}
/******************************读取系统参数**************************/
fp=fopen(name,”r");
fscanf(fp,”系统参数如下所示:\n\n");
fscanf(fp,"1。系统的节点数为%d\n2.系统的支路数为%d\n3。系统的短路点为%d\n\n”,&n,&a,&f);
/**************读电抗*************/
fscanf(fp,”支路电抗参数如下\n");
for(m=0;m<a;m++)
{
fscanf(fp,"z%d %d=%f\t”,&sd,&md,&dk);
i=sd—1;
j=md—1;
count[0][m]=sd;
count[1][m]=md;
z[i][j]=dk;
z[j][i]=dk;
}
printf(”系统支路电抗如下:\n");
for(m=0;m〈a;m++)
{
i=count[0][m]—1;
j=count[1][m]—1;
printf("z%d%d = %.4f\n",count[0][m],count[1][m],z[i][j]);
}
fscanf(fp,”\n\n发电机接入点及其电抗如下:");
fscanf(fp,”共%d台发电机进入系统\n”,×);
for(m=0;m<times;m++)
fscanf(fp,”z%d=%f\t”,&e[m],&ze[m]);
fscanf(fp,”\n");
for(m=0;m<times;m++)
fscanf(fp,"e%d=%f\t",&e[m],&E[m]);
printf(”输入的发电机支路电抗为\n");
for(m=0;m<times;m++)
printf("z%d=%f\t”,e[m],ze[m]);
for(m=0;m〈times;m++)
for(m=0;m〈times;m++)
printf("e%d=%f\t",e[m],E[m]);
for(m=0;m〈times;m++)
printf(”%d”,e[m]);
/****************读取节点对地电容**********************/
fscanf(fp,"\n共%d个节点有接地电容\n”,&timesc);
if(timesc〉0)
{for(m=0;m<timesc;m++)
fscanf(fp,"Y%d=%f\t",&e1[m],&yc[m]);
printf("\n系统有%d个节点电容\n”,timesc);
for(m=0;m<timesc;m++)
printf("z%d0=%f ",e1[m],yc[m]);
}
fclose(fp);
/*******************************计算节点阻抗矩阵**************************/
for(m=0;m<10;m++)
ye[m]=0;
for(m=0;m〈times;m++)
for(j=0;j<n;j++)
if(j==(e[m]—1))
{ye[j]=1/ze[m];
Emid[j]=E[m];}
for(m=0;m〈timesc;m++)
for(j=0;j〈n;j++)
if(j==(e1[m]—1))
ycjs[j]=1/yc[m];
/**************系统支路导纳*************/
for(i=0;i<n;i++)
for(j=0;j〈n;j++)
{if(z[i][j]==0)
yjs[i][j]=0;
else
yjs[i][j]=1/z[i][j];
}
/**************导纳矩阵*************/
for(i=0;i〈n;i++)
{
for(j=0;j〈n;j++)
Y[i][i]=Y[i][i]—yjs[i][j];
Y[i][i]=Y[i][i]-ye[i]—ycjs[i];
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
Y[i][j]=yjs[i][j];
Y[j][i]=yjs[i][j];
}
printf(”\n\n节点导纳矩阵为”);
for(i=0;i<n;i++)
{
printf(”\n");
for(j=0;j<n;j++)
if(Y[i][j]==0)
printf(” ”);
else
printf("%8。4f ”,Y[i][j]);
}
float l[10][10];
float d[10][10];
float u[10][10];
int kk;
float sum;
for(i=0;i<10;i++)
for(j=0;j〈10;j++)
{
l[i][j]=0;
d[i][j]=0;
u[i][j]=0;
}
for(i=0;i〈10;i++)
{
l[i][i]=1;
u[i][i]=1;
}
/**************迭代法求解*************/
for(i=0;i〈n;i++)
{ sum=0;
if(i<1)
d[i][i]=Y[i][i];
else
{
for(kk=0;kk<i;kk++)
sum=sum+u[kk][i]*u[kk][i]*d[kk][kk];
d[i][i]=Y[i][i]—sum;
}
for(j=i+1;j〈n;j++)
{
sum=0;
if(i<1)
u[i][j]=Y[i][j]/d[i][i];
else
{
for(kk=0;kk〈i;kk++)
sum=sum+u[kk][i]*u[kk][j]*d[kk][kk];
u[i][j]=(Y[i][j]-sum)/d[i][i];
}
}
}
/************LDU屏幕显示*************/
printf(”\nD矩阵如下所示”);
for(i=0;i<n;i++)
{
printf(”\n”);
for(j=0;j<n;j++)
if(d[i][j]==0)
printf(" ");
else
printf(”%8。4f ”,d[i][j]);
}
printf(”\nU矩阵如下所示”);
for(i=0;i<n;i++)
{
printf(”\n”);
for(j=0;j<n;j++)
if(u[i][j]==0)
printf(" ”);
else
printf(”%8。4f”,u[i][j]);
}
printf(”\n节点阻抗矩阵如下所示");
float fi[10];
float h[10];
for(j=0;j〈10;j++)
{
fi[j]=0;
h[j]=0;
}
for(j=0;j〈n;j++)
{
for(i=0;i<n;i++)
if((i—j)〈0)
fi[i]=0;
else if((i-j)==0)
fi[i]=1;
else
{ sum=0;
for(kk=0;kk〈i;kk++)
sum=sum—u[kk][i]*fi[kk];
fi[i]=sum;
}
for(i=0;i〈n;i++)
if(i〈j)
h[i]=0;
else
h[i]=fi[i]/d[i][i];
for(i=n-1;i>=0;i--)
if(i==(n—1))
Z[i][j]=h[i];
else
{ sum=0;
for(kk=i+1;kk〈n;kk++)
{
sum=sum-u[i][kk]*Z[kk][j];
}
Z[i][j]=h[i]+sum ;
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
Z[i][j]=-Z[i][j];
for(i=0;i<n;i++)
{
printf(”\n”);
for(j=0;j〈n;j++)
printf(”%.4f ”,Z[i][j]);
}
getch();
system(”cls”);
/***********************计算短路电压电流网络中电流分布************/
/***********注入电流计算***********************/
printf(”\t\t\t\t短路计算结果如下\n\n");
for(i=0;i<n;i++)
In[i]=((Emid[i])*(ye[i]));
/**
展开阅读全文