电力系统短路故障的计算机算法程序设计
电力系统短路故障的计算机算法程序设计
目录
1 课程设计说明 . ........................................................... 1 2 编程语言的选择及理由 .................................................... 2 3 程序设计 ................................................................ 3
3.1 主体流程图 ................................................................. 3
3.2 详细流程图 ......................................................... 3
3.2.1 创建系统(create )流程图 . ..................................... 3
3.2.2 加载系统函数(load )流程图 . ................................... 4
3.2.3 计算子函数(calculate )流程图 . ................................ 4
3.2.4 改变短路节点(change )流程图 . ................................. 5
3.3 数据及变量说明 . .................................................... 6
3.4 程序代码及注释 . .................................................... 7
3.5 测试算例 . .......................................................... 7
4 设计体会 . .............................................................. 17 参考文献 ........................................................................ 17 附录 . ............................................................................. 19
1课程设计说明
本文根据电力系统三相对称短路的特点,建立了合理的三相短路的数学模型,在此基础上,形成电力系统短路电流实用汁算方法,编制了对任意一个电力系统在任意点发生短路故障时三相短路电流及其分布的通用计算程序,该办法适用于各种复杂结构的电力系统,从另一个侧面展示了计算机应用于电力系统的广阔前景。
根据所给的电力系统,编制短路电流计算程序,通过计算机进行调试,最后完成一个切实可行的电力系统计算应用程序。通过设计电力系统计算程序使自己对电力系统分析有进一步理解,同时加强计算机实际应用能力的训练。
电力系统的短路故障是严重的,而又是发生几率最多的故障。一般说来,最严重的短路是三相短路。当发生短路时,其短路电流可达数万安甚至十几万安,它们所产生的热效应和电动力效应将使电气设备遭受严重破环。为此,当发生短路时,继电保护装置必须迅速切除故障线路,以避免故障部分继续遭受危害,并使非故障部分从不正常运行情况下解脱出来,这要求电气设备必须有足够的机械强度和热稳定度,开关电气设备必须具备足够的开断能力,即必须经得起最大短路电流的侵扰而不致损坏。因此,电力系统短路电流计算是电力系统运行分析和设计计算的重要环节,许多电力设计单位和个人倾注极大精力从事这一工作的研究。由于电力系统结构复杂,随着生产发展,技术进步,电力系统日趋扩大和复杂化,短路电流计算的工作量也随之增大,采用计算机辅助计算势在必行。
2编程语言的选择及理由
一种语言之所以能存在和发展,并具有生命力,总是有其不同于(或优于) 其他语言的特点。C 语言的主要特点如下。
(1)语言简洁、紧凑,使用方便、灵活。C 语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分。
(2)运算符丰富。C 的运算符包含的范围很广泛,共有34种运算符。C 把括号、赋值、强制类型转换等都作为运算符处理,从而使C 的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。
(3)数据结构丰富,具有现代化语言的各种数据结构。C 的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构(如链表、树、栈等) 的运算。尤其是指针类型数据,使用起来比PASCAL 更为灵活、多样。
(4)具有结构化的控制语句(如if„else语句、while 语句、do„while语句、switch 语句、for 语句) 。用函数作为程序的模块单位,便于实现程序的模块化。C 是良好的结构化语言, 符合现代编程风格的要求。
(5)语法限制不太严格,程序设计自由度大。例如对数组下标越界不做检查,由程序编写者自己保证程序的正确。对变量的类型使用比较灵活,例如整型数据与字符型数据可以通用。一般的高级语言语法检查比较严,能检查出几乎所有的语法错误。而C 语言允许程序编写者有较大的自由度,因此,放宽了语法检查。程序员应当仔细检查程序,保证其正确,而不要过分依赖C 编译程序去查错。“限制”与“灵活”是一对矛盾。限制严格,就失去灵活性; 而强调灵活,就必然放松限制。一个不熟练的编程人员,编一个正确的C 程序可能会比编一个其他高级语言程序难一些。也就是说,对用C 语言的人,要求对程序设计更熟练一些。
(6)C语言能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此C 既具有高级语言的功能,又具有低级语言的许多功能,可用来写系统软件。C 语言的这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言。
3程序设计
3.1主体流程图
图3-1 主体流程图
3.2详细流程图
3.2.1创建系统(create )流程图
图3-2 create函数流程图
3.2.2加载系统函数(load )流程图
图3-3 节点导纳矩阵形成流程图
3.2.3 计算子函数(calculate )流程图
图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
V[i]=V0[i]-Z[i][f-1]*If;
(2)、for (i=0;i
{
for (j=0;j
Y[i][i]=Y[i][i]-yjs[i][j];
Y[i][i]=Y[i][i]-ye[i]-ycjs[i];
}
for (i=0;i
for (j=i+1;j
{
Y[i][j]=yjs[i][j];
Y[j][i]=yjs[i][j];
}
3.4程序代码及注释
具体源程序代码及其注释见附录。
3.5测试算例
【例6-3】在如图3-5所示的电力系统中分别在节点1和节点5接入发电机支路,其标幺值参数为:
=E =1. 0, z =j 0. 15, z =j 0. 22。在节点3发生三相短路,计算短路电流及网络中的E 1515
电流分布。线路的电阻和电容略去不计,变压器的标幺变比等于1。各元件参数的标幺值如下:
z 12=j 0. 105, k 12=1. 05, z 45=j 0. 184, k 45=0. 96, z 24=0. 03+j 0. 08, z 23=0. 024+j 0. 065, z 34=0. 018+j 0. 05, y 240=y 420=j 0. 02, y 230=y 320=j 0. 016, y 340=y 430=j 0. 013
1:k 12y 240 y 420
k 45:1
z 12
y 230
y 320
z 24z 23 z 45z 34y 430y 340
图3-6 电力系统等值网络图
z z z E 1 E 5
图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 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
V4=0.1336 V5=0.5282
图3-8 对称短路计算结果
图3-8 改变短路点后计算结果
【习题6-10】如图3-9所示网络,略去负荷,试用节点阻抗矩阵法求节点5发生三相短路时,短路点的短路电流及线路L-2、L-3的电流。已知各元件参数如下:
发电机G-1: S N = 120 MVA, x ”d = 0.23; G-2: S N = 60 MVA, x ”d = 0.14 变压器T-1: S N = 120 MVA, V s = 10.5%; T-2: S N = 60 MVA, V s = 10.5% 线路参数 x 1 = 0.4Ω/km, b 1 = 2.8×10 S/km 线路长度 L-1: 120 km, L-2: 80 km, L-3: 70 km 取S B = 120 MVA, V B = V av
-6
3
图3-9 电力系统网络图
G 2
E 1
2
图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 电力系统等值电路图
=-j 5. I 1
=-j 7I 2
图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 设计体会
从拿到课题到设计完成,从理论到实践,忙于查找资料,构思方案。但是却学到了很多的东西,在巩固以前所学过的知识的同时,更是学到了很多在书本上所没有学到过的知识。
课程设计是培养我们运用所学知识,发现、提出、分析和解决实际问题、锻炼实践能力的重要环节,是对我们所学知识的具体训练和考察。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正服务于社会,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。通过这次设计,我懂得了学习和团队合作的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
参考文献
[1] 何仰赞,温增银.电力系统分析(上册)(第三版) .武汉:华中科技大学出版社,2002. [2] 何仰赞,温增银.电力系统分析题解(上、下)(第三版) .武汉:华中科技大学出版社,2002.
[3] 郑平安,曾大亮编.程序设计基础(C 语言) 第二版.北京:清华大学出版社,2006.
附录
主程序及注释(这里只给出主要计算程序):
#include
#include
#include
声明外部函数
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
{yc[i]=0;
ycjs[i]=0;
E[i]=0;
Emid[i]=0;}
for (i=0;i
{
V0[i]=0;
for (j=0;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
{
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
{
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
fscanf(fp,"z%d=%f\t",&e[m],&ze[m]);
fscanf(fp,"\n");
for (m=0;m
fscanf(fp,"e%d=%f\t",&e[m],&E[m]);
printf(" 输入的发电机支路电抗为\n");
for (m=0;m
printf("z%d=%f\t",e[m],ze[m]);
for (m=0;m
for (m=0;m
printf("e%d=%f\t",e[m],E[m]);
for (m=0;m
printf("%d",e[m]);
/****************读取节点对地电容**********************/
fscanf(fp,"\n共%d个节点有接地电容\n",×c);
if (timesc>0)
{for (m=0;m
fscanf(fp,"Y%d=%f\t",&e1[m],&yc[m]);
printf("\n系统有%d个节点电容\n",timesc);
for (m=0;m
printf("z%d0=%f ",e1[m],yc[m]);
}
fclose(fp);
/*******************************计算节点阻抗矩阵**************************/
for (m=0;m
ye[m]=0;
for (m=0;m
for (j=0;j
if (j==(e[m]-1))
{ye[j]=1/ze[m];
Emid[j]=E[m];}
for (m=0;m
for (j=0;j
if (j==(e1[m]-1))
ycjs[j]=1/yc[m];
/**************系统支路导纳*************/
for (i=0;i
for (j=0;j
{if (z[i][j]==0)
yjs[i][j]=0;
else
yjs[i][j]=1/z[i][j];
}
/**************导纳矩阵*************/
for (i=0;i
{
for (j=0;j
Y[i][i]=Y[i][i]-yjs[i][j];
Y[i][i]=Y[i][i]-ye[i]-ycjs[i];
}
for (i=0;i
for (j=i+1;j
{
Y[i][j]=yjs[i][j];
Y[j][i]=yjs[i][j];
}
printf("\n\n节点导纳矩阵为" );
for (i=0;i
{
printf("\n");
for (j=0;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
for (j=0;j
{
l[i][j]=0;
d[i][j]=0;
u[i][j]=0;
}
for (i=0;i
{
l[i][i]=1;
u[i][i]=1;
}
/**************迭代法求解*************/
for (i=0;i
{ sum=0;
if (i
d[i][i]=Y[i][i];
else
{
for (kk=0;kk
sum=sum+u[kk][i]*u[kk][i]*d[kk][kk];
d[i][i]=Y[i][i]-sum;
}
for (j=i+1;j
{
sum=0;
if (i
u[i][j]=Y[i][j]/d[i][i];
{
for (kk=0;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
{
printf("\n");
for (j=0;j
if (d[i][j]==0)
printf(" ");
else
printf("%8.4f ",d[i][j]);
}
printf("\nU矩阵如下所示" );
for (i=0;i
{
printf("\n");
for (j=0;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
{
fi[j]=0;
h[j]=0;
}
for (j=0;j
{
for (i=0;i
if ((i-j)
fi[i]=0;
else if ((i-j)==0)
fi[i]=1;
{ sum=0;
for (kk=0;kk
sum=sum-u[kk][i]*fi[kk];
fi[i]=sum;
}
for (i=0;i
if (i
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
{
sum=sum-u[i][kk]*Z[kk][j];
}
Z[i][j]=h[i]+sum ;
}
}
for (i=0;i
for (j=0;j
Z[i][j]=-Z[i][j];
for (i=0;i
{
printf("\n");
for (j=0;j
printf("%.4f ",Z[i][j]);
}
getch();
system("cls" );
/***********************计算短路电压电流网络中电流分布************/
/***********注入电流计算***********************/
printf("\t\t\t\t短路计算结果如下\n\n");
for (i=0;i
In[i]=((Emid[i])*(ye[i]));
/***********注入节点电压初值***********************/
for (i=0;i
for (j=0;j
V0[i]=V0[i]+In[j]*Z[j][i];
/***********节点电压初值***********************/
If=V0[f-1]/Z[f-1][f-1];
for (i=0;i
V[i]=V0[i]-Z[i][f-1]*If;
printf("1、短路电流:\nIf=%.4f\n***********************************\n2、各节
点电压为\n",If);
for (i=0;i
if ((if-1))
printf("V%d=%.4f\n",i+1,V[i]);
else
printf("V%d=0.0000\n",i+1,V[i]);
printf("***********************************\n");
printf("3、发电机支路电流如下:\n");
for (m=0;m
{
for (i=0;i
if (i+1==e[m])
Ig[e[m]]=-(E[m]-V[i])/ze[m];
printf("Ig[%d][0]=%.4f\n",e[m],Ig[e[m]]);
}
printf("***********************************\n4、各支路电流为\n");
for (m=0;m
{
i=count[0][m]-1;
j=count[1][m]-1;
I[i]=(V[j]-V[i])/z[i][j];
printf("I[%d][%d]=%.4f\n",count[1][m],count[0][m],I[i]);
}
/***************************储存文件**********************************/
printf(" 是否保存文件,保存请按,不保存按" );
scanf("%d",&g);
switch (g)
case 1:
{char outputname[20]; printf("5、你输入一个文件名用以保存数据\n");
scanf("%s",outputname);
fp=fopen(outputname,"w+");
fprintf(fp," 计算结果如下:\n1、节点导纳矩阵:");
for (i=0;i
{
fprintf(fp,"\n");
for (j=0;j
if (Y[i][j]==0)
fprintf(fp," ");
else
fprintf(fp,"%8.4f ",Y[i][j]);
}
fprintf(fp,"\n2、节点阻抗矩阵:");
for (i=0;i
{
fprintf(fp,"\n");
for (j=0;j
fprintf(fp,"%7.4f ",Z[i][j]);
}
fprintf(fp,"\n3、短路节点是:%d",f);
fprintf(fp,"\n4、短路电流:If=%.4f",If);
fprintf(fp,"\n5、各节点电压:\n");
for (i=0;i
if ((if-1))
fprintf(fp,"V%d=%.4f\t",i+1,V[i]);
else
fprintf(fp,"V%d=0\t",i+1,V[i]);
fprintf(fp,"\n6、发电机支路电流如下:\n");
for (m=0;m
{
for (i=0;i
if (i+1==e[m])
Ig[e[m]]=-(E[m]-V[i])/ze[m];
fprintf(fp,"Ig[%d][0]=%.4f\n",e[m],Ig[e[m]]);
}
fprintf(fp,"\n6、各支路电流:\n");
for (m=0;m
{
i=count[0][m]-1;
j=count[1][m]-1;
if (V[i]>V[j])
{
I[i]=(V[j]-V[i])/z[i][j];
fprintf(fp,"I%d%d=%.4f\t",count[0][m],count[1][m],I[i]);
}
else
{
I[i]=(V[i]-V[j])/z[i][j];
fprintf(fp,"I%d%d=%.4f\t",count[1][m],count[0][m],I[i]);
}
}
fclose(fp);
break ;
}
/******************************短路计算完成,选择操作***********/
{ printf("*************************************\n");
printf(" 短路计算已经完成,请选择下列操作\n 新建一个系统请按" );
printf("\n 加载已保存的系统请按\n 更改原系统短路点请按" );
printf("\n 退出请按" );
scanf("%d",&butn);
system("cls" );
switch (butn)
{
case 1:
create();
break ;
case 2:
load();
break ;
case 3:
change(name);
break ;
case 4:
quit();
break ;
}
}
}
void create()
{
char name[20];
char answer;
FILE *fp;
int n,a,f,i=0,j=0,sd,md,butn,times,nodeexist;//n,a,f分别为节点数、支路数、
短路点
float dk;
int e[10]; //储存发电机接入节点 float ae[10]; //对应的发电机电势
float b[10]; //发电机支路电抗 /****************************输入文件**************************/
printf(" 请输入您想要创建系统名称(如xx.txt) 用以保存系统参数\n");
scanf("%s",name); //输入文件名
/*************输入系统参数*************/
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");
printf(" 请输入支路首端号、支路末端号、支路电抗值\n");
for (i=0;i
{
scanf("%d%d%f",&sd,&md,&dk);
fprintf(fp,"z%d %d=%.4f\t",sd,md,dk);
}
/*************发电机电抗************/
fprintf(fp,"\n\n发电机接入点及其电抗如下:" );
printf(" 请输入发电机台数:\n");
scanf("%d",×);
printf(" 请输入发电机接入点、电势以及支路电抗\n");
for (i=0;i
scanf("%d%f%f",&e[i],&ae[i],&b[i]);
/**************写入文件****************/
fprintf(fp," 共%d台发电机进入系统\n",times);
for (i=0;i
printf("%f\n",ae[i]);
getch();
for (i=0;i
fprintf(fp,"z%d=%.4f\t",e[i],b[i]);
fprintf(fp,"\n");
for (i=0;i
fprintf(fp,"e%d=%.4f\t",e[i],ae[i]);
/************节点对地电容*********************/
printf(" 请输入电容支路数\n");
scanf("%d",×);
printf(" 请输入电容所在节点,对地电抗值\n");
for (i=0;i
scanf("%d%f",&e[i],&b[i]);
fprintf(fp,"\n共%d个节点有接地电容\n",times);
{for (i=0;i
fprintf(fp,"Y%d=%f\t",e[i],b[i]);
}
fclose(fp);
/***********选择操作************/ printf(" 接下来你希望\n 短路计算请按\n 退出请按\n ");
scanf("%d",&butn);
system("cls" );
switch (butn)
{case 1:
calculate(name);
break ;
case 2:
quit();
break ;
}
}
void change(char name[20])
{ FILE *fp; //文件指针
int n,a,f,fnew;
printf(" 请输入新的短路节点" );
scanf("%d",&fnew);
fp=fopen(name,"r+");
fscanf(fp," 系统参数如下所示:\n\n");
fscanf(fp,"1. 系统的节点数为%d\n2.系统的支路数为%d\n3.系统的短路点
为%d\n\n",&n,&a,&f);
fclose(fp);
fp=fopen(name,"r+");
fprintf(fp," 系统参数如下所示:\n\n");
fprintf(fp,"1. 系统的节点数为%d\n2.系统的支路数为%d\n3.系统的短路点
为%d",n,a,fnew);
fclose(fp);
calculate2(name);
}
void load()
{
char name[20];
FILE *fp;
char answer;
int m,n,a,f,i=0,j=0,sd,md,butn,times,timesc;
float dk;
float b[10]; int count[2][100];
float z[10][10];
int e[10];
float ze[10];
float ae[10];
float yc[10]; //节点对地电抗
int e1[10];
printf(" 请输入一个已保存的文件名\n");
scanf("%s",name);
while ((fp=fopen(name,"r" ))==NULL)
{
printf(" 输入有错误,请重新输入\n");
scanf("%s",name);
}
fscanf(fp," 系统参数如下所示:\n\n");
fscanf(fp,"1. 系统的节点数为%d\n2.系统的支路数为%d\n3.系统的短路点为%d\n\n",&n,&a,&f);
fscanf(fp," 支路电抗参数如下\n");
for (m=0;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");
printf(" 节点数是%d\t支路数是%d\t短路点是%d\n",n,a,f);
printf(" 系统的支路电抗为\n");
for (m=0;m
{
i=count[0][m]-1;
j=count[1][m]-1;
printf("z%d%d = %f\n",count[0][m],count[1][m],z[i][j]);
}
fscanf(fp,"\n\n发电机接入点及其电抗如下:" );
fscanf(fp," 共%d台发电机进入系统\n",×);
for (m=0;m
fscanf(fp,"z%d=%f\t",&e[m],&ze[m]);
fscanf(fp,"\n");
for (m=0;m
fscanf(fp,"e%d=%f\t",&e[m],&ae[m]);
printf("\n输入的发电机支路电抗为\n");
for (m=0;m
{ printf("z%d0=%f ",e[m],ze[m]);
printf("\n");
}
fscanf(fp,"\n共%d个节点有接地电容\n",×c);
if (timesc>0)
for (m=0;m
fscanf(fp,"Y%d=%f\t",&e1[m],&yc[m]);
printf("\n系统有%d个节点电容\n",timesc);
for (m=0;m
{ printf("z%d0=%f ",e1[m],yc[m]);
printf("\n");
}
fclose(fp);
printf("\n接下来你希望\n1短路计算\n2改变系统短路点\n3退出\n"); // printf("*******************************************\n"); scanf("%d",&butn);
system("cls" );
switch (butn)
{
case 1:
calculate(name);
break ;
case 2:
change(name);
break ;
case 3:
quit();
break ;
}
}