⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testdnetdll.cpp

📁 这是一个简单测试电力系统潮流计算DLL的源代码
💻 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 main(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;
	CTime t1=CTime::GetCurrentTime();
	// 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.Initialize();
	DNet.SetMaxIter(10);
	DNet.SetBasicInfo(100,6);
	DNet.SetConergenceV(0.001);
	DNet.SetRuntime(1);
	DNet.SetErrorA(0.0001);
	////////////////////////////////////////

	FILE* fp;
	UINT n=0,head=1,tail=1;
	INT nElement;
	BOOL state=0;
	float s=0,D=0;
	float measureAP,measureAQ;
	float convergenceP,convergenceQ;
	float voltage;
	fp=fopen("Feeder.dat","r");

	while(!feof(fp))
	{
		fscanf(fp,"%d%d%f%f%f%f%f",&n,&nElement,&voltage,&measureAP,
			&measureAQ,&convergenceP,&convergenceQ);
		DNet.SetFeederInfo(n,nElement,voltage,measureAP,measureAQ,
			convergenceP,convergenceQ);
	}
	fclose(fp);
	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.AddBranch(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.AddCable(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.AddTrans(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.AddSwitch(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.SetSwitchState0(n,state);
	}
	fclose(fp);
	
	UINT node=0;
	float dP=0,Sn=0,Vn=0;
	fp=fopen("Cap.dat","r");
	while(!feof(fp))
	{
		fscanf(fp,"%d%d%f%f%f",&n,&node,&dP,&Sn,&Vn);
		DNet.AddCap(n,node,dP,Sn,Vn);
	}
	fclose(fp);
	float wP=0,wQ=0,a;
	fp=fopen("Begin.dat","r");
	while(!feof(fp))
	{
		fscanf(fp,"%d%d%f%f%f",&n,&node,&wP,&wQ,&a);
		DNet.SetBeginInfo(n,node,wP,wQ,a);
	}
	fclose(fp);

	/////////////////////////////////////////////////
	//


	////////////////////////////////////////////////
	//dNet operate
	///////////////////////////////////////////////
	DNet.NetAnalyse0();
	DNet.DNetInitialize();
	INT nFeeder0=DNet.GetFeederNumber();
	double* pData=new double[nFeeder0+1];
	DNet.GetOverLoadRatio(pData);
	fp=fopen("Result.dat","w");
	fprintf(fp,"馈线号	过载率\n\n");
	for(INT m=1;m<=nFeeder0;++m)
		fprintf(fp,"%d	%f\n",m,pData[m]);
	DNet.DNetFlow();

	delete[] pData;

	//////////////////////////////////////
	//


	///////////////////////////////////////////
	//get result
	////////////////////////////////////////////
	BOOL bTRUE=TRUE;
	fprintf(fp,"\n\n");
	fprintf(fp,"元件号	节点号\n\n");
	int	i=1;
	bTRUE=DNet.GetNodeVsEle(i,n);
	while(bTRUE)
	{
		fprintf(fp,"%d		  %d\n",i,n);
		++i;
		bTRUE=DNet.GetNodeVsEle(i,n);
	}
	fprintf(fp,"\n\n");
	int nBranch=DNet.GetnBranch();
	double wPW,wQW;
	n=1;
	bTRUE=TRUE;
	fprintf(fp,"\n\n");
	fprintf(fp,"支路号	始节点	末节点   有功损耗	   无功损耗\n");
	bTRUE=DNet.BranchWasteA(n,head,tail,wPW,wQW);
	while(!bTRUE)
	{
		++n;
		if(n>nBranch)
			break;
		bTRUE=DNet.BranchWasteA(n,head,tail,wPW,wQW);
	}
	while(bTRUE)
	{
		fprintf(fp,"  %d    	  %d      %d     %12.8f%14.8f\n",n,head,tail,wPW,wQW);
		++n;
		if(n>nBranch)
			break;
		bTRUE=DNet.BranchWasteA(n,head,tail,wPW,wQW);
		while(!bTRUE)
		{
			++n;
			if(n>nBranch)
				break;
			bTRUE=DNet.BranchWasteA(n,head,tail,wPW,wQW);
		}
	}


	double PFe,QFe,PCu,QCu;
	n=1;
	bTRUE=TRUE;
	fprintf(fp,"\n\n");
	fprintf(fp,"支路号	始节点	末节点 有功铁损	  无功铁损	  有功铜损	  无功铜损\n");
	bTRUE=DNet.TransWasteA(n,head,tail,PFe,QFe,PCu,QCu);
	while(!bTRUE)
	{
		++n;
		if(n>nBranch)
			break;
		bTRUE=DNet.TransWasteA(n,head,tail,PFe,QFe,PCu,QCu);
	}
	while(bTRUE)
	{
		fprintf(fp,"  %d	       %d	   %d   %f	  %f    %f   %f\n",n,head,tail,PFe,QFe,PCu,QCu);
		++n;
		if(n>nBranch)
			break;
		bTRUE=DNet.TransWasteA(n,head,tail,PFe,QFe,PCu,QCu);
		while(!bTRUE)
		{
			++n;
			if(n>nBranch)
				break;
			bTRUE=DNet.TransWasteA(n,head,tail,PFe,QFe,PCu,QCu);
		}
	}
	double WasteAP,WasteAQ;
	fprintf(fp,"\n\n");
	fprintf(fp,"总有功电量损耗	  总无功电量损耗\n");
	DNet.GetTotalWaste(WasteAP,WasteAQ);
	fprintf(fp," %f		 %f\n",WasteAP,WasteAQ);
	fclose(fp);
	INT nFeeder=DNet.GetFeederNumber();
	double MeaAP,MeaAQ,AP,AQ;
	fp=fopen("FeederResult.Dat","w");
	fprintf(fp,"序号 有功量测电量  无功量测电量 有功计算电量 无功计算电量\n");
	for(INT k=1;k<=nFeeder;++k)
	{
		DNet.GetFeeder(k,MeaAP,MeaAQ,AP,AQ);
		fprintf(fp," %d	%f   %f	  %f	 %f\n",k,MeaAP,MeaAQ,AP,AQ);
	}
	fclose(fp);
    //CTime t2=CTime::GetCurrentTime();
    //time_t tt1=t1.GetTime();
	//time_t tt2=t2.GetTime();
	//fprintf(fp," 输出时间\n");
	//fprintf(fp," %ld	%ld\n",tt1,tt2);
	//fclose(fp);
 //   time_t tt=t2-t2;
	return nRetCode;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -