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

📄 dnet.h

📁 这是一个简单电网分析计算的源代码
💻 H
字号:
#if !defined(_DNet_H_)
#define _DNet_H_

#include <afxtempl.h>
#include "math.h"


#define BRANCH 1	//支路类型
#define TRANS 2

struct CNode
{
	double wVoltage;	//节点电压
	double wRadian;		//节点相角

	double wP;
	double wQ;
};

struct CCapCompensation
{
	double m_dPc;//有功补偿
	double m_SnPower;//额定功率
	double m_Vn;//额定电压

	UINT m_nElement;//元件号
	UINT m_nCNode;//节点号
};

struct CSwitch
{
	UINT nHeadElement;
	UINT nTailElement;
	BOOL bState;
};

struct CLink
{
	UINT nNode;
	BOOL bState;
};

struct CFeeder
{
	UINT nOrder;
	UINT nElement;
	UINT nNode;

	double wVoltage;

	double wMeasureAP;
	double wMeasureAQ;
	double wComputerAP;
	double wComputerAQ;

	double wConvergenceP;
	double wConvergenceQ;
};



class CBranch
{
private:
	//atrribution
	//double m_wResistance;	//电阻率

public:
	//attribution;
	BOOL m_bState;	//支路状态,0断开,1闭合;
	UINT m_nType;	//支路类型


	double m_wBranchD;//支路间距

	double m_wR;
	double m_wX;
	double m_wRB;
	double m_wXB;
	double m_wRatio;	//变比


	double m_wG;
	double m_wB;
	double m_wGB;	//标吆值
	double m_wBB;

	double m_wCurrent;	//支路电流

	double m_wPHead;	//支路头功率
	double m_wQHead;
	
	//变压器参数
	//{
	double m_dP0TRANS;
	double m_CurrentTRANS;
	double m_SnTRANS;
	double m_VnTRANS;
	//}
	

	double m_wPTail;	//支路末功率
	double m_wQTail;
	//attribution
	UINT m_nHeadNode;	//优化前的编号
	UINT m_nTailNode;

	//UINT m_nNewHeadNode;	//优化后的编号
	//UINT m_nNewTailNode;


	UINT m_nHeadElement;	//支路头尾元件号
	UINT m_nTailElement;
private:
	//operation

public:
	//operation
	void AddTrans(double PFaultWaste,double VFault,double PKong,
		double KCurrent,double STotal,double GVoltage);//变压器参数计算

	void SetRX(double r,double x,double RB,double XB);
	void SetNode(UINT head,UINT tail);
	void SetRatio(double voltage,double position);
	void SetBranchState(UINT nIndex,BOOL bState);

	//operation
	CBranch();
	~CBranch();
};


class CBeginInfo    //网络原始信息类
{
private:
	//attribution
public:

	double m_wPHead;		//支路头、尾有功、无功
	double m_wQHead;
	double m_wPTail;
	double m_wQTail;


	double m_wPLoad;	//负荷有功
	double m_wQLoad;	//负荷无功

	double m_AP;	//有功电度, 小于0时,代表电度未知
	double m_AQ;	//无功电度,小于0时,代表电度未知
	double m_PK;	//有功形状系数
	double m_QL;	//无功形状系数
	double m_wA;	//形状系数

	UINT m_nLoadNode;	//负荷节点号
	UINT nOrder;
	BOOL bType;


public:
	//attribution
	UINT m_nLoadIndex;	//负荷元件号
private:
	//operation
public:
	//operation
	CBeginInfo(){
		//todo add code;
	};

	~CBeginInfo(){
		//todo add code;
	};
};

class AFX_EXT_CLASS CDNet
{
	struct CDNetInfo
	{
		int nNode;	// 节点数
		int nBranch;	//支路数
		int nTBranch;
		int nTransBranch;
		int nCable;
		int nFeederRoot;	//溃线根节点数
		int nCap;//电容补偿数目
		int nMaxIteration;//最大迭代次数
		int nSubSystem;//子系统数
		int nLoad;//系统中的负荷数

		BOOL bNetChange;

		double wRuntime;//运行时间

		double wVoltageConvergence;	//电压收敛判剧
		double wPConvergence;	//有功收敛判剧
		double wQConvergence;	//无功收敛判剧
		double wErrorA;

		double wDNetPWaste;	//配网能量损耗
		double wSB;//基准功率
		double wVB;//基准电压

		UINT nMaxElement;	//最大元件号
		BOOL m_bMark;//计算标志,0为标吆值,1为有名值
	};

private:
	//attribution
	CDNetInfo m_nDNetInfo;
public:
	//attribulion
public:
	typedef CTypedPtrMap<CMapWordToPtr,UINT,CBranch*> CBranchMap;
	typedef CTypedPtrMap<CMapWordToPtr,UINT,CBeginInfo*> CBeginInfoMap;
	typedef CTypedPtrMap<CMapWordToPtr,UINT,CSwitch*> CSwitchMap;
	typedef CTypedPtrMap<CMapWordToPtr,UINT,CLink*> CSwitchLinkMap;
	typedef CTypedPtrMap<CMapWordToPtr,UINT,CCapCompensation*> CCapMap;
	typedef CTypedPtrMap<CMapWordToPtr,UINT,CFeeder*> CFeederMap;
	typedef CArray<CNode,CNode> CNodeMap;
private:
	//数组
	float CableData[13][5];//导入电缆表
	float BranchData[15][3];                                                                                                                                                                                                                                              
	CSwitchMap m_nSwitchMap;	//开关类模板数组
	CBranchMap m_nBranchMap;	//支路类模板数组
	CBeginInfoMap m_nBeginInfoMap;	//初始信息类模板数组
	CCapMap m_nCapMap;//电容补偿类模板数组
	CNodeMap m_nNodeArray;	//节点数组
	CFeederMap  m_nFeederMap;//馈线信息模板
	CArray<INT,INT> m_nBranchKey;//存支路关键号
	CArray<UINT,INT> m_nNewFeederRoot;	//溃线根节点号
	CArray<INT,INT> m_nMaxElementArray;	//最大元件数组
	CArray<INT,INT> m_nBranchAtNode;//节点出口支路数组
	CArray<CSwitchLinkMap,CSwitchLinkMap> m_nSwitchLinkMap;//开关链表数组
	CArray<CSwitchLinkMap,CSwitchLinkMap> m_nBranchLinkMap;//节点链表数组
	CArray<INT,INT> m_nBranchSubSystem;//支路子系统数组
	CArray<INT,INT> m_nNodeSubSystem;//节点子系统数组
	CArray<INT ,INT > m_nTranKey;//变压器与负荷关联数组
	CArray<INT,INT> m_nNewIndex;//优化编号
	CArray<INT,INT> m_nOldIndex;//优化编号

private:
	//operation
	void SetBranchTable();
	void SetCableTable();
	void SetBranchRX(double BranchArea,double distance,double& r,double& x,
		double& RB,double& XB);
	void SetCableRX(double CableArea,UINT sort,double VoltageGrade,double distance,
		double& r,double& x,double& RB,double& XB);
	void DeepthFirstSearch(int i);
	void DeepthFirstSearch1(int i);
	void ReSetEnergy();//重新分配电量
	void EnergyToPower();
	void IndexOption();
	void ModifyNode();
	void GetPower(INT nIndex);   //计算功率
	double GetVoltage(INT nIndex); //计算电压
	INT ModifyPower(INT nIndex);//根据入口电量的差值修改电量
	double GetTotalSn(INT nIndex);
	void CreateNodeEle();
	void EleToNode();//将系统中的元件号转化为节点号
	void CreateNodeSubSys();//划分节点子系统
	void CreateBranchSubSys();//划分支路子系统
	void CreateLoadVsTrans();//形成负荷变压器关联表
	void BranchAtNode();//将系统中的支路元件号转化为节点号
	void LoadAtNode();//将系统中的负荷元件号转化为节点号
	void FeederAtNode();//将系统中的馈线元件号转化为节点号
	void CapAtNode();//将系统中的电容元件号转化为节点号
	void ModifyPower0(INT nIndex);//依据电压的变化,重新计算节点功率
	 

public:
	//operation
	CDNet();
	~CDNet();
	void Initialize();	

	void AddBranch(UINT nIndex,BOOL state,UINT head,UINT tail,double BranchArea,double distance);
	void AddCable(UINT nIndex,BOOL state,UINT head,UINT tail,double CableArea,
		UINT sort,double VoltageGrade,double distance);
	void AddTrans(UINT nIndex,BOOL state,UINT head,UINT tail,double PFaultWaste,double VFault,double PKong,
		double KCurrent,double STotal,double GVoltage,double position);//变压器参数计算
	void SetBeginInfo(INT nIndex,INT nNode/*节点号*/, double AP,double AQ,double a,BOOL nType=TRUE);//读入节点电量信息
	void AddSwitch(UINT nIndex,UINT head,UINT tail);//设置开关信息
	void SetSwitchState0(UINT nIndex,BOOL state);//设置开关状态
	void AddCap(UINT nIndex,UINT node,double dP,double Sn,double Vn);//设置电容信息

 
	void SetFeederInfo(UINT nIndex,INT nElement,double voltage,
		double measureAP,double measureAQ,
		double convergenceP=0.05,double convergenceQ=0.10);//设置溃线信息
	void SetConergenceV(double value);//设置电压收敛判剧
	void SetConvergenceP(double value);//设置功率收敛判剧
	void SetBasicInfo(double SBvalue,double VBvalue);//设置基准值
	void SetMark0(BOOL mark);	//设置计算标志
	void SetMaxIter(int value);//设置迭代值
	void SetRuntime(double time);//设置运行时间,单位(h)
	void SetErrorA(double value=0.001);//设置计算值与量测值的相对误差

	void DNetFlow();	//配电潮流计算
	void NetAnalyse0();	//网络分析
	void DNetInitialize ();	//配网初始化

	
	int GetnBranch();
	int GetMaxEle();
	INT GetFeederNumber();

	BOOL GetNodeVsEle(UINT nElement,UINT& nNode);//输出元件对应的节点号
	BOOL BranchWasteA(INT nIndex,UINT& head,UINT& tail,double& PWaste,double& QWaste);//支路损耗
	BOOL TransWasteA(INT nIndex,UINT& head,UINT& tail,double& PFeWaste,double&
		QFeWaste,double& PCuWaste,double& QCuWaste);//变压器损耗
	void GetTotalWaste(double& WasteAP,double& WasteAQ);
	BOOL GetFeeder(INT nIndex,double& MeaAP,double& MeaAQ,
		double& AP,double& AQ);
	void GetOverLoadRatio(double* pData=NULL);//输出各馈线的过载率 


};
#endif

⌨️ 快捷键说明

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