📄 dnet.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;
};
class CBranch
{
private:
//atrribution
//double m_wResistance; //电阻率
public:
//attribution;
BOOL m_bState; //支路状态,0断开,1闭合;
UINT m_nType; //支路类型
BOOL m_bHeadMark;//树头标志
BOOL m_bTailMark;
BOOL m_bBranchMark;
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; //负荷无功
UINT m_nLoadNode; //负荷节点号
public:
//attribution
UINT m_nLoadIndex; //负荷元件号
private:
//operation
public:
//operation
CBeginInfo(){
//todo add code;
};
~CBeginInfo(){
//todo add code;
};
};
class CDNet
{
struct CDNetInfo
{
int nNode; // 节点数
int nBranch; //支路数
int nTBranch; //支路数
int nTransBranch;
int nCable;
int nFeederRoot; //溃线根节点数
int nCap;//电容补偿数目
int nMaxIteration;//最大迭代次数
int nSubSystem;//子系统数
int nLoad;
int nSwitch;//开关数
BOOL bNetChange;
double wVoltageConvergence; //电压收敛判剧
double wPConvergence; //有功收敛判剧
double wQConvergence; //无功收敛判剧
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 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; //节点数组
CArray<INT,INT> m_nBranchKey;//存支路关键号
CArray<UINT,INT> m_nFeederRoot; //溃线根节点号
CArray<UINT,INT> m_nNewFeederRoot; //溃线根节点号
CArray<double,double> m_nFeederVoltage; //溃线节点电压
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;//节点子系统数组
private:
//operation
CString GetStr(INT& nIndex,CString str);
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);
private:
BOOL IsLinkSwitch(INT nIndex,INT node);
double AccountCurrent(INT nIndex,double& currentRe,double& currentIm);
double AccountCurrent0(INT nIndex,INT node,double& currentRe,double& currentIm);
double AccountLoad(INT nIndex,double& currentRe,double& currentIm);
public:
//operation
///////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
CDNet();
~CDNet();
void Initialization();
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
void SetBranch(UINT nIndex,BOOL state,UINT head,UINT tail,double BranchArea,double distance);
void SetCable(UINT nIndex,BOOL state,UINT head,UINT tail,double CableArea,
UINT sort,double VoltageGrade,double distance);
void SetTrans(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 wP,double wQ);//读入节点负荷及电压信息
void SetSwitch(UINT nIndex,UINT head,UINT tail);//设置开关信息
void SetSwitchState(UINT nIndex,BOOL state);//设置开关状态
void SetCapInfo(UINT nIndex,UINT node,double dP,double Sn,double Vn);//设置电容信息
//////////////////////////////////////////////////////////////////////////////////////
void SetFeederInfo(UINT nINdex,INT nElement,double voltage);//设置溃线信息
void SetFeederMumber(int number);//设置溃线数目
void SetVoltageConergence(double value);//设置电压收敛判剧
void SetPowerConvergence(double value);//设置功率收敛判剧
void SetSB(double SBvalue,double VBvalue);//设置基准值
void SetMark(BOOL mark); //设置计算标志
void SetIterstion(int value);//设置迭代值
///////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
BOOL DistributionFlow(); //配电潮流计算
void NetAnalyse(); //网络分析
BOOL DNetInitialization(); //配网初始化
///////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
public:
//operation
int GetBranchNumber();
int GetMaxElement();
int GetSwitch();
double GetDNetEnergeWaste();
BOOL GetNodeData(INT nIndex,double& voltage,
double& wP,double& wQ); //输出节点信息
BOOL GetBranchData(INT nIndex,UINT& head,UINT& tail,double& wPHead,double& wQHead,
double& wPTail,double& wQTail,double& wCurrent);//输出支路信息
BOOL GetNodeAtElement(UINT nElement,UINT& nNode);//输出元件对应的节点号
BOOL BranchWaste(INT nIndex,UINT& head,UINT& tail,double& PWaste,double& QWaste,
double& wCurrent);//支路损耗
BOOL TransWaste(INT nIndex,UINT& head,UINT& tail,double& PFeWaste,double&
QFeWaste,double& PCuWaste,double& QCuWaste,double& wCurrent);//变压器损耗
BOOL GetSwitchInfo(INT nIndex,INT& head,INT& tail,double& current);
BOOL IsOnSystem(INT node);
BOOL Flow();
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -