潮流计算电力系统大作业C++编写Word文档下载推荐.docx
《潮流计算电力系统大作业C++编写Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《潮流计算电力系统大作业C++编写Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
以支路为基本单位,按潮流方向输入数据:
以下例示意:
2//支路个数
1,110,118,8.5,20.5,0.000564,0,0,1,0,0//线路等效的支路
2,11,110,1.22,20.2,0,40,30,10,0.17,1.7//变压器等效的支路
.//按此方式知道输入所有的支路
.//输入从上到下的顺序为潮流在
.//线型开式网络中的流动方向
/*
第一行输入支路个数,回车
第二行至后输入各个支路参数,回车分隔不同支路;
各行输入的支路参数顺序是:
支路编号,末端电压,始端电压,线路等效电阻,线路等效感抗,线路等效容纳,末端输入有功,末端输入无功,变比,变压器有功励磁损耗,变压器无功励磁损耗
对于线路等效电路:
变压器有功/无功损耗输入零,变比输入1;
对于变压器等效电路:
所有的参数均归算至高压侧,Rt,Xt对应输入线路等效电阻/感抗的位置,线路等效容抗为零;
对于个节点的引出负荷:
输入至以此节点为末节点的支路的末端输入有功/无功部分;
*/
********************************************************************************************************************************************************
输出文件格式说明:
输出的内容包括
(1)支路信息:
每个支路元件的始端有功、无功和末端有功、无功;
有功损耗无功损耗;
电压损耗;
(2)全网信息:
全网的总电源有功、总负荷有功、有功损耗、网损率;
(3)迭代信息:
每次完整迭代后的所有内容;
具体在输出文件中都明确标出。
*********************************************************************************************************************************************************
程序中变量定义说明:
类中定义的变量
classline_part{//定义支路类
doubleU[2];
//支路电压降落:
U[0]电压降落横分量,U[1]电压降落纵分量
doublek;
//变压器变比
doubleval;
//支路排序
doubleU_end;
//支路末端电压
doubleU_begin;
//支路首段电压
doubleX[3];
//支路等效阻抗:
X[0]电阻,X[1]感抗,X[2]容纳
doubleS_end[2];
//支路末端功率:
S_end[0]有功,S_end[1]无功
doubleS_begin[2];
//支路首段功率:
S_begin[0]有功,S_begin[1]无功
doubleS0[2];
//变压器励磁损耗:
S0[0]有功,S0[1]无功
doubleS_org[2];
//支路末端负载:
S_org[0]有功,S_org[1]无功
line_part*lchild,*rchild;
//支路的后继两个支路
}
classBinTree{//定义树类
voidPreOrder(){PreOrder(root);
};
//树的先序遍历修改电压
voidPostOrder(){PostOrder(root);
//树的后序遍历修改潮流
voiddisplay(){display(root);
//树的先序遍历显示数据
line_part*root;
//树的根,是一个支路类
主函数中定义的数据
ofstreamoutfile;
//输出数据流定
ifstreaminfile;
//输入数据流定
constintM(a);
//支路个数常量
主程序(复制粘贴到C++就能用)
**************************************************************************************************************************************************************
#include<
fstream.h>
iostream.h>
math.h>
doublep_cost_all=0;
doublesqr(doublex){//平方计算函数
returnx*x;
private:
public:
line_part(){
val=0;
U_end=0;
U_begin=0;
X[0]=0;
X[1]=0;
X[2]=0;
S_end[0]=S_org[0]=0;
S_end[1]=S_org[1]=0;
S_begin[0]=0;
S_begin[1]=0;
k=1;
S0[0]=0;
S0[1]=0;
U[0]=0;
U[1]=0;
lchild=rchild=NULL;
}
line_part(doublevall,doubleu_end=0,doubleu_begin=0,doubler=0,
doublex=0,doubleb=0,doublePe=0,doubleXe=0,doubleK=0,doubleP0=0,doubleQ0=0){
val=vall;
U_end=u_end;
U_begin=u_begin;
X[0]=r;
X[1]=x;
X[2]=b;
S_end[0]=S_org[0]=Pe;
S_end[1]=S_org[1]=Xe;
S_begin[0]=0;
S_begin[1]=0;
k=K;
S0[0]=P0;
S0[1]=Q0;
U[0]=0;
U[1]=0;
lchild=rchild=NULL;
friendclassBinTree;
friendvoidpass_U(line_part*a,line_part*b,line_part*c);
//电压传递函数
friendvoidpass_w(line_part*a,line_part*b,line_part*c);
//功率传递函数
friendvoidpass_U2(line_part*a,line_part*b);
friendvoidpass_w2(line_part*a,line_part*b);
voidSbegin(){//支路首段功率计算函数
doubleUend,I2;
Uend=k*U_end;
I2=(sqr(S_end[0])+sqr(S_end[1]-sqr(U_end)*X[2]/2))/sqr(Uend);
S_begin[0]=S_end[0]+I2*X[0]+S0[0];
S_begin[1]=S_end[1]+I2*X[1]+S0[1]-sqr(U_begin)*X[2]/2-sqr(U_end)*X[2]/2;
};
voidUend(){//支路末端电压计算函数
doubleU_heng(0),U_zong(0);
doublep_begin,q_begin;
p_begin=S_begin[0]-S0[0];
q_begin=S_begin[1]+sqr(U_begin)*X[2]/2-S0[1];
U_heng=(p_begin*X[0]+q_begin*X[1])/U_begin;
//U_heng即是△u2
U_zong=(p_begin*X[1]-q_begin*X[0])/U_begin;
//U_zong即是δu2
U_end=sqrt(sqr(U_begin-U_heng)+sqr(U_zong))/k;
U[0]=U_heng;
U[1]=U_zong;
doubleget_val(){//返回支路编号
if(this==0){return-1;
}else{
if(val>
0&
&
val<
100){returnval;
}
elsereturn-1;
doubleget_Uend(){//返回支路末端电压
returnU_end;
doubleget_Ubegin(){//返回支路首段电压
returnU_begin;
doubleget_Pbegin(){//返回支路首段有功
returnS_begin[0];
doubleget_Pend(){//返回支路末端有功
returnS_end[0];
doubleget_Qbegin(){//返回支路首段无功
returnS_begin[1];
doubleget_Qend(){//返回支路末端无功
returnS_end[1];
doubleget_Pcost(){//返回支路有功损耗
returnS_begin[0]-S_end[0];
doubleget_Qcost(){//返回支路无功损耗
returnS_begin[1]-S_end[1];
line_part*get_lchild(){//返回支路无功损耗
returnlchild;
line_part*get_rchild(){//返回支路无功损耗
returnrchild;
voidpass_U(line_part*a,line_part*b,line_part*c){
(*c).U_begin=(*a).U_end;
(*b).U_begin=(*a).U_end;
voidpass_w(line_part*a,line_part*b,line_part*c){
(*a).S_end[0]=(*b).S_begin[0]+(*c).S_begin[0]+(*a).S_org[0];
(*a).S_end[1]=(*b).S_begin[1]+(*c).S_begin[1]+(*a).S_org[1];
voidpass_U2(line_part*a,line_part*b){
voidpass_w2(line_part*a,line_part*b){
(*a).S_end[0]=(*b).S_begin[0]+(*a).S_org[0];
(*a).S_end[1]=(*b).S_begin[1]+(*a).S_org[1];
classBinTree{
friendvoidpass_U(line_part*,line_part*,line_part*);
friendvoidpass_w(line_part*,line_part*,line_part*);
BinTree(){line_part*aa=newline_part(0,0,0,0,0,0,0,0,0,0,0);
root=aa;
line_part*Getroot(){returnroot;
voidinsertline_part(doublevall,doubleu_end=0,doubleu_begin=0,doubler=0,
doublex=0,doubleb=0,doublePe=0,doubleXe=0,
doubleK=0,doubleP0=0,doubleQ0=0){
insertline_part(root,vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);
voidPreOrder(){PreOrder(root);
voidPostOrder(){PostOrder(root);
voiddisplay(){display(root);
line_part*root;
voidinsertline_part(line_part*&
t,doublevall,doubleu_end,doubleu_begin,doubler,
doublex,doubleb,doublePe,doubleXe,
doubleK,doubleP0,doubleQ0);
voidPreOrder(line_part*&
t);
voidPostOrder(line_part*t);
voiddisplay(line_part*&
voidBinTree:
:
insertline_part(line_part*&
t,doublevall,doubleu_end=0,doubleu_begin=0,doubler=0,
doubleK=0,doubleP0=0,doubleQ0=0){//插入节点
doubleass=t->
get_val();
if(t==0||t->
get_val()<
=0){
t=newline_part(vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);
elseif(vall<
t->
get_val()){
insertline_part(t->
lchild,vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);
else{
rchild,vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
display(line_part*&
t){
if(t->
get_val()>
100)
{
display(t->
lchild);
rchild);
ofstreamoutfile1;
outfile1.open("
e:
\data.txt"
ios:
ate);
p_cost_all+=t->
get_Pcost();
doubleU;
//计算并存放各个节点的电压相角(始端为零)
U=atan2(t->
U[1],(t->
get_Ubegin()-t->
U[0]))/3.1415926*180;
outfile1<
<
"
支路"
电压相角"
"
U<
endl;
首端电压"
get_Ubegin()<
//计算并存放各个支路的首端电压
末端电压"
get_Uend()<
//计算并存放各个支路的末端电压
doubleU_cost;
//计算并存放各个支路的电压损耗
U_cost=t->
get_Uend();
电压损耗"
U_cost<
始端有功"
get_Pbegin()<
始端无功"
get_Qbegin()<
末端有功"
get_Pend()<
末端无功"
get_Qend()<
doubleP_cost;
//计算并存放各个支路的有功损耗
P_cost=t->
有功损耗"
P_cost<
doubleQ_cost;
//计算并存放各个支路的无功损耗
Q_cost=t->
get_Qcost();
无功损耗"
Q_cost<
outfile1.close();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PreOrder(line_part*&
t){//先序遍历二叉树修改电压
if(t->
{
if(t->
get_lchild()->
{
if(t->
get_rchild()->
{
t->
Uend();
pass_U(t,t->
lchild,t->
lchild->
rchild->
}
else{
pass_U2(t,t->
}
else
{
else{}
PreOrder(t->
PostOrder(line_part*t