电力系统潮流上机-(2)概要.ppt
电力系统潮流上机实验指导电力系统潮流上机实验指导华北电力大学姜彤概述 潮流计算是电力系统规划、设计、运行的基础计算,潮流计算的方法和程序设计技巧,包含了电力系统网络分析的重要内容,50年来一直是使学生掌握电力系统分析计算的主要教学内容。本课程属于电力系统分析基础课程的课程设计,主要内容是利用C/C+语言完成一个直角坐标牛顿-拉夫逊(Newton-Raphson)潮流算法的程序,并利用标准IEEE9/14节点潮流算例进行验证。课程安排课程共分为四个阶段:程序设计初步知识(4学时)数据录入与节点导纳矩阵的生成(6学时)节点功率偏移量的计算和雅可比矩阵的建立(4学时)设定收敛条件,完成潮流迭代程序,输出计算结果。(4学时)答辩须知 完成程序后,需要进行最后的答辩。答辩内容包括以下几个方面:提交课程设计论文报告,包含三部分内 容:任务书、程序设计体会和思考题答案、三节点潮流手算结果。提交完成的潮流计算程序和计算结果。回答老师提出的问题。基础知识 开发潮流计算程序使用的平Microsoft Visual Studio系列开发软件,本课程主要采用Visual C/C+软件开发。下面介绍一些常用的知识。1.1创建开发项目 1.2简单输入输出程序测试 1.3程序的调试方法 1.4文件输入输出程序测试 1.5解方程程序测试创建开发项目 打开“开始-程序-Microsoft Visual Studio2008 -Microsoft Visual Studio2008”,启动Microsoft Visual Studio2008的主程序界面如右 点击“文件-新建-项目”,启动了创建项目对话框如右在“新建项目”对话框“项目类型”中选择Visual C+,点击“CLR-CLR控制台应用程序(模版)”在对话框下面部分“位置”处选择程序放置的目录(通常为F:盘)。用自己的学号建立一个目录。在“名称”对应的文本框中输入一个由英文字母组成的程序名字,比如“TEST”,然后点击右下角的“确定”按钮,创建一个新项目。如下图所示:简单输入输出程序测试 建立的CLR控制台应用程序既可以使用传统的Standard C+类库,也可以使用.net Framework类库。本课程推荐采用标准C+类库,这样可以有利于把程序迁移至Unix C+等其他编程环境。创建的程序TEST.CPP中有main函数,可以利用C/C+语言的函数库进行输入输出的尝试。1.2.1头文件和命名空间的引用 1.2.2printf函数的使用 1.2.3iostream类的使用头文件和命名空间的引用根据C语言标准,所有类和函数都是使用头文件进行定义和说明的。在程序的开始需要加入必需的头文件(.h)。C+类库还增加了命名空间(namespace),程序所用到的大多数类都包含在“std”命名空间中,这些都需要在程序中加以说明。printf函数的使用 点击“调试”-开始调试(不执行)即可输出运行结果。(快捷键是Ctrl+F5)iostream类的使用在C语言中,用printf和scanf进行输入输出,通过以前的学习,我们知道用这两个函数进行输入输出时,必须指明输出和输入的数据的格式和类型(如,“%d”表示整型,“%f”表示浮点型。)这不仅使编程繁琐复杂,而且还容易出错。C+为了和C兼容,保留了printf和scanf函数,但C+通过提供I/O类库来实现丰富的I/O功能。iostream是C+种提供的用于输入输出的类库,意为输入输出流。常用到的命令语句有以下:cina:把一个数输入给变量a;cout开始调试(不执行)即可输出运行结果。(快捷方式是Ctrl+F5)需注意每次调试前需情理上次生成的解决方案。增加断点的方法在潮流计算程序调试的过程中,为了便于监视变量的变化,通常需要设置一系列的断点,设置断点的具体操作方式有两种分别为:1.在变量定义的左侧点击鼠标左键,即可设置断点,如下图所示:或者在变量所在行即所需监控的始端右击-断点-插入断点。调试中查看变量的方法 如需在调试过程中,如需查看变量的变化,需在待观测变量处设置断点,进行调试时,程序执行到断点处事程序将自动停止,显示变量值,以F10控制程序执行,一步一步观察变量的变化。文件输入输出程序测试文件输入输出命令推荐采用fstream的标准类库方式。ifstream infile;ofstream outfile;ifstream与ofstream的程序测试,如右图:解方程程序测试这一部分主要掌握如何添加头文件,并在主程序中学会调用。添加头文件:打开在F盘下所建的以学号命名的文件夹“1061181324”-打开“TEST”文件下-再打开“TEST”文件-将已建好的头文件复制粘贴,(在这次潮流上机中可使用老师编好的头文件“NEquation.h”)再回到C+主程序界面,在“解决方案管理器窗口”处右击“头文件”-添加-现有项-NEquation.h-确定:NEquation.h的调用:对于一个方程,AX=B,A为系数矩阵,B为值矩阵,要求出X,在头文件中NEquation.h中用Data表示系数矩阵,Value表示值矩阵。也就是说,我们需要在main函数中分别把一个方程的系数矩阵和值矩阵赋给NEquation.h头文件中的Data阵和Value阵,运行后即可完成解方程。另外调用时需要在main函数前敲入添加语句,即:include“NEquation.h”.解方程程序调试:设有方程:,改写成矩阵的形式,可表 示为:。按照0.4.2中介绍的从文件中读数据的方法,在相应的“TEST”文件夹下,分别建立两个文本文档“Xishu”和“Hanshuzhi”。其中“Xishu”文本文档的内容为:1 2 3 4;“Hanshuzhi”文档的内容为:3 4。返回C+主界面,键入如下程序:/TEST.cpp:主项目文件。#include stdafx.h#include fstream#include iostream#include NEquation.husing namespace System;using namespace std;int main(array args)NEquation ObNEquation;/建立一个对象ObNEquation.SetSize(2);/设置矩阵的维数为2维 /分别创建两个文件指针读入系数和函数值文本文档中的数据ifstream infile1;infile1.open(Xishu.txt);for(int i=0;i2;i+)for(int j=0;jObNEquation.Data(i,j);infile1.close();ifstream infile2;infile2.open(Hanshuzhi.txt);for(int i=0;iObNEquation.Value(i);infile2.close();ObNEquation.Run();/调用NEquation头文件中的Run函数。for(int i=0;i2;i+)coutObNEquation.Value(i)endl;/输出结果Console:WriteLine(LHello World);return 0;运行后可得到方程的解:2,2.5。2.潮流计算的数据结构潮流计算的原始数据文件潮流计算程序中数据存放的结构数组节 点 名称节点类型节点电压幅值节点电压相角负荷有功负荷无功发电机有功发电无功节点电压初值发电无功限制发电无功限制节点对地电导节点对地电纳1BUS-11001131.0400071.6410227.045921001.04999900-999900002BUS-21001121.0259.28001636.653661001.025999900-999900003BUS-31001121.0254.66470085-10.85971001.025999900-999900004BUS-4100111.025-2.21600001001000005BUS-5100110.995-3.98812550001001000006BUS-6100111.012-3.6879030001001000007BUS-7100111.0253.719700001001000008BUS-8100111.0150.727510035001001000009BUS-9100111.0321.966700001001000003.读入数据程序参考示例4.节点导纳矩阵的形成节点导纳矩阵的概念和性质节点导纳矩阵的形成技术形成节点导纳矩阵程序的参考示例节点导纳矩阵的概念和性质 在电路理论课中,利用基尔霍夫电流定律,我们推导出了电网络的节点电压方程:将方程展开,可得:即为节点导纳矩阵,如右图所示的三节点电路:可得,自导纳:互导纳:123y1y2y3123y1y2y3节点导纳矩阵的形成技术支路追加方式形成节点导纳矩阵我们可以这样理解节点导纳阵中的建立,对于连接两个节点支路上的导纳(如图3.1所示的y12)在节点导纳阵中,会出现在与这两个节点相关的四个位置上(即:Y11,Y12,Y21,Y22.)。对地支路的处理方法 对于某节点的对地支路,其对地导纳(如y10),只会出现在节点导纳阵中自导纳所在位置上(对角线上元素,即Y11)以此为基本思路,就可以根据读入的IEEE14节点支路数据完成导纳阵的建立。在TEST子文件夹下可以找到输出的“result”文 本,打开后即为输出的14节点导纳阵。5.雅可比矩阵的形成牛顿-拉夫逊法牛顿-拉夫逊法解潮流方程的数学模型PQ、PV、平衡节点的处理Jacobian矩阵Jacobian矩阵生成程序示例牛顿-拉夫逊法牛拉法解非线性方程示例误差分析牛拉法解非线性方程示例 设简单函数 ,求当y=2时的函数解。牛拉法求解过程如下:step1:设初值,取 ,用牛顿法求的数值解。step2:将函数在 处做泰勒展开,得到:忽略高次项 ,有step3:step3:新值step4:step4:重复重复step2-step3,step2-step3,直到求出的解足够接近真直到求出的解足够接近真值。值。误差分析 设有函数 ,在 处的一阶泰勒展开式为:对于一个特定函数取值y,显然有 由此可求得:对于第i次求解后的误差:函数 泰勒展开式实际为即 下一次的误差为当 时,并估计 ,如果画出曲线 ,由于对数的数值相当于迭代次数的平方函数,可以认为这个曲线是一个二次曲线,称这个收敛特性为平方收敛这里说是平方收敛牛顿-拉夫逊法解潮流方程的数学模型 对于网络方程 据此可得到网络的功率方程如下:引入节点注入电流的表达式:将 代入,并将实部(有 功)和虚部(无功)分列:牛顿拉夫逊法的修正方程牛顿拉夫逊法的修正方程牛顿拉夫逊法的修正方程牛顿拉夫逊法的修正方程其中当时,修正方程中各元素表达如下:其中当时,修正方程中各元素表达如下:功率的不平衡量:PQ、PV、平衡节点的处理在1.2.1存储节点信息时,struct BusDataint Num,Bustype;float e,f,Gp,Gq,Lp,Lq;其中Bustype即为节点类型,我们可以采用以下表示方法:节点类型节点类型BustypeBustype取值取值平衡节点平衡节点0 0PQPQ节点节点1 1PVPV节点节点2 2Jacobian矩阵 Jacobian矩阵的生成其实就是就要正确求解出H,N,J,L,R,S,并把它们正确填入Jacobian矩阵中,矩阵的维数应为:2(n-1)*2(n-1)。Jacobian矩阵生成程序示例牛顿-拉夫逊法潮流计算的迭代部分程序和支路潮流的求解 修正方程的求解功率的不平衡量程序求解示例平衡节点,线路功率以及线路损耗的计算修正方程的求解 得到了Jacobian矩阵(系数矩阵)后,只需在求出功率的不平衡量(包括 )即可通过求解修正方程,如何调用头文件解方程,可参考0.5中介绍的内容,解得电压的偏移量()后,与上一次的电压值叠加后,即为电压新值。功率的不平衡量程序求解示例平衡节点,线路功率以及线路损耗的计算 具体公式在课本上(P135,4-504-52),以公式4-50为例,说明如何进行编程:首先要把公式化简,分离出实部和虚部,分别写出有功功率和无功功率的表达式,程序示例如下: