📄 testdnetdll.cpp
字号:
// TestDNetDLL.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "TestDNetDLL.h"
#include"DNet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
}
//TODO: Add code in this
///////////////////////////////////
CDNet DNet;//define a object
DNet.Initialization();
DNet.SetFeederMumber(1);
DNet.SetFeederInfo(1,1,10.5);
DNet.SetIterstion(10);
DNet.SetSB(100,10);
DNet.SetVoltageConergence(0.001);
////////////////////////////////////////
FILE* fp;
UINT n=0,head=1,tail=1;
BOOL state=0;
float s=0,D=0;
fp=fopen("Branch.dat","r");
if(fp==NULL)
exit(0);
while(!feof(fp))
{
fscanf(fp,"%d%d%d%d%f%f",&n,&state,&head,&tail,&s,&D);
DNet.SetBranch(n,state,head,tail,s,D);
}
fclose(fp);
float v=0;
UINT sort=0;
fp=fopen("Cable.dat","r");
while(!feof(fp))
{
fscanf(fp,"%d%d%d%d%f%d%f%f",&n,&state,&head,&tail,&s,&sort,&v,&D);
DNet.SetCable(n,state,head,tail,s,sort,v,D);
}
fclose(fp);
float PF=0,VF=0,PK=0,KC=0,ST=0,GV=0,p=0;
fp=fopen("Trans.dat","r");
while(!feof(fp))
{
fscanf(fp,"%d%d%d%d%f%f%f%f%f%f%f",&n,&state,&head,&tail,&PF,&VF,
&PK,&KC,&ST,&GV,&p);
DNet.SetTrans(n,state,head,tail,PF,VF,PK,KC,ST,GV,p);
}
fclose(fp);
fp=fopen("Switch.dat","r");
while(!feof(fp))
{
int k=fscanf(fp,"%d%d%d",&n,&head,&tail);
if(k==3)
DNet.SetSwitch(n,head,tail);
}
fclose(fp);
fp=fopen("SwitchState.dat","r");
while(!feof(fp))
{
int k=fscanf(fp,"%d%d",&n,&state);
if(k==2)
DNet.SetSwitchState(n,state);
}
fclose(fp);
UINT node=0;
float dP=0,Sn=0,Vn=0;
fp=fopen("Cap.dat","r");
while(!feof(fp))
{
int k=fscanf(fp,"%d%d%f%f%f",&n,&node,&dP,&Sn,&Vn);
if(k==5)
DNet.SetCapInfo(n,node,dP,Sn,Vn);
}
fclose(fp);
float wP=0,wQ=0;
fp=fopen("Begin.dat","r");
while(!feof(fp))
{
fscanf(fp,"%d%d%f%f",&n,&node,&wP,&wQ);
DNet.SetBeginInfo(n,node,wP,wQ);
}
fclose(fp);
/////////////////////////////////////////////////
//
////////////////////////////////////////////////
//dNet operate
///////////////////////////////////////////////
DNet.NetAnalyse();
BOOL LP=DNet.DNetInitialization();
if(!LP)
{
CString str;
str="系统存在环网,请检查系统结构";
MessageBox(NULL,str,"警告",MB_OK|MB_ICONEXCLAMATION);
exit(0);
}
LP=DNet.DistributionFlow();
if(!LP)
{
CString str;
str="超过最大迭代次数,最大迭代次数过小或配网不收敛";
MessageBox(NULL,str,"警告",MB_OK|MB_ICONEXCLAMATION);
exit(0);
}
//////////////////////////////////////
//
///////////////////////////////////////////
//get result
////////////////////////////////////////////
BOOL bTRUE=TRUE;
fp=fopen("Result.dat","w");
fprintf(fp,"元件号 节点号\n\n");
int i=1;
bTRUE=DNet.GetNodeAtElement(i,n);
while(bTRUE)
{
fprintf(fp,"%d %d\n",i,n);
++i;
bTRUE=DNet.GetNodeAtElement(i,n);
}
INT nMax=i-1;
fprintf(fp,"元件号 电压 有功 无功\n");
bTRUE=TRUE;
n=1;
double v1,wP1,wQ1;
bTRUE=DNet.GetNodeData(n,v1,wP1,wQ1);
while(!bTRUE)
{
++n;
if(n>nMax)
break;
bTRUE=DNet.GetNodeData(n,v1,wP1,wQ1);
}
while(bTRUE)
{
fprintf(fp," %d %f %f %f\n",n,v1,wP1,wQ1);
++n;
if(n>nMax)
break;
bTRUE=DNet.GetNodeData(n,v1,wP1,wQ1);
while(!bTRUE)
{
++n;
if(n>nMax)
break;
bTRUE=DNet.GetNodeData(n,v1,wP1,wQ1);
}
}
fprintf(fp,"\n\n");
//输出支路信息
//{
fprintf(fp,"顺序号 头元件 尾元件 头有功 头无功 尾有功 尾无功 电流幅值\n");
bTRUE=TRUE;
double wPH,wQH,wPT,wQT,wC;
n=1;
int nBranch=DNet.GetBranchNumber();
bTRUE=DNet.GetBranchData(n,head,tail,wPH,wQH,wPT,wQT,wC);
while(!bTRUE)
{
++n;
if(n>nBranch)
break;
bTRUE=DNet.GetBranchData(n,head,tail,wPH,wQH,wPT,wQT,wC);
}
while(bTRUE)
{
fprintf(fp," %d %d %d %f %f %f %f %f\n",
n,head,tail,wPH,wQH,wPT,wQT,wC);
++n;
bTRUE=DNet.GetBranchData(n,head,tail,wPH,wQH,wPT,wQT,wC);
while(!bTRUE)
{
++n;
if(n>nMax)
break;
bTRUE=DNet.GetBranchData(n,head,tail,wPH,wQH,wPT,wQT,wC);
}
}
fprintf(fp,"\n\n");
double wPW,wQW;
n=1;
bTRUE=TRUE;
fprintf(fp,"\n\n");
fprintf(fp,"支路号 始节点 末节点 有功损耗 无功损耗 支路电流\n");
bTRUE=DNet.BranchWaste(n,head,tail,wPW,wQW,wC);
while(!bTRUE)
{
++n;
if(n>nBranch)
break;
bTRUE=DNet.BranchWaste(n,head,tail,wPW,wQW,wC);
}
while(bTRUE)
{
fprintf(fp," %d %d %d %12.8f%14.8f%14.8f\n",n,head,tail,wPW,wQW,wC);
++n;
if(n>nBranch)
break;
bTRUE=DNet.BranchWaste(n,head,tail,wPW,wQW,wC);
while(!bTRUE)
{
++n;
if(n>nBranch)
break;
bTRUE=DNet.BranchWaste(n,head,tail,wPW,wQW,wC);
}
}
double PFe,QFe,PCu,QCu;
n=1;
bTRUE=TRUE;
fprintf(fp,"\n\n");
fprintf(fp,"支路号 始节点 末节点 有功铁损 无功铁损 有功铜损 无功铜损 支路电流\n");
bTRUE=DNet.TransWaste(n,head,tail,PFe,QFe,PCu,QCu,wC);
while(!bTRUE)
{
++n;
if(n>nBranch)
break;
bTRUE=DNet.TransWaste(n,head,tail,PFe,QFe,PCu,QCu,wC);
}
while(bTRUE)
{
fprintf(fp," %d %d %d %f %f %f %f %f\n",n,head,tail,PFe,QFe,PCu,QCu,wC);
++n;
if(n>nBranch)
break;
bTRUE=DNet.TransWaste(n,head,tail,PFe,QFe,PCu,QCu,wC);
while(!bTRUE)
{
++n;
if(n>nBranch)
break;
bTRUE=DNet.TransWaste(n,head,tail,PFe,QFe,PCu,QCu,wC);
}
}
int nSwitch=DNet.GetSwitch();
int head1,tail1;
fprintf(fp,"\n\n 开关号 始元件 末元件 电流幅值\n");
for(int number=1;number<=nSwitch;++number)
{
BOOL bTrue=DNet.GetSwitchInfo(number,head1,tail1,wC);
if(bTrue)
fprintf(fp,"\t%d %d %d %f\n",number,head1,tail1,wC);
}
double WasteP=DNet.GetDNetEnergeWaste();
fclose(fp);
DNet.Flow();
return nRetCode;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -