概述
电力系统潮流计算程序采用的是牛顿-拉夫逊法(直角坐标)
潮流计算程序的系统节点数是可以动态变化的,根据节点大小分配储存空间
为了减少储存空间和加快计算速度,根据电力系统节点导纳矩阵稀疏的特点,计算程序运用了稀疏储存技术,详细讲解请见参考目录。
关于本程序的计算原理和流程图均可参考后面参考目录中的图书
源数据格式说明
源数据有功功率、无功功率、电压、阻抗、感抗、对地充电容纳均以标幺值表示。
数据文件必须命名为data.txt且与潮流计算程序放置于同一个文件中。数据文件data.txt包含两类参数:节点参数和线路参数。节点数据块与线路数据块之间用数字0作为间隔,即在节点数据块结束后,另起一行输入0,然后再在后面按格式要求录入线路参数。
1. 节点参数
节点参数包括:系统节点数Node、节点功率(有功P、无功Q),节点电压(有效值V、相角Delta) ,参数组织格式:
- 节点数Node 节点数Node写在参数文件的开头,如:4表明为四节点系统。
- 功率和电压P/Q/V/Delta
首先给出节点参数示例: 2 3 0.5 0 1.10 0 第一列数字2表明该节点的类型为2-PV节点;第二列数字3表明该行数据为节点3的参数;后面三列依次为P、Q、V的给定值,给定值为0,表明该项参数未知;第六列为相角δ,非平衡节点的δ即为PQ迭代的初始相角值,平衡节点的即为给定的相角值。 节点功率为各支路输入功率之和,且规定功率流入节点为正,流出为负。故而负荷功率为负值,发电机功率为正值。 - 节点类型的判断 根据节点的给定参数可以将节点分为三种类型:
1)PQ节点:给定P、Q初始值的节点,用数字代码1表示;
2)PV节点:给定P、V初始值的节点,用数字代码2表示;
3)平衡节点:没有给定P、Q初始值,仅给定V的初始值,用数字代码3表示;
注意:数据文件中,节点顺序为PQ、PV、平衡节点
2.线路参数
线路参数包括:线路阻抗(R,X)、变压器变比k和对地充电(接地支路)容纳b。每一条线路包括节点号在内共有6个参数,6个参数缺一不可。
- 线路阻抗Z
首先给出线路参数示例: 1 4 0.12 0.5 1 0.01920 前两列代表线路两端的节点编号,亦即线路编号14(即41);第三四列代表线路阻抗Z=0.12+j0.5;第五列为变压器变比k;最后一列为线路的对地充电电容的一半,即B/2。 k不为0。当k=1则表明该支路为普通支路;否则该支路为变压器支路。普通支路没有任何特殊要求,但对于变压器支路,有以下注意事项。 - 变压器支路
首先给出变压器线路示例: 3 1 0 0.3 0.909091 0
1)变比k为转换为变压器支路的标准等值电路(如下图)后的变比。
2)变压器线路的编号31有特定含义:3对应节点p,1对应节点q。即变压器支路的编号对节点顺序有要求,p节点编号在前,q节点在后。
3)q节点为全系统参考电压侧。
程序智能化读取线路数据,用户无需刻意对线路参数进行归类、排序,可随意输入,只要每行数据都各自符合格式要求即可。
输出数据说明
1. 节点参数表
节点参数表实际上只是对源数据的重现,用于对源数据的整理以及检验程序是否成功读取原始数据。 其中,节点类型列中,BS代表平衡节点、PQ代表PQ节点、PV代表PV节点。 参数表后紧随的是对各类节点数目的统计结果。 该表属于对原始数据的基本统计处理。
2. 节点导纳矩阵
节点导纳矩阵以上三角方式按照节点编号顺序输出,括号内部逗号前为导纳Gij、逗号后为容纳Bij。下三角部分可由上三角部分对称得到。
3. 潮流计算结果(节点)
该部分计算结果包含PQ迭代次数k和节点参数计算结果。迭代次数k在65535次以内均可正常显示。一般PQ迭代不会达到这个数值,否则可以认为PQ迭代是发散的。
节点参数计算结果表,展示了PQ迭代收敛时的计算结果,包括非平衡节点的电压相角δ、PQ节点的电压V、PV节点的无功功率Q和平衡节点的功率。
4. 潮流计算结果(线路)(该部分暂未编写,请等待后续完善)
线路功率计算结果表,展示了PQ迭代收敛时的线路功率计算结果S,包括线路有功功率P和无功功率Q。
参考文献
- 陈亚明.电力系统计算程序.北京:水利电力出版社,1995
- 张伯明,陈寿孙,严正.高等电力网络分析(第2版).北京:清华大学出版社,2007
源代码
/* FUNCTION : POWER FLOW */
/* WRITTEN BY : ZAHGN CHUN */
/* LAST EDITED : 2014-12-10 */
#include <stdio.h>
#include <math.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<iostream>
#include<vector>
using namespace std;
/*** 子函数声明 ***/
void in_data(); /* 读取数据 */
void Y_Form(); /* 生成导纳矩阵 */
void chuzhi(); /* 给节点电压赋初值 */
void B_Form(); /* 生成雅克比矩阵和求解修正方程*/
void xinzhi(); /*计算新值*/
void PrtNode(); /*输出潮流计算结果*/
void PrtY(); /*打印Y矩阵*/
/*** 全局变量声明 ***/
int Node; /*网络节点数*/
int Num; /*网络支路数*/
int i,j,k,k1,k2,k5,l,m,ig,i1,i2,i3,i5,t,s; /*通用下标值*/
int J1,J0,J3;
float tmp; /*临时数据暂存*/
FILE *in,*out; /*输入、输出文件指针*/
int J5; //雅克比矩阵第i行非零元素的技术单元
int k0=1; //导纳矩阵非零互导纳元素的指针
int FL=0; //导纳矩阵非零互导纳元素的个数
float a1,b1,r1,x1,a,r,x,b; //寄存单元
float gij,bij,gi,bi,gj,bj;
float A3; //第i节点电流的实部
float B3; //第i节点电流的虚部
float P2,Q2,P3,Q3,C3,D3,C5,D5,A5,B5,C6;
float PG,QG,PL,QL; //全网功率
float E,F,PI;
int N0; //平衡节点的节点号
float U0; //存平衡节点的给定电压值
int IQ; //发电机台数
int IP; //负荷个数
int N1; //PV节点个数
float UP=1;; //PQ节点的电压初值
int it; //迭代次数
float am=0; //节点功率误差的最大绝对值
int i0; //节点功率误差绝对值最大的节点号
//声明变长数组
vector<int> IZA(Num); //存支路状态数
vector<int> IZ1(Num); //存支路一端的节点号
vector<int> IZ2(Num); //存支路另一端的节点号
vector<float> Z1(Num); //存支路正序电阻
vector<float> Z2(Num); //存支路正序电抗
vector<